commit 9ca3dc557de8d1556096ea4140316e7f7711a0f3 Author: Richard Moore Date: Mon Apr 11 17:09:17 2022 -0400 Initial code drop for v6. diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..9fd4c9c53 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Normal things to ignore; temporary files, libs, monorepo goop +node_modules/ +packages/*/node_modules +.package_node_modules/ +.DS_Store +.tmp/ +**/*.swp +*~ + +# A random stash folder I use for code I'm not quite willing +# to part ways with yet +obsolete/ + +# Intermediate files tsc generates for references (sometimes) +**/src.ts/*.js + +# TypeScript build caches +packages/*/tsconfig.tsbuildinfo + +# Coverage and Testing output +output/** + +# Issue tests +misc/testing/** + +# Temp +#packages/*/lib/ diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 000000000..8591b6925 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +Ethers - v6 beta +================ + +This is VERY beta, but I want to start getting it into the hands +of people to try out. + +This will be updated soon with some examples. + + +License +------- + +MIT Licensed (including all dependencies) diff --git a/bootstrap-hoist.js b/bootstrap-hoist.js new file mode 100644 index 000000000..a13dfee2c --- /dev/null +++ b/bootstrap-hoist.js @@ -0,0 +1,79 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(require("fs")); +const path_1 = require("path"); +const root = path_1.resolve("."); +function loadJson(path) { + return JSON.parse(fs_1.default.readFileSync(path).toString()); +} +function atomicWrite(path, value) { + const tmp = path_1.resolve(root, ".atomic-tmp"); + fs_1.default.writeFileSync(tmp, value); + fs_1.default.renameSync(tmp, path); +} +function saveJson(filename, data, sort) { + let replacer = undefined; + if (sort) { + replacer = (key, value) => { + if (Array.isArray(value)) { + // pass + } + else if (value && typeof (value) === "object") { + const keys = Object.keys(value); + keys.sort(); + return keys.reduce((accum, key) => { + accum[key] = value[key]; + return accum; + }, {}); + } + return value; + }; + } + atomicWrite(filename, JSON.stringify(data, replacer, 2) + "\n"); +} +(function () { + const filename = path_1.resolve(root, "package.json"); + const pkg = loadJson(filename); + const packageFolder = (pkg.reticulate || {}).pacakges || "packages"; + { + // @TODO: Check within root + } + const pkgs = fs_1.default.readdirSync(packageFolder).reduce((accum, folder) => { + const pkg = loadJson(path_1.resolve(root, packageFolder, folder, "package.json")); + if (accum[pkg.name]) { + throw new Error(`duplicate package named ${pkg.name}`); + } + accum[pkg.name] = pkg.dependencies || {}; + return accum; + }, {}); + const result = {}; + Object.keys(pkgs).forEach((name) => { + const versions = pkgs[name]; + for (const dep in versions) { + // This package is managed by this monorepo + if (dep in pkgs) { + continue; + } + // The required dependency version + const ver = versions[dep]; + // This already exists in the result... + const existing = result[dep]; + if (existing) { + // ...but doesn't match + if (existing !== ver) { + throw new Error(`package dependency version mismatch: ${dep}`); + } + } + else { + result[dep] = ver; + } + } + }); + console.log(`Hoisting ${Object.keys(result).length} dependencies from ${packageFolder}/*/package.json...\n`); + pkg.dependencies = result; + saveJson(filename, pkg, true); +})(); +//# sourceMappingURL=bootstrap-hoist.js.map \ No newline at end of file diff --git a/output/.keep b/output/.keep new file mode 100644 index 000000000..129f11b2c --- /dev/null +++ b/output/.keep @@ -0,0 +1 @@ +# Keep this folder diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..60fb48746 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1938 @@ +{ + "name": "ethers-monorepo", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@noble/hashes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", + "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" + }, + "@noble/secp256k1": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", + "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==" + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.2.0.tgz", + "integrity": "sha512-GuUIUyIKq7EjQxB51XSn6zPHYo+cILQQBYOGYvFFNxws2OVOqCBShAoof2hFrV8bAZzZGDBDQ8m2iUt8SLOUkg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-4.0.0.tgz", + "integrity": "sha512-+rumQFiaNac9y64OHtkHGmdjm7us9bo1PlbgQfdihQtuNxzjpaB064HbRnewUOggLQxVCCyINfStkgmBeQpv1g==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "dev": true + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "aes-js": { + "version": "4.0.0-beta.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.2.tgz", + "integrity": "sha512-j6ogLm5hqIjFR4E0YMqsFn39PKKdtqMkVZGWKS4TsAXQ2dk4nWhoMjt9BI4W+GwA6n8dFbfgQYIzS1k9kUfwoQ==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "c8": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.0.tgz", + "integrity": "sha512-XqPyj1uvlHMr+Y1IeRndC2X5P7iJzJlEJwBpCdBbq2JocXOgJfr+JVfJkyNMGROke5LfKrhSFXGFXnwnRJAUJw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.2", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.0.1", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "rimraf": "^3.0.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^8.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.7" + } + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "libnpmpublish": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", + "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "dev": true, + "requires": { + "normalize-package-data": "^3.0.2", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "npm-profile": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-5.0.4.tgz", + "integrity": "sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA==", + "dev": true, + "requires": { + "npm-registry-fetch": "^11.0.0" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reticulate": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/reticulate/-/reticulate-0.0.9.tgz", + "integrity": "sha512-IS6D6CXv9rL2eRmVGwHp6LzrdTHi1cS6B5YZR+YGR7jUo1BbA4LBcMaMlIx1GdroNjtdwgurkrHrFpM1SZ4S7w==", + "dev": true, + "requires": { + "aes-js": "^3.1.2", + "libnpmpublish": "^4.0.2", + "npm-profile": "^5.0.4", + "scrypt-js": "^3.0.1", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "dependencies": { + "aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", + "dev": true + }, + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.70.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", + "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-replace": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz", + "integrity": "sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA==", + "dev": true, + "requires": { + "magic-string": "^0.25.2", + "rollup-pluginutils": "^2.6.0" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "terser": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", + "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "dev": true + }, + "uglify-js": { + "version": "3.15.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", + "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..51d2a43b6 --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@noble/hashes": "1.0.0", + "@noble/secp256k1": "1.5.5", + "aes-js": "4.0.0-beta.2", + "ws": "8.5.0" + }, + "description": "Root monorepo pacakge for ethers core", + "devDependencies": { + "@rollup/plugin-node-resolve": "^13.1.3", + "@rollup/plugin-replace": "^4.0.0", + "@types/mocha": "^9.1.0", + "@types/node": "^14.14.25", + "@types/ws": "^8.5.3", + "c8": "^7.11.0", + "mocha": "^9.2.1", + "reticulate": "^0.0.9", + "rollup": "^2.70.1", + "rollup-plugin-replace": "^2.2.0", + "rollup-plugin-terser": "^7.0.2", + "typescript": "4.6.3", + "uglify-js": "^3.15.3" + }, + "license": "MIT", + "name": "ethers-monorepo", + "private": true, + "reticulate": { + "packages": "packages", + "root": "ethers", + "spelling": { + "dicts": [ + "/usr/share/dict/words", + "./misc/dict" + ] + } + }, + "scripts": { + "__build-dist": "npx rollup -c && uglifyjs ./packages/ethers/dist/ethers.js -o ./packages/ethers/dist/ethers.min.js && uglifyjs ./packages/ethers/dist/ethers-wordlists.js -o ./packages/ethers/dist/ethers-wordlists.min.js && npm run _build-dist-stats", + "_build-dist-stats": "gzip -k9f -S '.gz' packages/ethers/dist/ethers-wordlists.min.js && gzip -k9f -S '.gz' packages/ethers/dist/ethers.min.js && du -hs packages/ethers/dist/*", + "auto-build": "npm run build -- -w", + "build": "tsc --build tsconfig.project.json", + "build-dist": "npx rollup -c && npm run _build-dist-stats", + "clean": "rm -rf packages/*/tsconfig.tsbuildinfo packages/*/lib package-lock.json .package_node_modules/ node_modules/", + "postinstall": "reticulate ratsnest", + "preinstall": "node ./bootstrap-hoist", + "serve-coverage": "python3 -m http.server -d output/lcov-report 8080", + "test": "mocha packages/*/lib/tests/test-*.js", + "test-coverage": "c8 -o output -r lcov -r text mocha packages/*/lib/tests/test-*.js | tee output/summary.txt" + }, + "version": "0.0.0" +} diff --git a/packages/abi/.npmignore b/packages/abi/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/abi/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/abi/LICENSE.md b/packages/abi/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/abi/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/abi/package.json b/packages/abi/package.json new file mode 100644 index 000000000..9ee4b233e --- /dev/null +++ b/packages/abi/package.json @@ -0,0 +1,40 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/hash": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1", + "@ethersproject/rlp": "^6.0.0-beta.1" + }, + "description": "ABI coding for the EVM.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/abi", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/abi", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/abi/src.ts/_version.ts b/packages/abi/src.ts/_version.ts new file mode 100644 index 000000000..3f04a2dbf --- /dev/null +++ b/packages/abi/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/abi@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/abi/src.ts/abi-coder.ts b/packages/abi/src.ts/abi-coder.ts new file mode 100644 index 000000000..a7e699bb9 --- /dev/null +++ b/packages/abi/src.ts/abi-coder.ts @@ -0,0 +1,103 @@ +// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI +//import { arrayify } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; + +import { logger } from "./logger.js"; +import { Coder, Reader, Result, Writer } from "./coders/abstract-coder.js"; +import { AddressCoder } from "./coders/address.js"; +import { ArrayCoder } from "./coders/array.js"; +import { BooleanCoder } from "./coders/boolean.js"; +import { BytesCoder } from "./coders/bytes.js"; +import { FixedBytesCoder } from "./coders/fixed-bytes.js"; +import { NullCoder } from "./coders/null.js"; +import { NumberCoder } from "./coders/number.js"; +import { StringCoder } from "./coders/string.js"; +import { TupleCoder } from "./coders/tuple.js"; +import { ParamType } from "./fragments.js"; + +import type { BytesLike } from "@ethersproject/bytes"; + + +const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/); +const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/); + +export type CoerceFunc = (type: string, value: any) => any; + +export class AbiCoder { + readonly coerceFunc!: null | CoerceFunc; + + constructor(coerceFunc?: CoerceFunc) { + defineProperties(this, { coerceFunc }, { }, { coerceFunc: null }); + } + + #getCoder(param: ParamType): Coder { + if (param.isArray()) { + return new ArrayCoder(this.#getCoder(param.arrayChildren), param.arrayLength, param.name); + } + + if (param.isTuple()) { + return new TupleCoder(param.components.map((c) => this.#getCoder(c)), param.name); + } + + switch (param.baseType) { + case "address": + return new AddressCoder(param.name); + case "bool": + return new BooleanCoder(param.name); + case "string": + return new StringCoder(param.name); + case "bytes": + return new BytesCoder(param.name); + case "": + return new NullCoder(param.name); + } + + // u?int[0-9]* + let match = param.type.match(paramTypeNumber); + if (match) { + let size = parseInt(match[2] || "256"); + if (size === 0 || size > 256 || (size % 8) !== 0) { + logger.throwArgumentError("invalid " + match[1] + " bit length", "param", param); + } + return new NumberCoder(size / 8, (match[1] === "int"), param.name); + } + + // bytes[0-9]+ + match = param.type.match(paramTypeBytes); + if (match) { + let size = parseInt(match[1]); + if (size === 0 || size > 32) { + logger.throwArgumentError("invalid bytes length", "param", param); + } + return new FixedBytesCoder(size, param.name); + } + + return logger.throwArgumentError("invalid type", "type", param.type); + } + + getDefaultValue(types: ReadonlyArray): Result { + const coders: Array = types.map((type) => this.#getCoder(ParamType.from(type))); + const coder = new TupleCoder(coders, "_"); + return coder.defaultValue(); + } + + encode(types: ReadonlyArray, values: ReadonlyArray): string { + logger.assertArgumentCount(values.length, types.length, "types/values length mismatch"); + + const coders = types.map((type) => this.#getCoder(ParamType.from(type))); + const coder = (new TupleCoder(coders, "_")); + + const writer = new Writer(); + coder.encode(writer, values); + return writer.data; + } + + decode(types: ReadonlyArray, data: BytesLike, loose?: boolean): Result { + const coders: Array = types.map((type) => this.#getCoder(ParamType.from(type))); + const coder = new TupleCoder(coders, "_"); + return coder.decode(new Reader(data, this.coerceFunc, loose)); + } +} + + +export const defaultAbiCoder: AbiCoder = new AbiCoder(); diff --git a/packages/abi/src.ts/coders/abstract-coder.ts b/packages/abi/src.ts/coders/abstract-coder.ts new file mode 100644 index 000000000..00dcc1160 --- /dev/null +++ b/packages/abi/src.ts/coders/abstract-coder.ts @@ -0,0 +1,322 @@ + +import { toArray, toBigInt, toNumber } from "@ethersproject/math"; +import { arrayify, concat, hexlify } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; + +import { logger } from "../logger.js"; + +import type { BytesLike } from "@ethersproject/bytes"; +import type { BigNumberish } from "@ethersproject/logger"; + +export const WordSize = 32; +const Padding = new Uint8Array(WordSize); + +// Properties used to immediate pass through to the underlying object +// - `then` is used to detect if an object is a Promise for await +const passProperties = [ "then" ]; + +const _guard = { }; + +export class Result extends Array { + #indices: Map>; + + [ K: string | number ]: any + + constructor(guard: any, items: Array, keys?: Array) { + logger.assertPrivate(guard, _guard, "Result"); + super(...items); + + // Name lookup table + this.#indices = new Map(); + + if (keys) { + keys.forEach((key, index) => { + if (key == null) { return; } + if (this.#indices.has(key)) { + (>(this.#indices.get(key))).push(index); + } else { + this.#indices.set(key, [ index ]); + } + }); + } + Object.freeze(this); + + return new Proxy(this, { + get: (target, prop, receiver) => { + if (typeof(prop) === "string") { + if (prop.match(/^[0-9]+$/)) { + const index = logger.getNumber(prop, "%index"); + if (index < 0 || index >= this.length) { + throw new RangeError("out of result range"); + } + + const item = target[index]; + if (item instanceof Error) { + this.#throwError(`index ${ index }`, item); + } + return item; + } + + // Pass important checks (like `then` for Promise) through + if (prop in target || passProperties.indexOf(prop) >= 0) { + return Reflect.get(target, prop, receiver); + } + + // Something that could be a result keyword value + if (!(prop in target)) { + return target.getValue(prop); + } + } + + return Reflect.get(target, prop, receiver); + } + }); + } + + slice(start?: number | undefined, end?: number | undefined): Array { + if (start == null) { start = 0; } + if (end == null) { end = this.length; } + + const result = [ ]; + for (let i = start; i < end; i++) { + let value: any; + try { + value = this[i]; + } catch (error: any) { + value = error.error; + } + result.push(value); + } + return result; + } + + #throwError(name: string, error: Error): never { + const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${ name }`); + (wrapped).error = error; + throw wrapped; + } + + getValue(name: string): any { + const index = this.#indices.get(name); + if (index != null && index.length === 1) { + const item = this[index[0]]; + if (item instanceof Error) { + this.#throwError(`property ${ JSON.stringify(name) }`, item); + } + return item; + } + + throw new Error(`no named parameter: ${ JSON.stringify(name) }`); + } + + static fromItems(items: Array, keys?: Array) { + return new Result(_guard, items, keys); + } +} + +export function checkResultErrors(result: Result): Array<{ path: Array, error: Error }> { + // Find the first error (if any) + const errors: Array<{ path: Array, error: Error }> = [ ]; + + const checkErrors = function(path: Array, object: any): void { + if (!Array.isArray(object)) { return; } + for (let key in object) { + const childPath = path.slice(); + childPath.push(key); + + try { + checkErrors(childPath, object[key]); + } catch (error: any) { + errors.push({ path: childPath, error: error }); + } + } + } + checkErrors([ ], result); + + return errors; + +} + +function getValue(value: BigNumberish): Uint8Array { + let bytes = toArray(value); + + if (bytes.length > WordSize) { + logger.throwError("value out-of-bounds", "BUFFER_OVERRUN", { + buffer: bytes, + length: WordSize, + offset: bytes.length + }); + } + + if (bytes.length % WordSize) { + bytes = arrayify(concat([ Padding.slice(bytes.length % WordSize), bytes ])); + } + + return bytes; +} + + +export type CoerceFunc = (type: string, value: any) => any; + +export abstract class Coder { + + // The coder name: + // - address, uint256, tuple, array, etc. + readonly name!: string; + + // The fully expanded type, including composite types: + // - address, uint256, tuple(address,bytes), uint256[3][4][], etc. + readonly type!: string; + + // The localName bound in the signature, in this example it is "baz": + // - tuple(address foo, uint bar) baz + readonly localName!: string; + + // Whether this type is dynamic: + // - Dynamic: bytes, string, address[], tuple(boolean[]), etc. + // - Not Dynamic: address, uint256, boolean[3], tuple(address, uint8) + readonly dynamic!: boolean; + + constructor(name: string, type: string, localName: string, dynamic: boolean) { + defineProperties(this, { name, type, localName, dynamic }, { + name: "string", type: "string", localName: "string", dynamic: "boolean" + }); + } + + _throwError(message: string, value: any): never { + return logger.throwArgumentError(message, this.localName, value); + } + + abstract encode(writer: Writer, value: any): number; + abstract decode(reader: Reader): any; + + abstract defaultValue(): any; +} + +export class Writer { + // An array of WordSize lengthed objects to concatenation + #data: Array; + #dataLength: number; + + constructor() { + this.#data = [ ]; + this.#dataLength = 0; + } + + get data(): string { + return concat(this.#data); + } + get length(): number { return this.#dataLength; } + + #writeData(data: Uint8Array): number { + this.#data.push(data); + this.#dataLength += data.length; + return data.length; + } + + appendWriter(writer: Writer): number { + return this.#writeData(arrayify(writer.data)); + } + + // Arrayish item; pad on the right to *nearest* WordSize + writeBytes(value: BytesLike): number { + let bytes = arrayify(value); + const paddingOffset = bytes.length % WordSize; + if (paddingOffset) { + bytes = arrayify(concat([ bytes, Padding.slice(paddingOffset) ])) + } + return this.#writeData(bytes); + } + + // Numeric item; pad on the left *to* WordSize + writeValue(value: BigNumberish): number { + return this.#writeData(getValue(value)); + } + + // Inserts a numeric place-holder, returning a callback that can + // be used to asjust the value later + writeUpdatableValue(): (value: BigNumberish) => void { + const offset = this.#data.length; + this.#data.push(Padding); + this.#dataLength += WordSize; + return (value: BigNumberish) => { + this.#data[offset] = getValue(value); + }; + } +} + +export class Reader { + // Allows incomplete unpadded data to be read; otherwise an error + // is raised if attempting to overrun the buffer. This is required + // to deal with an old Solidity bug, in which event data for + // external (not public thoguh) was tightly packed. + readonly allowLoose!: boolean; + + readonly #data: Uint8Array; + #offset: number; + + readonly #coerceFunc: CoerceFunc; + + constructor(data: BytesLike, coerceFunc?: null | CoerceFunc, allowLoose?: boolean) { + defineProperties(this, { allowLoose: !!allowLoose }); + + this.#data = arrayify(data); + this.#coerceFunc = coerceFunc || Reader.coerce; + + this.#offset = 0; + } + + get data(): string { return hexlify(this.#data); } + get dataLength(): number { return this.#data.length; } + get consumed(): number { return this.#offset; } + get bytes(): Uint8Array { return new Uint8Array(this.#data); } + + // The default Coerce function + static coerce(type: string, value: any): any { + let match = type.match("^u?int([0-9]+)$"); + if (match && parseInt(match[1]) <= 48) { value = value.toNumber(); } + return value; + } + + coerce(type: string, value: any): any { + return this.#coerceFunc(type, value); + } + + #peekBytes(offset: number, length: number, loose?: boolean): Uint8Array { + let alignedLength = Math.ceil(length / WordSize) * WordSize; + if (this.#offset + alignedLength > this.#data.length) { + if (this.allowLoose && loose && this.#offset + length <= this.#data.length) { + alignedLength = length; + } else { + logger.throwError("data out-of-bounds", "BUFFER_OVERRUN", { + buffer: arrayify(this.#data), + length: this.#data.length, + offset: this.#offset + alignedLength + }); + } + } + return this.#data.slice(this.#offset, this.#offset + alignedLength) + } + + // Create a sub-reader with the same underlying data, but offset + subReader(offset: number): Reader { + return new Reader(this.#data.slice(this.#offset + offset), this.#coerceFunc, this.allowLoose); + } + + // Read bytes + readBytes(length: number, loose?: boolean): Uint8Array { + let bytes = this.#peekBytes(0, length, !!loose); + this.#offset += bytes.length; + // @TODO: Make sure the length..end bytes are all 0? + return bytes.slice(0, length); + } + + // Read a numeric values + readValue(): bigint { + return toBigInt(this.readBytes(WordSize)); + } + + readIndex(): number { + return toNumber(this.readBytes(WordSize)); + } +} diff --git a/packages/abi/src.ts/coders/address.ts b/packages/abi/src.ts/coders/address.ts new file mode 100644 index 000000000..6a0b7aaf0 --- /dev/null +++ b/packages/abi/src.ts/coders/address.ts @@ -0,0 +1,33 @@ +import { getAddress } from "@ethersproject/address"; +import { toHex } from "@ethersproject/math"; + +import { Typed } from "../typed.js"; +import { Coder } from "./abstract-coder.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +export class AddressCoder extends Coder { + + constructor(localName: string) { + super("address", "address", localName, false); + } + + defaultValue(): string { + return "0x0000000000000000000000000000000000000000"; + } + + encode(writer: Writer, _value: string | Typed): number { + let value = Typed.dereference(_value, "string"); + try { + value = getAddress(value); + } catch (error: any) { + return this._throwError(error.message, _value); + } + return writer.writeValue(value); + } + + decode(reader: Reader): any { + return getAddress(toHex(reader.readValue(), 20)); + } +} diff --git a/packages/abi/src.ts/coders/anonymous.ts b/packages/abi/src.ts/coders/anonymous.ts new file mode 100644 index 000000000..3b06e881f --- /dev/null +++ b/packages/abi/src.ts/coders/anonymous.ts @@ -0,0 +1,25 @@ +import { Coder } from "./abstract-coder.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + +// Clones the functionality of an existing Coder, but without a localName +export class AnonymousCoder extends Coder { + private coder: Coder; + + constructor(coder: Coder) { + super(coder.name, coder.type, "_", coder.dynamic); + this.coder = coder; + } + + defaultValue(): any { + return this.coder.defaultValue(); + } + + encode(writer: Writer, value: any): number { + return this.coder.encode(writer, value); + } + + decode(reader: Reader): any { + return this.coder.decode(reader); + } +} diff --git a/packages/abi/src.ts/coders/array.ts b/packages/abi/src.ts/coders/array.ts new file mode 100644 index 000000000..54b341088 --- /dev/null +++ b/packages/abi/src.ts/coders/array.ts @@ -0,0 +1,208 @@ +import { defineProperties } from "@ethersproject/properties"; +import { isError } from "@ethersproject/logger"; + +import { logger } from "../logger.js"; +import { Typed } from "../typed.js"; +import { Coder, Result, WordSize, Writer } from "./abstract-coder.js"; +import { AnonymousCoder } from "./anonymous.js"; + +import type { Reader } from "./abstract-coder.js"; + + +export function pack(writer: Writer, coders: ReadonlyArray, values: Array | { [ name: string ]: any }): number { + let arrayValues: Array = [ ]; + + if (Array.isArray(values)) { + arrayValues = values; + + } else if (values && typeof(values) === "object") { + let unique: { [ name: string ]: boolean } = { }; + + arrayValues = coders.map((coder) => { + const name = coder.localName; + if (!name) { + logger.throwError("cannot encode object for signature with missing names", "INVALID_ARGUMENT", { + argument: "values", + info: { coder }, + value: values + }); + } + + if (unique[name]) { + logger.throwError("cannot encode object for signature with duplicate names", "INVALID_ARGUMENT", { + argument: "values", + info: { coder }, + value: values + }); + } + + unique[name] = true; + + return values[name]; + }); + + } else { + logger.throwArgumentError("invalid tuple value", "tuple", values); + } + + if (coders.length !== arrayValues.length) { + logger.throwArgumentError("types/value length mismatch", "tuple", values); + } + + let staticWriter = new Writer(); + let dynamicWriter = new Writer(); + + let updateFuncs: Array<(baseOffset: number) => void> = []; + coders.forEach((coder, index) => { + let value = arrayValues[index]; + + if (coder.dynamic) { + // Get current dynamic offset (for the future pointer) + let dynamicOffset = dynamicWriter.length; + + // Encode the dynamic value into the dynamicWriter + coder.encode(dynamicWriter, value); + + // Prepare to populate the correct offset once we are done + let updateFunc = staticWriter.writeUpdatableValue(); + updateFuncs.push((baseOffset: number) => { + updateFunc(baseOffset + dynamicOffset); + }); + + } else { + coder.encode(staticWriter, value); + } + }); + + // Backfill all the dynamic offsets, now that we know the static length + updateFuncs.forEach((func) => { func(staticWriter.length); }); + + let length = writer.appendWriter(staticWriter); + length += writer.appendWriter(dynamicWriter); + return length; +} + +export function unpack(reader: Reader, coders: ReadonlyArray): Result { + let values: Array = []; + let keys: Array = [ ]; + + // A reader anchored to this base + let baseReader = reader.subReader(0); + + coders.forEach((coder) => { + let value: any = null; + + if (coder.dynamic) { + let offset = reader.readIndex(); + let offsetReader = baseReader.subReader(offset); + try { + value = coder.decode(offsetReader); + } catch (error: any) { + // Cannot recover from this + if (isError(error, "BUFFER_OVERRUN")) { + throw error; + } + + value = error; + value.baseType = coder.name; + value.name = coder.localName; + value.type = coder.type; + } + + } else { + try { + value = coder.decode(reader); + } catch (error: any) { + // Cannot recover from this + if (isError(error, "BUFFER_OVERRUN")) { + throw error; + } + + value = error; + value.baseType = coder.name; + value.name = coder.localName; + value.type = coder.type; + } + } + + if (value == undefined) { + throw new Error("investigate"); + } + + values.push(value); + keys.push(coder.localName || null); + }); + + return Result.fromItems(values, keys); +} + + +export class ArrayCoder extends Coder { + readonly coder!: Coder; + readonly length!: number; + + constructor(coder: Coder, length: number, localName: string) { + const type = (coder.type + "[" + (length >= 0 ? length: "") + "]"); + const dynamic = (length === -1 || coder.dynamic); + super("array", type, localName, dynamic); + defineProperties(this, { coder, length }); + } + + defaultValue(): Array { + // Verifies the child coder is valid (even if the array is dynamic or 0-length) + const defaultChild = this.coder.defaultValue(); + + const result: Array = []; + for (let i = 0; i < this.length; i++) { + result.push(defaultChild); + } + return result; + } + + encode(writer: Writer, _value: Array | Typed): number { + const value = Typed.dereference(_value, "array"); + + if (!Array.isArray(value)) { + this._throwError("expected array value", value); + } + + let count = this.length; + + if (count === -1) { + count = value.length; + writer.writeValue(value.length); + } + + logger.assertArgumentCount(value.length, count, "coder array" + (this.localName? (" "+ this.localName): "")); + + let coders = []; + for (let i = 0; i < value.length; i++) { coders.push(this.coder); } + + return pack(writer, coders, value); + } + + decode(reader: Reader): any { + let count = this.length; + if (count === -1) { + count = reader.readIndex(); + + // Check that there is *roughly* enough data to ensure + // stray random data is not being read as a length. Each + // slot requires at least 32 bytes for their value (or 32 + // bytes as a link to the data). This could use a much + // tighter bound, but we are erroring on the side of safety. + if (count * WordSize > reader.dataLength) { + logger.throwError("insufficient data length", "BUFFER_OVERRUN", { + buffer: reader.bytes, + offset: count * WordSize, + length: reader.dataLength + }); + } + } + let coders = []; + for (let i = 0; i < count; i++) { coders.push(new AnonymousCoder(this.coder)); } + + return reader.coerce(this.name, unpack(reader, coders)); + } +} + diff --git a/packages/abi/src.ts/coders/boolean.ts b/packages/abi/src.ts/coders/boolean.ts new file mode 100644 index 000000000..ff7ab8b88 --- /dev/null +++ b/packages/abi/src.ts/coders/boolean.ts @@ -0,0 +1,25 @@ +import { Typed } from "../typed.js"; +import { Coder } from "./abstract-coder.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +export class BooleanCoder extends Coder { + + constructor(localName: string) { + super("bool", "bool", localName, false); + } + + defaultValue(): boolean { + return false; + } + + encode(writer: Writer, _value: boolean | Typed): number { + const value = Typed.dereference(_value, "bool"); + return writer.writeValue(value ? 1: 0); + } + + decode(reader: Reader): any { + return reader.coerce(this.type, !reader.readValue()); + } +} diff --git a/packages/abi/src.ts/coders/bytes.ts b/packages/abi/src.ts/coders/bytes.ts new file mode 100644 index 000000000..ba83b66b3 --- /dev/null +++ b/packages/abi/src.ts/coders/bytes.ts @@ -0,0 +1,37 @@ +import { arrayify, hexlify } from "@ethersproject/bytes"; + +import { Coder } from "./abstract-coder.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +export class DynamicBytesCoder extends Coder { + constructor(type: string, localName: string) { + super(type, type, localName, true); + } + + defaultValue(): string { + return "0x"; + } + + encode(writer: Writer, value: any): number { + value = arrayify(value); + let length = writer.writeValue(value.length); + length += writer.writeBytes(value); + return length; + } + + decode(reader: Reader): any { + return reader.readBytes(reader.readIndex(), true); + } +} + +export class BytesCoder extends DynamicBytesCoder { + constructor(localName: string) { + super("bytes", localName); + } + + decode(reader: Reader): any { + return reader.coerce(this.name, hexlify(super.decode(reader))); + } +} diff --git a/packages/abi/src.ts/coders/fixed-bytes.ts b/packages/abi/src.ts/coders/fixed-bytes.ts new file mode 100644 index 000000000..27573447e --- /dev/null +++ b/packages/abi/src.ts/coders/fixed-bytes.ts @@ -0,0 +1,35 @@ + +import { arrayify, hexlify } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; + +import { Typed } from "../typed.js"; +import { Coder } from "./abstract-coder.js"; + +import type { BytesLike } from "@ethersproject/bytes"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +export class FixedBytesCoder extends Coder { + readonly size!: number; + + constructor(size: number, localName: string) { + let name = "bytes" + String(size); + super(name, name, localName, false); + defineProperties(this, { size }, { size: "number" }); + } + + defaultValue(): string { + return ("0x0000000000000000000000000000000000000000000000000000000000000000").substring(0, 2 + this.size * 2); + } + + encode(writer: Writer, _value: BytesLike | Typed): number { + let data = arrayify(Typed.dereference(_value, this.type)); + if (data.length !== this.size) { this._throwError("incorrect data length", _value); } + return writer.writeBytes(data); + } + + decode(reader: Reader): any { + return reader.coerce(this.name, hexlify(reader.readBytes(this.size))); + } +} diff --git a/packages/abi/src.ts/coders/null.ts b/packages/abi/src.ts/coders/null.ts new file mode 100644 index 000000000..7a2f1702c --- /dev/null +++ b/packages/abi/src.ts/coders/null.ts @@ -0,0 +1,25 @@ +import { Coder } from "./abstract-coder.js"; +import type { Reader, Writer } from "./abstract-coder.js"; + +const Empty = new Uint8Array([ ]); + +export class NullCoder extends Coder { + + constructor(localName: string) { + super("null", "", localName, false); + } + + defaultValue(): null { + return null; + } + + encode(writer: Writer, value: any): number { + if (value != null) { this._throwError("not null", value); } + return writer.writeBytes(Empty); + } + + decode(reader: Reader): any { + reader.readBytes(0); + return reader.coerce(this.name, null); + } +} diff --git a/packages/abi/src.ts/coders/number.ts b/packages/abi/src.ts/coders/number.ts new file mode 100644 index 000000000..d7d1c5017 --- /dev/null +++ b/packages/abi/src.ts/coders/number.ts @@ -0,0 +1,65 @@ +import { fromTwos, mask, toTwos } from "@ethersproject/math"; +import { defineProperties } from "@ethersproject/properties"; + +import { logger } from "../logger.js"; +import { Typed } from "../typed.js"; +import { Coder, WordSize } from "./abstract-coder.js"; + +import type { BigNumberish } from "@ethersproject/logger"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +const BN_0 = BigInt(0); +const BN_1 = BigInt(1); +const BN_MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + +export class NumberCoder extends Coder { + readonly size!: number; + readonly signed!: boolean; + + constructor(size: number, signed: boolean, localName: string) { + const name = ((signed ? "int": "uint") + (size * 8)); + super(name, name, localName, false); + + defineProperties(this, { size, signed }, { size: "number", signed: "boolean" }); + } + + defaultValue(): number { + return 0; + } + + encode(writer: Writer, _value: BigNumberish | Typed): number { + let value = logger.getBigInt(Typed.dereference(_value, this.type)); + + // Check bounds are safe for encoding + let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8); + if (this.signed) { + let bounds = mask(maxUintValue, (this.size * 8) - 1); + if (value > bounds || value < -(bounds + BN_1)) { + this._throwError("value out-of-bounds", _value); + } + } else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) { + this._throwError("value out-of-bounds", _value); + } + + value = mask(toTwos(value, this.size * 8), this.size * 8); + + if (this.signed) { + value = toTwos(fromTwos(value, this.size * 8), 8 * WordSize); + } + + return writer.writeValue(value); + } + + decode(reader: Reader): any { + let value = mask(reader.readValue(), this.size * 8); + + if (this.signed) { + value = fromTwos(value, this.size * 8); + } + + return reader.coerce(this.name, value); + } +} + diff --git a/packages/abi/src.ts/coders/string.ts b/packages/abi/src.ts/coders/string.ts new file mode 100644 index 000000000..e38ed0d4f --- /dev/null +++ b/packages/abi/src.ts/coders/string.ts @@ -0,0 +1,26 @@ +import { toUtf8Bytes, toUtf8String } from "@ethersproject/strings"; + +import { Typed } from "../typed.js"; +import { DynamicBytesCoder } from "./bytes.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +export class StringCoder extends DynamicBytesCoder { + + constructor(localName: string) { + super("string", localName); + } + + defaultValue(): string { + return ""; + } + + encode(writer: Writer, _value: string | Typed): number { + return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, "string"))); + } + + decode(reader: Reader): any { + return toUtf8String(super.decode(reader)); + } +} diff --git a/packages/abi/src.ts/coders/tuple.ts b/packages/abi/src.ts/coders/tuple.ts new file mode 100644 index 000000000..07b8e1f67 --- /dev/null +++ b/packages/abi/src.ts/coders/tuple.ts @@ -0,0 +1,66 @@ +import { defineProperties } from "@ethersproject/properties"; + +import { Typed } from "../typed.js"; +import { Coder } from "./abstract-coder.js"; + +import { pack, unpack } from "./array.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + +export class TupleCoder extends Coder { + readonly coders!: ReadonlyArray; + + constructor(coders: Array, localName: string) { + let dynamic = false; + const types: Array = []; + coders.forEach((coder) => { + if (coder.dynamic) { dynamic = true; } + types.push(coder.type); + }); + const type = ("tuple(" + types.join(",") + ")"); + + super("tuple", type, localName, dynamic); + defineProperties(this, { coders: Object.freeze(coders.slice()) }); + } + + defaultValue(): any { + const values: any = [ ]; + this.coders.forEach((coder) => { + values.push(coder.defaultValue()); + }); + + // We only output named properties for uniquely named coders + const uniqueNames = this.coders.reduce((accum, coder) => { + const name = coder.localName; + if (name) { + if (!accum[name]) { accum[name] = 0; } + accum[name]++; + } + return accum; + }, <{ [ name: string ]: number }>{ }); + + // Add named values + this.coders.forEach((coder: Coder, index: number) => { + let name = coder.localName; + if (!name || uniqueNames[name] !== 1) { return; } + + if (name === "length") { name = "_length"; } + + if (values[name] != null) { return; } + + values[name] = values[index]; + }); + + return Object.freeze(values); + } + + encode(writer: Writer, _value: Array | { [ name: string ]: any } | Typed): number { + const value = Typed.dereference(_value, "tuple"); + return pack(writer, this.coders, value); + } + + decode(reader: Reader): any { + return reader.coerce(this.name, unpack(reader, this.coders)); + } +} + diff --git a/packages/abi/src.ts/fragments.ts b/packages/abi/src.ts/fragments.ts new file mode 100644 index 000000000..4fa1285fa --- /dev/null +++ b/packages/abi/src.ts/fragments.ts @@ -0,0 +1,1092 @@ +import { defineProperties } from "@ethersproject/properties"; + +import { logger } from "./logger.js"; + + +export interface JsonFragmentType { + readonly name?: string; + readonly indexed?: boolean; + readonly type?: string; + readonly internalType?: string; + readonly components?: ReadonlyArray; +} + +export interface JsonFragment { + readonly name?: string; + readonly type?: string; + + readonly anonymous?: boolean; + + readonly payable?: boolean; + readonly constant?: boolean; + readonly stateMutability?: string; + + readonly inputs?: ReadonlyArray; + readonly outputs?: ReadonlyArray; + + readonly gas?: string; +}; + +export enum FormatType { + // Bare formatting, as is needed for computing a sighash of an event or function + sighash = "sighash", + + // Human-Readable with Minimal spacing and without names (compact human-readable) + minimal = "minimal", + + // Human-Readable with nice spacing, including all names + full = "full", + + // JSON-format a la Solidity + json = "json" +}; + +// [ "a", "b" ] => { "a": 1, "b": 1 } +function setify(items: Array): ReadonlySet { + const result: Set = new Set(); + items.forEach((k) => result.add(k)); + return Object.freeze(result); +} + +// Visibility Keywords +const _kwVisib = "constant external internal payable private public pure view"; +const KwVisib = setify(_kwVisib.split(" ")); + +const _kwTypes = "constructor error event function struct"; +const KwTypes = setify(_kwTypes.split(" ")); + +const _kwModifiers = "calldata memory storage payable indexed"; +const KwModifiers = setify(_kwModifiers.split(" ")); + +const _kwOther = "tuple returns"; + +// All Keywords +const _keywords = [ _kwTypes, _kwModifiers, _kwOther, _kwVisib ].join(" "); +const Keywords = setify(_keywords.split(" ")); + +// Single character tokens +const SimpleTokens: Record = { + "(": "OPEN_PAREN", ")": "CLOSE_PAREN", + "[": "OPEN_BRACKET", "]": "CLOSE_BRACKET", + ",": "COMMA", "@": "AT" +}; + +// Parser regexes to consume the next token +const regexWhitespace = new RegExp("^(\\s*)"); +const regexNumber = new RegExp("^([0-9]+)"); +const regexIdentifier = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"); +const regexType = new RegExp("^(address|bool|bytes(0-9*)|string|u?int([0-9]*))"); + + +export type Token = Readonly<{ + // Type of token (e.g. TYPE, KEYWORD, NUMBER, etc) + type: string; + + // Offset into the original source code + offset: number; + + // Actual text content of the token + text: string; + + // The parenthesis depth + depth: number; + + // If a parenthesis, the offset (in tokens) that balances it + match: number; + + // For parenthesis and commas, the offset (in tokens) to the + // previous/next parenthesis or comma in the list + linkBack: number; + linkNext: number; + + // If a BRACKET, the value inside + value: number; +}>; + +export class TokenString { + #offset: number; + #tokens: ReadonlyArray; + + get offset(): number { return this.#offset; } + get length(): number { return this.#tokens.length - this.#offset; } + + constructor(tokens: ReadonlyArray) { + this.#offset = 0; + this.#tokens = tokens.slice(); + } + + clone(): TokenString { return new TokenString(this.#tokens); } + reset(): void { this.#offset = 0; } + + #subTokenString(from: number = 0, to: number = 0): TokenString { + return new TokenString(this.#tokens.slice(from, to).map((t) => { + return Object.freeze(Object.assign({ }, t, { + match: (t.match - from), + linkBack: (t.linkBack - from), + linkNext: (t.linkNext - from), + })); + return t; + })); + } + + // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens + popKeyword(allowed: ReadonlySet): string { + const top = this.peek(); + if (top.type !== "KEYWORD" || !allowed.has(top.text)) { throw new Error(`expected keyword ${ top.text }`); } + return this.pop().text; + } + + // Pops and returns the value of the next token if it is `type`; throws if out of tokens + popType(type: string): string { + if (this.peek().type !== type) { throw new Error(`expected ${ type }; got ${ JSON.stringify(this.peek()) }`); } + return this.pop().text; + } + + // Pops and returns a "(" TOKENS ")" + popParen(): TokenString { + const top = this.peek(); + if (top.type !== "OPEN_PAREN") { throw new Error("bad start"); } + const result = this.#subTokenString(this.#offset + 1, top.match + 1); + this.#offset = top.match + 1; + return result; + } + + // Pops and returns the items within "(" ITEM1 "," ITEM2 "," ... ")" + popParams(): Array { + const top = this.peek(); + + if (top.type !== "OPEN_PAREN") { throw new Error("bad start"); } + + const result: Array = [ ]; + + while(this.#offset < top.match - 1) { + const link = this.peek().linkNext; + result.push(this.#subTokenString(this.#offset + 1, link)); + this.#offset = link; + } + + this.#offset = top.match + 1; + + return result; + } + + // Returns the top Token, throwing if out of tokens + peek(): Token { + if (this.#offset >= this.#tokens.length) { + throw new Error("out-of-bounds"); + } + return this.#tokens[this.#offset]; + } + + // Returns the next value, if it is a keyword in `allowed` + peekKeyword(allowed: ReadonlySet): null | string { + const top = this.peekType("KEYWORD"); + return (top != null && allowed.has(top)) ? top: null; + } + + // Returns the value of the next token if it is `type` + peekType(type: string): null | string { + if (this.length === 0) { return null; } + const top = this.peek(); + return (top.type === type) ? top.text: null; + } + + // Returns the next token; throws if out of tokens + pop(): Token { + const result = this.peek(); + this.#offset++; + return result; + } + + toString(): string { + const tokens: Array = [ ]; + for (let i = this.#offset; i < this.#tokens.length; i++) { + const token = this.#tokens[i]; + tokens.push(`${ token.type }:${ token.text }`); + } + return `` + } +} + +type Writeable = { -readonly [P in keyof T]: T[P] }; + +export function lex(text: string): TokenString { + const tokens: Array = [ ]; + + const throwError = (message: string) => { + const token = (offset < text.length) ? JSON.stringify(text[offset]): "$EOI"; + throw new Error(`invalid token ${ token } at ${ offset }: ${ message }`); + }; + + let brackets: Array = [ ]; + let commas: Array = [ ]; + + let offset = 0; + while (offset < text.length) { + + // Strip off any leading whitespace + let cur = text.substring(offset); + let match = cur.match(regexWhitespace); + if (match) { + offset += match[1].length; + cur = text.substring(offset); + } + + const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: "", text: "", offset, value: -1 }; + tokens.push(token); + + let type = (SimpleTokens[cur[0]] || ""); + if (type) { + token.type = type; + token.text = cur[0]; + offset++; + + if (type === "OPEN_PAREN") { + brackets.push(tokens.length - 1); + commas.push(tokens.length - 1); + + } else if (type == "CLOSE_PAREN") { + if (brackets.length === 0) { throwError("no matching open bracket"); } + + token.match = brackets.pop() as number; + (>(tokens[token.match])).match = tokens.length - 1; + token.depth--; + + token.linkBack = commas.pop() as number; + (>(tokens[token.linkBack])).linkNext = tokens.length - 1; + + } else if (type === "COMMA") { + token.linkBack = commas.pop() as number; + (>(tokens[token.linkBack])).linkNext = tokens.length - 1; + commas.push(tokens.length - 1); + + } else if (type === "OPEN_BRACKET") { + token.type = "BRACKET"; + + } else if (type === "CLOSE_BRACKET") { + // Remove the CLOSE_BRACKET + let suffix = (tokens.pop() as Token).text; + if (tokens.length > 0 && tokens[tokens.length - 1].type === "NUMBER") { + const value = (tokens.pop() as Token).text; + suffix = value + suffix; + (>(tokens[tokens.length - 1])).value = logger.getNumber(value); + } + if (tokens.length === 0 || tokens[tokens.length - 1].type !== "BRACKET") { + throw new Error("missing opening bracket"); + } + (>(tokens[tokens.length - 1])).text += suffix; + } + + continue; + } + + match = cur.match(regexIdentifier); + if (match) { + token.text = match[1]; + offset += token.text.length; + + if (Keywords.has(token.text)) { + token.type = "KEYWORD"; + continue; + } + + if (token.text.match(regexType)) { + token.type = "TYPE"; + continue; + } + + token.type = "ID"; + continue; + } + + match = cur.match(regexNumber); + if (match) { + token.text = match[1]; + token.type = "NUMBER"; + offset += token.text.length; + continue; + } + + throw new Error(`unexpected token ${ JSON.stringify(cur[0]) } at position ${ offset }`); + } + + return new TokenString(tokens.map((t) => Object.freeze(t))); +} + +// Check only one of `allowed` is in `set` +function allowSingle(set: ReadonlySet, allowed: ReadonlySet): void { + let included: Array = [ ]; + for (const key in allowed.keys()) { + if (set.has(key)) { included.push(key); } + } + if (included.length > 1) { throw new Error(`conflicting types: ${ included.join(", ") }`); } +} + +// Functions to process a Solidity Signature TokenString from left-to-right for... + +// ...the name with an optional type, returning the name +function consumeName(type: string, tokens: TokenString): string { + if (tokens.peekKeyword(KwTypes)) { + const keyword = tokens.pop().text; + if (keyword !== type) { + throw new Error(`expected ${ type }, got ${ keyword }`); + } + } + + return tokens.popType("ID"); +} + +// ...all keywords matching allowed, returning the keywords +function consumeKeywords(tokens: TokenString, allowed?: ReadonlySet): ReadonlySet { + const keywords: Set = new Set(); + while (true) { + const keyword = tokens.peekType("KEYWORD"); + + if (keyword == null || (allowed && !allowed.has(keyword))) { break; } + tokens.pop(); + + if (keywords.has(keyword)) { throw new Error(`duplicate keywords: ${ JSON.stringify(keyword) }`); } + keywords.add(keyword); + } + + return Object.freeze(keywords); +} + +// ...all visibility keywords, returning the coalesced mutability +function consumeMutability(tokens: TokenString): string { + let modifiers = consumeKeywords(tokens, KwVisib); + + // Detect conflicting modifiers + allowSingle(modifiers, setify("constant payable nonpayable".split(" "))); + allowSingle(modifiers, setify("pure view payable nonpayable".split(" "))); + + // Process mutability states + if (modifiers.has("view")) { return "view"; } + if (modifiers.has("pure")) { return "pure"; } + if (modifiers.has("payable")) { return "payable"; } + if (modifiers.has("nonpayable")) { return "nonpayable"; } + + // Process legacy `constant` last + if (modifiers.has("constant")) { return "view"; } + + return "nonpayable"; +} + +// ...a parameter list, returning the ParamType list +function consumeParams(tokens: TokenString, allowIndexed?: boolean): Array { + return tokens.popParams().map((t) => ParamType.fromTokens(t, allowIndexed)); +} + +// ...a gas limit, returning a BigNumber or null if none +function consumeGas(tokens: TokenString): null | bigint { + if (tokens.peekType("AT")) { + tokens.pop(); + if (tokens.peekType("NUMBER")) { + return logger.getBigInt(tokens.pop().text); + } + throw new Error("invalid gas"); + } + return null; +} + +function consumeEoi(tokens: TokenString): void { + if (tokens.length) { + throw new Error(`unexpected tokens: ${ tokens.toString() }`); + } +} + +const regexArrayType = new RegExp(/^(.*)\[([0-9]*)\]$/); + +function verifyBasicType(type: string): string { + const match = type.match(regexType); + if (!match) { + return logger.throwArgumentError("invalid type", "type", type); + } + if (type === "uint") { return "uint256"; } + if (type === "int") { return "int256"; } + + if (match[2]) { + // bytesXX + const length = parseInt(match[2]); + if (length === 0 || length > 32) { + logger.throwArgumentError("invalid bytes length", "type", type); + } + + } else if (match[3]) { + // intXX or uintXX + const size = parseInt(match[3] as string); + if (size === 0 || size > 256 || size % 8) { + logger.throwArgumentError("invalid numeric width", "type", type); + } + } + + return type; +} + +// Make the Fragment constructors effectively private +const _guard = { }; + +export interface ArrayParamType { //extends ParamType { + readonly arrayLength: number; + readonly arrayChildren: ParamType; +} + +export interface TupleParamType extends ParamType { + readonly components: ReadonlyArray; +} + +export interface IndexableParamType extends ParamType { + readonly indexed: boolean; +} + +export type FragmentWalkFunc = (type: string, value: any) => any; +export type FragmentWalkAsyncFunc = (type: string, value: any) => any | Promise; + +const internal = Symbol.for("_ethers_internal"); +const ParamTypeInternal = "_ParamTypeInternal"; + +export class ParamType { + + // The local name of the parameter (of "" if unbound) + readonly name!: string; + + // The fully qualified type (e.g. "address", "tuple(address)", "uint256[3][]" + readonly type!: string; + + // The base type (e.g. "address", "tuple", "array") + readonly baseType!: string; + + // Indexable Paramters ONLY (otherwise null) + readonly indexed!: null | boolean; + + // Tuples ONLY: (otherwise null) + // - sub-components + readonly components!: null | ReadonlyArray; + + // Arrays ONLY: (otherwise null) + // - length of the array (-1 for dynamic length) + // - child type + readonly arrayLength!: null | number; + readonly arrayChildren!: null | ParamType; + + + constructor(guard: any, name: string, type: string, baseType: string, indexed: null | boolean, components: null | ReadonlyArray, arrayLength: null | number, arrayChildren: null | ParamType) { + logger.assertPrivate(guard, _guard, "ParamType"); + Object.defineProperty(this, internal, { value: ParamTypeInternal }); + + if (components) { components = Object.freeze(components.slice()); } + + if (baseType === "array") { + if (arrayLength == null || arrayChildren == null) { + throw new Error(""); + } + } else if (arrayLength != null || arrayChildren != null) { + throw new Error(""); + } + + if (baseType === "tuple") { + if (components == null) { throw new Error(""); } + } else if (components != null) { + throw new Error(""); + } + + defineProperties(this, { + name, type, baseType, indexed, components, arrayLength, arrayChildren + }); + } + + // Format the parameter fragment + // - sighash: "(uint256,address)" + // - minimal: "tuple(uint256,address) indexed" + // - full: "tuple(uint256 foo, address bar) indexed baz" + format(format: FormatType = FormatType.sighash): string { + if (!FormatType[format]) { + logger.throwArgumentError("invalid format type", "format", format); + } + + if (format === FormatType.json) { + let result: any = { + type: ((this.baseType === "tuple") ? "tuple": this.type), + name: (this.name || undefined) + }; + if (typeof(this.indexed) === "boolean") { result.indexed = this.indexed; } + if (this.isTuple()) { + result.components = this.components.map((c) => JSON.parse(c.format(format))); + } + return JSON.stringify(result); + } + + let result = ""; + + // Array + if (this.isArray()) { + result += this.arrayChildren.format(format); + result += `[${ (this.arrayLength < 0 ? "": String(this.arrayLength)) }]`; + } else { + if (this.isTuple()) { + if (format !== FormatType.sighash) { result += this.type; } + result += "(" + this.components.map( + (comp) => comp.format(format) + ).join((format === FormatType.full) ? ", ": ",") + ")"; + } else { + result += this.type; + } + } + + if (format !== FormatType.sighash) { + if (this.indexed === true) { result += " indexed"; } + if (format === FormatType.full && this.name) { + result += " " + this.name; + } + } + + return result; + } + + static isArray(value: any): value is { arrayChildren: ParamType } { + return value && (value.baseType === "array") + } + + isArray(): this is (ParamType & ArrayParamType) { + return (this.baseType === "array") + } + + isTuple(): this is TupleParamType { + return (this.baseType === "tuple"); + } + + isIndexable(): this is IndexableParamType { + return (this.indexed != null); + } + + walk(value: any, process: FragmentWalkFunc): any { + if (this.isArray()) { + if (!Array.isArray(value)) { throw new Error("invlaid array value"); } + if (this.arrayLength !== -1 && value.length !== this.arrayLength) { + throw new Error("array is wrong length"); + } + return value.map((v) => ((this).arrayChildren.walk(v, process))); + } + + if (this.isTuple()) { + if (!Array.isArray(value)) { throw new Error("invlaid tuple value"); } + if (value.length !== this.components.length) { + throw new Error("array is wrong length"); + } + return value.map((v, i) => ((this).components[i].walk(v, process))); + } + + return process(this.type, value); + } + + #walkAsync(promises: Array>, value: any, process: FragmentWalkAsyncFunc, setValue: (value: any) => void): void { + + if (this.isArray()) { + if (!Array.isArray(value)) { throw new Error("invlaid array value"); } + if (this.arrayLength !== -1 && value.length !== this.arrayLength) { + throw new Error("array is wrong length"); + } + const childType = this.arrayChildren; + + const result = value.slice(); + result.forEach((value, index) => { + childType.#walkAsync(promises, value, process, (value: any) => { + result[index] = value; + }); + }); + setValue(result); + return; + } + + if (this.isTuple()) { + const components = this.components; + + // Convert the object into an array + let result: Array; + if (Array.isArray(value)) { + result = value.slice(); + + } else { + if (value == null || typeof(value) !== "object") { + throw new Error("invlaid tuple value"); + } + + result = components.map((param) => { + if (!param.name) { throw new Error("cannot use object value with unnamed components"); } + if (!(param.name in value)) { + throw new Error(`missing value for component ${ param.name }`); + } + return value[param.name]; + }); + } + if (value.length !== this.components.length) { + throw new Error("array is wrong length"); + } + + result.forEach((value, index) => { + components[index].#walkAsync(promises, value, process, (value: any) => { + result[index] = value; + }); + }); + setValue(result); + return; + } + + const result = process(this.type, value); + if (result.then) { + promises.push((async function() { setValue(await result); })()); + } else { + setValue(result); + } + } + + async walkAsync(value: any, process: (type: string, value: any) => any | Promise): Promise { + const promises: Array> = [ ]; + const result: [ any ] = [ value ]; + this.#walkAsync(promises, value, process, (value: any) => { + result[0] = value; + }); + if (promises.length) { await Promise.all(promises); } + return result[0]; + } + + static from(obj: any, allowIndexed?: boolean): ParamType { + if (ParamType.isParamType(obj)) { return obj; } + if (typeof(obj) === "string") { return ParamType.fromTokens(lex(obj), allowIndexed); } + if (obj instanceof TokenString) { return ParamType.fromTokens(obj, allowIndexed); } + + const name = obj.name; + if (name && (typeof(name) !== "string" || !name.match(regexIdentifier))) { + logger.throwArgumentError("invalid name", "obj.name", name); + } + + let indexed = obj.indexed; + if (indexed != null) { + if (!allowIndexed) { + logger.throwArgumentError("parameter cannot be indexed", "obj.indexed", obj.indexed); + } + indexed = !!indexed; + } + + let type = obj.type; + + let arrayMatch = type.match(regexArrayType); + if (arrayMatch) { + const arrayLength = arrayMatch[2]; + const arrayChildren = ParamType.from({ + type: arrayMatch[1], + components: obj.components + }); + + return new ParamType(_guard, name, type, "array", indexed, null, arrayLength, arrayChildren); + } + + if (type.substring(0, 5) === "tuple(" || type[0] === "(") { + const comps = (obj.components != null) ? obj.components.map((c: any) => ParamType.from(c)): null; + const tuple = new ParamType(_guard, name, type, "tuple", indexed, comps, null, null); + // @TODO: use lexer to validate and normalize type + return tuple; + } + + type = verifyBasicType(obj.type); + + return new ParamType(_guard, name, type, type, indexed, null, null, null); + } + + static fromObject(obj: any, allowIndexed?: boolean): ParamType { + throw new Error("@TODO"); + } + + static fromTokens(tokens: TokenString, allowIndexed?: boolean): ParamType { + let type = "", baseType = ""; + let comps: null | Array = null; + + if (consumeKeywords(tokens, setify([ "tuple" ])).has("tuple") || tokens.peekType("OPEN_PAREN")) { + // Tuple + baseType = "tuple"; + comps = tokens.popParams().map((t) => ParamType.from(t)); + type = `tuple(${ comps.map((c) => c.format()).join(",") })`; + } else { + // Normal + type = verifyBasicType(tokens.popType("TYPE")); + baseType = type; + } + + // Check for Array + let arrayChildren: null | ParamType = null; + let arrayLength: null | number = null; + + while (tokens.length && tokens.peekType("BRACKET")) { + const bracket = tokens.pop(); //arrays[i]; + arrayChildren = new ParamType(_guard, "", type, baseType, null, comps, arrayLength, arrayChildren); + arrayLength = bracket.value; + type += bracket.text; + baseType = "array"; + comps = null; + } + + let indexed = null; + const keywords = consumeKeywords(tokens, KwModifiers); + if (keywords.has("indexed")) { + if (!allowIndexed) { throw new Error(""); } + indexed = true; + } + + const name = (tokens.peekType("ID") ? tokens.pop().text: ""); + + if (tokens.length) { throw new Error("leftover tokens"); } + + return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren); + } + + static isParamType(value: any): value is ParamType { + return (value && value[internal] === ParamTypeInternal); + } +} + +export enum FragmentType { + "constructor" = "constructor", + "error" = "error", + "event" = "event", + "function" = "function", + "struct" = "struct", +}; + +export abstract class Fragment { + readonly type!: FragmentType; + readonly inputs!: ReadonlyArray; + + constructor(guard: any, type: FragmentType, inputs: ReadonlyArray) { + logger.assertPrivate(guard, _guard, "Fragment"); + inputs = Object.freeze(inputs.slice()); + defineProperties(this, { type, inputs }); + } + + abstract format(format?: FormatType): string; + + static from(obj: any): Fragment { + if (typeof(obj) === "string") { return this.fromString(obj); } + if (obj instanceof TokenString) { return this.fromTokens(obj); } + if (typeof(obj) === "object") { return this.fromObject(obj); } + throw new Error(`unsupported type: ${ obj }`); + } + + static fromObject(obj: any): Fragment { + switch (obj.type) { + case "constructor": return ConstructorFragment.fromObject(obj); + case "error": return ErrorFragment.fromObject(obj); + case "event": return EventFragment.fromObject(obj); + case "function": return FunctionFragment.fromObject(obj); + case "struct": return StructFragment.fromObject(obj); + } + throw new Error("not implemented yet"); + } + + static fromString(text: string): Fragment { + try { + Fragment.from(JSON.parse(text)); + } catch (e) { } + + return Fragment.fromTokens(lex(text)); + } + + static fromTokens(tokens: TokenString): Fragment { + const type = tokens.popKeyword(KwTypes); + + switch (type) { + case "constructor": return ConstructorFragment.fromTokens(tokens); + case "error": return ErrorFragment.fromTokens(tokens); + case "event": return EventFragment.fromTokens(tokens); + case "function": return FunctionFragment.fromTokens(tokens); + case "struct": return StructFragment.fromTokens(tokens); + } + + throw new Error(`unsupported type: ${ type }`); + } + + /* + static fromTokens(tokens: TokenString): Fragment { + const assertDone = () => { + if (tokens.length) { throw new Error(`unexpected tokens: ${ tokens.toString() }`); } + }); + + const type = (tokens.length && tokens.peek().type === "KEYWORD") ? tokens.peek().text: "unknown"; + + const name = consumeName("error", tokens); + const inputs = consumeParams(tokens, type === "event"); + + switch (type) { + case "event": case "struct": + assertDone(); + } + + } + */ + + static isConstructor(value: any): value is ConstructorFragment { + return (value && value.type === "constructor"); + } + + static isError(value: any): value is ErrorFragment { + return (value && value.type === "error"); + } + + static isEvent(value: any): value is EventFragment { + return (value && value.type === "event"); + } + + static isFunction(value: any): value is FunctionFragment { + return (value && value.type === "function"); + } + + static isStruct(value: any): value is StructFragment { + return (value && value.type === "struct"); + } +} + +export abstract class NamedFragment extends Fragment { + readonly name!: string; + + constructor(guard: any, type: FragmentType, name: string, inputs: ReadonlyArray) { + super(guard, type, inputs); + inputs = Object.freeze(inputs.slice()); + defineProperties(this, { name }); + } +} + +function joinParams(format: FormatType, params: ReadonlyArray): string { + return "(" + params.map((p) => p.format(format)).join((format === FormatType.full) ? ", ": ",") + ")"; +} + +export class ErrorFragment extends NamedFragment { + constructor(guard: any, name: string, inputs: ReadonlyArray) { + super(guard, FragmentType.error, name, inputs); + } + + format(format: FormatType = FormatType.sighash): string { + if (!FormatType[format]) { + logger.throwArgumentError("invalid format type", "format", format); + } + + if (format === FormatType.json) { + return JSON.stringify({ + type: "error", + name: this.name, + inputs: this.inputs.map((input) => JSON.parse(input.format(format))), + }); + } + + const result = [ ]; + if (format !== FormatType.sighash) { result.push("error"); } + result.push(this.name + joinParams(format, this.inputs)); + return result.join(" "); + } + + static fromString(text: string): ErrorFragment { + return ErrorFragment.fromTokens(lex(text)); + } + + static fromTokens(tokens: TokenString): ErrorFragment { + const name = consumeName("error", tokens); + const inputs = consumeParams(tokens); + consumeEoi(tokens); + + return new ErrorFragment(_guard, name, inputs); + } +} + + +export class EventFragment extends NamedFragment { + readonly anonymous!: boolean; + + constructor(guard: any, name: string, inputs: ReadonlyArray, anonymous: boolean) { + super(guard, FragmentType.event, name, inputs); + defineProperties(this, { anonymous }); + } + + format(format: FormatType = FormatType.sighash): string { + if (!FormatType[format]) { + logger.throwArgumentError("invalid format type", "format", format); + } + + if (format === FormatType.json) { + return JSON.stringify({ + type: "event", + anonymous: this.anonymous, + name: this.name, + inputs: this.inputs.map((i) => JSON.parse(i.format(format))) + }); + } + + const result = [ ]; + if (format !== FormatType.sighash) { result.push("event"); } + result.push(this.name + joinParams(format, this.inputs)); + if (format !== FormatType.sighash && this.anonymous) { result.push("anonymous"); } + return result.join(" "); + } + + static fromString(text: string): EventFragment { + return EventFragment.fromTokens(lex(text)); + } + + static fromTokens(tokens: TokenString): EventFragment { + const name = consumeName("event", tokens); + const inputs = consumeParams(tokens, true); + const anonymous = !!consumeKeywords(tokens, setify([ "anonymous" ])).has("anonymous"); + consumeEoi(tokens); + + return new EventFragment(_guard, name, inputs, anonymous); + } +} + + +export class ConstructorFragment extends Fragment { + readonly payable!: boolean; + readonly gas!: null | bigint; + + constructor(guard: any, type: FragmentType, inputs: ReadonlyArray, payable: boolean, gas: null | bigint) { + super(guard, type, inputs); + defineProperties(this, { payable, gas }); + } + + format(format: FormatType = FormatType.sighash): string { + if (!FormatType[format]) { + logger.throwArgumentError("invalid format type", "format", format); + } + + if (format === FormatType.sighash) { + logger.throwError("cannot format a constructor for sighash", "UNSUPPORTED_OPERATION", { + operation: "format(sighash)" + }); + } + + if (format === FormatType.json) { + return JSON.stringify({ + type: "constructor", + stateMutability: (this.payable ? "payable": "undefined"), + payable: this.payable, + gas: ((this.gas != null) ? this.gas: undefined), + inputs: this.inputs.map((i) => JSON.parse(i.format(format))) + }); + } + + const result = [ `constructor${ joinParams(format, this.inputs) }` ]; + result.push((this.payable) ? "payable": "nonpayable"); + if (this.gas != null) { result.push(`@${ this.gas.toString() }`); } + return result.join(" "); + } + + static fromString(text: string): ConstructorFragment { + return ConstructorFragment.fromTokens(lex(text)); + } + + static fromObject(obj: any): ConstructorFragment { + throw new Error("TODO"); + } + + static fromTokens(tokens: TokenString): ConstructorFragment { + consumeKeywords(tokens, setify([ "constructor" ])); + const inputs = consumeParams(tokens); + const payable = !!consumeKeywords(tokens, setify([ "payable" ])).has("payable"); + const gas = consumeGas(tokens); + consumeEoi(tokens); + + return new ConstructorFragment(_guard, FragmentType.constructor, inputs, payable, gas); + } +} + +export class FunctionFragment extends NamedFragment { + readonly constant!: boolean; + readonly outputs!: ReadonlyArray; + readonly stateMutability!: string; + + readonly payable!: boolean; + readonly gas!: null | bigint; + + constructor(guard: any, name: string, stateMutability: string, inputs: ReadonlyArray, outputs: ReadonlyArray, gas: null | bigint) { + super(guard, FragmentType.function, name, inputs); + outputs = Object.freeze(outputs.slice()); + const constant = (stateMutability === "view" || stateMutability === "pure"); + const payable = (stateMutability === "payable"); + defineProperties(this, { constant, gas, outputs, payable, stateMutability }); + } + + format(format: FormatType = FormatType.sighash): string { + if (!FormatType[format]) { + logger.throwArgumentError("invalid format type", "format", format); + } + + if (format === FormatType.json) { + return JSON.stringify({ + type: "function", + name: this.name, + constant: this.constant, + stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability: undefined), + payable: this.payable, + gas: ((this.gas != null) ? this.gas: undefined), + inputs: this.inputs.map((i) => JSON.parse(i.format(format))), + outputs: this.outputs.map((o) => JSON.parse(o.format(format))), + }); + } + + const result = []; + + if (format !== FormatType.sighash) { result.push("function"); } + + result.push(this.name + joinParams(format, this.inputs)); + + if (format !== FormatType.sighash) { + if (this.stateMutability !== "nonpayable") { + result.push(this.stateMutability); + } + + if (this.outputs && this.outputs.length) { + result.push("returns"); + result.push(joinParams(format, this.outputs)); + } + + if (this.gas != null) { result.push(`@${ this.gas.toString() }`); } + } + return result.join(" "); + } + + static fromString(text: string): FunctionFragment { + return FunctionFragment.fromTokens(lex(text)); + } + + static fromTokens(tokens: TokenString): FunctionFragment { + const name = consumeName("function", tokens); + const inputs = consumeParams(tokens); + const mutability = consumeMutability(tokens); + + let outputs: Array = [ ]; + if (consumeKeywords(tokens, setify([ "returns" ])).has("returns")) { + outputs = consumeParams(tokens); + } + + const gas = consumeGas(tokens); + + consumeEoi(tokens); + + return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas); + } +} + +export class StructFragment extends NamedFragment { + format(): string { + throw new Error("@TODO"); + } + + static fromString(text: string): StructFragment { + return StructFragment.fromTokens(lex(text)); + } + + static fromTokens(tokens: TokenString): StructFragment { + const name = consumeName("struct", tokens); + const inputs = consumeParams(tokens); + consumeEoi(tokens); + + return new StructFragment(_guard, FragmentType.struct, name, inputs); + } +} + diff --git a/packages/abi/src.ts/index.ts b/packages/abi/src.ts/index.ts new file mode 100644 index 000000000..df6a76707 --- /dev/null +++ b/packages/abi/src.ts/index.ts @@ -0,0 +1,37 @@ +// @TODO: export from + +import { ConstructorFragment, ErrorFragment, EventFragment, Fragment, FunctionFragment, JsonFragment, JsonFragmentType, ParamType } from "./fragments.js"; +import { AbiCoder, CoerceFunc, defaultAbiCoder } from "./abi-coder.js"; +import { checkResultErrors, Indexed, Interface, InterfaceAbi, LogDescription, Result, TransactionDescription } from "./interface.js"; +export { Typed } from "./typed.js"; + +export { + ConstructorFragment, + ErrorFragment, + EventFragment, + Fragment, + FunctionFragment, + ParamType, + + AbiCoder, + defaultAbiCoder, + + Interface, + Indexed, + +}; + +export type { + CoerceFunc, + JsonFragment, + JsonFragmentType, + + InterfaceAbi, + + Result, + checkResultErrors, + + LogDescription, + TransactionDescription +}; + diff --git a/packages/abi/src.ts/interface.ts b/packages/abi/src.ts/interface.ts new file mode 100644 index 000000000..8bdc6051a --- /dev/null +++ b/packages/abi/src.ts/interface.ts @@ -0,0 +1,883 @@ +import { arrayify, concat, dataSlice, hexlify, zeroPadLeft, isHexString } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto" +import { id } from "@ethersproject/hash" +import { defineProperties } from "@ethersproject/properties"; + +import { AbiCoder, defaultAbiCoder } from "./abi-coder.js"; +import { checkResultErrors, Result } from "./coders/abstract-coder.js"; +import { ConstructorFragment, ErrorFragment, EventFragment, FormatType, Fragment, FunctionFragment, ParamType } from "./fragments.js"; +import { logger } from "./logger.js"; +import { Typed } from "./typed.js"; + +import type { BytesLike } from "@ethersproject/bytes"; +import type { BigNumberish } from "@ethersproject/logger"; + +import type { JsonFragment } from "./fragments.js"; + + +export { checkResultErrors, Result }; + +export class LogDescription { + readonly fragment!: EventFragment; + readonly name!: string; + readonly signature!: string; + readonly topic!: string; + readonly args!: Result + + constructor(fragment: EventFragment, topic: string, args: Result) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, signature, topic, args + }); + } +} + +export class TransactionDescription { + readonly fragment!: FunctionFragment; + readonly name!: string; + readonly args!: Result; + readonly signature!: string; + readonly selector!: string; + readonly value!: bigint; + + constructor(fragment: FunctionFragment, selector: string, args: Result, value: bigint) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, args, signature, selector, value + }); + } +} + +export class ErrorDescription { + readonly fragment!: ErrorFragment; + readonly name!: string; + readonly args!: Result; + readonly signature!: string; + readonly selector!: string; + + constructor(fragment: ErrorFragment, selector: string, args: Result) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, args, signature, selector + }); + } +} + +export class Indexed { + readonly hash!: null | string; + readonly _isIndexed!: boolean; + + static isIndexed(value: any): value is Indexed { + return !!(value && value._isIndexed); + } + + constructor(hash: null | string) { + defineProperties(this, { hash, _isIndexed: true }) + } +} + +type ErrorInfo = { + signature: string, + inputs: Array, + name: string, + reason: (...args: Array) => string; +}; + +// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require +const PanicReasons: Record = { + "0": "generic panic", + "1": "assert(false)", + "17": "arithmetic overflow", + "18": "division or modulo by zero", + "33": "enum overflow", + "34": "invalid encoded storage byte array accessed", + "49": "out-of-bounds array access; popping on an empty array", + "50": "out-of-bounds access of an array or bytesN", + "65": "out of memory", + "81": "uninitialized function", +} + +const BuiltinErrors: Record = { + "0x08c379a0": { + signature: "Error(string)", + name: "Error", + inputs: [ "string" ], + reason: (message: string) => { + return `reverted with reason string ${ JSON.stringify(message) }`; + } + }, + "0x4e487b71": { + signature: "Panic(uint256)", + name: "Panic", + inputs: [ "uint256" ], + reason: (code: bigint) => { + let reason = "unknown panic code"; + if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) { + reason = PanicReasons[code.toString()]; + } + return `reverted with panic code 0x${ code.toString(16) } (${ reason })`; + } + } +} + +/* +function wrapAccessError(property: string, error: Error): Error { + const wrap = new Error(`deferred error during ABI decoding triggered accessing ${ property }`); + (wrap).error = error; + return wrap; +} +*/ +/* +function checkNames(fragment: Fragment, type: "input" | "output", params: Array): void { + params.reduce((accum, param) => { + if (param.name) { + if (accum[param.name]) { + logger.throwArgumentError(`duplicate ${ type } parameter ${ JSON.stringify(param.name) } in ${ fragment.format("full") }`, "fragment", fragment); + } + accum[param.name] = true; + } + return accum; + }, <{ [ name: string ]: boolean }>{ }); +} +*/ +//export type AbiCoder = any; +//const defaultAbiCoder: AbiCoder = { }; + +export type InterfaceAbi = string | ReadonlyArray; + +export class Interface { + readonly fragments!: ReadonlyArray; + + readonly deploy!: ConstructorFragment; + + #errors: Map; + #events: Map; + #functions: Map; +// #structs: Map; + + #abiCoder: AbiCoder; + + constructor(fragments: InterfaceAbi) { + let abi: ReadonlyArray = [ ]; + if (typeof(fragments) === "string") { + abi = JSON.parse(fragments); + } else { + abi = fragments; + } + + this.#functions = new Map(); + this.#errors = new Map(); + this.#events = new Map(); +// this.#structs = new Map(); + + defineProperties(this, { + fragments: Object.freeze(abi.map((f) => Fragment.from(f)).filter((f) => (f != null))), + }); + + this.#abiCoder = this.getAbiCoder(); + + // Add all fragments by their signature + this.fragments.forEach((fragment) => { + let bucket: Map; + switch (fragment.type) { + case "constructor": + if (this.deploy) { + logger.warn("duplicate definition - constructor"); + return; + } + //checkNames(fragment, "input", fragment.inputs); + defineProperties(this, { deploy: fragment }); + return; + + case "function": + //checkNames(fragment, "input", fragment.inputs); + //checkNames(fragment, "output", (fragment).outputs); + bucket = this.#functions; + break; + + case "event": + //checkNames(fragment, "input", fragment.inputs); + bucket = this.#events; + break; + + case "error": + bucket = this.#errors; + break; + + default: + return; + } + + const signature = fragment.format(); + if (bucket.has(signature)) { + logger.warn("duplicate definition - " + signature); + return; + } + + bucket.set(signature, fragment); + }); + + // If we do not have a constructor add a default + if (!this.deploy) { + defineProperties(this, { + deploy: ConstructorFragment.fromString("constructor()") + }); + } + } +// @TODO: multi sig? + format(format?: FormatType): string | Array { + if (!format) { format = FormatType.full; } + if (format === FormatType.sighash) { + logger.throwArgumentError("interface does not support formatting sighash", "format", format); + } + + const abi = this.fragments.map((f) => f.format(format)); + + // We need to re-bundle the JSON fragments a bit + if (format === FormatType.json) { + return JSON.stringify(abi.map((j) => JSON.parse(j))); + } + + return abi; + } + + getAbiCoder(): AbiCoder { + return defaultAbiCoder; + } + + //static getAddress(address: string): string { + // return getAddress(address); + //} + + //static getSelector(fragment: ErrorFragment | FunctionFragment): string { + // return dataSlice(id(fragment.format()), 0, 4); + //} + + //static getEventTopic(eventFragment: EventFragment): string { + // return id(eventFragment.format()); + //} + + // Find a function definition by any means necessary (unless it is ambiguous) + #getFunction(key: string, values: null | Array, forceUnique: boolean): FunctionFragment { + + // Selector + if (isHexString(key)) { + const selector = key.toLowerCase(); + for (const fragment of this.#functions.values()) { + if (selector === this.getSelector(fragment)) { return fragment; } + } + logger.throwArgumentError("no matching function", "selector", key); + } + + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching: Array = [ ]; + for (const [ name, fragment ] of this.#functions) { + if (name.split("("/* fix:) */)[0] === key) { matching.push(fragment); } + } + + if (values) { + const lastValue = (values.length > 0) ? values[values.length - 1]: null; + + let valueLength = values.length; + let allowOptions = true; + if (Typed.isTyped(lastValue) && lastValue.type === "overrides") { + allowOptions = false; + valueLength--; + } + + // Remove all matches that don't have a compatible length. The args + // may contain an overrides, so the match may have n or n - 1 parameters + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs.length; + if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) { + matching.splice(i, 1); + } + } + + // Remove all matches that don't match the Typed signature + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs; + for (let j = 0; j < values.length; j++) { + // Not a typed value + if (!Typed.isTyped(values[j])) { continue; } + + // We are past the inputs + if (j >= inputs.length) { + if (values[j].type === "overrides") { continue; } + matching.splice(i, 1); + break; + } + + // Make sure the value type matches the input type + if (values[j].type !== inputs[j].baseType) { + matching.splice(i, 1); + break; + } + } + } + } + + // We found a single matching signature with an overrides, but the + // last value is something that cannot possibly be an options + if (matching.length === 1 && values && values.length !== matching[0].inputs.length) { + const lastArg = values[values.length - 1]; + if (lastArg == null || Array.isArray(lastArg) || typeof(lastArg) !== "object") { + matching.splice(0, 1); + } + } + + if (matching.length === 0) { + logger.throwArgumentError("no matching function", "name", key); + + } else if (matching.length > 1 && forceUnique) { + const matchStr = matching.map((m) => JSON.stringify(m.format())).join(", "); + logger.throwArgumentError(`multiple matching functions (i.e. ${ matchStr })`, "name", key); + } + + return matching[0]; + } + + // Normalize the signature and lookup the function + const result = this.#functions.get(FunctionFragment.fromString(key).format()); + if (result) { return result; } + + return logger.throwArgumentError("no matching function", "signature", key); + } + getFunctionName(key: string): string { + return (this.#getFunction(key, null, false)).name; + } + getFunction(key: string, values?: Array): FunctionFragment { + return this.#getFunction(key, values || null, true) + } + + + // Find an event definition by any means necessary (unless it is ambiguous) + #getEvent(key: string, values: null | Array, forceUnique: boolean): EventFragment { + + // EventTopic + if (isHexString(key)) { + const eventTopic = key.toLowerCase(); + for (const fragment of this.#events.values()) { + if (eventTopic === this.getEventTopic(fragment)) { return fragment; } + } + logger.throwArgumentError("no matching event", "eventTopic", key); + } + + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = [ ]; + for (const [ name, fragment ] of this.#events) { + if (name.split("("/* fix:) */)[0] === key) { matching.push(fragment); } + } + + if (values) { + // Remove all matches that don't have a compatible length. + for (let i = matching.length - 1; i >= 0; i--) { + if (matching[i].inputs.length < values.length) { + matching.splice(i, 1); + } + } + + // Remove all matches that don't match the Typed signature + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs; + for (let j = 0; j < values.length; j++) { + // Not a typed value + if (!Typed.isTyped(values[j])) { continue; } + + // Make sure the value type matches the input type + if (values[j].type !== inputs[j].baseType) { + matching.splice(i, 1); + break; + } + } + } + } + + if (matching.length === 0) { + logger.throwArgumentError("no matching event", "name", key); + } else if (matching.length > 1 && forceUnique) { + // @TODO: refine by Typed + logger.throwArgumentError("multiple matching events", "name", key); + } + + return matching[0]; + } + + // Normalize the signature and lookup the function + const result = this.#events.get(EventFragment.fromString(key).format()); + if (result) { return result; } + + return logger.throwArgumentError("no matching event", "signature", key); + } + getEventName(key: string): string { + return (this.#getEvent(key, null, false)).name; + } + getEvent(key: string, values?: Array): EventFragment { + return this.#getEvent(key, values || null, true) + } + + // Find a function definition by any means necessary (unless it is ambiguous) + getError(key: string, values?: Array): ErrorFragment { + if (isHexString(key)) { + const selector = key.toLowerCase(); + for (const fragment of this.#errors.values()) { + if (selector === this.getSelector(fragment)) { return fragment; } + } + logger.throwArgumentError("no matching error", "selector", key); + } + + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = [ ]; + for (const [ name, fragment ] of this.#errors) { + if (name.split("("/* fix:) */)[0] === key) { matching.push(fragment); } + } + if (matching.length === 0) { + logger.throwArgumentError("no matching error", "name", key); + } else if (matching.length > 1) { + // @TODO: refine by Typed + logger.throwArgumentError("multiple matching errors", "name", key); + } + + return matching[0]; + } + + // Normalize the signature and lookup the function + const result = this.#errors.get(ErrorFragment.fromString(key).format()); + if (result) { return result; } + + return logger.throwArgumentError("no matching error", "signature", key); + } + + // Get the 4-byte selector used by Solidity to identify a function + getSelector(fragment: ErrorFragment | FunctionFragment): string { + /* + if (typeof(fragment) === "string") { + const matches: Array = [ ]; + + try { matches.push(this.getFunction(fragment)); } catch (error) { } + try { matches.push(this.getError(fragment)); } catch (_) { } + + if (matches.length === 0) { + logger.throwArgumentError("unknown fragment", "key", fragment); + } else if (matches.length > 1) { + logger.throwArgumentError("ambiguous fragment matches function and error", "key", fragment); + } + + fragment = matches[0]; + } + */ + + return dataSlice(id(fragment.format()), 0, 4); + } + + // Get the 32-byte topic hash used by Solidity to identify an event + getEventTopic(fragment: EventFragment): string { + //if (typeof(fragment) === "string") { fragment = this.getEvent(eventFragment); } + return id(fragment.format()); + } + + + _decodeParams(params: ReadonlyArray, data: BytesLike): Result { + return this.#abiCoder.decode(params, data) + } + + _encodeParams(params: ReadonlyArray, values: ReadonlyArray): string { + return this.#abiCoder.encode(params, values) + } + + encodeDeploy(values?: ReadonlyArray): string { + return this._encodeParams(this.deploy.inputs, values || [ ]); + } + + decodeErrorResult(fragment: ErrorFragment | string, data: BytesLike): Result { + if (typeof(fragment) === "string") { fragment = this.getError(fragment); } + + if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) { + logger.throwArgumentError(`data signature does not match error ${ fragment.name }.`, "data", data); + } + + return this._decodeParams(fragment.inputs, dataSlice(data, 4)); + } + + encodeErrorResult(fragment: ErrorFragment | string, values?: ReadonlyArray): string { + if (typeof(fragment) === "string") { fragment = this.getError(fragment); } + + return concat([ + this.getSelector(fragment), + this._encodeParams(fragment.inputs, values || [ ]) + ]); + } + + // Decode the data for a function call (e.g. tx.data) + decodeFunctionData(fragment: FunctionFragment | string, data: BytesLike): Result { + if (typeof(fragment) === "string") { fragment = this.getFunction(fragment); } + + if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) { + logger.throwArgumentError(`data signature does not match function ${ fragment.name }.`, "data", data); + } + + return this._decodeParams(fragment.inputs, dataSlice(data, 4)); + } + + // Encode the data for a function call (e.g. tx.data) + encodeFunctionData(fragment: FunctionFragment | string, values?: ReadonlyArray): string { + if (typeof(fragment) === "string") { fragment = this.getFunction(fragment); } + + return concat([ + this.getSelector(fragment), + this._encodeParams(fragment.inputs, values || [ ]) + ]); + } + + // Decode the result from a function call (e.g. from eth_call) + decodeFunctionResult(fragment: FunctionFragment | string, data: BytesLike): Result { + if (typeof(fragment) === "string") { fragment = this.getFunction(fragment); } + + let message = "invalid length for result data"; + + const bytes = arrayify(data); + if ((bytes.length % 32) === 0) { + try { + return this.#abiCoder.decode(fragment.outputs, bytes); + } catch (error) { + message = "could not decode result data"; + } + } + + // Call returned data with no error, but the data is junk + return logger.throwError(message, "BAD_DATA", { + value: hexlify(bytes), + info: { method: fragment.name, signature: fragment.format() } + }); + } + + makeError(fragment: FunctionFragment | string, _data: BytesLike, tx?: { data: string }): Error { + if (typeof(fragment) === "string") { fragment = this.getFunction(fragment); } + + const data = logger.getBytes(_data); + + let args: undefined | Result = undefined; + if (tx) { + try { + args = this.#abiCoder.decode(fragment.inputs, tx.data || "0x"); + } catch (error) { console.log(error); } + } + + let errorArgs: undefined | Result = undefined; + let errorName: undefined | string = undefined; + let errorSignature: undefined | string = undefined; + let reason: string = "unknown reason"; + + if (data.length === 0) { + reason = "missing error reason"; + + } else if ((data.length % 32) === 4) { + const selector = hexlify(data.slice(0, 4)); + const builtin = BuiltinErrors[selector]; + if (builtin) { + try { + errorName = builtin.name; + errorSignature = builtin.signature; + errorArgs = this.#abiCoder.decode(builtin.inputs, data.slice(4)); + reason = builtin.reason(...errorArgs); + } catch (error) { + console.log(error); // @TODO: remove + } + } else { + reason = "unknown custom error"; + try { + const error = this.getError(selector); + errorName = error.name; + errorSignature = error.format(); + reason = `custom error: ${ errorSignature }`; + try { + errorArgs = this.#abiCoder.decode(error.inputs, data.slice(4)); + } catch (error) { + reason = `custom error: ${ errorSignature } (coult not decode error data)` + } + } catch (error) { + console.log(error); // @TODO: remove + } + } + } + + return logger.makeError("call revert exception", "CALL_EXCEPTION", { + data: hexlify(data), transaction: null, + method: fragment.name, signature: fragment.format(), args, + errorArgs, errorName, errorSignature, reason + }); + } + + // Encode the result for a function call (e.g. for eth_call) + encodeFunctionResult(functionFragment: FunctionFragment | string, values?: ReadonlyArray): string { + if (typeof(functionFragment) === "string") { + functionFragment = this.getFunction(functionFragment); + } + + return hexlify(this.#abiCoder.encode(functionFragment.outputs, values || [ ])); + } +/* + spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> { + const promises: Array> = [ ]; + const process = function(type: ParamType, value: any): any { + if (type.baseType === "array") { + return descend(type.child + } + if (type. === "address") { + } + }; + + const descend = function (inputs: Array, values: ReadonlyArray) { + if (inputs.length !== values.length) { throw new Error("length mismatch"); } + + }; + + const result: Array = [ ]; + values.forEach((value, index) => { + if (value == null) { + topics.push(null); + } else if (param.baseType === "array" || param.baseType === "tuple") { + logger.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value); + } else if (Array.isArray(value)) { + topics.push(value.map((value) => encodeTopic(param, value))); + } else { + topics.push(encodeTopic(param, value)); + } + }); + } +*/ + // Create the filter for the event with search criteria (e.g. for eth_filterLog) + encodeFilterTopics(eventFragment: EventFragment, values: ReadonlyArray): Array> { + if (typeof(eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + + if (values.length > eventFragment.inputs.length) { + logger.throwError("too many arguments for " + eventFragment.format(), "UNEXPECTED_ARGUMENT", { + count: values.length, + expectedCount: eventFragment.inputs.length + }) + } + + const topics: Array> = []; + if (!eventFragment.anonymous) { topics.push(this.getEventTopic(eventFragment)); } + + const encodeTopic = (param: ParamType, value: any): string => { + if (param.type === "string") { + return id(value); + } else if (param.type === "bytes") { + return keccak256(hexlify(value)); + } + + // Check addresses are valid + if (param.type === "address") { this.#abiCoder.encode( [ "address" ], [ value ]); } + return zeroPadLeft(hexlify(value), 32); + //@TOOD should probably be return toHex(value, 32) + }; + + values.forEach((value, index) => { + + const param = eventFragment.inputs[index]; + + if (!param.indexed) { + if (value != null) { + logger.throwArgumentError("cannot filter non-indexed parameters; must be null", ("contract." + param.name), value); + } + return; + } + + if (value == null) { + topics.push(null); + } else if (param.baseType === "array" || param.baseType === "tuple") { + logger.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value); + } else if (Array.isArray(value)) { + topics.push(value.map((value) => encodeTopic(param, value))); + } else { + topics.push(encodeTopic(param, value)); + } + }); + + // Trim off trailing nulls + while (topics.length && topics[topics.length - 1] === null) { + topics.pop(); + } + + return topics; + } + + encodeEventLog(eventFragment: EventFragment, values: ReadonlyArray): { data: string, topics: Array } { + if (typeof(eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + + const topics: Array = [ ]; + + const dataTypes: Array = [ ]; + const dataValues: Array = [ ]; + + if (!eventFragment.anonymous) { + topics.push(this.getEventTopic(eventFragment)); + } + + if (values.length !== eventFragment.inputs.length) { + logger.throwArgumentError("event arguments/values mismatch", "values", values); + } + + eventFragment.inputs.forEach((param, index) => { + const value = values[index]; + if (param.indexed) { + if (param.type === "string") { + topics.push(id(value)) + } else if (param.type === "bytes") { + topics.push(keccak256(value)) + } else if (param.baseType === "tuple" || param.baseType === "array") { + // @TODO + throw new Error("not implemented"); + } else { + topics.push(this.#abiCoder.encode([ param.type] , [ value ])); + } + } else { + dataTypes.push(param); + dataValues.push(value); + } + }); + + return { + data: this.#abiCoder.encode(dataTypes , dataValues), + topics: topics + }; + } + + // Decode a filter for the event and the search criteria + decodeEventLog(eventFragment: EventFragment | string, data: BytesLike, topics?: ReadonlyArray): Result { + if (typeof(eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + + if (topics != null && !eventFragment.anonymous) { + const eventTopic = this.getEventTopic(eventFragment); + if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== eventTopic) { + logger.throwArgumentError("fragment/topic mismatch", "topics[0]", topics[0]); + } + topics = topics.slice(1); + } + + const indexed: Array = []; + const nonIndexed: Array = []; + const dynamic: Array = []; + + eventFragment.inputs.forEach((param, index) => { + if (param.indexed) { + if (param.type === "string" || param.type === "bytes" || param.baseType === "tuple" || param.baseType === "array") { + indexed.push(ParamType.fromObject({ type: "bytes32", name: param.name })); + dynamic.push(true); + } else { + indexed.push(param); + dynamic.push(false); + } + } else { + nonIndexed.push(param); + dynamic.push(false); + } + }); + + const resultIndexed = (topics != null) ? this.#abiCoder.decode(indexed, concat(topics)): null; + const resultNonIndexed = this.#abiCoder.decode(nonIndexed, data, true); + + //const result: (Array & { [ key: string ]: any }) = [ ]; + const values: Array = [ ]; + const keys: Array = [ ]; + let nonIndexedIndex = 0, indexedIndex = 0; + eventFragment.inputs.forEach((param, index) => { + let value = null; + if (param.indexed) { + if (resultIndexed == null) { + value = new Indexed(null); + + } else if (dynamic[index]) { + value = new Indexed(resultIndexed[indexedIndex++]); + + } else { + try { + value = resultIndexed[indexedIndex++]; + } catch (error) { + value = error; + } + } + } else { + try { + value = resultNonIndexed[nonIndexedIndex++]; + } catch (error) { + value = error; + } + } + + values.push(value); + keys.push(param.name || null); + }); + + return Result.fromItems(values, keys); + } + + // Given a transaction, find the matching function fragment (if any) and + // determine all its properties and call parameters + parseTransaction(tx: { data: string, value?: BigNumberish }): null | TransactionDescription { + const data = logger.getBytes(tx.data, "tx.data"); + const value = logger.getBigInt((tx.value != null) ? tx.value: 0, "tx.value"); + + const fragment = this.getFunction(hexlify(data.slice(0, 4))); + + if (!fragment) { return null; } + + const args = this.#abiCoder.decode(fragment.inputs, data.slice(4)); + return new TransactionDescription(fragment, this.getSelector(fragment), args, value); + } + + // @TODO + //parseCallResult(data: BytesLike): ?? + + // Given an event log, find the matching event fragment (if any) and + // determine all its properties and values + parseLog(log: { topics: Array, data: string}): null | LogDescription { + const fragment = this.getEvent(log.topics[0]); + + if (!fragment || fragment.anonymous) { return null; } + + // @TODO: If anonymous, and the only method, and the input count matches, should we parse? + // Probably not, because just because it is the only event in the ABI does + // not mean we have the full ABI; maybe just a fragment? + + + return new LogDescription(fragment, this.getEventTopic(fragment), this.decodeEventLog(fragment, log.data, log.topics)); + } + + parseError(data: BytesLike): null | ErrorDescription { + const hexData = hexlify(data); + const fragment = this.getError(dataSlice(hexData, 0, 4)); + + if (!fragment) { return null; } + + const args = this.#abiCoder.decode(fragment.inputs, dataSlice(hexData, 4)); + return new ErrorDescription(fragment, this.getSelector(fragment), args); + } + + + static from(value: ReadonlyArray | string | Interface) { + // Already an Interface, which is immutable + if (value instanceof Interface) { return value; } + + // JSON + if (typeof(value) === "string") { return new Interface(JSON.parse(value)); } + + // Maybe an interface from an older version, or from a symlinked copy + if (typeof((value).format) === "function") { + return new Interface((value).format(FormatType.json)); + } + + // Array of fragments + return new Interface(value); + } +} diff --git a/packages/abi/src.ts/logger.ts b/packages/abi/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/abi/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/abi/src.ts/typed.ts b/packages/abi/src.ts/typed.ts new file mode 100644 index 000000000..b34ebcd30 --- /dev/null +++ b/packages/abi/src.ts/typed.ts @@ -0,0 +1,254 @@ +import { defineProperties } from "@ethersproject/properties"; + +import type { Addressable } from "@ethersproject/address"; +import type { BigNumberish, BytesLike } from "@ethersproject/logger"; + +import type { Result } from "./coders/abstract-coder.js"; + +const _gaurd = { }; + +function n(value: BigNumberish, width: number): Typed { + let signed = false; + if (width < 0) { + signed = true; + width *= -1; + } + + // @TODO: Check range is valid for value + return new Typed(_gaurd, `${ signed ? "": "u" }int${ width }`, value, { signed, width }); +} + +function b(value: BytesLike, size?: number): Typed { + // @TODO: Check range is valid for value + return new Typed(_gaurd, `bytes${ (size) ? size: "" }`, value, { size }); +} + +export interface TypedNumber extends Typed { + defaultValue(): number; + minValue(): number; + maxValue(): number; +} + +export interface TypedBigInt extends Typed { + defaultValue(): bigint; + minValue(): bigint; + maxValue(): bigint; +} + +export interface TypedData extends Typed { + defaultValue(): string; +} + +export interface TypedString extends Typed { + defaultValue(): string; +} + +const _typedSymbol = Symbol.for("_ethers_typed"); + +export class Typed { + readonly type!: string; + readonly value!: any; + + readonly #options: any; + + readonly _typedSymbol!: Symbol; + + constructor(gaurd: any, type: string, value: any, options: any = null) { + if (gaurd !== _gaurd) { throw new Error("private constructor"); } + defineProperties(this, { _typedSymbol, type, value }); + this.#options = options; + + // Check the value is valid + this.format(); + } + + format(): string { + if (this.type === "array") { + throw new Error(""); + } else if (this.type === "dynamicArray") { + throw new Error(""); + } else if (this.type === "tuple") { + return `tuple(${ this.value.map((v: Typed) => v.format()).join(",") })` + } + + return this.type; + } + + defaultValue(): string | number | bigint | Result { + return 0; + } + + minValue(): string | number | bigint { + return 0; + } + + maxValue(): string | number | bigint { + return 0; + } + + isBigInt(): this is TypedBigInt { + return !!(this.type.match(/^u?int[0-9]+$/)); + } + + isData(): this is TypedData { + return (this.type.substring(0, 5) === "bytes"); + } + + isString(): this is TypedString { + return (this.type === "string"); + } + + get tupleName(): null | string { + if (this.type !== "tuple") { throw TypeError("not a tuple"); } + return this.#options; + } + + // Returns the length of this type as an array + // - `null` indicates the length is unforced, it could be dynamic + // - `-1` indicates the length is dynamic + // - any other value indicates it is a static array and is its length + get arrayLength(): null | number { + if (this.type !== "array") { throw TypeError("not an array"); } + if (this.#options === true) { return -1; } + if (this.#options === false) { return (>(this.value)).length; } + return null; + } + + static from(type: string, value: any): Typed { + return new Typed(_gaurd, type, value); + } + + static uint8(v: BigNumberish): Typed { return n(v, 8); } + static uint16(v: BigNumberish): Typed { return n(v, 16); } + static uint24(v: BigNumberish): Typed { return n(v, 24); } + static uint32(v: BigNumberish): Typed { return n(v, 32); } + static uint40(v: BigNumberish): Typed { return n(v, 40); } + static uint48(v: BigNumberish): Typed { return n(v, 46); } + static uint56(v: BigNumberish): Typed { return n(v, 56); } + static uint64(v: BigNumberish): Typed { return n(v, 64); } + static uint72(v: BigNumberish): Typed { return n(v, 72); } + static uint80(v: BigNumberish): Typed { return n(v, 80); } + static uint88(v: BigNumberish): Typed { return n(v, 88); } + static uint96(v: BigNumberish): Typed { return n(v, 96); } + static uint104(v: BigNumberish): Typed { return n(v, 104); } + static uint112(v: BigNumberish): Typed { return n(v, 112); } + static uint120(v: BigNumberish): Typed { return n(v, 120); } + static uint128(v: BigNumberish): Typed { return n(v, 128); } + static uint136(v: BigNumberish): Typed { return n(v, 136); } + static uint144(v: BigNumberish): Typed { return n(v, 144); } + static uint152(v: BigNumberish): Typed { return n(v, 152); } + static uint160(v: BigNumberish): Typed { return n(v, 160); } + static uint168(v: BigNumberish): Typed { return n(v, 168); } + static uint176(v: BigNumberish): Typed { return n(v, 176); } + static uint184(v: BigNumberish): Typed { return n(v, 184); } + static uint192(v: BigNumberish): Typed { return n(v, 192); } + static uint200(v: BigNumberish): Typed { return n(v, 200); } + static uint208(v: BigNumberish): Typed { return n(v, 208); } + static uint216(v: BigNumberish): Typed { return n(v, 216); } + static uint224(v: BigNumberish): Typed { return n(v, 224); } + static uint232(v: BigNumberish): Typed { return n(v, 232); } + static uint240(v: BigNumberish): Typed { return n(v, 240); } + static uint248(v: BigNumberish): Typed { return n(v, 248); } + static uint256(v: BigNumberish): Typed { return n(v, 256); } + static uint(v: BigNumberish): Typed { return n(v, 256); } + + static int8(v: BigNumberish): Typed { return n(v, -8); } + static int16(v: BigNumberish): Typed { return n(v, -16); } + static int24(v: BigNumberish): Typed { return n(v, -24); } + static int32(v: BigNumberish): Typed { return n(v, -32); } + static int40(v: BigNumberish): Typed { return n(v, -40); } + static int48(v: BigNumberish): Typed { return n(v, -46); } + static int56(v: BigNumberish): Typed { return n(v, -56); } + static int64(v: BigNumberish): Typed { return n(v, -64); } + static int72(v: BigNumberish): Typed { return n(v, -72); } + static int80(v: BigNumberish): Typed { return n(v, -80); } + static int88(v: BigNumberish): Typed { return n(v, -88); } + static int96(v: BigNumberish): Typed { return n(v, -96); } + static int104(v: BigNumberish): Typed { return n(v, -104); } + static int112(v: BigNumberish): Typed { return n(v, -112); } + static int120(v: BigNumberish): Typed { return n(v, -120); } + static int128(v: BigNumberish): Typed { return n(v, -128); } + static int136(v: BigNumberish): Typed { return n(v, -136); } + static int144(v: BigNumberish): Typed { return n(v, -144); } + static int152(v: BigNumberish): Typed { return n(v, -152); } + static int160(v: BigNumberish): Typed { return n(v, -160); } + static int168(v: BigNumberish): Typed { return n(v, -168); } + static int176(v: BigNumberish): Typed { return n(v, -176); } + static int184(v: BigNumberish): Typed { return n(v, -184); } + static int192(v: BigNumberish): Typed { return n(v, -192); } + static int200(v: BigNumberish): Typed { return n(v, -200); } + static int208(v: BigNumberish): Typed { return n(v, -208); } + static int216(v: BigNumberish): Typed { return n(v, -216); } + static int224(v: BigNumberish): Typed { return n(v, -224); } + static int232(v: BigNumberish): Typed { return n(v, -232); } + static int240(v: BigNumberish): Typed { return n(v, -240); } + static int248(v: BigNumberish): Typed { return n(v, -248); } + static int256(v: BigNumberish): Typed { return n(v, -256); } + static int(v: BigNumberish): Typed { return n(v, -256); } + + static bytes(v: BytesLike): Typed { return b(v); } + static bytes1(v: BytesLike): Typed { return b(v, 1); } + static bytes2(v: BytesLike): Typed { return b(v, 2); } + static bytes3(v: BytesLike): Typed { return b(v, 3); } + static bytes4(v: BytesLike): Typed { return b(v, 4); } + static bytes5(v: BytesLike): Typed { return b(v, 5); } + static bytes6(v: BytesLike): Typed { return b(v, 6); } + static bytes7(v: BytesLike): Typed { return b(v, 7); } + static bytes8(v: BytesLike): Typed { return b(v, 8); } + static bytes9(v: BytesLike): Typed { return b(v, 9); } + static bytes10(v: BytesLike): Typed { return b(v, 10); } + static bytes11(v: BytesLike): Typed { return b(v, 11); } + static bytes12(v: BytesLike): Typed { return b(v, 12); } + static bytes13(v: BytesLike): Typed { return b(v, 13); } + static bytes14(v: BytesLike): Typed { return b(v, 14); } + static bytes15(v: BytesLike): Typed { return b(v, 15); } + static bytes16(v: BytesLike): Typed { return b(v, 16); } + static bytes17(v: BytesLike): Typed { return b(v, 17); } + static bytes18(v: BytesLike): Typed { return b(v, 18); } + static bytes19(v: BytesLike): Typed { return b(v, 19); } + static bytes20(v: BytesLike): Typed { return b(v, 20); } + static bytes21(v: BytesLike): Typed { return b(v, 21); } + static bytes22(v: BytesLike): Typed { return b(v, 22); } + static bytes23(v: BytesLike): Typed { return b(v, 23); } + static bytes24(v: BytesLike): Typed { return b(v, 24); } + static bytes25(v: BytesLike): Typed { return b(v, 25); } + static bytes26(v: BytesLike): Typed { return b(v, 26); } + static bytes27(v: BytesLike): Typed { return b(v, 27); } + static bytes28(v: BytesLike): Typed { return b(v, 28); } + static bytes29(v: BytesLike): Typed { return b(v, 29); } + static bytes30(v: BytesLike): Typed { return b(v, 30); } + static bytes31(v: BytesLike): Typed { return b(v, 31); } + static bytes32(v: BytesLike): Typed { return b(v, 32); } + + static address(v: string | Addressable): Typed { return new Typed(_gaurd, "address", v); } + static bool(v: any): Typed { return new Typed(_gaurd, "bool", !!v); } + static string(v: string): Typed { return new Typed(_gaurd, "string", v); } + + static array(v: Array, dynamic?: null | boolean): Typed { + throw new Error("not implemented yet"); + return new Typed(_gaurd, "array", v, dynamic); + } + + static tuple(v: Array | Record, name?: string): Typed { + throw new Error("not implemented yet"); + return new Typed(_gaurd, "tuple", v, name); + } + + static overrides(v: Record): Typed { + return new Typed(_gaurd, "overrides", Object.assign({ }, v)); + } + + static isTyped(value: any): value is Typed { + return (value && value._typedSymbol === _typedSymbol); + } + + static dereference(value: Typed | T, type: string): T { + if (Typed.isTyped(value)) { + if (value.type !== type) { + throw new Error(`invalid type: expecetd ${ type }, got ${ value.type }`); + } + return value.value; + } + return value; + } +} diff --git a/packages/abi/tsconfig.json b/packages/abi/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/abi/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/address/.npmignore b/packages/address/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/address/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/address/LICENSE.md b/packages/address/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/address/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/address/package.json b/packages/address/package.json new file mode 100644 index 000000000..e523c6769 --- /dev/null +++ b/packages/address/package.json @@ -0,0 +1,35 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/rlp": "^6.0.0-beta.1" + }, + "description": "Utilities for handling Ethereum Addresses for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/address", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/address", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/address/src.ts/_version.ts b/packages/address/src.ts/_version.ts new file mode 100644 index 000000000..9b3af753d --- /dev/null +++ b/packages/address/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/address@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/address/src.ts/address.ts b/packages/address/src.ts/address.ts new file mode 100644 index 000000000..550e11164 --- /dev/null +++ b/packages/address/src.ts/address.ts @@ -0,0 +1,128 @@ + +import { arrayify } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; + +import { logger } from "./logger.js"; + + +const BN_0 = BigInt(0); +const BN_36 = BigInt(36); + +function getChecksumAddress(address: string): string { +// if (!isHexString(address, 20)) { +// logger.throwArgumentError("invalid address", "address", address); +// } + + address = address.toLowerCase(); + + const chars = address.substring(2).split(""); + + const expanded = new Uint8Array(40); + for (let i = 0; i < 40; i++) { + expanded[i] = chars[i].charCodeAt(0); + } + + const hashed = arrayify(keccak256(expanded)); + + for (let i = 0; i < 40; i += 2) { + if ((hashed[i >> 1] >> 4) >= 8) { + chars[i] = chars[i].toUpperCase(); + } + if ((hashed[i >> 1] & 0x0f) >= 8) { + chars[i + 1] = chars[i + 1].toUpperCase(); + } + } + + return "0x" + chars.join(""); +} + +// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number + +// Create lookup table +const ibanLookup: { [character: string]: string } = { }; +for (let i = 0; i < 10; i++) { ibanLookup[String(i)] = String(i); } +for (let i = 0; i < 26; i++) { ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); } + +// How many decimal digits can we process? (for 64-bit float, this is 15) +// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER)); +const safeDigits = 15; + +function ibanChecksum(address: string): string { + address = address.toUpperCase(); + address = address.substring(4) + address.substring(0, 2) + "00"; + + let expanded = address.split("").map((c) => { return ibanLookup[c]; }).join(""); + + // Javascript can handle integers safely up to 15 (decimal) digits + while (expanded.length >= safeDigits){ + let block = expanded.substring(0, safeDigits); + expanded = parseInt(block, 10) % 97 + expanded.substring(block.length); + } + + let checksum = String(98 - (parseInt(expanded, 10) % 97)); + while (checksum.length < 2) { checksum = "0" + checksum; } + + return checksum; +}; + +const Base36 = (function() {; + const result: Record = { }; + for (let i = 0; i < 36; i++) { + const key = "0123456789abcdefghijklmnopqrstuvwxyz"[i]; + result[key] = BigInt(i); + } + return result; +})(); + +function fromBase36(value: string): bigint { + value = value.toLowerCase(); + + let result = BN_0; + for (let i = 0; i < value.length; i++) { + result = result * BN_36 + Base36[value[i]]; + } + return result; +} + +export function getAddress(address: string): string { + + if (typeof(address) !== "string") { + logger.throwArgumentError("invalid address", "address", address); + } + + if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) { + + // Missing the 0x prefix + if (address.substring(0, 2) !== "0x") { address = "0x" + address; } + + const result = getChecksumAddress(address); + + // It is a checksummed address with a bad checksum + if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) { + logger.throwArgumentError("bad address checksum", "address", address); + } + + return result; + } + + // Maybe ICAP? (we only support direct mode) + if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) { + // It is an ICAP address with a bad checksum + if (address.substring(2, 4) !== ibanChecksum(address)) { + logger.throwArgumentError("bad icap checksum", "address", address); + } + + let result = fromBase36(address.substring(4)).toString(16); + while (result.length < 40) { result = "0" + result; } + return getChecksumAddress("0x" + result); + } + + return logger.throwArgumentError("invalid address", "address", address); +} + +export function getIcapAddress(address: string): string { + //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase(); + let base36 = BigInt(getAddress(address)).toString(36).toUpperCase(); + while (base36.length < 30) { base36 = "0" + base36; } + return "XE" + ibanChecksum("XE00" + base36) + base36; +} diff --git a/packages/address/src.ts/checks.ts b/packages/address/src.ts/checks.ts new file mode 100644 index 000000000..1307cfadb --- /dev/null +++ b/packages/address/src.ts/checks.ts @@ -0,0 +1,50 @@ +import { getAddress } from "./address.js"; +import { logger } from "./logger.js"; + +import type { Addressable, NameResolver } from "./types.js"; + +export function isAddressable(value: any): value is Addressable { + return (value && typeof(value.getAddress) === "function"); +} + +export function isAddress(value: any): boolean { + try { + getAddress(value); + return true; + } catch (error) { } + return false; +} + +// Resolves an Ethereum address, ENS name or Addressable object, +// throwing if the result is null; an explicit null returns null +//export async function resolveAddress(target?: null, resolver?: null | NameResolver): Promise; +//export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver): Promise; +//export async function resolveAddress(target: null | undefined | string | Addressable, resolver?: null | NameResolver) { +export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver) { + //if (target == null) { return null; } + + if (typeof(target) === "string") { + if (target.match(/^0x[0-9a-f]{40}$/i)) { return getAddress(target); } + + if (resolver == null) { + return logger.throwError("ENS resolution requires a provider", "UNSUPPORTED_OPERATION", { + operation: "resolveName", + }); + } + + const result = await resolver.resolveName(target); + if (result == null || result === "0x0000000000000000000000000000000000000000") { + return logger.throwError("unconfigured name", "UNCONFIGURED_NAME", { value: target }); + } + return getAddress(result); + + } else if (isAddressable(target)) { + const result = await target.getAddress(); + if (result == null) { + logger.throwArgumentError("addressable resolved to null", "target", target); + } + return getAddress(result); + } + + return logger.throwArgumentError("unsupported addressable value", "target", target); +} diff --git a/packages/address/src.ts/contract-address.ts b/packages/address/src.ts/contract-address.ts new file mode 100644 index 000000000..5fc8c9ff6 --- /dev/null +++ b/packages/address/src.ts/contract-address.ts @@ -0,0 +1,47 @@ + +import { concat, dataSlice } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { encodeRlp } from "@ethersproject/rlp"; + +import { getAddress } from "./address.js"; + +import type { BigNumberish, BytesLike } from "@ethersproject/logger"; + + +import { logger } from "./logger.js"; + + +// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed +export function getCreateAddress(tx: { from: string, nonce: BigNumberish }): string { + const from = getAddress(tx.from); + const nonce = logger.getBigInt(tx.nonce, "tx.nonce"); + + let nonceHex = nonce.toString(16); + if (nonceHex === "0") { + nonceHex = "0x"; + } else if (nonceHex.length % 2) { + nonceHex = "0x0" + nonceHex; + } else { + nonceHex = "0x" + nonceHex; + } + + return getAddress(dataSlice(keccak256(encodeRlp([ from, nonceHex ])), 12)); +} + +export function getCreate2Address(_from: string, _salt: BytesLike, _initCodeHash: BytesLike): string { + const from = getAddress(_from); + const salt = logger.getBytes(_salt, "salt"); + const initCodeHash = logger.getBytes(_initCodeHash, "initCodeHash"); + + if (salt.length !== 32) { + logger.throwArgumentError("salt must be 32 bytes", "salt", _salt); + } + + if (initCodeHash.length !== 32) { + logger.throwArgumentError("initCodeHash must be 32 bytes", "initCodeHash", _initCodeHash); + } + + return getAddress(dataSlice(keccak256(concat([ "0xff", from, salt, initCodeHash ])), 12)) +} + + diff --git a/packages/address/src.ts/index.ts b/packages/address/src.ts/index.ts new file mode 100644 index 000000000..4f4f2a076 --- /dev/null +++ b/packages/address/src.ts/index.ts @@ -0,0 +1,6 @@ + +export { getAddress, getIcapAddress } from "./address.js"; +export { getCreateAddress, getCreate2Address } from "./contract-address.js"; +export { isAddressable, isAddress, resolveAddress } from "./checks.js"; + +export type { Addressable, NameResolver } from "./types.js" diff --git a/packages/address/src.ts/logger.ts b/packages/address/src.ts/logger.ts new file mode 100644 index 000000000..07ebf6932 --- /dev/null +++ b/packages/address/src.ts/logger.ts @@ -0,0 +1,6 @@ +import { Logger } from "@ethersproject/logger"; + +import { version } from "./_version.js"; + + +export const logger = new Logger(version); diff --git a/packages/address/src.ts/tests/test-address.ts b/packages/address/src.ts/tests/test-address.ts new file mode 100644 index 000000000..633f9aa8d --- /dev/null +++ b/packages/address/src.ts/tests/test-address.ts @@ -0,0 +1,132 @@ +import assert from "assert"; + +import { loadTests } from "./utils.js"; + +import type { + TestCaseAccount, + TestCaseCreate, + TestCaseCreate2 +} from "./types.js"; + +import { + getAddress, getIcapAddress, + getCreateAddress, getCreate2Address +} from "../index.js"; + + +describe("computes checksum address", function() { + const tests = loadTests("accounts"); + for (const test of tests) { + it(`computes the checksum address for ${ test.name }`, function() { + assert.equal(getAddress(test.address), test.address); + assert.equal(getAddress(test.icap), test.address); + assert.equal(getAddress(test.address.substring(2)), test.address); + assert.equal(getAddress(test.address.toLowerCase()), test.address); + assert.equal(getAddress("0x" + test.address.substring(2).toUpperCase()), test.address); + }); + } + + const invalidAddresses: Array<{ name: string, value: any }> = [ + { name: "null", value: null }, + { name: "number", value: 1234 }, + { name: "emtpy bytes", value: "0x" }, + { name: "too short", value: "0x8ba1f109551bd432803012645ac136ddd64dba" }, + { name: "too long", value: "0x8ba1f109551bd432803012645ac136ddd64dba7200" }, + ]; + + invalidAddresses.forEach(({ name, value }) => { + it(`fails on invalid address: ${ name }`, function() { + assert.throws(function() { + getAddress(value); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid address/) && + error.argument === "address" && + error.value === value); + }); + }); + }); + + it("fails on invalid checksum", function() { + const value = "0x8ba1f109551bD432803012645Ac136ddd64DBa72" + assert.throws(function() { + getAddress(value); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^bad address checksum/) && + error.argument === "address" && + error.value === value); + }); + }); + + it("fails on invalid IBAN checksum", function() { + const value = "XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK37"; + assert.throws(function() { + getAddress(value); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^bad icap checksum/) && + error.argument === "address" && + error.value === value); + }); + }); +}); + +describe("computes ICAP address", function() { + const tests = loadTests("accounts"); + for (const test of tests) { + it(`computes the ICAP address for ${ test.name }`, function() { + assert.equal(getIcapAddress(test.address), test.icap); + assert.equal(getAddress(test.address.toLowerCase()), test.address); + assert.equal(getAddress("0x" + test.address.substring(2).toUpperCase()), test.address); + }); + } +}); + +describe("computes create address", function() { + const tests = loadTests("create"); + for (const { sender, creates } of tests) { + for (const { name, nonce, address } of creates) { + it(`computes the create address for ${ name }`, function() { + assert.equal(getCreateAddress({ from: sender, nonce }), address); + }); + } + } +}); + +describe("computes create2 address", function() { + const tests = loadTests("create2"); + for (const { sender, creates } of tests) { + for (const { name, salt, initCodeHash, address } of creates) { + it(`computes the create2 address for ${ name }`, function() { + assert.equal(getCreate2Address(sender, salt, initCodeHash), address); + }); + } + } + + const sender = "0x8ba1f109551bD432803012645Ac136ddd64DBA72"; + const salt = "0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8"; + const initCodeHash = "0x8452c9b9140222b08593a26daa782707297be9f7b3e8281d7b4974769f19afd0"; + + it("fails on invalid salt", function() { + const badSalt = "0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36dea"; + assert.throws(function() { + getCreate2Address(sender, badSalt, initCodeHash); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.argument === "salt" && + error.value === badSalt); + }); + }); + + it("fails on invalid initCodeHash", function() { + const badInitCodeHash = "0x8452c9b9140222b08593a26daa782707297be9f7b3e8281d7b4974769f19af"; + assert.throws(function() { + getCreate2Address(sender, salt, badInitCodeHash); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.argument === "initCodeHash" && + error.value === badInitCodeHash); + }); + }); +}); diff --git a/packages/address/src.ts/tests/types.ts b/packages/address/src.ts/tests/types.ts new file mode 100644 index 000000000..893eb23e3 --- /dev/null +++ b/packages/address/src.ts/tests/types.ts @@ -0,0 +1,27 @@ + +export interface TestCaseAccount { + name: string; + privateKey: string; + address: string; + icap: string; +} + +export type TestCaseCreate = { + sender: string; + creates: Array<{ + name: string, + nonce: number, + address: string + }>; +}; + +export type TestCaseCreate2 = { + sender: string; + creates: Array<{ + name: string, + salt: string; + initCode: string + initCodeHash: string + address: string; + }>; +}; diff --git a/packages/address/src.ts/tests/utils.ts b/packages/address/src.ts/tests/utils.ts new file mode 100644 index 000000000..b40517e1b --- /dev/null +++ b/packages/address/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/address/src.ts/types.ts b/packages/address/src.ts/types.ts new file mode 100644 index 000000000..36496fb99 --- /dev/null +++ b/packages/address/src.ts/types.ts @@ -0,0 +1,8 @@ + +export interface Addressable { + getAddress(): Promise; +} + +export interface NameResolver { + resolveName(name: string): Promise; +} diff --git a/packages/address/tsconfig.json b/packages/address/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/address/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/bytes/.npmignore b/packages/bytes/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/bytes/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/bytes/LICENSE.md b/packages/bytes/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/bytes/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/bytes/package.json b/packages/bytes/package.json new file mode 100644 index 000000000..798967bba --- /dev/null +++ b/packages/bytes/package.json @@ -0,0 +1,32 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/logger": "^6.0.0-beta.1" + }, + "description": "Bytes utility functions for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/bytes", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/bytes", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/bytes/src.ts/_version.ts b/packages/bytes/src.ts/_version.ts new file mode 100644 index 000000000..f5e1a1e0b --- /dev/null +++ b/packages/bytes/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/bytes@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/bytes/src.ts/array.ts b/packages/bytes/src.ts/array.ts new file mode 100644 index 000000000..482090ada --- /dev/null +++ b/packages/bytes/src.ts/array.ts @@ -0,0 +1,80 @@ +import { isBytesLike } from "./check.js"; +import { logger } from "./logger.js"; + +import type { BytesLike, Hexable } from "./types.js"; + + +let BN_8: bigint | null = null; +let BN_255: bigint | null = null; +try { + BN_8 = BigInt("8"); + BN_255 = BigInt("255"); +} catch (error) { + console.log("Unsupported bigint", error); +} + +function isHexable(value: any): value is Hexable { + return (value && typeof(value.toHexString) === "function"); +} + +export function arrayify(data: BytesLike | Hexable | number | bigint): Uint8Array { + if (data == null) { + logger.throwArgumentError("cannot arrayify nullish", "data", data); + } + + if (typeof(data) === "number") { + logger.assertUint53(data); + + const result = []; + while (data) { + result.unshift(data & 0xff); + data = parseInt(String(data / 256)); + } + if (result.length === 0) { result.push(0); } + return new Uint8Array(result); + } + + if (BN_8 && typeof(data) === "bigint") { + const result = []; + while (data) { + result.unshift(Number(data & BN_255)); + data >>= BN_8; + } + if (result.length === 0) { result.push(0); } + + return new Uint8Array(result); + } + + if (isHexable(data)) { + return arrayify(data.toHexString()); + } + + if (typeof(data) === "string") { + let hex = data; + //if (options.allowMissingPrefix && hex.substring(0, 2) !== "0x") { + // hex = "0x" + hex; + //} + if (!hex.match(/^0x[0-9a-f]*$/i)) { + throw new RangeError(`invalid hex data string (${ JSON.stringify(data) })`); + } + + const result = []; + for (let i = 2; i < hex.length; i += 2) { + result.push(parseInt(hex.substring(i, i + 2), 16)); + } + + return new Uint8Array(result); + } + + if (data instanceof Uint8Array) { return new Uint8Array(data); } + + throw new TypeError(`cannot arrayify ${ JSON.stringify(data) }`); +} + +export function _noCopyArrayify(data: BytesLike | Hexable): Uint8Array { + if (!isBytesLike(data)) { + logger.throwArgumentError("invalid BytesLike value", "data", data); + } // @TODO: ArgumentE> + if (data instanceof Uint8Array) { return data; } + return arrayify(data); +} diff --git a/packages/bytes/src.ts/base64-browser.ts b/packages/bytes/src.ts/base64-browser.ts new file mode 100644 index 000000000..903c07a68 --- /dev/null +++ b/packages/bytes/src.ts/base64-browser.ts @@ -0,0 +1,28 @@ + +declare global { + function atob(ascii: string): string; + function btoa(binary: string): string; +} + + +import type { BytesLike } from "@ethersproject/logger"; + +import { logger } from "./logger.js"; + +export function decodeBase64(textData: string): Uint8Array { + textData = atob(textData); + const data = []; + for (let i = 0; i < textData.length; i++) { + data.push(textData.charCodeAt(i)); + } + return new Uint8Array(data); +} + +export function encodeBase64(_data: BytesLike): string { + const data = logger.getBytes(_data, "data"); + let textData = ""; + for (let i = 0; i < data.length; i++) { + textData += String.fromCharCode(data[i]); + } + return btoa(textData); +} diff --git a/packages/bytes/src.ts/base64.ts b/packages/bytes/src.ts/base64.ts new file mode 100644 index 000000000..d1a5183c1 --- /dev/null +++ b/packages/bytes/src.ts/base64.ts @@ -0,0 +1,13 @@ + +import type { BytesLike } from "@ethersproject/logger"; + +import { logger } from "./logger.js"; + + +export function decodeBase64(textData: string): Uint8Array { + return new Uint8Array(Buffer.from(textData, "base64")); +}; + +export function encodeBase64(data: BytesLike): string { + return Buffer.from(logger.getBytes(data, "data")).toString("base64"); +} diff --git a/packages/bytes/src.ts/check.ts b/packages/bytes/src.ts/check.ts new file mode 100644 index 000000000..7fb55effe --- /dev/null +++ b/packages/bytes/src.ts/check.ts @@ -0,0 +1,37 @@ +import type { BytesLike } from "./types.js"; + +export function isHexString(value: any, length?: number | boolean): value is string { + if (typeof(value) !== "string" || !value.match(/^0x[0-9A-Fa-f]*$/)) { + return false + } + + if (typeof(length) === "number" && value.length !== 2 + 2 * length) { return false; } + if (length === true && (value.length % 2) !== 0) { return false; } + + return true; +} + +/* +function _isByte(value: number): boolean { + return (typeof(value) === "number" && value >= 0 && value < 256 && Math.floor(value) === value); +} +export function isBytes(value: any): value is Bytes { + if (value == null) { return false; } + + if (value instanceof Uint8Array) { return true; } + if (typeof(value) === "string") { return false; } + + if (Array.isArray(value)) { + for (let i = 0; i < value.length; i++) { + if (!_isByte(value[i])) { return false; } + } + return true; + } + + return false; +} +*/ + +export function isBytesLike(value: any): value is BytesLike { + return (isHexString(value, true) || (value instanceof Uint8Array)); +} diff --git a/packages/bytes/src.ts/data.ts b/packages/bytes/src.ts/data.ts new file mode 100644 index 000000000..c8b4944e4 --- /dev/null +++ b/packages/bytes/src.ts/data.ts @@ -0,0 +1,30 @@ +import { _noCopyArrayify } from "./array.js"; +import { isHexString } from "./check.js"; +import { hexlify } from "./hex.js"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "./types.js"; + + +export function concat(datas: ReadonlyArray): string { + return "0x" + datas.map((d) => hexlify(d).substring(2)).join(""); +} + +export function dataLength(data: BytesLike): number { + if (isHexString(data, true)) { return (data.length - 2) / 2; } + return _noCopyArrayify(data).length; +} + +export function dataSlice(data: BytesLike, start?: number, end?: number): string { + const bytes = _noCopyArrayify(data); + if (end != null && end > bytes.length) { logger.throwError("cannot slice beyond data bounds", "BUFFER_OVERRUN", { + buffer: bytes, length: bytes.length, offset: end + }); } + return hexlify(bytes.slice((start == null) ? 0: start, (end == null) ? bytes.length: end)); +} + +export function stripZerosLeft(data: BytesLike): string { + let bytes = hexlify(data).substring(2); + while (bytes.substring(0, 2) == "00") { bytes = bytes.substring(2); } + return "0x" + bytes; +} diff --git a/packages/bytes/src.ts/hex.ts b/packages/bytes/src.ts/hex.ts new file mode 100644 index 000000000..ea10ee75c --- /dev/null +++ b/packages/bytes/src.ts/hex.ts @@ -0,0 +1,24 @@ + +import { arrayify, _noCopyArrayify } from "./array.js"; + +import type { BytesLike, Hexable } from "./types.js"; + + +const HexCharacters: string = "0123456789abcdef"; +export function hexlify(data: BytesLike | Hexable): string { + const bytes = _noCopyArrayify(data); + + let result = "0x"; + for (let i = 0; i < bytes.length; i++) { + const v = bytes[i]; + result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]; + } + return result; +} + +export function quantity(value: BytesLike | Hexable | number | bigint): string { + let result = hexlify(arrayify(value)).substring(2); + while (result.substring(0, 1) === "0") { result = result.substring(1); } + if (result === "") { result = "0"; } + return "0x" + result; +} diff --git a/packages/bytes/src.ts/index.ts b/packages/bytes/src.ts/index.ts new file mode 100644 index 000000000..143e5999b --- /dev/null +++ b/packages/bytes/src.ts/index.ts @@ -0,0 +1,9 @@ + +export { arrayify } from "./array.js"; +export { decodeBase64, encodeBase64 } from "./base64.js"; /*-browser.js*/ +export { isHexString, isBytesLike } from "./check.js"; +export { concat, dataLength, dataSlice, stripZerosLeft } from "./data.js"; +export { hexlify, quantity } from "./hex.js"; +export { zeroPadLeft, zeroPadRight } from "./pad.js"; + +export type { BytesLike, Hexable } from "./types.js"; diff --git a/packages/bytes/src.ts/logger.ts b/packages/bytes/src.ts/logger.ts new file mode 100644 index 000000000..a1bfc739b --- /dev/null +++ b/packages/bytes/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { version } from "./_version.js"; +import { Logger } from "@ethersproject/logger"; +export const logger = new Logger(version); diff --git a/packages/bytes/src.ts/pad.ts b/packages/bytes/src.ts/pad.ts new file mode 100644 index 000000000..3e2ee0859 --- /dev/null +++ b/packages/bytes/src.ts/pad.ts @@ -0,0 +1,36 @@ + +import { _noCopyArrayify } from "./array.js"; +import { hexlify } from "./hex.js"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "./types.js"; + + +function zeroPad(data: BytesLike, length: number, left: boolean): string { + const bytes = _noCopyArrayify(data); + if (length < bytes.length) { + logger.throwError("padding exceeds data length", "BUFFER_OVERRUN", { + buffer: new Uint8Array(bytes), + length: length, + offset: length + 1 + }); + } + + const result = new Uint8Array(length); + result.fill(0); + if (left) { + result.set(bytes, length - bytes.length); + } else { + result.set(bytes, 0); + } + + return hexlify(result); +} + +export function zeroPadLeft(data: BytesLike, length: number): string { + return zeroPad(data, length, true); +} + +export function zeroPadRight(data: BytesLike, length: number): string { + return zeroPad(data, length, false); +} diff --git a/packages/bytes/src.ts/types.ts b/packages/bytes/src.ts/types.ts new file mode 100644 index 000000000..4dff3994e --- /dev/null +++ b/packages/bytes/src.ts/types.ts @@ -0,0 +1,6 @@ + +export type BytesLike = Uint8Array | string; + +export interface Hexable { + toHexString(): string; +} diff --git a/packages/bytes/tsconfig.json b/packages/bytes/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/bytes/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/contract/.npmignore b/packages/contract/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/contract/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/contract/LICENSE.md b/packages/contract/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/contract/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/contract/package.json b/packages/contract/package.json new file mode 100644 index 000000000..0dcd7ef8f --- /dev/null +++ b/packages/contract/package.json @@ -0,0 +1,39 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/abi": "^6.0.0-beta.1", + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/providers": "^6.0.0-beta.1", + "@ethersproject/transactions": "^6.0.0-beta.1" + }, + "description": "Contract meta-class for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/contract", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/contract", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/contract/src.ts/_version.ts b/packages/contract/src.ts/_version.ts new file mode 100644 index 000000000..b22637a3e --- /dev/null +++ b/packages/contract/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/contract@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/contract/src.ts/contract.ts b/packages/contract/src.ts/contract.ts new file mode 100644 index 000000000..bb343e883 --- /dev/null +++ b/packages/contract/src.ts/contract.ts @@ -0,0 +1,724 @@ +import { resolveAddress } from "@ethersproject/address"; +import { Interface, Typed } from "@ethersproject/abi"; +import { isHexString } from "@ethersproject/bytes"; +import { isCallException } from "@ethersproject/logger"; +import { defineProperties, resolveProperties } from "@ethersproject/properties"; +import { copyRequest, Log, TransactionResponse } from "@ethersproject/providers"; + +import { + ContractEventPayload, + ContractTransactionResponse, + EventLog +} from "./wrappers.js"; +import { logger } from "./logger.js"; + +import type { EventFragment, FunctionFragment, InterfaceAbi, ParamType, Result } from "@ethersproject/abi"; +import type { Addressable } from "@ethersproject/address"; +import type { EventEmitterable, Listener } from "@ethersproject/properties"; +import type { + BlockTag, EventFilter, Filter, Provider, TransactionRequest, TopicFilter +} from "@ethersproject/providers"; + +import type { + ContractEventName, + ContractInterface, + ContractMethodArgs, + BaseContractMethod, + ContractMethod, + ContractEventArgs, + ContractEvent, + ContractTransaction, + DeferredTopicFilter, + ContractRunner +} from "./types.js"; + +interface ContractRunnerEstimater extends ContractRunner { + estimateGas: (tx: TransactionRequest) => Promise; +} + +interface ContractRunnerCaller extends ContractRunner { + call: (tx: TransactionRequest) => Promise; +} + +interface ContractRunnerSender extends ContractRunner { + sendTransaction: (tx: TransactionRequest) => Promise; +} + +interface ContractRunnerResolver extends ContractRunner { + resolveName: (name: string | Addressable) => Promise; +} + +interface ContractRunnerQuerier extends ContractRunner { + getLogs: (filter: Filter) => Promise>; +} + +interface ContractRunnerSubscriber extends ContractRunner { + on: (event: EventFilter, listener: Listener) => Promise; + off: (event: EventFilter, listener: Listener) => Promise; +} + +function canEstimate(value: any): value is ContractRunnerEstimater { + return (value && typeof(value.estimateGas) === "function"); +} + +function canCall(value: any): value is ContractRunnerCaller { + return (value && typeof(value.call) === "function"); +} + +function canSend(value: any): value is ContractRunnerSender { + return (value && typeof(value.sendTransaction) === "function"); +} + +function canResolve(value: any): value is ContractRunnerResolver { + return (value && typeof(value.resolveName) === "function"); +} + +function canQuery(value: any): value is ContractRunnerQuerier { + return (value && typeof(value.getLogs) === "function"); +} + +function canSubscribe(value: any): value is ContractRunnerSubscriber { + return (value && typeof(value.on) === "function" && typeof(value.off) === "function"); +} + +function concisify(items: Array): Array { + items = Array.from((new Set(items)).values()) + items.sort(); + return items; +} + +class PreparedTopicFilter implements DeferredTopicFilter { + #filter: Promise; + readonly fragment!: EventFragment; + + constructor(contract: BaseContract, fragment: EventFragment, args: Array) { + defineProperties(this, { fragment }); + if (fragment.inputs.length < args.length) { + throw new Error("too many arguments"); + } + + // Recursively descend into args and resolve any addresses + const runner = getRunner(contract.runner, "resolveName"); + const resolver = canResolve(runner) ? runner: null; + this.#filter = (async function() { + const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => { + return param.walkAsync(args[index], (type, value) => { + if (type === "address") { return resolveAddress(value, resolver); } + return value; + }); + })); + + return contract.interface.encodeFilterTopics(fragment, resolvedArgs); + })(); + } + + getTopicFilter(): Promise { + return this.#filter; + } +} + + +// A = Arguments passed in as a tuple +// R = The result type of the call (i.e. if only one return type, +// the qualified type, otherwise Result) +// D = The type the default call will return (i.e. R for view/pure, +// TransactionResponse otherwise) +//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> { + +function _WrappedMethodBase(): new () => Function & BaseContractMethod { + return Function as any; +} + +function getRunner(value: any, feature: keyof ContractRunner): null | T { + if (value == null) { return null; } + if (typeof(value[feature]) === "function") { return value; } + if (value.provider && typeof(value.provider[feature]) === "function") { + return value.provider; + } + return null; +} + +export async function copyOverrides(arg: any): Promise> { + + // Create a shallow copy (we'll deep-ify anything needed during normalizing) + const overrides = copyRequest(Typed.dereference(arg, "overrides")); + + // Some sanity checking; these are what these methods adds + //if ((overrides).to) { + if (overrides.to) { + logger.throwArgumentError("cannot override to", "overrides.to", overrides.to); + } else if (overrides.data) { + logger.throwArgumentError("cannot override data", "overrides.data", overrides.data); + } + + // Resolve any from + if (overrides.from) { + overrides.from = await resolveAddress(overrides.from); + } + + return overrides; +} + +export async function resolveArgs(_runner: null | ContractRunner, inputs: ReadonlyArray, args: Array): Promise> { + // Recursively descend into args and resolve any addresses + const runner = getRunner(_runner, "resolveName"); + const resolver = canResolve(runner) ? runner: null; + return await Promise.all(inputs.map((param, index) => { + return param.walkAsync(args[index], (type, value) => { + if (type === "address") { return resolveAddress(value, resolver); } + return value; + }); + })); +} + +class WrappedMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> + extends _WrappedMethodBase() implements BaseContractMethod { + + readonly name!: string; + readonly _contract!: BaseContract; + readonly _key!: string; + + constructor (contract: BaseContract, key: string) { + super(); + + defineProperties(this, { + name: contract.interface.getFunctionName(key), + _contract: contract, _key: key + }); + + const proxy = new Proxy(this, { + // Perform the default operation for this fragment type + apply: async (target, thisArg, args: ContractMethodArgs) => { + const fragment = target.getFragment(...args); + if (fragment.constant) { return await target.staticCall(...args); } + return await target.send(...args); + }, + }); + + return proxy; + } + + // Only works on non-ambiguous keys (refined fragment is always non-ambiguous) + get fragment(): FunctionFragment { + return this._contract.interface.getFunction(this._key); + } + + getFragment(...args: ContractMethodArgs): FunctionFragment { + return this._contract.interface.getFunction(this._key, args); + } + + async populateTransaction(...args: ContractMethodArgs): Promise { + const fragment = this.getFragment(...args); + + // If an overrides was passed in, copy it and normalize the values + let overrides: Omit = { }; + if (fragment.inputs.length + 1 === args.length) { + overrides = await copyOverrides(args.pop()); + } + + if (fragment.inputs.length !== args.length) { + throw new Error("internal error: fragment inputs doesn't match arguments; should not happen"); + } + + const resolvedArgs = await resolveArgs(this._contract.runner, fragment.inputs, args); + + return Object.assign({ }, overrides, await resolveProperties({ + to: this._contract.getAddress(), + data: this._contract.interface.encodeFunctionData(fragment, resolvedArgs) + })); + } + + async staticCall(...args: ContractMethodArgs): Promise { + const result = await this.staticCallResult(...args); + if (result.length === 1) { return result[0]; } + return result; + } + + async send(...args: ContractMethodArgs): Promise { + const runner = getRunner(this._contract.runner, "sendTransaction"); + if (!canSend(runner)) { + return logger.throwError("contract runner does not support sending transactions", "UNSUPPORTED_OPERATION", { + operation: "sendTransaction" + }); + } + const tx = await runner.sendTransaction(await this.populateTransaction(...args)); + const provider = getRunner(this._contract.runner, "getLogs"); + return new ContractTransactionResponse(this._contract.interface, provider, tx); + } + + async estimateGas(...args: ContractMethodArgs): Promise { + const runner = getRunner(this._contract.runner, "estimateGas"); + if (!canEstimate(runner)) { + return logger.throwError("contract runner does not support gas estimation", "UNSUPPORTED_OPERATION", { + operation: "estimateGas" + }); + } + return await runner.estimateGas(await this.populateTransaction(...args)); + } + + async staticCallResult(...args: ContractMethodArgs): Promise { + const runner = getRunner(this._contract.runner, "call"); + if (!canCall(runner)) { + return logger.throwError("contract runner does not support calling", "UNSUPPORTED_OPERATION", { + operation: "call" + }); + } + + const fragment = this.getFragment(...args); + const tx = await this.populateTransaction(...args); + + let result = "0x"; + try { + result = await runner.call(tx); + } catch (error: any) { + if (isCallException(error)) { + throw this._contract.interface.makeError(fragment, error.data, tx); + } + throw error; + } + + return this._contract.interface.decodeFunctionResult(fragment, result); + } +} + +function _WrappedEventBase(): new () => Function & ContractEvent { + return Function as any; +} + +class WrappedEvent = Array> extends _WrappedEventBase() implements ContractEvent { + readonly name!: string; + + readonly _contract!: BaseContract; + readonly _key!: string; + + constructor (contract: BaseContract, key: string) { + super(); + + defineProperties(this, { + name: contract.interface.getEventName(key), + _contract: contract, _key: key + }); + + return new Proxy(this, { + // Perform the default operation for this fragment type + apply: async (target, thisArg, args: ContractEventArgs) => { + return new PreparedTopicFilter(contract, target.getFragment(...args), args); + }, + }); + } + + // Only works on non-ambiguous keys + get fragment(): EventFragment { + return this._contract.interface.getEvent(this._key); + } + + getFragment(...args: ContractEventArgs): EventFragment { + return this._contract.interface.getEvent(this._key, args); + } +}; + +type Sub = { + tag: string; + listeners: Array<{ listener: Listener, once: boolean }>, + start: () => void; + stop: () => void; +}; + + +// The combination of TypeScrype, Private Fields and Proxies makes +// the world go boom; so we hide variables with some trickery keeping +// a symbol attached to each BaseContract which its sub-class (even +// via a Proxy) can reach and use to look up its internal values. + +const internal = Symbol.for("_ethersInternal_contract"); +type Internal = { + addrPromise: Promise; + addr: null | string; + + deployTx: null | ContractTransactionResponse; + + subs: Map; +}; + +const internalValues: WeakMap = new WeakMap(); + +function setInternal(contract: BaseContract, values: Internal): void { + internalValues.set(contract[internal], values); +} + +function getInternal(contract: BaseContract): Internal { + return internalValues.get(contract[internal]) as Internal; +} + +function isDeferred(value: any): value is DeferredTopicFilter { + return (value && typeof(value) === "object" && ("getTopicFilter" in value) && + (typeof(value.getTopicFilter) === "function") && value.fragment); +} + +async function getSubTag(contract: BaseContract, event: ContractEventName): Promise<{ tag: string, fragment: EventFragment, topics: TopicFilter }> { + let fragment: EventFragment; + let topics: Array>; + + if (Array.isArray(event)) { + // Topics; e.g. `[ "0x1234...89ab" ]` + fragment = contract.interface.getEvent(event[0] as string); + topics = event; + + } else if (typeof(event) === "string") { + // Event name (name or signature); `"Transfer"` + fragment = contract.interface.getEvent(event); + topics = [ contract.interface.getEventTopic(fragment) ]; + + } else if (isDeferred(event)) { + // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)` + fragment = event.fragment; + topics = await event.getTopicFilter(); + + } else if ("fragment" in event) { + // ContractEvent; e.g. `contract.filter.Transfer` + fragment = event.fragment; + topics = [ contract.interface.getEventTopic(fragment) ]; + + } else { + console.log(event); + throw new Error("TODO"); + } + + // Normalize topics and sort TopicSets + topics = topics.map((t) => { + if (t == null) { return null; } + if (Array.isArray(t)) { + return concisify(t.map((t) => t.toLowerCase())); + } + return t.toLowerCase(); + }); + + const tag = topics.map((t) => { + if (t == null) { return "null"; } + if (Array.isArray(t)) { return t.join("|"); } + return t; + }).join("&"); + + return { fragment, tag, topics } +} + +async function hasSub(contract: BaseContract, event: ContractEventName): Promise { + const { subs } = getInternal(contract); + return subs.get((await getSubTag(contract, event)).tag) || null; +} + +async function getSub(contract: BaseContract, event: ContractEventName): Promise { + // Make sure our runner can actually subscribe to events + const runner = getRunner(contract.runner, "on"); + const runnerOff = getRunner(contract.runner, "off"); + if (!runner || runner !== runnerOff || !canSubscribe(runner)) { + return logger.throwError("contract runner does not support subscribing", "UNSUPPORTED_OPERATION", { + operation: "on" + }); + } + + const { fragment, tag, topics } = await getSubTag(contract, event); + + const { addr, subs } = getInternal(contract); + + let sub = subs.get(tag); + if (!sub) { + const address: string | Addressable = (addr ? addr: contract); + const filter = { address, topics }; + const listener = (log: Log) => { + const payload = new ContractEventPayload(contract, null, event, fragment, log); + emit(contract, event, payload.args, payload); + }; + + let started = false; + const start = () => { + if (started) { return; } + (runner as ContractRunnerSubscriber).on(filter, listener); + started = true; + }; + const stop = () => { + if (!started) { return; } + (runner as ContractRunnerSubscriber).off(filter, listener); + started = false; + }; + sub = { tag, listeners: [ ], start, stop }; + subs.set(tag, sub); + } + return sub; +} + +async function _emit(contract: BaseContract, event: ContractEventName, args: Array, payload: null | ContractEventPayload): Promise { + await lastEmit; + + const sub = await hasSub(contract, event); + if (!sub) { return false; } + + const count = sub.listeners.length; + sub.listeners = sub.listeners.filter(({ listener, once }) => { + const passArgs = args.slice(); + if (payload) { + passArgs.push(new ContractEventPayload(contract, (once ? null: listener), + event, payload.fragment, payload.log)); + } + setTimeout(() => { listener.call(contract, ...passArgs); }, 0); + return !once; + }); + return (count > 0); +} + +// We use this to ensure one emit resolves before firing the next to +// ensure correct ordering (note this cannot throw and just adds the +// notice to the event queu using setTimeout). +let lastEmit: Promise = Promise.resolve(); +async function emit(contract: BaseContract, event: ContractEventName, args: Array, payload: null | ContractEventPayload): Promise { + try { + await lastEmit; + } catch (error) { } + + const resultPromise = _emit(contract, event, args, payload); + lastEmit = resultPromise; + return await resultPromise; +} + +const passProperties = [ "then" ]; +export class BaseContract implements Addressable, EventEmitterable { + readonly target!: string | Addressable; + readonly interface!: Interface; + readonly runner!: null | ContractRunner; + + readonly filters!: Record; + + readonly [internal]: any; + + constructor(target: string | Addressable, abi: Interface | InterfaceAbi, runner: null | ContractRunner = null, _deployTx?: null | TransactionResponse) { + const iface = Interface.from(abi); + defineProperties(this, { target, runner, interface: iface }); + + Object.defineProperty(this, internal, { value: { } }); + + let addrPromise; + let addr = null; + + let deployTx: null | ContractTransactionResponse = null; + if (_deployTx) { + const provider = getRunner(runner, "getLogs"); + deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx); + } + let subs = new Map(); + + // Resolve the target as the address + if (typeof(target) === "string") { + if (isHexString(target)) { + addr = target; + addrPromise = Promise.resolve(target); + + } else { + const resolver = getRunner(runner, "resolveName"); + if (!canResolve(resolver)) { + throw logger.makeError("contract runner does not support name resolution", "UNSUPPORTED_OPERATION", { + operation: "resolveName" + }); + } + + addrPromise = resolver.resolveName(target).then((addr) => { + if (addr == null) { throw new Error("TODO"); } + getInternal(this).addr = addr; + return addr; + }); + } + } else { + addrPromise = target.getAddress().then((addr) => { + if (addr == null) { throw new Error("TODO"); } + getInternal(this).addr = addr; + return addr; + }); + } + + // Set our private values + setInternal(this, { addrPromise, addr, deployTx, subs }); + + // Add the event filters + const filters = new Proxy({ }, { + get: (target, _prop, receiver) => { + // Pass important checks (like `then` for Promise) through + if (passProperties.indexOf(_prop) >= 0) { + return Reflect.get(target, _prop, receiver); + } + + const prop = String(_prop); + + const result = this.getEvent(prop); + if (result) { return result; } + + throw new Error(`unknown contract event: ${ prop }`); + } + }); + defineProperties(this, { filters }); + + // Return a Proxy that will respond to functions + return new Proxy(this, { + get: (target, _prop, receiver) => { + if (_prop in target || passProperties.indexOf(_prop) >= 0) { + return Reflect.get(target, _prop, receiver); + } + + const prop = String(_prop); + + const result = target.getFunction(prop); + if (result) { return result; } + + throw new Error(`unknown contract method: ${ prop }`); + } + }); + } + + async getAddress(): Promise { return await getInternal(this).addrPromise; } + + deploymentTransaction(): null | ContractTransactionResponse { + return getInternal(this).deployTx; + } + + getFunction(key: string | FunctionFragment): T { + if (typeof(key) !== "string") { key = key.format(); } + return (new WrappedMethod(this, key)); + } + + getEvent(key: string | EventFragment): ContractEvent { + if (typeof(key) !== "string") { key = key.format(); } + return (new WrappedEvent(this, key)); + } + + async queryFilter(event: ContractEventName, fromBlock: BlockTag = 0, toBlock: BlockTag = "latest"): Promise> { + const { addr, addrPromise } = getInternal(this); + const address = (addr ? addr: (await addrPromise)); + const { fragment, topics } = await getSubTag(this, event); + const filter = { address, topics, fromBlock, toBlock }; + const runner = getRunner(this.runner, "getLogs"); + + if (!canQuery(runner)) { + return logger.throwError("contract runner does not support querying", "UNSUPPORTED_OPERATION", { + operation: "getLogs" + }); + } + + return (await runner.getLogs(filter)).map((log) => { + return new EventLog(log, this.interface, fragment); + }); + } + + + + async on(event: ContractEventName, listener: Listener): Promise { + const sub = await getSub(this, event); + sub.listeners.push({ listener, once: false }); + sub.start(); + return this; + } + + async once(event: ContractEventName, listener: Listener): Promise { + const sub = await getSub(this, event); + sub.listeners.push({ listener, once: true }); + sub.start(); + return this; + } + + async emit(event: ContractEventName, ...args: Array): Promise { + return await emit(this, event, args, null); + } + + async listenerCount(event?: ContractEventName): Promise { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { return 0; } + return sub.listeners.length; + } + + const { subs } = getInternal(this); + + let total = 0; + for (const { listeners } of subs.values()) { + total += listeners.length; + } + return total; + } + + async listeners(event?: ContractEventName): Promise> { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { return [ ]; } + return sub.listeners.map(({ listener }) => listener); + } + + const { subs } = getInternal(this); + + let result: Array = [ ]; + for (const { listeners } of subs.values()) { + result = result.concat(listeners.map(({ listener }) => listener)); + } + return result; + } + + async off(event: ContractEventName, listener?: Listener): Promise { + const sub = await hasSub(this, event); + if (!sub) { return this; } + + if (listener) { + const index = sub.listeners.map(({ listener }) => listener).indexOf(listener); + if (index >= 0) { sub.listeners.splice(index, 1); } + } + + if (listener == null || sub.listeners.length === 0) { + sub.stop(); + getInternal(this).subs.delete(sub.tag); + } + + return this; + } + + async removeAllListeners(event?: ContractEventName): Promise { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { return this; } + sub.stop(); + getInternal(this).subs.delete(sub.tag); + } else { + const { subs } = getInternal(this); + for (const { tag, stop } of subs.values()) { + stop(); + subs.delete(tag); + } + } + + return this; + } + + // Alias for "on" + async addListener(event: ContractEventName, listener: Listener): Promise { + return await this.on(event, listener); + } + + // Alias for "off" + async removeListener(event: ContractEventName, listener: Listener): Promise { + return await this.off(event, listener); + } + + static buildClass(abi: InterfaceAbi): new (target: string, runner?: null | ContractRunner) => BaseContract & Omit { + class CustomContract extends BaseContract { + constructor(address: string, runner: null | ContractRunner = null) { + super(address, abi, runner); + } + } + return CustomContract as any; + }; + + static from(target: string, abi: InterfaceAbi, runner: null | ContractRunner = null): BaseContract & Omit { + const contract = new this(target, abi, runner); + return contract as any; + } +} + +function _ContractBase(): new (target: string, abi: InterfaceAbi, runner?: null | ContractRunner) => BaseContract & Omit { + return BaseContract as any; +} + +export class Contract extends _ContractBase() { } diff --git a/packages/contract/src.ts/factory.ts b/packages/contract/src.ts/factory.ts new file mode 100644 index 000000000..b35488703 --- /dev/null +++ b/packages/contract/src.ts/factory.ts @@ -0,0 +1,98 @@ + +import { Interface } from "@ethersproject/abi"; +import { getCreateAddress } from "@ethersproject/address"; +import { concat, hexlify } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; + +import { BaseContract, copyOverrides, resolveArgs } from "./contract.js"; +import { logger } from "./logger.js"; + +import type { InterfaceAbi } from "@ethersproject/abi"; +import type { BytesLike } from "@ethersproject/logger"; + +import type { + ContractInterface, ContractMethodArgs, ContractRunner, ContractDeployTransaction, +} from "./types.js"; +import type { ContractTransactionResponse } from "./wrappers.js"; + + +// A = Arguments to the constructor +// I = Interface of deployed contracts +export class ContractFactory = Array, I = BaseContract> { + readonly interface!: Interface; + readonly bytecode!: string; + readonly runner!: null | ContractRunner; + + constructor(abi: Interface | InterfaceAbi, bytecode: BytesLike | { object: string }, runner?: ContractRunner) { + const iface = Interface.from(abi); + + // Dereference Solidity bytecode objects and allow a missing `0x`-prefix + if (bytecode instanceof Uint8Array) { + bytecode = hexlify(logger.getBytes(bytecode)); + } else { + if (typeof(bytecode) === "object") { bytecode = bytecode.object; } + if (bytecode.substring(0, 2) !== "0x") { bytecode = "0x" + bytecode; } + bytecode = hexlify(logger.getBytes(bytecode)); + } + + defineProperties(this, { + bytecode, interface: iface, runner: (runner || null) + }); + } + + async getDeployTransaction(...args: ContractMethodArgs): Promise { + let overrides: Omit = { }; + + const fragment = this.interface.deploy; + + if (fragment.inputs.length + 1 === args.length) { + overrides = await copyOverrides(args.pop()); + } + + if (fragment.inputs.length !== args.length) { + throw new Error("incorrect number of arguments to constructor"); + } + + const resolvedArgs = await resolveArgs(this.runner, fragment.inputs, args); + + const data = concat([ this.bytecode, this.interface.encodeDeploy(resolvedArgs) ]); + return Object.assign({ }, overrides, { data }); + } + + async deploy(...args: ContractMethodArgs): Promise> { + const tx = await this.getDeployTransaction(...args); + + if (!this.runner || typeof(this.runner.sendTransaction) !== "function") { + return logger.throwError("factory runner does not support sending transactions", "UNSUPPORTED_OPERATION", { + operation: "sendTransaction" + }); + } + + const sentTx = await this.runner.sendTransaction(tx); + const address = getCreateAddress(sentTx); + return new (BaseContract)(address, this.interface, this.runner, sentTx); + } + + connect(runner: ContractRunner): ContractFactory { + return new ContractFactory(this.interface, this.bytecode, runner); + } + + static fromSolidity = Array, I = ContractInterface>(output: any, runner?: ContractRunner): ContractFactory { + if (output == null) { + logger.throwArgumentError("bad compiler output", "output", output); + } + + if (typeof(output) === "string") { output = JSON.parse(output); } + + const abi = output.abi; + + let bytecode = ""; + if (output.bytecode) { + bytecode = output.bytecode; + } else if (output.evm && output.evm.bytecode) { + bytecode = output.evm.bytecode; + } + + return new this(abi, bytecode, runner); + } +} diff --git a/packages/contract/src.ts/index.ts b/packages/contract/src.ts/index.ts new file mode 100644 index 000000000..9292f51a9 --- /dev/null +++ b/packages/contract/src.ts/index.ts @@ -0,0 +1,19 @@ + +export { + BaseContract, Contract +} from "./contract.js"; + +export { + ContractFactory +} from "./factory.js"; + +export { + ContractEventPayload, ContractTransactionReceipt, ContractTransactionResponse, + EventLog +} from "./wrappers.js"; + +export type { + ConstantContractMethod, ContractEvent, ContractEventArgs, ContractEventName, + ContractInterface, ContractMethod, ContractMethodArgs, ContractRunner, + ContractTransaction, DeferredTopicFilter, Overrides +} from "./types.js"; diff --git a/packages/contract/src.ts/logger.ts b/packages/contract/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/contract/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/contract/src.ts/tests/test-contract.ts b/packages/contract/src.ts/tests/test-contract.ts new file mode 100644 index 000000000..cb3d5f6ee --- /dev/null +++ b/packages/contract/src.ts/tests/test-contract.ts @@ -0,0 +1,94 @@ +import { Typed } from "@ethersproject/abi"; +import * as providers from "@ethersproject/providers"; + +import { Contract } from "../index.js"; + +//import type { Addressable } from "@ethersproject/address"; +//import type { BigNumberish } from "@ethersproject/logger"; + +/* +import type { + ConstantContractMethod, ContractMethod, ContractEvent +} from "../index.js"; +*/ + +// @TODO +describe("Test Contract Calls", function() { + it("finds typed methods", async function() { + const contract = new Contract("0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72", [ + "function foo(string s) view returns (uint)", + "function foo(uint8) view returns (uint)", + "function foo(uint u, bool b) view returns (uint)", + ]); + const value = Typed.string("42"); + await contract.foo.populateTransaction(value, Typed.overrides({ value: 100 })) + contract["foo(string)"].fragment + }); +}); + +/* +describe("Test Contract Interface", function() { + it("builds contract interfaces", async function() { + this.timeout(60000); + + interface Erc20Interface { + // Constant Methods + balanceOf: ConstantContractMethod<[ address: string | Addressable ], bigint>; + decimals: ConstantContractMethod<[ ], bigint>; + + name: ConstantContractMethod<[ ], string>; + symbol: ConstantContractMethod<[ ], string>; + + // Mutation Methods + transferFrom: ContractMethod<[ address: string | Addressable, + address: string | Addressable, amount: BigNumberish ], boolean>; + + // Events + filters: { + Transfer: ContractEvent<[ from: Addressable | string, to: BigNumberish ]>; + } + } + + const erc20Abi = [ + "function balanceOf(address owner) view returns (uint)", + "function decimals() view returns (uint)", + "function name() view returns (string)", + "function symbol() view returns (string)", + + "function transferFrom(address from, address to, uint amount) returns (boolean)", + + "event Transfer(address indexed from, address indexed to, uint amount)" + ]; + + class Erc20Contract extends BaseContract.buildClass(erc20Abi) { }; + + const provider = new providers.InfuraProvider(); + // ENS + //const addr = "0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72"; + // DAI + const addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; + const contract = new Erc20Contract(addr, provider); + console.log("SYMBOL", await contract.symbol()); + console.log("DECIMALS", await contract.decimals()); + console.log(await contract.balanceOf("0x5555763613a12D8F3e73be831DFf8598089d3dCa")); + console.log(await contract.balanceOf("ricmoo.eth")); + + await contract.on(contract.filters.Transfer, (from, to, value, event) => { + console.log("HELLO!", { from, to, value, event }); + event.removeListener(); + }); + const logs = await contract.queryFilter("Transfer", -10); + console.log(logs, logs[0], logs[0].args.from); + }); +}); +*/ + +describe("Test Contract Calls", function() { + it("calls ERC-20 methods", async function() { + const provider = new providers.AnkrProvider(); + const contract = new Contract("0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72", [ + "function balanceOf(address owner) view returns (uint)", + ], provider); + console.log("balance:", await contract.balanceOf("0x5555763613a12D8F3e73be831DFf8598089d3dCa")); + }); +}); diff --git a/packages/contract/src.ts/tests/types.ts b/packages/contract/src.ts/tests/types.ts new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/packages/contract/src.ts/tests/types.ts @@ -0,0 +1 @@ + diff --git a/packages/contract/src.ts/tests/utils.ts b/packages/contract/src.ts/tests/utils.ts new file mode 100644 index 000000000..b40517e1b --- /dev/null +++ b/packages/contract/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/contract/src.ts/types.ts b/packages/contract/src.ts/types.ts new file mode 100644 index 000000000..4f1ae16cb --- /dev/null +++ b/packages/contract/src.ts/types.ts @@ -0,0 +1,111 @@ +import type { + EventFragment, FunctionFragment, Result, Typed +} from "@ethersproject/abi"; +import type { Addressable } from "@ethersproject/address"; +import type { + CallRequest, EventFilter, Filter, Log, PreparedRequest, Provider, + TopicFilter, TransactionRequest, TransactionResponse +} from "@ethersproject/providers"; +import type { Listener } from "@ethersproject/properties"; + +import type { ContractTransactionResponse } from "./wrappers.js"; + + +// The types of events a Contract can listen for +export type ContractEventName = string | ContractEvent | TopicFilter; + +// The object that will be used to run Contracts. The Signer and Provider +// both adhere to this, but other types of objects may wish to as well. +export interface ContractRunner { + provider?: Provider; + + // Required to estimate gas + estimateGas?: (tx: TransactionRequest) => Promise; + + // Required for pure, view or static calls to contracts + call?: (tx: TransactionRequest) => Promise; + + // Required to support ENS names + resolveName?: (name: string | Addressable) => Promise; + + // Required for mutating calls + sendTransaction?: (tx: TransactionRequest) => Promise; + + // Required for queryFilter + getLogs?: (filter: Filter) => Promise>; + + // Both are required for a contract to support events + on?: (event: EventFilter, listener: Listener) => Promise; + off?: (event: EventFilter, listener: Listener) => Promise; +} + +export interface ContractInterface { + [ name: string ]: BaseContractMethod; +}; + +export interface DeferredTopicFilter { + getTopicFilter(): Promise; + fragment: EventFragment; +} + +export interface ContractTransaction extends PreparedRequest { + // These are populated by contract methods and cannot bu null + to: string; + data: string; +} + +// Deployment Transactions have no `to` +export interface ContractDeployTransaction extends Omit { } + +// Overrides; cannot override `to` or `data` as Contract populates these +export interface Overrides extends Omit { }; + + +// Arguments for methods; with an optional (n+1)th Override +export type PostfixOverrides> = A | [ ...A, Overrides ]; +export type ContractMethodArgs> = PostfixOverrides<{ [ I in keyof A ]-?: A[I] | Typed }>; + +// A = Arguments passed in as a tuple +// R = The result type of the call (i.e. if only one return type, +// the qualified type, otherwise Result) +// D = The type the default call will return (i.e. R for view/pure, +// TransactionResponse otherwise) +export interface BaseContractMethod = Array, R = any, D extends R | ContractTransactionResponse = R | ContractTransactionResponse> { + (...args: ContractMethodArgs): Promise; + + name: string; + + fragment: FunctionFragment; + + getFragment(...args: ContractMethodArgs): FunctionFragment; + + populateTransaction(...args: ContractMethodArgs): Promise; + staticCall(...args: ContractMethodArgs): Promise; + send(...args: ContractMethodArgs): Promise; + estimateGas(...args: ContractMethodArgs): Promise; + staticCallResult(...args: ContractMethodArgs): Promise; +} + +export interface ContractMethod< + A extends Array = Array, + R = any, + D extends R | ContractTransactionResponse = R | ContractTransactionResponse +> extends BaseContractMethod { } + +export interface ConstantContractMethod< + A extends Array, + R = any +> extends ContractMethod { } + + +// Arguments for events; with each element optional and/or nullable +export type ContractEventArgs> = { [ I in keyof A ]?: A[I] | Typed | null }; + +export interface ContractEvent = Array> { + (...args: ContractEventArgs): DeferredTopicFilter; + + name: string; + + fragment: EventFragment; + getFragment(...args: ContractEventArgs): EventFragment; +}; diff --git a/packages/contract/src.ts/wrappers.ts b/packages/contract/src.ts/wrappers.ts new file mode 100644 index 000000000..a57eddd5e --- /dev/null +++ b/packages/contract/src.ts/wrappers.ts @@ -0,0 +1,99 @@ +import { defineProperties, EventPayload } from "@ethersproject/properties"; +import { + Block, Log, TransactionReceipt, TransactionResponse +} from "@ethersproject/providers"; + +import type { EventFragment, Interface, Result } from "@ethersproject/abi"; +import type { Listener } from "@ethersproject/properties"; +import type { + Provider +} from "@ethersproject/providers"; + +import type { BaseContract } from "./contract.js"; +import type { ContractEventName } from "./types.js"; + + +export class EventLog extends Log { + readonly interface!: Interface; + readonly fragment!: EventFragment; + readonly args!: Result; + + constructor(log: Log, iface: Interface, fragment: EventFragment) { + super(log, log.provider); + const args = iface.decodeEventLog(fragment, log.data, log.topics); + defineProperties(this, { args, fragment, interface: iface }); + } + + get eventName(): string { return this.fragment.name; } + get eventSignature(): string { return this.fragment.format(); } +} + +export class ContractTransactionReceipt extends TransactionReceipt { + readonly #interface: Interface; + + constructor(iface: Interface, provider: null | Provider, tx: TransactionReceipt) { + super(tx, provider); + this.#interface = iface; + } + + get logs(): Array { + return super.logs.map((log) => { + const fragment = log.topics.length ? this.#interface.getEvent(log.topics[0]): null; + if (fragment) { + return new EventLog(log, this.#interface, fragment) + } else { + return log; + } + }); + } + +} + +export class ContractTransactionResponse extends TransactionResponse { + readonly #interface: Interface; + + constructor(iface: Interface, provider: null | Provider, tx: TransactionResponse) { + super(tx, provider); + this.#interface = iface; + } + + async wait(confirms?: number): Promise { + const receipt = await super.wait(); + if (receipt == null) { return null; } + return new ContractTransactionReceipt(this.#interface, this.provider, receipt); + } +} + +export class ContractEventPayload extends EventPayload { + + readonly fragment!: EventFragment; + readonly log!: EventLog; + readonly args!: Result; + + constructor(contract: BaseContract, listener: null | Listener, filter: ContractEventName, fragment: EventFragment, _log: Log) { + super(contract, listener, filter); + const log = new EventLog(_log, contract.interface, fragment); + const args = contract.interface.decodeEventLog(fragment, log.data, log.topics); + defineProperties(this, { args, fragment, log }); + } + + get eventName(): string { + return this.fragment.name; + } + + get eventSignature(): string { + return this.fragment.format(); + } + + async getBlock(): Promise> { + return await this.log.getBlock(); + } + + async getTransaction(): Promise { + return await this.log.getTransaction(); + } + + async getTransactionReceipt(): Promise { + return await this.log.getTransactionReceipt(); + } +} diff --git a/packages/contract/tsconfig.json b/packages/contract/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/contract/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/crypto/.npmignore b/packages/crypto/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/crypto/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/crypto/LICENSE.md b/packages/crypto/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/crypto/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/crypto/package.json b/packages/crypto/package.json new file mode 100644 index 000000000..d19c97675 --- /dev/null +++ b/packages/crypto/package.json @@ -0,0 +1,34 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@noble/hashes": "1.0.0" + }, + "description": "Basic crypto algorithms used for Ethereum.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/crypto", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/crypto", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/crypto/src.ts/_version.ts b/packages/crypto/src.ts/_version.ts new file mode 100644 index 000000000..b5dd13baa --- /dev/null +++ b/packages/crypto/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/crypto@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/crypto/src.ts/crypto-browser.ts b/packages/crypto/src.ts/crypto-browser.ts new file mode 100644 index 000000000..b6ea875e6 --- /dev/null +++ b/packages/crypto/src.ts/crypto-browser.ts @@ -0,0 +1,70 @@ +/* Browser Crypto Shims */ + +declare global { + interface Window { } + const window: Window; + const self: Window; +} + +import { hmac } from "@noble/hashes/hmac"; +import { pbkdf2 } from "@noble/hashes/pbkdf2"; +import { sha256 } from "@noble/hashes/sha256"; +import { sha512 } from "@noble/hashes/sha512"; + +import { logger } from "./logger.js"; + +function getGlobal(): any { + if (typeof self !== 'undefined') { return self; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + throw new Error('unable to locate global object'); +}; + +const anyGlobal = getGlobal(); +let crypto: any = anyGlobal.crypto || anyGlobal.msCrypto; + + +export interface CryptoHasher { + update(data: Uint8Array): CryptoHasher; + digest(): Uint8Array; +} + +export function createHash(algo: string): CryptoHasher { + switch (algo) { + case "sha256": return sha256.create(); + case "sha512": return sha512.create(); + } + return logger.throwArgumentError("invalid hashing algorithm name", "algorithm", algo); +} + +export function createHmac(_algo: string, key: Uint8Array): CryptoHasher { + const algo = ({ sha256, sha512 }[_algo]); + if (algo == null) { + return logger.throwArgumentError("invalid hmac algorithm", "algorithm", _algo); + } + return hmac.create(algo, key); +} + +export function pbkdf2Sync(password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, _algo: "sha256" | "sha512"): Uint8Array { + const algo = ({ sha256, sha512 }[_algo]); + if (algo == null) { + return logger.throwArgumentError("invalid pbkdf2 algorithm", "algorithm", _algo); + } + return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen }); +} + +export function randomBytes(length: number): Uint8Array { + if (crypto == null) { + return logger.throwError("platform does not support secure random numbers", "UNSUPPORTED_OPERATION", { + operation: "randomBytes" + }); + } + + if (length <= 0 || length > 1024 || (length % 1) || length != length) { + logger.throwArgumentError("invalid length", "length", length); + } + + const result = new Uint8Array(length); + crypto.getRandomValues(result); + return result; +} diff --git a/packages/crypto/src.ts/hmac.ts b/packages/crypto/src.ts/hmac.ts new file mode 100644 index 000000000..edba792ec --- /dev/null +++ b/packages/crypto/src.ts/hmac.ts @@ -0,0 +1,29 @@ +import { createHmac } from "crypto"; /*-browser*/ + +import { hexlify } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + + +let locked = false; + +const _computeHmac = function(algorithm: "sha256" | "sha512", key: Uint8Array, data: Uint8Array): BytesLike { + return "0x" + createHmac(algorithm, key).update(data).digest("hex"); +} + +let __computeHmac = _computeHmac; + +export function computeHmac(algorithm: "sha256" | "sha512", _key: BytesLike, _data: BytesLike): string { + const key = logger.getBytes(_key, "key"); + const data = logger.getBytes(_data, "data"); + return hexlify(__computeHmac(algorithm, key, data)); +} +computeHmac._ = _computeHmac; +computeHmac.lock = function() { locked = true; } +computeHmac.register = function(func: (algorithm: "sha256" | "sha512", key: Uint8Array, data: Uint8Array) => BytesLike) { + if (locked) { throw new Error("computeHmac is locked"); } + __computeHmac = func; +} +Object.freeze(computeHmac); diff --git a/packages/crypto/src.ts/index.ts b/packages/crypto/src.ts/index.ts new file mode 100644 index 000000000..44d048c78 --- /dev/null +++ b/packages/crypto/src.ts/index.ts @@ -0,0 +1,37 @@ +// We import all these so we can export lock() +import { computeHmac } from "./hmac.js"; +import { keccak256 } from "./keccak.js"; +import { ripemd160 } from "./ripemd160.js"; +import { pbkdf2 } from "./pbkdf2.js"; +import { randomBytes } from "./random.js"; +import { scrypt, scryptSync } from "./scrypt.js"; +import { sha256, sha512 } from "./sha2.js"; + +export { + computeHmac, + + randomBytes, + + keccak256, + ripemd160, + sha256, sha512, + + pbkdf2, + scrypt, scryptSync +}; + + +export function lock(): void { + computeHmac.lock(); + keccak256.lock(); + pbkdf2.lock(); + randomBytes.lock(); + ripemd160.lock(); + scrypt.lock(); + scryptSync.lock(); + sha256.lock(); + sha512.lock(); +} + + +export type { ProgressCallback } from "./scrypt.js"; diff --git a/packages/crypto/src.ts/keccak.ts b/packages/crypto/src.ts/keccak.ts new file mode 100644 index 000000000..a72ec1fa8 --- /dev/null +++ b/packages/crypto/src.ts/keccak.ts @@ -0,0 +1,26 @@ +import { keccak_256 } from "@noble/hashes/sha3"; + +import { hexlify } from "@ethersproject/bytes"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + +let locked = false; + +const _keccak256 = function(data: Uint8Array): Uint8Array { + return keccak_256(data); +} + +let __keccak256: (data: Uint8Array) => BytesLike = _keccak256; + +export function keccak256(_data: BytesLike): string { + const data = logger.getBytes(_data, "data"); + return hexlify(__keccak256(data)); +} +keccak256._ = _keccak256; +keccak256.lock = function(): void { locked = true; } +keccak256.register = function(func: (data: Uint8Array) => BytesLike) { + if (locked) { throw new TypeError("keccak256 is locked"); } + __keccak256 = func; +} +Object.freeze(keccak256); diff --git a/packages/crypto/src.ts/logger.ts b/packages/crypto/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/crypto/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/crypto/src.ts/pbkdf2.ts b/packages/crypto/src.ts/pbkdf2.ts new file mode 100644 index 000000000..80171da1f --- /dev/null +++ b/packages/crypto/src.ts/pbkdf2.ts @@ -0,0 +1,28 @@ +import { pbkdf2Sync } from "crypto"; /*-browser*/ + +import { hexlify } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + +let locked = false; + +const _pbkdf2 = function(password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, algo: "sha256" | "sha512"): BytesLike { + return pbkdf2Sync(password, salt, iterations, keylen, algo); +} + +let __pbkdf2 = _pbkdf2; + +export function pbkdf2(_password: BytesLike, _salt: BytesLike, iterations: number, keylen: number, algo: "sha256" | "sha512"): string { + const password = logger.getBytes(_password, "password"); + const salt = logger.getBytes(_salt, "salt"); + return hexlify(__pbkdf2(password, salt, iterations, keylen, algo)); +} +pbkdf2._ = _pbkdf2; +pbkdf2.lock = function(): void { locked = true; } +pbkdf2.register = function(func: (password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, algo: "sha256" | "sha512") => BytesLike) { + if (locked) { throw new Error("pbkdf2 is locked"); } + __pbkdf2 = func; +} +Object.freeze(pbkdf2); diff --git a/packages/crypto/src.ts/random.ts b/packages/crypto/src.ts/random.ts new file mode 100644 index 000000000..e85e5504d --- /dev/null +++ b/packages/crypto/src.ts/random.ts @@ -0,0 +1,22 @@ + +import { randomBytes as crypto_random } from "crypto"; /*-browser*/ + +let locked = false; + +const _randomBytes = function(length: number): Uint8Array { + return new Uint8Array(crypto_random(length)); +} + +let __randomBytes = _randomBytes; + +export function randomBytes(length: number): Uint8Array { + return __randomBytes(length); +} + +randomBytes._ = _randomBytes; +randomBytes.lock = function(): void { locked = true; } +randomBytes.register = function(func: (length: number) => Uint8Array) { + if (locked) { throw new Error("random is locked"); } + __randomBytes = func; +} +Object.freeze(randomBytes); diff --git a/packages/crypto/src.ts/ripemd160.ts b/packages/crypto/src.ts/ripemd160.ts new file mode 100644 index 000000000..095311b7d --- /dev/null +++ b/packages/crypto/src.ts/ripemd160.ts @@ -0,0 +1,26 @@ +import { ripemd160 as noble_ripemd160 } from "@noble/hashes/ripemd160"; + +import { hexlify } from "@ethersproject/bytes"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + +let locked = false; + +const _ripemd160 = function(data: Uint8Array): Uint8Array { + return noble_ripemd160(data); +} + +let __ripemd160: (data: Uint8Array) => BytesLike = _ripemd160; + +export function ripemd160(_data: BytesLike): string { + const data = logger.getBytes(_data, "data"); + return hexlify(__ripemd160(data)); +} +ripemd160._ = _ripemd160; +ripemd160.lock = function(): void { locked = true; } +ripemd160.register = function(func: (data: Uint8Array) => BytesLike) { + if (locked) { throw new TypeError("ripemd160 is locked"); } + __ripemd160 = func; +} +Object.freeze(ripemd160); diff --git a/packages/crypto/src.ts/scrypt.ts b/packages/crypto/src.ts/scrypt.ts new file mode 100644 index 000000000..1a69506cf --- /dev/null +++ b/packages/crypto/src.ts/scrypt.ts @@ -0,0 +1,49 @@ +import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from "@noble/hashes/scrypt"; + +import { hexlify as H} from "@ethersproject/bytes"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + + +export type ProgressCallback = (percent: number) => void; + + +let lockedSync = false, lockedAsync = false; + +const _scryptAsync = async function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) { + return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress }); +} +const _scryptSync = function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) { + return _nobleSync(passwd, salt, { N, r, p, dkLen }); +} + +let __scryptAsync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) => Promise = _scryptAsync; +let __scryptSync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike = _scryptSync + + +export async function scrypt(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback): Promise { + const passwd = logger.getBytes(_passwd, "passwd"); + const salt = logger.getBytes(_salt, "salt"); + return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress)); +} +scrypt._ = _scryptAsync; +scrypt.lock = function(): void { lockedAsync = true; } +scrypt.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback) => Promise) { + if (lockedAsync) { throw new Error("scrypt is locked"); } + __scryptAsync = func; +} +Object.freeze(scrypt); + +export function scryptSync(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number): string { + const passwd = logger.getBytes(_passwd, "passwd"); + const salt = logger.getBytes(_salt, "salt"); + return H(__scryptSync(passwd, salt, N, r, p, dkLen)); +} +scryptSync._ = _scryptSync; +scryptSync.lock = function(): void { lockedSync = true; } +scryptSync.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike) { + if (lockedSync) { throw new Error("scryptSync is locked"); } + __scryptSync = func; +} +Object.freeze(scryptSync); diff --git a/packages/crypto/src.ts/sha2.ts b/packages/crypto/src.ts/sha2.ts new file mode 100644 index 000000000..2eaf26828 --- /dev/null +++ b/packages/crypto/src.ts/sha2.ts @@ -0,0 +1,46 @@ +import { createHash } from "crypto"; /*-browser*/ + +import { hexlify } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + + +const _sha256 = function(data: Uint8Array): Uint8Array { + return createHash("sha256").update(data).digest(); +} + +const _sha512 = function(data: Uint8Array): Uint8Array { + return createHash("sha512").update(data).digest(); +} + +let __sha256: (data: Uint8Array) => BytesLike = _sha256; +let __sha512: (data: Uint8Array) => BytesLike = _sha512; + +let locked256 = false, locked512 = false; + + +export function sha256(_data: BytesLike): string { + const data = logger.getBytes(_data, "data"); + return hexlify(__sha256(data)); +} +sha256._ = _sha256; +sha256.lock = function(): void { locked256 = true; } +sha256.register = function(func: (data: Uint8Array) => BytesLike): void { + if (locked256) { throw new Error("sha256 is locked"); } + __sha256 = func; +} +Object.freeze(sha256); + +export function sha512(_data: BytesLike): string { + const data = logger.getBytes(_data, "data"); + return hexlify(__sha512(data)); +} +sha512._ = _sha512; +sha512.lock = function(): void { locked512 = true; } +sha512.register = function(func: (data: Uint8Array) => BytesLike): void { + if (locked512) { throw new Error("sha512 is locked"); } + __sha512 = func; +} +Object.freeze(sha256); diff --git a/packages/crypto/src.ts/tests/test-algo-swap.ts b/packages/crypto/src.ts/tests/test-algo-swap.ts new file mode 100644 index 000000000..4045f1f5d --- /dev/null +++ b/packages/crypto/src.ts/tests/test-algo-swap.ts @@ -0,0 +1,116 @@ +import assert from "assert"; + +import { + lock, + + computeHmac, + + keccak256, ripemd160, sha256, sha512, + + pbkdf2, scrypt, scryptSync +} from "../index.js"; + +interface Algorithm { + (...args: Array): string | Promise; + + register: (func: any) => void; + lock: () => void; + _: (...args: Array) => any; +} + +interface TestCase { + name: string; + params: Array; + algorithm: Algorithm; + hijackTag: string; +} + + +describe("test registration", function() { + + let hijack = ""; + function getHijack(algo: string) { + return function(...args: Array) { + hijack = `hijacked ${ algo }: ${ JSON.stringify(args) }`; + return "0x42"; + } + } + + const tests: Array = [ + { + name: "keccak256", + params: [ "0x" ], + hijackTag: 'hijacked keccak256: [{}]', + algorithm: keccak256 + }, + { + name: "sha256", + params: [ "0x" ], + hijackTag: 'hijacked sha256: [{}]', + algorithm: sha256 + }, + { + name: "sha512", + params: [ "0x" ], + hijackTag: 'hijacked sha512: [{}]', + algorithm: sha512 + }, + { + name: "ripemd160", + params: [ "0x" ], + hijackTag: 'hijacked ripemd160: [{}]', + algorithm: ripemd160 + }, + { + name: "pbkdf2", + params: [ "0x", "0x", 1024, 32, "sha256" ], + hijackTag: 'hijacked pbkdf2: [{},{},1024,32,"sha256"]', + algorithm: pbkdf2 + }, + { + name: "scryptSync", + params: [ "0x", "0x", 1024, 8, 1, 32 ], + hijackTag: 'hijacked scryptSync: [{},{},1024,8,1,32]', + algorithm: scryptSync + }, + { + name: "scrypt", + params: [ "0x", "0x", 1024, 8, 1, 32 ], + hijackTag: 'hijacked scrypt: [{},{},1024,8,1,32,null]', + algorithm: scrypt + }, + { + name: "computeHmac", + params: [ "sha256", "0x", "0x" ], + hijackTag: 'hijacked computeHmac: ["sha256",{},{}]', + algorithm: computeHmac + }, + ]; + + tests.forEach(({ name, params, hijackTag, algorithm }) => { + it(`swaps in hijacked callback: ${ name }`, async function() { + const initial = await algorithm(...params); + + algorithm.register(getHijack(name)); + + assert.equal(await algorithm(...params), "0x42"); + assert.equal(hijack, hijackTag); + + algorithm.register(algorithm._); + assert.equal(await algorithm(...params), initial); + }); + }); + + it("prevents swapping after locked", function() { + lock(); + + tests.forEach(({ name, params, hijackTag, algorithm }) => { + assert.throws(function() { + algorithm.register(getHijack("test")); + }, function(error) { + return (error.message === `${ name } is locked`); + }); + }); + }); + +}); diff --git a/packages/crypto/src.ts/tests/test-crypto.ts b/packages/crypto/src.ts/tests/test-crypto.ts new file mode 100644 index 000000000..b8b1b17aa --- /dev/null +++ b/packages/crypto/src.ts/tests/test-crypto.ts @@ -0,0 +1,238 @@ +import assert from "assert"; + +import { loadTests } from "./utils.js"; + +import type { TestCaseHash, TestCaseHmac, TestCasePbkdf } from "./types.js"; + +import { + computeHmac, + keccak256, ripemd160, sha256, sha512, + pbkdf2, scrypt, scryptSync +} from "../index.js"; + + +describe("test hashing", function() { + const tests = loadTests("hashes"); + + tests.forEach((test) => { + it(`computes sha2-256: ${ test.name }`, function() { + assert.equal(sha256(test.data), test.sha256); + }); + }); + + tests.forEach((test) => { + it(`computes sha2-512: ${ test.name }`, function() { + assert.equal(sha512(test.data), test.sha512); + }); + }); + + tests.forEach((test) => { + it(`computes ripemd160: ${ test.name }`, function() { + assert.equal(ripemd160(test.data), test.ripemd160); + }); + }); + + tests.forEach((test) => { + it(`computes keccak256: ${ test.name }`, function() { + assert.equal(keccak256(test.data), test.keccak256); + }); + }); +}); + +describe("test password-based key derivation", function() { + const tests = loadTests("pbkdf"); + + tests.forEach((test) => { + it(`computes pbkdf2: ${ test.name}`, function() { + const password = Buffer.from(test.password.substring(2), "hex"); + const salt = Buffer.from(test.salt.substring(2), "hex"); + const { iterations, algorithm, key } = test.pbkdf2; + const result = pbkdf2(password, salt, iterations, test.dkLen, algorithm); + assert.equal(result, key); + }); + }); + + tests.forEach((test) => { + it(`computes scrypt (sync): ${ test.name}`, function() { + this.timeout(1000); + + const password = Buffer.from(test.password.substring(2), "hex"); + const salt = Buffer.from(test.salt.substring(2), "hex"); + const { N, r, p, key } = test.scrypt; + const result = scryptSync(password, salt, N, r, p, test.dkLen); + assert.equal(result, key); + }); + }); + + tests.forEach((test) => { + it(`computes scrypt (async): ${ test.name}`, async function() { + this.timeout(1000); + + const password = Buffer.from(test.password.substring(2), "hex"); + const salt = Buffer.from(test.salt.substring(2), "hex"); + const { N, r, p, key } = test.scrypt; + + let progressCount = 0, progressOk = true, lastProgress = -1; + + const result = await scrypt(password, salt, N, r, p, test.dkLen, (progress) => { + if (progress < lastProgress) { progressOk = false; } + lastProgress = progress; + progressCount++; + }); + + assert.ok(progressOk, "progress was not monotonically increasing"); + assert.ok(progressCount > 100, "progress callback was called at leat 100 times"); + assert.equal(result, key); + }); + }); + +}); + +describe("test hmac", function() { + const tests = loadTests("hmac"); + + tests.forEach((test) => { + it(`computes hmac: ${ test.name}`, async function() { + const { algorithm, key, data } = test; + assert.equal(computeHmac(algorithm, key, data), test.hmac); + }); + }); +}); + +/* +describe("test registration", function() { + let hijack = ""; + function getHijack(algo: string) { + return function(...args: Array) { + hijack = `hijacked ${ algo }: ${ JSON.stringify(args) }`; + return "0x42"; + } + } + + it("hijacks keccak256", function() { + const initial = keccak256("0x"); + + keccak256.register(getHijack("kecak256")); + assert.equal(keccak256("0x"), "0x42"); + assert.equal(hijack, 'hijacked kecak256: [{}]'); + + keccak256.register(keccak256._); + assert.equal(keccak256("0x"), initial); + + keccak256.lock(); + + assert.throws(function() { + keccak256.register(getHijack("test")); + }, function(error) { + return (error.message === "keccak256 is locked"); + }); + }); + + it("hijacks sha256", function() { + const initial = sha256("0x"); + + sha256.register(getHijack("sha256")); + assert.equal(sha256("0x"), "0x42"); + assert.equal(hijack, 'hijacked sha256: [{}]'); + + sha256.register(sha256._); + assert.equal(sha256("0x"), initial); + + sha256.lock(); + + assert.throws(function() { + sha256.register(getHijack("test")); + }, function(error) { + return (error.message === "sha256 is locked"); + }); + }); + + it("hijacks sha512", function() { + const initial = sha512("0x"); + + sha512.register(getHijack("sha512")); + assert.equal(sha512("0x"), "0x42"); + assert.equal(hijack, 'hijacked sha512: [{}]'); + + sha512.register(sha512._); + assert.equal(sha512("0x"), initial); + + sha512.lock(); + + assert.throws(function() { + sha512.register(getHijack("test")); + }, function(error) { + return (error.message === "sha512 is locked"); + }); + }); + + it("hijacks pbkdf2", function() { + const initial = pbkdf2("0x", "0x", 1024, 32, "sha256"); + + pbkdf2.register(getHijack("pbkdf2")); + assert.equal(pbkdf2("0x", "0x", 1024, 32, "sha256"), "0x42"); + assert.equal(hijack, 'hijacked pbkdf2: [{},{},1024,32,"sha256"]'); + + pbkdf2.register(pbkdf2._); + assert.equal(pbkdf2("0x", "0x", 1024, 32, "sha256"), initial); + + pbkdf2.lock(); + + assert.throws(function() { + pbkdf2.register(getHijack("test")); + }, function(error) { + return (error.message === "pbkdf2 is locked"); + }); + }); + + it("hijacks scryptSync", function() { + + function getHijack(...args: Array) { + hijack = `hijacked scryptSync: ${ JSON.stringify(args) }`; + return new Uint8Array([ 0x42 ]); + } + + const initial = scryptSync("0x", "0x", 1024, 8, 1, 32); + + scryptSync.register(getHijack); + assert.equal(scryptSync("0x", "0x", 1024, 8, 1, 32), "0x42"); + assert.equal(hijack, 'hijacked scryptSync: [{},{},1024,8,1,32]'); + + scryptSync.register(scryptSync._); + assert.equal(scryptSync("0x", "0x", 1024, 8, 1, 32), initial); + + scryptSync.lock(); + + assert.throws(function() { + scryptSync.register(getHijack); + }, function(error) { + return (error.message === "scryptSync is locked"); + }); + }); + + it("hijacks scrypt", async function() { + function getHijack(...args: Array) { + hijack = `hijacked scrypt: ${ JSON.stringify(args) }`; + return Promise.resolve(new Uint8Array([ 0x42 ])); + } + + const initial = await scrypt("0x", "0x", 1024, 8, 1, 32); + + scrypt.register(getHijack); + assert.equal(await scrypt("0x", "0x", 1024, 8, 1, 32), "0x42"); + assert.equal(hijack, 'hijacked scrypt: [{},{},1024,8,1,32,null]'); + + scrypt.register(scrypt._); + assert.equal(await scrypt("0x", "0x", 1024, 8, 1, 32), initial); + + scrypt.lock(); + + assert.throws(function() { + scrypt.register(getHijack); + }, function(error) { + return (error.message === "scrypt is locked"); + }); + }); + +}); +*/ diff --git a/packages/crypto/src.ts/tests/types.ts b/packages/crypto/src.ts/tests/types.ts new file mode 100644 index 000000000..1ae8b1256 --- /dev/null +++ b/packages/crypto/src.ts/tests/types.ts @@ -0,0 +1,36 @@ + +export interface TestCaseHash { + name: string; + data: string; + sha256: string; + sha512: string; + ripemd160: string; + keccak256: string; +} + +export interface TestCasePbkdf { + name: string; + password: string; + salt: string; + dkLen: number; + pbkdf2: { + iterations: number; + algorithm: "sha256" | "sha512"; + key: string; + }, + scrypt: { + N: number; + r: number; + p: number; + key: string; + } +} + +export interface TestCaseHmac { + name: string; + data: string; + key: string; + algorithm: "sha256" | "sha512"; + hmac: string; +} + diff --git a/packages/crypto/src.ts/tests/utils.ts b/packages/crypto/src.ts/tests/utils.ts new file mode 100644 index 000000000..0b1da525d --- /dev/null +++ b/packages/crypto/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + ".json.gz"); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/crypto/tsconfig.json b/packages/crypto/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/crypto/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/ethers/.npmignore b/packages/ethers/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/ethers/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/ethers/LICENSE.md b/packages/ethers/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/ethers/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/ethers/dist/.gitignore b/packages/ethers/dist/.gitignore new file mode 100644 index 000000000..de7d15690 --- /dev/null +++ b/packages/ethers/dist/.gitignore @@ -0,0 +1 @@ +**.gz diff --git a/packages/ethers/dist/ethers-wordlists.min.js b/packages/ethers/dist/ethers-wordlists.min.js new file mode 100644 index 000000000..564591018 --- /dev/null +++ b/packages/ethers/dist/ethers-wordlists.min.js @@ -0,0 +1 @@ +import{id as o}from"@ethersproject/hash";import{Logger as a}from"@ethersproject/logger";import{defineProperties as r}from"@ethersproject/properties";import{hexlify as e}from"@ethersproject/bytes";import{toUtf8String as n,toUtf8Bytes as i}from"@ethersproject/strings";const T=" !#$%&'()*+,-./<=>?@[]^_`{|}~",L=/^[a-z]*$/i;function J(o,a){let r=97;return o.reduce(((o,e)=>(e===a?r++:e.match(L)?o.push(String.fromCharCode(r)+e):(r=97,o.push(e)),o)),[])}function A(o){if("0"!==o[0])throw TypeError("unsupported auwl data");return function(o,a){for(let r=T.length-1;r>=0;r--)o=o.split(T[r]).join(a.substring(2*r,2*r+2));const r=[],e=o.replace(/(:|([0-9])|([A-Z][a-z]*))/g,((o,a,e,n)=>{if(e)for(let o=parseInt(e);o>=0;o--)r.push(";");else r.push(a.toLowerCase());return""}));if(e)throw new Error(`leftovers: ${JSON.stringify(e)}`);return J(J(r,";"),":")}(o.substring(1+2*T.length),o.substring(1,1+2*T.length))}const l=new a("@ethersproject/wordlists@6.0.0-beta.1");class R{constructor(o){r(this,{locale:o})}split(o){return o.toLowerCase().split(/ +/g)}join(o){return o.join(" ")}}var g,t,S,u,M,F=window&&window.__classPrivateFieldSet||function(o,a,r,e,n){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof a?o!==a||!n:!a.has(o))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===e?n.call(o,r):n?n.value=r:a.set(o,r),r},s=window&&window.__classPrivateFieldGet||function(o,a,r,e){if("a"===r&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof a?o!==a||!e:!a.has(o))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?e:"a"===r?e.call(o):e?e.value:a.get(o)};class N extends R{constructor(o,a,r){super(o),g.add(this),t.set(this,void 0),S.set(this,void 0),u.set(this,void 0),F(this,t,a,"f"),F(this,S,r,"f"),F(this,u,null,"f")}get _data(){return s(this,t,"f")}_decodeWords(){return A(s(this,t,"f"))}getWord(o){const a=s(this,g,"m",M).call(this);return(o<0||o>=a.length)&&l.throwArgumentError(`invalid word index: ${o}`,"index",o),a[o]}getWordIndex(o){return s(this,g,"m",M).call(this).indexOf(o)}}t=new WeakMap,S=new WeakMap,u=new WeakMap,g=new WeakSet,M=function(){if(null==s(this,u,"f")){const a=this._decodeWords();if(o(a.join("\n")+"\n")!==s(this,S,"f"))throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);F(this,u,a,"f")}return s(this,u,"f")};const X=new class extends N{constructor(){super("cz","0itatkastcenaovo$taouleraeki&chor*teci%enbalodaeladet'!Chn=0Di#%E%^1Resa2Rese3CeT'#0EjKohol0Pu)%0A&sDul#Ekdo)Ke)Ti#Ul|3}aOgan%0FaltI$@tPi,%TmaTronom0LasL{i#Ol0Tobus4Yl:B#}R'?TaUb_U/!U^U+Ur!Xer2A^v#Ambo,An#AtrEp)Ike)KoLohOnzOskevUn{#Usin#Z^Zy2Bl.Bn|})D _D#D'aF{Jar(Kv?LdokLvaN^NkrRzaTikVolZola3D+tL.T'#0Ukot:PartRev&3DrDu+J/JnLaLerLkemLn?N.Nn(N'#NtrumNzZ(2O&2KolivUv!4It_N(0Dn(Ke)KrPot0Ak~AlIkRkot2Kli$a:L-oRe[T_Tum1E,1B!a}'#Cib_Fic Fla%KlKr{Mokr!PreseRbyS#T-tiv3Kob,zKt|O^P]mSkSp+jV`]Vo/2AhaOuhoUhopis1Es0BroByt-C@t}ut DnesH+dHo^H,JemJn?Kl`KolaKtAzeDolObn(OgerieOzdSn(T Z(2B@}'noD-HaH'#S SnoT(0Oj?Or>2Nam :9O]gOnomie0EktronIpsa0AilIseO%P!ie2Izo^O/aOpejOs2EjEn%K<)Kymo0Ike)0FR&S]Zky3StOhOup(T!Ub.U/o)0AtO)Yz0IsOjivoOut0Bl.Boj}DinyDl!Dno)D|Jn(KejLin#L#LubMo+N [No,%RalR^RizontRkoRliv>RmonRn.RoskopR$voSpo^St.T'(U[UfUp!Us#V<2Ad[An?Av(Az^Bo+kD.D]D(N-Ob#Oma^OtOu^Oz@St#Ub(Yz!2B@(B~D[KotMrS aSto)0Ozd2Bn(D,ntGie&M&Sterik:2Yl#3Ned2O&0Uze0Un a0F-%Fla%KasoOva%Sp-%Tern{Vali^Ve$N)rRmarkRoSanSnoT#VD+Dn!_HlanKotL@L oMn(NomP?S{erV Zd>Zero3NakNdyNo/Sk,Sto)Trn?Zva3En|1Gurt5R):Bar{B_Bin{}&D{Did]HanJakJu)KaoKtusLam aLhotyLibrLn(Me,MkolivM&Ni[lNoeNtB#BlihaBylaC*rH=J@>KosKtejlLapsLe^LizeLoMandoMe)MikMn!aMo,MpasMun aN!N%ptNd?N>NfeseNgresN.NkursN)ktNzervaPan>PieP~Pr'#Rb_R-tSt#T_T+)T*lUk!Up_&Us-Uz]VbojZaZMe+cMivoOcanOkOni#Op OupaOv#T-Uh`]Up?Ut(Vin#Y/+Yp)Y$alYt2Dlan#FrJn(KlaLaj^Li/L#Lom{Ltu,NaPodivuRtRzV`]:B,d<})nDn(IkKom>M_aMpaN'#S?SoStu,Tin#V.3B#CkdyD@Dn?D'#Dv.G@^GieG,%H%Hk(H~KtvarNo/odNtil#P@#Pid]T`]T>TmoTokruhVhartV a%Vobok3B,}ot#DojedDsk(H'.Jav>L-M{#NieN#No+umStop`T.T|5Bi$aDivodGi#GopedKal aK{Mc|P!aPu/RdSosTrU^lUhU#Usk!V>3Tiv(1Cer&CiferMpSkSt,%0I%2RaRi#S.:DamD]Gi$rHagonJ{-J _J< aKakK'?Kr_aL[L.L|Lv?Min#Nd+NkoRn(SakrSkotSopu$T?Tri#Tur aZan>ZivoZl Zur#2Lo[0}anikD a%D'.LasaL*nNtol#TlaTo^TrZe,3G,%H~Hu+K.KrofonL@>Lim{rL(Mi#Nc'&Ni[rNom{Nul(S#StrX|2Ad(HaH'.OkS!Uv 1I/Ohem0BilCn(D_#Dl [HylaKroL-ulaM@t#Nar/aNoklN$rumNt|NzunSazSkytStTiva%T<#Ty#U/aUdr(Zai#Z-Zol2AmKevTvolaZ{Zut(0T _1DrcF]nL!MieN?S{Ta%ZeumZi#nt3Sliv>0Da:B*r!}yt!Da%Dbyt-DhozDobroDpisHlasHn!Hodi+H,d Iv aJedn*Ji$oJm=K]n Kon>Krm LevoMaz!Mluv Nom{rOkoOpakO$roP`!PevnoPln P~Pos+dPr(oRod RubyRy/]S` S-!S+poSt!TolikV@-Vr/VzdR&Ru[RysSahSluhaS)r!UvVazVin VodVyk+Yv!_Z<0AsElEn Hl` Ho)H,&It~0BojByt}odCiz Ebr!Esl!Evzd!EzvaH`%Hod J{JinudKazK*p LivLu#Ml#Oln(P`PisPl=PLivoLu[Mf+tMls-N@#Ni#N&N|N$voNtof+Pri#Rke)RodieR)Ru#Ry[Se#Siv aSt_#T@tTro&V*kZnehtZ*r-3C#DagogJs-K]LotonNal)Ndr-NzeRiskopRoStr(Tar^T?Tro+jVn.Xeso3Ani$aHaJav?K+KnikL.Ln(Lul#Nze)Pe)S!_Sto+Tev&Vn?V'ar2A%n)Ak!Am@Ane)A$i#At Avid]AzE/Em@oEn)EsEtivoEv_Iv!N NoO/aOd.Om[OutUkYn2Bav Byt}odC Ctiv>D!D%n Deps!Dh+dDiv Dkl`Dman DnikDo[Dpo,D,zD$!aDvodDzimEzieHan#Hnut#H'S*d SpoluS)vaSud-SypTahT#nT+skTom-T,vaTupaTvo,U#zUtoUzdroVahaVidlaVlakVozVr/V$!VykVzde/Zd,vZem-Zn!-ZAp<-AseAv^IncipKnoObud O%ntoOdejOfeseOh,Oj-tO]m Omi+Onik!Op`OrokOs[OtonOut-OvazS#v#St@Udk(UtV-VohOvodTruh0Actvo0Ber)}DlKav>Kl.Kr+LtMpaNcP@SaSin#St.T|Ty#3Rami^SkT_::C-}otDia%Dn?DonFtGbyKe)K'.M@oMp*/NdeRa/R aS'&StrTo+$Zan%Zid]3Ag|Ak%CeptDaktMizd!Mo)N #Rdin#San#T_ Z[Z@?0Or0H|1B,n#CeseD`]Dim@tD]Hn!Jm=Ke,K)Kun^KvojeM@oNoRvisS` Sho,SkokSl!St,SuvSyp!T[T.Tk!T~Trv!VerZ&m2O^R~0FonLn?R#Rot-RupTua%1AfandrAliskoAnz@AutEptikIcaL`[L@?LoLuzO[O#nOroRip)RzUp.V(Vr&0Abi#Adid]An.A$Avn(Ed|Ep>EvaEz.IbI&Izn?OnOup-OvoU/UhaUn%Up#Za0A,gdE)&Il$voL*vaOgR`RkRt#Ut-Ysl0AdAhaOb0Bo)}aD'#KolP#TvaUbojUc Ud%UhlasUl`Um,kUp,vaUsedUtokUvis{0Al'&As _IsLavOd-Oj@>OluOnzOvn!P@StUb1An?Ar(aAti#Av[EhnoEz#OdolaO+kOpaOrnoOup!Ra/ResRh~RomRu&Ud&Upn?VolYk0Bj-tBtropy}arD(KnoNd!N=Rik!aR'.0AhAl$voEtrAt[Az-Is+It-Obo^Odid]Or#Rab2Kav#KotN-N'>P!Pk(R'(S_T(:B+t#Bu+H*nJemnoJfunJgaJ Jn(Kti#Mh+MponNc|N>NkerPe)V@.Z!_3}ni#HdyKut.LefonMno)Nd@%Ni$aNU/l Uhl?UsV!2DyH~H(Nd,Ri$aR&jZemsko0ArohOr[Rd(Rz2GrKev:0Oh(OzeR!R*s-RusYt'&0HoTiv(0Iv 3R` 1Edn!I$ M=0Az!_Lidn Lon Otv Roj 0I%I)Ov 0Yv`]0Av IfR*s 1Al Oln Oz'#3D,v ElEn.L.N!:GonL/aL*nNaN^lNil#RanRhanyR|1ElkuHod0Ova0DroGe)%J%Lbl*dL{rhL _LmocLry[Nk'Ran^RzeS_#SkrzeSn?SpoduS)Ter.Ver#3B,%}rDeoh,D.D+LaN?S{Tal aZeZ #0Ezd0L`Us0Aj#AkAs>EvoHk(IvN'#Oup!1Uc|Uk0DaDiv(Doz&kD$voJ@skyJ&JskoLantL[L LnoSk'#Zid]Z'&0Ravo1Ab>A%tAhA)Ba}o+kH!StvaTu+0Ad T*p Tup0Ip4Bav Br!}|D!D,Fot H+d!H~Hod H,d Hub Jasn J{Jm=K]p Kon!L-!Maz!Mez Miz{Mys+tNe/!Nik!Nut P`!Pl! P,v Pu$ Raz R'n!Rv!Sl' SokoS)v Su~Syp!Tas Tes!Tr! Vi~Vol!Vrh_Zdob Zn!0AduBud }op DJ{Ji$ K+p!K*p Lep Mez Mot!Mys+tNe/!Nik!Pl! Poj Ps!Raz S)v Su~Taj Temn Tk~Ujm=Val Ve+tVin Vol!Vrt!Zvon 0Av RusuUd|Yt-1A+#ArmaAtn(IvoOb RojVihYm`]0L@.ManM.Pt!Z`uZdola2At Lt~Lubo#Ot' Ru[0MaMn?0Emn 0Lam!Oum!R!#Umav#0AtoEh#O[OmO$Ozvyk0Ap|ArAt-IjeIz{Ocn Odr!Rzl.Ut|0AkAl(Am@!Ovu0B,z Tav Ub-Ufa+0Lod Omal RavaR( Rud#Rvu1A^An C`]N (NoOv&Y/l Zav(1I/aR! 0B'.Br0Ed~EnkuEs_aOnR!Uk'odYk","0x25f44555f4af25b51a711136e1c7d6e50ce9f8917d39d6b1f076b2bb4d2fac1a")}};var b,c=window&&window.__classPrivateFieldSet||function(o,a,r,e,n){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof a?o!==a||!n:!a.has(o))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===e?n.call(o,r):n?n.value=r:a.set(o,r),r},B=window&&window.__classPrivateFieldGet||function(o,a,r,e){if("a"===r&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof a?o!==a||!e:!a.has(o))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?e:"a"===r?e.call(o):e?e.value:a.get(o)};class v extends N{constructor(o,a,r,e){super(o,a,e),b.set(this,void 0),c(this,b,r,"f")}get _accent(){return B(this,b,"f")}_decodeWords(){return function(o,a){let r=A(o).join(",");return a.split(/,/g).forEach((o=>{const a=o.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);if(!a)throw new Error("internal error parsing accents");let e=0;const n=function(o,a){const r=(1<=o;){const a=n>>i-o;n&=(1<(0==--n[e]&&(a=String.fromCharCode(a.charCodeAt(0),i),e++),a)))})),r.split(",")}(this._data,this._accent)}}b=new WeakMap;const E=new class extends v{constructor(){super("es","0arertoiotadonoaRteirroenaNonaLsolocoiliaralaorrenadaChoN$n0A>Dom,EjaI!#Oga&O'Or#RazoR*Ue=U<0Ab Adem@CeLe%OmoRa!RozUn0DazD$GeLaM,#S,)T^0AlAnceA+EEl]`E`EstruzI.I<2ErU{U'0Af[nArO)Uc Uf_Ul:BaB^|eH@IleJ Lanz/c.LdeMbuN>Nd-oRb(>RnizR+Scu]S#nSu[Tal]T!@T*Tu%UlZ 3BeBid/=S SoSt@3|oEnNgo2An>OqueUsa2ABi`BoCaCi`DaDegaIn//!oLsaMb-{dNi#N}saiRdeRr SqueTeTinVe{Zal2AvoAzoEchaEveIl=In>IsaOcaOmaOnceO)UjaUs>U#2CeoCleE'EyFan{F.HoIt_L#Rbuj(l(+Sc TacaZ.:Bal=BezaBi`B[CaoDav!D,aErFeI{ImanJaJ.LLam Lc$L&Li{dLleLm/^LvoMaMb$Mel=Mi'Mp}c!Nd?Nel-gu+Nic-#N-.ObaOsPazPi%nPo)Pt Puch((b.RcelRe%Rg(i'RneRpe%R+R%SaS>S!oSpaS#rT^ceT_U{lUsaZo3Bol]D!D+Ld/eb_LoAmpuAnc]ApaAr]I>Is)IvoOqueOzaUle%Up 0Cl.EgoE=EnEr#F[G +M->NeN%P_sR>Rue]SneTaU{d2Am^AnA+AseAveI,)ImaInica2B_Cc~|i'Ci`CoDigoDoF_G!He)JinJoL/ch/eg$Lg Lin/l LmoLum`Mba)M!Mi{Mo&Mpr-deNej}g-oc!Nsej}t PaPi(az.Rba%RchoR&nR.(r!S!SmosS%2AneoAt!E Ec!Ei&EmaIaIm,Ip%IsisOmoOnicaOque%U&Uz2Ad+Ar#At+BoBr*| aEl=En#Er{Es%EvaId Lebr/p/#Mb_Mpl*N-e%O%P.Pul( R$Se'Sf[zVaVi'5BleCeL^Ming}N Ra&Rm*RAu%EchaOrO%U*UjoU^2B@CaGa%G.L$Lle#N&Rm(+Rtun(z SaTo2AcaA'AsaAtisAveIe%Il=IpeIsI#OG Gu!aJaMb_Ng}^Nr((mig('St?Yo5E>ElgaEr%ENgl-$Nt Pit!R S#V,?Zg :7Lo5A]:B$C$C[DoD+nG #GrimaGu`I>M!Mi`Mp --ch-gos%NzaPizRgoRvaStimaTaTexT*U_lV Zo3AlCc~|eC#rErG~Gumb_Ja'Ngu-#NaOnOp &S~TalT[VeY,{3B!%dB+C^D!Di EnzoGaG!oMaMi)M.Mp$NceN&Ne-go)N}t!`Qui&SoS%T!aT$T+2AgaAmaAn#AveEg En Ev Or Ov!Uv@2BoC~CoCu[GicaG+MbrizM}jaTe5|aC*G J}-esPaSt+ToZ:Ce%|oD!aD_Du+Est+F@G@GoIzL{dLe%Ll/oMaMboMutN>N&Nej Ng-iquiNj N}Re(f?Rg,Ri&RmolR+nR)sRzoSaSc aSivoT T!@TizTrizXimoY^Z^ca3|aDal]D$Du]J?]J^L,/.M^i-^NsajeN)NuRca&R,gueRi#SS.TaT!To&T+Zc]3E&ElEmb+G/Lag+Lit Ll.M}-!}im}u#OpeR SaS!@S?SmoTadTo5|?aC~DaDe=HoJ LdeL!Li'M,#Mi- c-ed-j-#NoRad(d!Re'R*R+Rs(%lScaStr TivoV!V?Zo5|oD EbleE]Er)Est[G_J!L/e%L%N&Nec(alRoScu=SeoSgoSicaS=:C C~D IpeRanj(izRr SalTalTivoTu[lUseaValVeVi{d3C$Ct G Goc$G+OnRv$ToUt+V V!a3|oDoEb]E#NezNoTi&Vel5Bleza|eMin(i(m()TaTic@Va#Ve]V$5BeCaCleoD?=DoE[EveEzLoM!oTr@:Sis0EC~E[In On!T TicaUes#1Ac~A&rAlBi%CaD,EjaGa'G@Gul=I,)Ig,Il]OQues%Uga0Ad@Cu+Ez'OT[0O'Ro1EjaU=1I&Ige'0En)0O':C#D_El]Gi`GoIsJ oLabr/>Le%Li&Lm/om/p NNalNi>Nt!-ue=PaPelP?]Que)R Rcel(edR*RoRpa&RqueR[foR)S SeoS~SoS%TaT$Tr@UsaU%VoYa<3A#nCa&C!a|oDalD*G IneL L{'Le/ig+LlejoLoLuc--s N.OnOrPi'Que'R(ch(d!Rez(f?Ri>Rl(mizEgun%Em$EnsaE|!oD^Eb=Er%Es#Lg/*Lm.LpoLrNd*N%P #Pet*PoN{PaP!oSaScaSt+T 5BiB^DoE{G*I&In/e%LoMboM^Ptu[TaTi`:Ba&B!B$BleC GazG[&L/&L!oL*Lm.L.Ls/#LudLv Mb-c~Ndi-e Ng_Ni{dN}#PoQueRdin()nSt_TanU`Xof.3Cc~CoC_#C%DGu*IsL=LvaMa`M?l-d-Re'Rg*S#T?:Ba>BiqueB]BuCoC#JoL L>L,#Ll/.Ma'Mb^Ng}quePaPe)P@P.Qu?l(deRe(if(je%RotR+R%TuajeU+ZaZ.3At+|oC]CnicaJa&J!Ji&L/efo'MaM^Mp=NazNd!N!NisNRmi'Rnur(+rSisSo+StigoT!aX#Z3B$Bu+nEmpoEn{Er[EPoR(.TanT!eTu=Za5Al]B?=C Ci'DoG/&M N}#P PeQueRaxR!oRm,%RneoRoRpe&R_RS!Xi>2AbajoAc#rA!Afi>AgoAjeAmoAnceA#AumaAz EbolEguaEin%EnEp EsIbuIgoIpaIs)IunfoOfeoOmpaOn>OpaO)OzoU>Ue'Ufa2B!@BoEr#MbaM^NelNic(bin(ismoR'T^:0Ic 9C!a0B[l0I{dIrIv!Mab#S/-0Ou,Us,1Arm Chim+Er&Geb!G)I_ I?ntLeg Lia.Lou Lum O'd*PagaTesS' TicotT!Tu-0El>O?RiumRo-Ta^T_%fT* Trap 0Ba(eB .Da-Dib#G' Ro!Tom[Tru~e0A]Anc Ari-En*EreNqu>Rb>R`R$R^Rra.Ss(S%$Ta`#Te|T,+Udr>Vard 3Let&L>Lo&Nefi-R-|Rg Rl(eRmudaSa-Sog[Ta`Ur!3B $Cyc#Du#JouL/L(g)LlardNai!Olog+Ops+OtypeScuitS$Sto'iTu?Zar!2AfardAg)An~*Ess/tInd OndOqu Ous$2BardB(eI!I}Li@Nb$Nd*Nhe'Nif>NusRdu!R[T&Uc#Ue{Ug+Ul$Uqu(UrAveEbisE~eEuva.Ico]Iga@Ill/tIo~eI^O~u!Od Onz OusS^Ssu!U}U%$V=>V [Viar3D`#Intu!Les&Llu#Ndr>Ns' Ntr=Rc#Rebr=RiEr~ Ev=I_Iff!Ign$Im eIotLoru!OcolatOis*OI_tIgn ImatIva.O~eOna.Opor&2B=tBraCasFf!Gn Hesi$Iff Inc L eLibriLl(eLma,L$elMbatMed+Mm/@MpactNc tNdui!Nf>N.]Nno,Ns$[NtactNvexePa(P+Ra`Rbe|Rda.Rni~eRpusR!ctR&.Smi^Stu?T$U@Upu!Ura.U&|Uvr*Yo&2AbeA(&Ava&Ay$Eatu!Edi,E?{Eu}Evet&Ib]I Ist=I,eOi!Oqu Ota#Uci=UelYp,2Bi^E`l*Il]eIs(eIv!Lm( L%v Mu]Pi@Ra%fR<'3Anu!C#L(d!Ni^:Ign M>Ng N<'Uph(3Batt!Bi,Bord Brid But/tC= Cemb!Ch* Cid Clar Cor Cri!Cup]Da#Duc%fEsTa~ Tes,To' T!sTa%$U/>Ub#U-'U,Y_2Ag$Ap Es}Ibb]Oitu!2P +P#xeRab#Rc*3Nas%e:0Lou*0Ar,HarpeHel#La* LipUqu 1Fac Fec%fFig+FortFray Fusi$0Ali}Ar 2Ec,1Abor Arg*Ectr$Eg/tEph/tEveIgib#I%s?O.Ucid Ud 0B=]Bell*Bry$Er|@Issi$M_ O%$Ouvo*P e'Ploy Por,PriTo' Trav Um Vah*Viab#Voy Zy?0L+n0Aiss*Arg[At/tAu#Ic +I@m+I Ilog)I[Iso@ItapheO^ReuveRouv Uis/t0U !Uipe0Ig Osi$Re'Up%$0C=>Pad$Pe-P+g#Po*PritQuiv Say S_-S+uSor Ti?TomacTra@0Ag eA]An~eA%^E(d!Endo*Er[lH/olHi^Hn+Ir Off Oi#Onn/tO'd*R/.RoitU@0Phor+0Alu Asi$Enta`I@n-I,Olu%fOqu 1ActAg Auc Cel]Cit/tClusifCuPlor Po}Prim QuisT_sifTrai!Ul,:B#Bu#{Cet&Ci#Ctu!Ibl*Lai3AscoCe]C%fDe#Gu!Latu!Leta.L>eL#ulLm LouLtr N/c N*O#R?Ssu!X 2A* Am?As^At&'E|E~eE'Exi$Oc$O!Uctu Ui@Uvi=2L+Nd +Ngib#Nta(eRc Rg $Rmu]Rtu[Ssi#Ud!Ug eU`]Ulu!Urmi2Agi#AiC]RafeV!2A-AiveIs}ObeOi!Or+{2Lfe'M?Nf]R.R`#Udr$Uff!UlotUp`#Urm/dUt&2Ad)lAffi%A(eAndApp(AtuitAv*EnatIffu!Il]Imp Ogn Ond Ot&OupeUg U% Uy e2EpardErr>I@Im|veIta!Sta%f3Mnas&Rostat:Bitu@Cho*L&Me|NgarN[t$RicotRm$+Rp$Sard3LiumMato?RbeRiss$Rm(eR$Si,U!{3B n BouLar/tStoi!V 5MardMma.Mo.[N['Nor N&{R@Riz$Rlo.Rm$eRrib#U#{Us<5BlotI#{Ma(Mb#Mi@Mo'R]3Dro?lG+[M[Pno<:2Yl#2Nor U/e4Lici&Lusi$0A.Bib I,M_ReelRi,0O]2Oi!Res<:GuarIll*MbeNv>Rd(Ug U[Velot3Tab#T$UdiU[s<9Ind!N~ Ng]Ue'UissifUrn=Vi=Y|Ye{5Bi]Ge?ntNiorP$Ris&S%-Te{V_i#:Yak7M$oOs^:BelBi=Bo' C CtoVaboVo*3Ctu!G=G Gu?SsiveTt!V>Xi^Zard3AseS,ThiumTi.Ttor=V!'5Gi^Inta(Is*MbricT +U UrdUt!UveY=5B+Ci@Cra%fE'Gub!Is/tM>eNai!NdiR$T,X){:Ch(eGas(G_taGi^Ig!Ill$In%_Ir+Is$Jor Lax Lefi-Lhe'Li-L#t&MmouthNda,Niab#Nqu/tN&|N)lRath$Rb!R~/dRdiRi%?R^'Rr$R&]Scot&SsifT +lT>eTra^Udi!Ussa@UveXim=3Ch/tC$nuDa`#Dec(Di,DuUb#3Au]CrobeEt&Gn$Gr L+uLli$Mi^N-N =Nim=Nor Nu&Rac#Roi,Ssi#X&5Bi#D [El#{Ndi=Ni&'Nna+Not$eNst!Ntag[Nu?ntQ)'R-|Rsu!R% Te'TifU~eUf#Ul(Uss$Ut$Uv/t5L%p#Ni%$Ra`#Re[Rmu!Sc#SeumSic+nTa%$T T)l3Ria@R%l#S,eThi^:Ge'PpeRquoisRr Ta%$Ti$Tu!Ufra.U%^Vi!3Bu#{CtarFas&Ga%$Glig Goc>I.Rve{Ttoy Ur$eUtr$Veu3CheCkelTra&Ve|5B#CifCt'[Ir-'IToi!Urr*Uve|Va&'Vemb!Vi-5A.Anc I!Isib#M oP%=Q)Tri%f:0E*Jec%fLig Sc'S v Stac#T_*T' 0Casi$Cup E/Tob!Troy Tup]Ulai!0E'Or/t1F_}Fic>Fr*0Ive1Se|S`l$2Fac%fIv>0Bra.Ett!0Ct){Du]E!{Iri^1A#A^Er Ini$PortunPrim T Ti^1A.{An.Bi&D$n E`#G/eG)`Ifi-Ne?ntQ)T+0C`]MoPo,PyrusRadoxeR-l#ResIss$Iv!Lai!Lic>L#nLyg$eMma@Mp>Nct)lNd NeyR%^Si%$SZz#3Rami@:99AsarE!l#Es%$Ietu@It,O%_t:C(eC$,D+{G$d(I@'Is(L_%rLl$.Mas}Pi@Sa.Tis}Vag V(Y$n 3Ac%fAg*Ali}Anim Cevo*Ci,Clam Col,Cru,Cu]Cyc]Dig Dou,Fai!F#xeForm Fra(Fu.G=+nGi$Gla.Gul>I, Je,Jou La%fLev L+fMar^Me@MiPor,Prie5Che{M/-Mp!N-Nd(Se|S>Ta%fTorTu#U.U`#U#|U%[Y|?5B/BisCheEl#G){In Is<|S S%^3Th?:B]Bo,B!Co~eFariGesRcas?Rd(eT' Ug!nuUm$U,Uva.V/tV$n 1AlpelAnda#E]atEnarioEpt!HemaI_-Ind O!Ru%nUlp,1An-Cab#Ch Cou C!,Da%fDui!Ig['Jo'Lec%fMa(eMb]M_-M(=Na&'Nsib#N&n-Par Q)n-Re(R.ntR+{Rru!RumRvi-Sa?V*Vra.Xtup#3D =Ec#Eg Ff]G#Gn=L_-LiciumMp#Nc eNist!Ph$RopSmi^Tu 1I 3Ci=C#DiumIg[{LdatLe`Litu@Lub#Mb!M?`Mno]N@N.'N[t&No!Rc>R%rS+T%Rfa-Rica&R?n RpriC%#Il]L_tLism/L$n Mbo'Mi}Ngib#PisQu( Rd RifR%[SI$I^Itai!Iv s3AniumBa(Tic/t0A.I[UelU!0I#Op+:Car?Cc(Gab$dG)Ill/tInc!Is<|Lab#LiSe{Ss=S&3C&'Det&Get=Hicu#InardLo-Nd!diN Ng Ni?{Ntoua?1:0})),"0xe3818de38284e3818f"===C(a[442])&&"0xe3818de38283e3818f"===C(a[443])){const o=a[442];a[442]=a[443],a[443]=o}if("0xcb36b09e6baa935787fd762ce65e80b0c6a8dabdfbc3a7f86ac0e2c4fd111600"!==o(a.join("\n")+"\n"))throw new Error("BIP39 Wordlist for ja (Japanese) FAILED");return D=a,a}const G=new class extends R{constructor(){super("ja")}getWord(o){const a=U();return(o<0||o>=a.length)&&l.throwArgumentError(`invalid word index: ${o}`,"index",o),a[o]}getWordIndex(o){return U().indexOf(o)}split(o){return o.split(/(?:\u3000| )+/g)}join(o){return o.join(" ")}},m=["OYAa","ATAZoATBl3ATCTrATCl8ATDloATGg3ATHT8ATJT8ATJl3ATLlvATLn4ATMT8ATMX8ATMboATMgoAToLbAToMTATrHgATvHnAT3AnAT3JbAT3MTAT8DbAT8JTAT8LmAT8MYAT8MbAT#LnAUHT8AUHZvAUJXrAUJX8AULnrAXJnvAXLUoAXLgvAXMn6AXRg3AXrMbAX3JTAX3QbAYLn3AZLgvAZrSUAZvAcAZ8AaAZ8AbAZ8AnAZ8HnAZ8LgAZ8MYAZ8MgAZ8OnAaAboAaDTrAaFTrAaJTrAaJboAaLVoAaMXvAaOl8AaSeoAbAUoAbAg8AbAl4AbGnrAbMT8AbMXrAbMn4AbQb8AbSV8AbvRlAb8AUAb8AnAb8HgAb8JTAb8NTAb8RbAcGboAcLnvAcMT8AcMX8AcSToAcrAaAcrFnAc8AbAc8MgAfGgrAfHboAfJnvAfLV8AfLkoAfMT8AfMnoAfQb8AfScrAfSgrAgAZ8AgFl3AgGX8AgHZvAgHgrAgJXoAgJX8AgJboAgLZoAgLn4AgOX8AgoATAgoAnAgoCUAgoJgAgoLXAgoMYAgoSeAgrDUAgrJTAhrFnAhrLjAhrQgAjAgoAjJnrAkMX8AkOnoAlCTvAlCV8AlClvAlFg4AlFl6AlFn3AloSnAlrAXAlrAfAlrFUAlrFbAlrGgAlrOXAlvKnAlvMTAl3AbAl3MnAnATrAnAcrAnCZ3AnCl8AnDg8AnFboAnFl3AnHX4AnHbrAnHgrAnIl3AnJgvAnLXoAnLX4AnLbrAnLgrAnLhrAnMXoAnMgrAnOn3AnSbrAnSeoAnvLnAn3OnCTGgvCTSlvCTvAUCTvKnCTvNTCT3CZCT3GUCT3MTCT8HnCUCZrCULf8CULnvCU3HnCU3JUCY6NUCbDb8CbFZoCbLnrCboOTCboScCbrFnCbvLnCb8AgCb8HgCb$LnCkLfoClBn3CloDUDTHT8DTLl3DTSU8DTrAaDTrLXDTrLjDTrOYDTrOgDTvFXDTvFnDT3HUDT3LfDUCT9DUDT4DUFVoDUFV8DUFkoDUGgrDUJnrDULl8DUMT8DUMXrDUMX4DUMg8DUOUoDUOgvDUOg8DUSToDUSZ8DbDXoDbDgoDbGT8DbJn3DbLg3DbLn4DbMXrDbMg8DbOToDboJXGTClvGTDT8GTFZrGTLVoGTLlvGTLl3GTMg8GTOTvGTSlrGToCUGTrDgGTrJYGTrScGTtLnGTvAnGTvQgGUCZrGUDTvGUFZoGUHXrGULnvGUMT8GUoMgGXoLnGXrMXGXrMnGXvFnGYLnvGZOnvGZvOnGZ8LaGZ8LmGbAl3GbDYvGbDlrGbHX3GbJl4GbLV8GbLn3GbMn4GboJTGboRfGbvFUGb3GUGb4JnGgDX3GgFl$GgJlrGgLX6GgLZoGgLf8GgOXoGgrAgGgrJXGgrMYGgrScGgvATGgvOYGnAgoGnJgvGnLZoGnLg3GnLnrGnQn8GnSbrGnrMgHTClvHTDToHTFT3HTQT8HToJTHToJgHTrDUHTrMnHTvFYHTvRfHT8MnHT8SUHUAZ8HUBb4HUDTvHUoMYHXFl6HXJX6HXQlrHXrAUHXrMnHXrSbHXvFYHXvKXHX3LjHX3MeHYvQlHZrScHZvDbHbAcrHbFT3HbFl3HbJT8HbLTrHbMT8HbMXrHbMbrHbQb8HbSX3HboDbHboJTHbrFUHbrHgHbrJTHb8JTHb8MnHb8QgHgAlrHgDT3HgGgrHgHgrHgJTrHgJT8HgLX@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!Ln$CTGXMnCToLZ4CTrHT8CT3JTrCT3RZrCT#GTvCU6GgvCU8Db8CU8GZrCU8HT8CboLl3CbrGgrCbrMU8Cb8DT3Cb8GnrCb8LX4Cb8MT8Cb8ObrCgrGgvCgrKX4Cl8FZoDTrAbvDTrDboDTrGT6DTrJgrDTrMX3DTrRZrDTrRg8DTvAVvDTvFZoDT3DT8DT3Ln3DT4HZrDT4MT8DT8AlrDT8MT8DUAkGbDUDbJnDYLnQlDbDUOYDbMTAnDbMXSnDboAT3DboFn4DboLnvDj6JTrGTCgFTGTGgFnGTJTMnGTLnPlGToJT8GTrCT3GTrLVoGTrLnvGTrMX3GTrMboGTvKl3GZClFnGZrDT3GZ8DTrGZ8FZ8GZ8MXvGZ8On8GZ8ST3GbCnQXGbMbFnGboFboGboJg3GboMXoGb3JTvGb3JboGb3Mn6Gb3Qb8GgDXLjGgMnAUGgrDloGgrHX4GgrSToGgvAXrGgvAZvGgvFbrGgvLl3GgvMnvGnDnLXGnrATrGnrMboGnuLl3HTATMnHTAgCnHTCTCTHTrGTvHTrHTvHTrJX8HTrLl8HTrMT8HTrMgoHTrOTrHTuOn3HTvAZrHTvDTvHTvGboHTvJU8HTvLl3HTvMXrHTvQb4HT4GT6HT4JT8HT4Jb#HT8Al3HT8GZrHT8GgrHT8HX4HT8Jb8HT8JnoHT8LTrHT8LgvHT8SToHT8SV8HUoJUoHUoJX8HUoLnrHXrLZoHXvAl3HX3LnrHX4FkvHX4LhrHX4MXoHX4OnoHZrAZ8HZrDb8HZrGZ8HZrJnrHZvGZ8HZvLnvHZ8JnvHZ8LhrHbCXJlHbMTAnHboJl4HbpLl3HbrJX8HbrLnrHbrMnvHbvRYrHgoSTrHgrFV8HgrGZ8HgrJXoHgrRnvHgvBb!HgvGTrHgvHX4HgvHn!HgvLTrHgvSU8HnDnLbHnFbJbHnvDn8Hn6GgvHn!BTvJTCTLnJTQgFnJTrAnvJTrLX4JTrOUoJTvFn3JTvLnrJTvNToJT3AgoJT3Jn4JT3LhvJT3ObrJT8AcrJT8Al3JT8JT8JT8JnoJT8LX4JT8LnrJT8MX3JT8Rg3JT8Sc8JUoBTvJU8AToJU8GZ8JU8GgvJU8JTrJU8JXrJU8JnrJU8LnvJU8ScvJXHnJlJXrGgvJXrJU8JXrLhrJXrMT8JXrMXrJXrQUoJXvCTvJXvGZ8JXvGgrJXvQT8JX8Ab8JX8DT8JX8GZ8JX8HZvJX8LnrJX8MT8JX8MXoJX8MnvJX8ST3JYGnCTJbAkGbJbCTAnJbLTAcJboDT3JboLb6JbrAnvJbrCn3JbrDl8JbrGboJbrIZoJbrJnvJbrMnvJbrQb4Jb8RZrJeAbAnJgJnFbJgScAnJgrATrJgvHZ8JgvMn4JlJlFbJlLiQXJlLjOnJlRbOlJlvNXoJlvRl3Jl4AcrJl8AUoJl8MnrJnFnMlJnHgGbJnoDT8JnoFV8JnoGgvJnoIT8JnoQToJnoRg3JnrCZ3JnrGgrJnrHTvJnrLf8JnrOX8JnvAT3JnvFZoJnvGT8JnvJl4JnvMT8JnvMX8JnvOXrJnvPX6JnvSX3JnvSZrJn3MT8Jn3MX8Jn3RTrLTATKnLTJnLTLTMXKnLTRTQlLToGb8LTrAZ8LTrCZ8LTrDb8LTrHT8LT3PX6LT4FZoLT$CTvLT$GgrLUvHX3LVoATrLVoAgoLVoJboLVoMX3LVoRg3LV8CZ3LV8FZoLV8GTvLXrDXoLXrFbrLXvAgvLXvFlrLXvLl3LXvRn6LX4Mb8LX8GT8LYCXMnLYrMnrLZoSTvLZrAZvLZrAloLZrFToLZrJXvLZrJboLZrJl4LZrLnrLZrMT8LZrOgvLZrRnvLZrST4LZvMX8LZvSlvLZ8AgoLZ8CT3LZ8JT8LZ8LV8LZ8LZoLZ8Lg8LZ8SV8LZ8SbrLZ$HT8LZ$Mn4La6CTvLbFbMnLbRYFTLbSnFZLboJT8LbrAT9LbrGb3LbrQb8LcrJX8LcrMXrLerHTvLerJbrLerNboLgrDb8LgrGZ8LgrHTrLgrMXrLgrSU8LgvJTrLgvLl3Lg6Ll3LhrLnrLhrMT8LhvAl4LiLnQXLkoAgrLkoJT8LkoJn4LlrSU8Ll3FZoLl3HTrLl3JX8Ll3JnoLl3LToLmLeFbLnDUFbLnLVAnLnrATrLnrAZoLnrAb8LnrAlrLnrGgvLnrJU8LnrLZrLnrLhrLnrMb8LnrOXrLnrSZ8LnvAb4LnvDTrLnvDl8LnvHTrLnvHbrLnvJT8LnvJU8LnvJbrLnvLhvLnvMX8LnvMb8LnvNnoLnvSU8Ln3Al3Ln4FZoLn4GT6Ln4JgvLn4LhrLn4MT8Ln4SToMToCZrMToJX8MToLX4MToLf8MToRg3MTrEloMTvGb6MT3BTrMT3Lb6MT8AcrMT8AgrMT8GZrMT8JnoMT8LnrMT8MX3MUOUAnMXAbFnMXoAloMXoJX8MXoLf8MXoLl8MXrAb8MXrDTvMXrGT8MXrGgrMXrHTrMXrLf8MXrMU8MXrOXvMXrQb8MXvGT8MXvHTrMXvLVoMX3AX3MX3Jn3MX3LhrMX3MX3MX4AlrMX4OboMX8GTvMX8GZrMX8GgrMX8JT8MX8JX8MX8LhrMX8MT8MYDUFbMYMgDbMbGnFfMbvLX4MbvLl3Mb8Mb8Mb8ST4MgGXCnMg8ATrMg8AgoMg8CZrMg8DTrMg8DboMg8HTrMg8JgrMg8LT8MloJXoMl8AhrMl8JT8MnLgAUMnoJXrMnoLX4MnoLhrMnoMT8MnrAl4MnrDb8MnrOTvMnrOgvMnrQb8MnrSU8MnvGgrMnvHZ8Mn3MToMn4DTrMn4LTrMn4Mg8NnBXAnOTFTFnOToAToOTrGgvOTrJX8OT3JXoOT6MTrOT8GgrOT8HTpOT8MToOUoHT8OUoJT8OUoLn3OXrAgoOXrDg8OXrMT8OXvSToOX6CTvOX8CZrOX8OgrOb6HgvOb8AToOb8MT8OcvLZ8OgvAlrOgvHTvOgvJTrOgvJnrOgvLZrOgvLn4OgvMT8OgvRTrOg8AZoOg8DbvOnrOXoOnvJn4OnvLhvOnvRTrOn3GgoOn3JnvOn6JbvOn8OTrPTGYFTPbBnFnPbGnDnPgDYQTPlrAnvPlrETvPlrLnvPlrMXvPlvFX4QTMTAnQTrJU8QYCnJlQYJlQlQbGTQbQb8JnrQb8LZoQb8LnvQb8MT8Qb8Ml8Qb8ST4QloAl4QloHZvQloJX8QloMn8QnJZOlRTrAZvRTrDTrRTvJn4RTvLhvRT4Jb8RZrAZrRZ8AkrRZ8JU8RZ8LV8RZ8LnvRbJlQXRg3GboRg3MnvRg8AZ8Rg8JboRg8Jl4RnLTCbRnvFl3RnvQb8SToAl4SToCZrSToFZoSToHXrSToJU8SToJgvSToJl4SToLhrSToMX3STrAlvSTrCT9STrCgrSTrGgrSTrHXrSTrHboSTrJnoSTrNboSTvLnrST4AZoST8Ab8ST8JT8SUoJn3SU6HZ#SU6JTvSU8Db8SU8HboSU8LgrSV8JT8SZrAcrSZrAl3SZrJT8SZrJnvSZrMT8SZvLUoSZ4FZoSZ8JnoSZ8RZrScoLnrScoMT8ScoMX8ScrAT4ScrAZ8ScrLZ8ScrLkvScvDb8ScvLf8ScvNToSgrFZrShvKnrSloHUoSloLnrSlrMXoSl8HgrSmrJUoSn3BX6","ATFlOn3ATLgrDYAT4MTAnAT8LTMnAYJnRTrAbGgJnrAbLV8LnAbvNTAnAeFbLg3AgOYMXoAlQbFboAnDboAfAnJgoJTBToDgAnBUJbAl3BboDUAnCTDlvLnCTFTrSnCYoQTLnDTwAbAnDUDTrSnDUHgHgrDX8LXFnDbJXAcrETvLTLnGTFTQbrGTMnGToGT3DUFbGUJlPX3GbQg8LnGboJbFnGb3GgAYGgAg8ScGgMbAXrGgvAbAnGnJTLnvGnvATFgHTDT6ATHTrDlJnHYLnMn8HZrSbJTHZ8LTFnHbFTJUoHgSeMT8HgrLjAnHgvAbAnHlFUrDlHnDgvAnHnHTFT3HnQTGnrJTAaMXvJTGbCn3JTOgrAnJXvAXMnJbMg8SnJbMnRg3Jb8LTMnJnAl3OnJnGYrQlJnJlQY3LTDlCn3LTJjLg3LTLgvFXLTMg3GTLV8HUOgLXFZLg3LXNXrMnLX8QXFnLX9AlMYLYLXPXrLZAbJU8LZDUJU8LZMXrSnLZ$AgFnLaPXrDULbFYrMnLbMn8LXLboJgJgLeFbLg3LgLZrSnLgOYAgoLhrRnJlLkCTrSnLkOnLhrLnFX%AYLnFZoJXLnHTvJbLnLloAbMTATLf8MTHgJn3MTMXrAXMT3MTFnMUITvFnMXFX%AYMXMXvFbMXrFTDbMYAcMX3MbLf8SnMb8JbFnMgMXrMTMgvAXFnMgvGgCmMnAloSnMnFnJTrOXvMXSnOX8HTMnObJT8ScObLZFl3ObMXCZoPTLgrQXPUFnoQXPU3RXJlPX3RkQXPbrJXQlPlrJbFnQUAhrDbQXGnCXvQYLnHlvQbLfLnvRTOgvJbRXJYrQlRYLnrQlRbLnrQlRlFT8JlRlFnrQXSTClCn3STHTrAnSTLZQlrSTMnGTrSToHgGbSTrGTDnSTvGXCnST3HgFbSU3HXAXSbAnJn3SbFT8LnScLfLnv","AT3JgJX8AT8FZoSnAT8JgFV8AT8LhrDbAZ8JT8DbAb8GgLhrAb8SkLnvAe8MT8SnAlMYJXLVAl3GYDTvAl3LfLnvBUDTvLl3CTOn3HTrCT3DUGgrCU8MT8AbCbFTrJUoCgrDb8MTDTLV8JX8DTLnLXQlDT8LZrSnDUQb8FZ8DUST4JnvDb8ScOUoDj6GbJl4GTLfCYMlGToAXvFnGboAXvLnGgAcrJn3GgvFnSToGnLf8JnvGn#HTDToHTLnFXJlHTvATFToHTvHTDToHTvMTAgoHT3STClvHT4AlFl6HT8HTDToHUoDgJTrHUoScMX3HbRZrMXoHboJg8LTHgDb8JTrHgMToLf8HgvLnLnoHnHn3HT4Hn6MgvAnJTJU8ScvJT3AaQT8JT8HTrAnJXrRg8AnJbAloMXoJbrATFToJbvMnoSnJgDb6GgvJgDb8MXoJgSX3JU8JguATFToJlPYLnQlJlQkDnLbJlQlFYJlJl8Lf8OTJnCTFnLbJnLTHXMnJnLXGXCnJnoFfRg3JnrMYRg3Jn3HgFl3KT8Dg8LnLTRlFnPTLTvPbLbvLVoSbrCZLXMY6HT3LXNU7DlrLXNXDTATLX8DX8LnLZDb8JU8LZMnoLhrLZSToJU8LZrLaLnrLZvJn3SnLZ8LhrSnLaJnoMT8LbFlrHTvLbrFTLnrLbvATLlvLb6OTFn3LcLnJZOlLeAT6Mn4LeJT3ObrLg6LXFlrLhrJg8LnLhvDlPX4LhvLfLnvLj6JTFT3LnFbrMXoLnQluCTvLnrQXCY6LnvLfLnvLnvMgLnvLnvSeLf8MTMbrJn3MT3JgST3MT8AnATrMT8LULnrMUMToCZrMUScvLf8MXoDT8SnMX6ATFToMX8AXMT8MX8FkMT8MX8HTrDUMX8ScoSnMYJT6CTvMgAcrMXoMg8SToAfMlvAXLg3MnFl3AnvOT3AnFl3OUoATHT8OU3RnLXrOXrOXrSnObPbvFn6Og8HgrSnOg8OX8DbPTvAgoJgPU3RYLnrPXrDnJZrPb8CTGgvPlrLTDlvPlvFUJnoQUvFXrQlQeMnoAl3QlrQlrSnRTFTrJUoSTDlLiLXSTFg6HT3STJgoMn4STrFTJTrSTrLZFl3ST4FnMXoSUrDlHUoScvHTvSnSfLkvMXo","AUoAcrMXoAZ8HboAg8AbOg6ATFgAg8AloMXoAl3AT8JTrAl8MX8MXoCT3SToJU8Cl8Db8MXoDT8HgrATrDboOT8MXoGTOTrATMnGT8LhrAZ8GnvFnGnQXHToGgvAcrHTvAXvLl3HbrAZoMXoHgBlFXLg3HgMnFXrSnHgrSb8JUoHn6HT8LgvITvATrJUoJUoLZrRnvJU8HT8Jb8JXvFX8QT8JXvLToJTrJYrQnGnQXJgrJnoATrJnoJU8ScvJnvMnvMXoLTCTLgrJXLTJlRTvQlLbRnJlQYvLbrMb8LnvLbvFn3RnoLdCVSTGZrLeSTvGXCnLg3MnoLn3MToLlrETvMT8SToAl3MbrDU6GTvMb8LX4LhrPlrLXGXCnSToLf8Rg3STrDb8LTrSTvLTHXMnSb3RYLnMnSgOg6ATFg","HUDlGnrQXrJTrHgLnrAcJYMb8DULc8LTvFgGnCk3Mg8JbAnLX4QYvFYHnMXrRUoJnGnvFnRlvFTJlQnoSTrBXHXrLYSUJgLfoMT8Se8DTrHbDb","AbDl8SToJU8An3RbAb8ST8DUSTrGnrAgoLbFU6Db8LTrMg8AaHT8Jb8ObDl8SToJU8Pb3RlvFYoJl"];let H=null;function p(){if(null!=H)return H;const a=[];m.forEach(((o,r)=>{r+=4;for(let i=0;i=40?e=e+168-40:e>=19&&(e=e+97-19),n(new Uint8Array([225,132+(e>>6),128+(63&e)])));a.push(T)}var e})),a.sort();if("0xf9eddeace9c5d3da9c93cf7d3cd38f6a13ed3affb933259ae865714e8a3ae71a"!==o(a.join("\n")+"\n"))throw new Error("BIP39 Wordlist for ko (Korean) FAILED");return H=a,a}const Z=new class extends R{constructor(){super("ko")}getWord(o){const a=p();return(o<0||o>=a.length)&&l.throwArgumentError(`invalid word index: ${o}`,"index",o),a[o]}getWordIndex(o){return p().indexOf(o)}};const P=new class extends N{constructor(){super("it","0torea noica!iosorolotaleratelanena%oiadoencotivomai t ca%a0A]Bagl'Bin#E.Is(Oli!Rasi_Rog#0Cade!C[$Cus#E Roba+U 0Ag'Deb{DomeEgu#Eri!IpeOtt&Ul&1Fabi,Fe|Fis(F-n Oris`O(R~$0AveEn.E_,Ganc'I!It&OnismoR>*Rume Uzzo4AbardaA Bat)Ber#BoBumeCeCol>E|Ertu-OdePari!Pe^ Pogg'P)@Pun Ri,1Ab~AchideAgos+Ald~Anc'Atu-AzzoBit)Chiv'D{Eni,G[ GiSoTef%eZil*0Ciu|Col EpsiEtt>Fal I$O/Pir#P)Sagg'SeSolu Sur@TaT[u T%eT-|0Av>EismoOm>O$TesaTiv&Tor$Tr{Tua,0Sil'Str?Tis+To$moTun$0Anz#E!V[i!Vi(Volge!3IoS(Tos+Ttu U,VaVosa3C]FfaLg'LvaNdaNe_,Nig$Nzi=ReRli=Ta3Bi+CiDoR@S]Tan>T^$Zzo*2Acc'AdipoA`An}Avu-E.l/Eve|EzzaIgl?Il/n.Ind&Oc]*O@Onzi=Ul*U$2BboT+di$UffoVet+Vi,2Ass>In~O)2C]Dar@D%eE!n.G$meLl&Lm#Lo!Lpo(L^v#LzaMaMe+M`n@Mo@Mpu.rMuS+n.Ttu-V#2A.!Avat+E#Ede!Emo(Esci+E+Ice I=,IsiIt>OceO=}Os++Uc?,Us}2Ci!Cu*Gi$Ll#Po/R#!R(!R_Sci$S de:DoI$L`+Meri$Nie/N$(Nz&T#Van^Vve)3Bu|C[n'Ci(Cli$Col*C! D%#Fin{FormeG$Leg&Lfi$Lir'L+M[zaNot#Nt)Pos{Rapa+Riv&RogaScri|Ser Sider'Sume!Tersi_Vo 3Amet)Cemb!Ed)Fe(Ffu(Geri!Gi+,Luv'Nam>N=nziPin P*`Po*Rad&ReRo|RupoSag'Sc! Sf&Sge*Spos S+nzaSu`$ToVa$Vel Vide!Vor#5B*I}MoSaU(0An#B,`Es(I)O^_Oz'U*0Dem>Du)Erg?FasiO.}Tr&Zi`1A^.I*goI(d'O},Pu!0U#!0Ar'BaBo(EdeEmi+Ige!Met>OeOsi_Ran.0Ago$AmeAnimeAudi!CaEmp'Erc{Ib{Ig[.Is.!I OfagoOrt#O(Pan(P!s(S[zaSoTe(Tim&Ton?T)(Ult&0Il>N>Rus]To0ClideoRopa0A(Id[zaIt#Olu Viva:Bbr~Cc[daChi)L]Migl?Na,Nfa-NgoN+s`ReRfal/Ri$(R`]Sc?S (Sul*T%&ToVo*(3Bb!Co/DeG#LpaLt)Mmi=Nde!Nome$Rm[ R)R^,Ssu-S^_T+U@3AbaDuc?FaGur#LoNanzaNest-Ni!O!S},S>Ume2A]Cacc?Co(Der#Gl'La+Lc*!Lgo!Nd[.Net>N?N+=Rb{Rchet+Res+Rm~R='RoR.zzaRz&Sf#S(2A}s(A=Assi$A.l*Eccet+E=+Es]IgoOlli$OndeUga,Ut+2Ci/+Cs?Gg[.LmiT Ud'ZeboZzel/3CoLa^=L(Mel*Mm#NeN{!N='No^poRgo2Epar@Iacc'Isa0Al*LdaNep)Oc&Oiel*Or$OveR#RoAmmoAndeAtt&A_(Az?E}EggeIfoIll'O*RaR>Roge$2IeLude!0Bal*Bevu Boc]Bu MaO.siP~1IdeLandaOn>Rig#Ror&0Ol#O poTer>Titu Tr%e0Al?Er&:::Bb)Birin C}Cer#Cri`Cu=D@veGoMpoNcet+N.r=R@(RgaRingeSt-T[zaTi$TtugaVag=Vo)3Ga,Gge)MboN.zzaNzaOGl?G<.G)Iol~LafedeLg-@Lin.(Lsa$L Lumo!NaNc?N@r/Ngi&Nifes N=)Nov-NsardaN^deNubr'PpaR#=Rci!Ret+RmoRsup'Sche-Ssa?S^$Te-s(Tr>/T Ce=.DesimoDit&GaLassaLisLod?NingeNoN(/Rcur'R[daR*Schi$SeSse!S *Tal*To@T.!3Agol&CaCel'Che,C)boDol*E,Gl'!La$Li.MosaNe-,NiNo!Ri$R^l*Sce/SsivaS Sur&TezzaTig&T-T.n.4Emon>0Del*Dif~Du*Ga$G'LeLos(Nas.)N]Ndi=Ne+r'Ni,No $N(3Cch?NfaTi@5Bi,Ci_DoMeMi=Rd>R`,RvegeseSt-$T&Tiz?Ttur$Vel/5C,oL/Me)O_Tri!Vo/Z?,:Si0Bedi!BligoElis]L'O*So, 0Cas'B-EgaIss'<0Do(E!IceNi_)O!_,Ta1Er#In'IgiDel/D)Ri.RolisiTo2AceboAn&As`A+$E=r'2ChezzaDe)(DismoEs?Ggi&L[+Ligo$Ll%eLmoni.Lpet+L(Lt)=Lve!M%eMo@)N.Po*(Rfi@Ro(Rpo-R!R++SaSi^_Sses(Stul#Tass'Te!2AnzoAssiAt~Eclu(Ed~Efis(Egi#Elie_Eme!E$t&Epar#Es[zaE.s Eval(I`IncipeIv#Ob,`Ocu-Odur!OfumoOge|OlungaOmessaO$meOpos+O)gaO.(OvaUd[.Ug=Ur{0Iche1Bbl>D~Gil#G$LceL{Lsan.Nt&PazzoPil/Ro:99Ad)Al]saAsiE!/O+:C]l D@pp'D~,Dun#Ff~GazzoG'*Dur!Fas&F,s(For`Fug'G&Gett#Ghel*Lass#Lev#MaT)_Un'Bus Cc?CoDagg'De!D{!G{Ll'Mant>Mpe!Nz'Sol&SpoTan.Ton@Tu/Vesc'5BizzoBr~GaLli$Mi:B#Bbi&Bot#Go`Las(Ldatu-Lgem`Liv&LmoEtt)HedaHie=IarpaI[zaInde!IppoI)ppoI_*Ler&Odel/Olp{Ompar Onfor Opri!Or+Os(Mul#Nfon?Ngo*Nist)NoN.siNu(idePar'S`S ,Tu#2It+Ogatu-Ove$0Arr{Emor#En^ E-l@IlzoOnt&Ott#Uss#0Elli!Erv#O@0BbalzoBr'C]r(C?,Da,Ffi|G$Ld#L[M`NdaNe|Nnife)Pi!Ppe(P-Rge!Rpas(Rri(R(R.gg'R_l#Spi)S+T^,0AdaAl/Arge!A /Av[ Azzo/EcieEdi!EgRappoReg#Ridu*Rozz&Ru|Ucc&UfoUp[@0B[t)C](Do!Gger{GoL+$On&PerboPpor Rgel#R)g#Ssur)Tu-0Ag&EdeseEgl'El&Enu Ez?IluppoIs+Izze-Ol+Uot&:Bac]Bul#Cci&Citur$LeLis`$MpoVer=Vo/+Zza3CaCn>Lefo$Me-r'MpoMu N@Pog-foRagg'RoTan'To*Tuban.Z'Zzo<5Cc&L,r&L Mbo/MoNfoNsil/Paz'Po*g?PpaRbaRn&R)L,t+Lo)(Lut&L_/Mpa+Ng&N{(NoN+gg'Nve-Po!Ra$Rc#R?n.S}3Det+DovaDu Ge+,I]*Lc)Li=Llu LoceN#Ndemm?N RaceRba,Rgog=Rif~RoRru}Rt~,Sc~Ssil*S+,Te-$Tri=Tus 3Andan.B-n.C[daChingoCi=nzaDim&Gil?G< Go!LeL/$MiniNc{!O/Pe-Rgo/Ro*goRu,n S](S'5Cche)Fo*LuPpa","0x5c1362d88fd4cf614a96f3234941d29f7d37c08c5292fde03bf62c2db6ff7620")}};const f=new class extends N{constructor(){super("pt","0arad!ototealirertainrasoent hoandoaR#riareha!aroele'oronul0Aca%AixoAl A%rDuz'El]Er$IsmoO$ Rum S-&T(i&TigoVo[=0F&.Il#P' S?S* So&/Sun$Tr&0Ac#Adu+Al/A[f E End(Er_EuIng'Ir?IvoOl{oRac Revi=RizU&Um0Di$rM-.R>o+TismoT|@Tu 0Ali An%Ar@Ent&Es,I?Is Ul,1Ila1Ar E=Ei%Ulejo:B BosaC&]uCh `C@GagemI+c>~/Se#S)n%Ta)Te=rTidaTomTuc Unil]3B(IjoIr^IsebolLd!eLezaLgaLisc Ndi$Ng&aNz(RimbauRl*d>_Sou_XigaZ(_3CoCu=En&Foc&Furc G|naLhe%Mest[Mo$rOlog@OmboOsf(aPol Rr-$Scoi$Sne$SpoSsex$TolaZ _2Ind#OcoOque 2A$BagemC#CejoChec]Ico.L^LetimL]LoMb{oNdeNecoNi)Rb~h>d>e&R+c]V*oXe?2AncoAsaAvezaEuIgaIl/Inc OaOchu+Onze O$Uxo2C]DismoF LeRacoScaS$Z*a:Bimb Rn{oRpe%R['>)zRv&/SacoScaSeb[S%loS~oT a)Tiv UleUs?U%l V&oV(na3BolaDil]G}]Lebr L~ Nou+N,N%ioRc Rr#R%'oRvejaTimV^2Aco)Al{aAm#Ap^ArmeAticeAveEfeEg^E'oEqueIco%If[In`oOc&/Ov(UmboU.Uva0CatrizCl}eD!eD['aEn%Gcui$Rurg@T 2A[zaE_Ic OneUbe2A=Ag'Ba@B($rBr C^El/Ent_E,Gum`oIb'IfaIo%L L{aLh(Lid'Lme@L}oLunaM<=Mb* M-.MitivaMov(MplexoMumNc]N=rNec.Nfu,Ng` Nhec(Njug Nsum'Nt+$Nvi%Op( P{oPi?PoQue%lRagemRdi&Rne)R}h>p|&R[ioR%joRuj>voSs-oS%laT}e%U_UveVilZ*]2A%+AvoEcheE=rEmeErEspoI^Im*&Io~oIseItic Os)UaUz{o2B+m SafioSbo.Sc<,S-/Sfi#Sgas%Sigu&SlizeSmam SovaSpesaS)queSvi T&h T-$rT} Tri$UsaV(Vi=Vot#Z-a3Ag+maAle$Da)Fu,Gi.Lat#Lu-%M*u'Nast@Nh{oOceseRe$Sc[)Sf ceSp oSque%Ssip S)n%T?UrnoV(,Vi,rV~g Z(5Br?L|i=M?M*#NativoNz`>m-%Rs&SagemUr#U$r2EnagemIbleOg @2El EndeE$PloQues><%Vi=,:1Lod'O Olog@0Ific It&Uc#1Ei$Etiv 3E.1Ab| Eg(Ei$rEncoEv?Im* Ogi 0B goBol#Br~/Buti=EndaErg'Is,rPat@P-/P*#Polg P[goPurr Ul?0CaixeC-#Ch-%C}t_Deus Doss Faix Fei%FimGaj#G-/Glob Gom#G+x Gu@Jo La.Qu<$Raiz Rol#Rug SaioSe^S*oSop#T<$Te#Tid!eT|.Tr^T~/V(g Vi#Volv(XameX($Xof[Xu$1Id(me0Uip 0E$Gui=Ra)VaVil]0Bopeu0Acu Ap| AsivoEntu&Id-%Olu'1Ag(oAl Am* A$Aus$Ces,Ci.Clam Ecu.EmploIb'Ig-%On( Pof>p>tu+T@T|V|i)X*aZ-da3Ch#Ijo^I+n%L*oM**oNdaNoR>i#RrugemRv(S%j T&Ud&3ApoB_seC Ch{oGur#L{aL/LmeLtr RmezaSg^Ssu+TaV`aX?Xo2AcidezAm*goAn`aEch^O+Utu Uxo2C&C*/Foc GoGue%IceLg#Lhe$Rj Rmig>noR%ScoSsa2Aga)AldaAngoAscoA%rnoE'aEn%E.IezaI,Itu+On]Ustr U%'a2G'L+faSodu$S$TaTil/Ve)Z`a3L#Le@LoM^M(Mi=N(o,NgivaNi&NomaN_Ologi>?Rm* S,S$r3Nas)Nc*o2Aci&IcoseOb&Orio,2ElaIabaLfeLpe Rdu+Rje)R_S$,T{aV(n 2AcejoAdu&Afi%Al]AmpoAn^Atui$Ave$AxaEgoElh EveIloIs&/I.@Os,O%scoUd#Unhi=U)2AcheA+niAx*imEr[ I Inc/Is#LaLo,Ru:Bi.Rm}@S%V(3C.eRd Res@Si.3A$B(n D+.EnaNoPismoPnosePo%ca5JeLofo%MemNes$Nr#Rm}&Sped 5M|#:Te2E@O,2N|#RejaUdimR_SmimToV&iZida3Jum9An*]Elh^G?I>n&Rr Vem5BaDeuDocaIzLg?L/R#Ris)RoS)::B edaB|&C[C)n%Dril/G )GoaJeMb(M-.M* MpejoNchePid P,R{>gu+S<]St_T(&Ti=VfimRgemR*/Rmi)Ro$RquiseR[coR%loRujoSco%Sm|+SsagemStig Tag&T(noT*&Tu.Xil 3D&]DidaDusaGaf}eIgaLc/Sc~ SeuSic&:Ci}&D?JaMo_R*>r#Sc(TivaTu[zaV&]Veg Vio3Bl*aB~o,GativaGoci Gri$Rvo,TaUr&VascaVo{o3N N/TidezV` 5B[zaI%IvaMe M*&Rdes%R% T Tici TurnoV`oVil/Vo5Bl#DezM(&Pci&Tr'Vem:0Cec#Edec(JetivoRig#Scu_S%t+T(Tur 0Id-%Io,Orr(Ulis)Up#2Eg<%EnsivaEr-daIc*aUsc#0Iva4Ar@Eo,H Iv{a0B_Ele%Is,It'0D~#E_,Tem1Ci}&Er?On-%OrtunoOs$1ArBi.DemD*&Fci&Rd&RedeRtidaSmoSs#S%lTam T-%T* T_noUl^Us 3C~i D& Dest[D@t+D+G^I$r&IxeLeLicplexoRsi<>%nceRucaSc#SquisaS,aTisc 3AdaC#Ed!eGm-$Last+Lh#Lo.M-)Nc`NguimN]No%N.On{oPocaQue%ResRue)Sc S$laTg-$Rje)Tur Ud!eXof}eZ}&3C C~ DaD-$Di#Do,Du$rGm-$G[=Gun=IvaLe$LvagemM<&M-%N?N/rNsu&Nt#P #Rei>*g>+RvoTemb_T|3GiloLhue)Lic}eMetr@Mpat@M~ N&Nc(oNg~ NopseN$ni>-eRiTu#5B(fis)Rp[s>[&Rt'Sp'oS%n$:B`aBle%Bu^C/G `aLh(LoLvezMdioRef>j>+xaTuagemUr*oXativoXis)3Atr&C(Ci=Cl#Dio,IaIm Lef}eLh#Mp(oN-%N,rN.Rm&RnoRr-oSeSou+St#ToXtu+Xugo3A+G`aJoloMbr MidezNgi=N%'oRagemT~ 5Al]C]L( LiceM^Mil/N`Ntu+Pe%R>ci=RneioRqueRr!>$S.UcaUp{aX*a2Ab&/Acej Adu$rAfeg Aje$AmaAnc ApoAs{oAt?Av E*oEm(Epid EvoIagemIboIcicloId-%Ilog@Ind!eIploItur Iunf&Oc Ombe)OvaUnfoUque2B~ CquesaT` T|i&:7V 3Bigo0HaId!eIf|me3Olog@SoTigaUbu0A=InaUfru':C*aDi G o,I=,LaL-%Lid!eLo[sN)gemQu{oRe)Rr(Sc~ Sil]S,u+Z Zio3A=D Ge.Ic~ L{oLhiceLu=Nce=rNdav&N( Nt[Rb&Rd!eRe?Rg}h>m`/RnizRs R%n%SpaSti=T|i&3Adu$AgemAj Atu+Br?D{aDr @ElaGaG-%Gi G| L ejoNcoNhe)NilOle)R!>tudeSi.S$Tr&V{oZ*/5A=rArG&L<%LeibolL)gemLumo,Nt!e5L$Vuz`a::D[zRope3QueRe.Rife3Ng ::Ng#Rp 3BuL?9Mb Olog@5Mbi=","0x2219000926df7b50d8aa0a3d495826b988287df4657fbd100e6fe596c8f737ac")}},$="}aE#4A=Yv&co#4N#6G=cJ&SM#66|/Z#4t&kn~46#4K~4q%b9=IR#7l,mB#7W_X2*dl}Uo~7s}Uf&Iw#9c&cw~6O&H6&wx&IG%v5=IQ~8a&Pv#47$PR&50%Ko&QM&3l#5f,D9#4L|/H&tQ;v0~6n]nN>2),128+Q.indexOf($[3*o+1]),128+Q.indexOf($[3*o+2])];if("zh_tw"===a){for(let o=i%4;o<3;o++)T[o]=Q.indexOf("FAZDC6BALcLZCA+GBARCW8wNCcDDZ8LVFBOqqDUiou+M42TFAyERXFb7EjhP+vmBFpFrUpfDV2F7eB+eCltCHJFWLFCED+pWTojEIHFXc3aFn4F68zqjEuKidS1QBVPDEhE7NA4mhMF7oThD49ot3FgtzHFCK0acW1x8DH1EmLoIlrWFBLE+y5+NA3Cx65wJHTaEZVaK1mWAmPGxgYCdxwOjTDIt/faOEhTl1vqNsKtJCOhJWuio2g07KLZEQsFBUpNtwEByBgxFslFheFbiEPvi61msDvApxCzB6rBCzox7joYA5UdDc+Cb4FSgIabpXFAj3bjkmFAxCZE+mD/SFf/0ELecYCt3nLoxC6WEZf2tKDB4oZvrEmqFkKk7BwILA7gtYBpsTq//D4jD0F0wEB9pyQ1BD5Ba0oYHDI+sbDFhvrHXdDHfgFEIJLi5r8qercNFBgFLC4bo5ERJtamWBDFy73KCEb6M8VpmEt330ygCTK58EIIFkYgF84gtGA9Uyh3m68iVrFbWFbcbqiCYHZ9J1jeRPbL8yswhMiDbhEhdNoSwFbZrLT740ABEqgCkO8J1BLd1VhKKR4sD1yUo0z+FF59Mvg71CFbyEhbHSFBKEIKyoQNgQppq9T0KAqePu0ZFGrXOHdKJqkoTFhYvpDNyuuznrN84thJbsCoO6Cu6Xlvntvy0QYuAExQEYtTUBf3CoCqwgGFZ4u1HJFzDVwEy3cjcpV4QvsPaBC3rCGyCF23o4K3pp2gberGgFEJEHo4nHICtyKH2ZqyxhN05KBBJIQlKh/Oujv/DH32VrlqFdIFC7Fz9Ct4kaqFME0UETLprnN9kfy+kFmtQBB0+5CFu0N9Ij8l/VvJDh2oq3hT6EzjTHKFN7ZjZwoTsAZ4Exsko6Fpa6WC+sduz8jyrLpegTv2h1EBeYpLpm2czQW0KoCcS0bCVXCmuWJDBjN1nQNLdF58SFJ0h7i3pC3oEOKy/FjBklL70XvBEEIWp2yZ04xObzAWDDJG7f+DbqBEA7LyiR95j7MDVdDViz2RE5vWlBMv5e4+VfhP3aXNPhvLSynb9O2x4uFBV+3jqu6d5pCG28/sETByvmu/+IJ0L3wb4rj9DNOLBF6XPIODr4L19U9RRofAG6Nxydi8Bki8BhGJbBAJKzbJxkZSlF9Q2Cu8oKqggB9hBArwLLqEBWEtFowy8XK8bEyw9snT+BeyFk1ZCSrdmgfEwFePTgCjELBEnIbjaDDPJm36rG9pztcEzT8dGk23SBhXBB1H4z+OWze0ooFzz8pDBYFvp9j9tvFByf9y4EFdVnz026CGR5qMr7fxMHN8UUdlyJAzlTBDRC28k+L4FB8078ljyD91tUj1ocnTs8vdEf7znbzm+GIjEZnoZE5rnLL700Xc7yHfz05nWxy03vBB9YGHYOWxgMQGBCR24CVYNE1hpfKxN0zKnfJDmmMgMmBWqNbjfSyFCBWSCGCgR8yFXiHyEj+VtD1FB3FpC1zI0kFbzifiKTLm9yq5zFmur+q8FHqjoOBWsBPiDbnCC2ErunV6cJ6TygXFYHYp7MKN9RUlSIS8/xBAGYLzeqUnBF4QbsTuUkUqGs6CaiDWKWjQK9EJkjpkTmNCPYXL"[e++])+(0==o?228:128)}r.push(n(new Uint8Array(T)))}if(o(r.join("\n")+"\n")!==V[a])throw new Error(`BIP39 Wordlist for ${a} (Chinese) FAILED`);return h[a]=r,r}class Y extends R{constructor(o){super("zh_"+o)}getWord(o){const a=z(this.locale);return(o<0||o>=a.length)&&l.throwArgumentError(`invalid word index: ${o}`,"index",o),a[o]}getWordIndex(o){return z(this.locale).indexOf(o)}split(o){return(o=o.replace(/(?:\u3000| )+/g,"")).split("")}}const k=new Y("cn"),K=new Y("tw");let j=null;function _(o){if(j)throw new Error("already attached");j=o}function w(){if(j)throw new Error("no ethers attached; please use attachEthers");return j}const y=Object.freeze({cz:X,es:E,fr:I,ja:G,ko:Z,it:P,pt:f,zh_cn:k,zh_tw:K});export{_ as attachEthers,w as getEthers,y as wordlists}; diff --git a/packages/ethers/dist/ethers.js b/packages/ethers/dist/ethers.js new file mode 100644 index 000000000..c58785a28 --- /dev/null +++ b/packages/ethers/dist/ethers.js @@ -0,0 +1,16146 @@ +//import type { BigNumber, BigNumberish } from "./big-number"; +//import type { Bytes, BytesLike } from "./bytes"; +//import type { Signature, SignatureLike } from "./signature"; +/* +export type Loose = T extends BigNumber ? BigNumberish: + T extends number ? BigNumberish: + T extends Bytes ? BytesLike: + T extends Signature ? SignatureLike: + T; +export type LooseObject = { [P in keyof T]?: Loose; }; +*/ +//export type Deferrable = T | Promise; +/* +export type DeferrableObject = { + [ P in keyof T ]: Deferrable +}; +*/ +/* +export type Frozen = Readonly<{ + [ P in keyof T ]: T[P] extends Freezable ? Frozen: T[P]; +}>; + +export interface Freezable { + clone(): T; + freeze(): Frozen; + isFrozen(): boolean; +} +*/ +/* +const _data: WeakMap = new WeakMap(); + +export class Data implements Freezable { + #props: { + data: Uint8Array + }; + + [ index: number ]: number; + + constructor(lengthOrData: number | Uint8Array) { + if (typeof(lengthOrData) === "number") { + _data[this] = new Uint8Array(lengthOrData); + } else { + _data[this] = lengthOrData; + } + + return new Proxy(this, { + get: (target, prop, receiver) => { + const index = parseInt(String(prop)); + if (String(index) !== prop) { return Reflect.get(target, prop, receiver); } + + const data = _data[this]; + if (index < 0 || index > data.length || index % 1) { + throw new Error(""); + } + return data[index]; + }, + + set: (target, prop, value, receiver) => { + const index = parseInt(String(prop)); + if (String(index) !== prop) { return false; } + + if (value < 0 || value > 255 || value % 1) { return false; } + + const data = _data[this]; + if (index < 0 || index > data.length || index % 1) { + return false; + } + + data[index] = value; + + return true; + }, + }); + } + + toString(): string { + return this.slice().toString(); + } + + slice(): Uint8Array { + return _data.get(this).slice(); + } + + clone(): Data { + return new Data(this.slice()); + } + + freeze(): Frozen { + //Object.freeze(this.#props); + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } +} +const d = new Data(4); +console.log(d.toString()); +d[0] = 45; +console.log(d.toString()); +*/ +/* +export type DeferrableObject = { + [ P in keyof T ]: Deferrable +}; +*/ +async function resolveProperties(value) { + const keys = Object.keys(value); + const results = await Promise.all(keys.map((k) => Promise.resolve(value[k]))); + return results.reduce((accum, v, index) => { + accum[keys[index]] = v; + return accum; + }, {}); +} +/* +export type IsCancelled = () => Promise; + +export function createPromise(resolve: (isCancelled: IsCancelled, (result: T) => void) => void, reject: (error: Error) => void, isCancelled: IsCancelled): CancellablePromise { + let cancelled = false; + + const promise = new Promise((resolve, reject) => { + + }); + + (>promise).cancel = function() { + cancelled = true; + }; + + return (>promise); +} +*/ +/* +export class A implements Freezable { + foo: number; + constructor(foo: number) { + this.foo = foo; + } + freeze(): Frozen { + Object.freeze(this); + return this; + } + clone(): A { + return new A(this.foo); + } +} + +export class B implements Freezable { + a: A; + constructor(a: A) { + this.a = a; + } + freeze(): Frozen { + this.a.freeze(); + Object.freeze(this); + return this; + } + clone(): B { + return new B(this.a); + } +} + +export function test() { + const a = new A(123); + const b = new B(a); + b.a = new A(234); + const b2 = b.freeze(); + b2.a.foo = 123; // = a; +} +*/ +function checkType(value, type) { + const types = type.split("|").map(t => t.trim()); + for (let i = 0; i < types.length; i++) { + switch (type) { + case "any": + return; + case "boolean": + case "number": + case "string": + if (typeof (value) === type) { + return; + } + } + } + throw new Error("invalid value for type"); +} +function defineProperties(target, values, types, defaults) { + for (let key in values) { + let value = values[key]; + const fallback = (defaults ? defaults[key] : undefined); + if (fallback !== undefined) { + value = fallback; + } + else { + const type = (types ? types[key] : null); + if (type) { + checkType(value, type); + } + } + Object.defineProperty(target, key, { enumerable: true, value, writable: false }); + } +} + +var __classPrivateFieldSet$x = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$z = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _EventPayload_listener; +class EventPayload { + constructor(emitter, listener, filter) { + _EventPayload_listener.set(this, void 0); + __classPrivateFieldSet$x(this, _EventPayload_listener, listener, "f"); + defineProperties(this, { emitter, filter }); + } + async removeListener() { + if (__classPrivateFieldGet$z(this, _EventPayload_listener, "f") == null) { + return; + } + await this.emitter.off(this.filter, __classPrivateFieldGet$z(this, _EventPayload_listener, "f")); + } +} +_EventPayload_listener = new WeakMap(); + +function getStore(store, key) { + return store[key]; +} +function setStore(store, key, value) { + if (Object.isFrozen(store)) { + throw new Error("frozen object is immuatable; cannot set " + key); + } + store[key] = value; +} + +//export type TransactionReceipt { +//} +/** + * try { + * // code.... + * } catch (e) { + * if (isError(e, errors.CALL_EXCEPTION)) { + * console.log(e.data); + * } + * } + */ +function isError(error, code) { + return (error && error.code === code); +} +function isCallException(error) { + return isError(error, "CALL_EXCEPTION"); +} +/* +export function isContractCallException(error: any): error is ContractCallExceptionError { + return isError(error, "CALL_EXCEPTION") && (error).method; +} +*/ + +const version$g = "@ethersproject/logger@6.0.0-beta.1"; + +var __classPrivateFieldGet$y = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Logger_instances, _Logger_assertIntRange, _Logger_getBytes, _Logger_log; +var LogLevel; +(function (LogLevel) { + LogLevel["DEBUG"] = "DEBUG"; + LogLevel["INFO"] = "INFO"; + LogLevel["WARNING"] = "WARNING"; + LogLevel["ERROR"] = "ERROR"; + LogLevel["OFF"] = "OFF"; +})(LogLevel || (LogLevel = {})); +const LogLevels = { debug: 1, "default": 2, info: 2, warning: 3, error: 4, off: 5 }; +let _logLevel = LogLevels["default"]; +let _globalLogger = null; +const _normalizeForms = ["NFD", "NFC", "NFKD", "NFKC"].reduce((accum, form) => { + try { + // General test for normalize + /* c8 ignore start */ + if ("test".normalize(form) !== "test") { + throw new Error("bad"); + } + ; + /* c8 ignore stop */ + if (form === "NFD") { + const check = String.fromCharCode(0xe9).normalize("NFD"); + const expected = String.fromCharCode(0x65, 0x0301); + /* c8 ignore start */ + if (check !== expected) { + throw new Error("broken"); + } + /* c8 ignore stop */ + } + accum.push(form); + } + catch (error) { } + return accum; +}, []); +function defineReadOnly(object, name, value) { + Object.defineProperty(object, name, { + enumerable: true, writable: false, value, + }); +} +/* +enum Censor { + OFF = 0, + ON = 1, + PERMANENT = 2 +}; +let _censor = Censor.OFF; +*/ +// IEEE 754 support 53-bits of mantissa +const maxValue$1 = 0x1fffffffffffff; +// The type of error to use for various error codes +const ErrorConstructors = {}; +ErrorConstructors.INVALID_ARGUMENT = TypeError; +ErrorConstructors.NUMERIC_FAULT = RangeError; +ErrorConstructors.BUFFER_OVERRUN = RangeError; +class Logger { + constructor(version) { + _Logger_instances.add(this); + defineReadOnly(this, "version", version || "_"); + } + makeError(message, code, info) { + // Errors are being censored + //if (_censor === Censor.ON || _censor === Censor.PERMANENT) { + // return this.makeError("censored error", code, { }); + //} + { + const details = []; + if (info) { + for (const key in info) { + const value = (info[key]); + try { + details.push(key + "=" + JSON.stringify(value)); + } + catch (error) { + details.push(key + "=[could not serialize object]"); + } + } + } + details.push(`code=${code}`); + details.push(`version=${this.version}`); + if (details.length) { + message += " (" + details.join(", ") + ")"; + } + } + const create = ErrorConstructors[code] || Error; + const error = (new create(message)); + defineReadOnly(error, "code", code); + if (info) { + for (const key in info) { + defineReadOnly(error, key, (info[key])); + } + } + return error; + } + throwError(message, code, info) { + throw this.makeError(message, code, info); + } + throwArgumentError(message, name, value) { + return this.throwError(message, "INVALID_ARGUMENT", { + argument: name, + value: value + }); + } + assert(condition, message, code, info) { + if (!!condition) { + return; + } + this.throwError(message, code || "UNKNOWN_ERROR", info); + } + assertArgument(condition, message, name, value) { + return this.assert(condition, message, "INVALID_ARGUMENT", { + argument: name, + value + }); + } + assertIntegerArgument(name, value, lower, upper) { + let message = null; + if (typeof (value) !== "number") { + message = "expected a number"; + } + else if (!Number.isInteger(value)) { + message = "invalid integer"; + } + else if ((lower != null && value < lower) || (upper != null && value > upper)) { + message = "value is out of range"; + } + if (message) { + this.throwArgumentError(message, name, value); + } + } + assertSafeUint53(value, message) { + this.assertArgument((typeof (value) === "number"), "invalid number", "value", value); + if (message == null) { + message = "value not safe"; + } + const operation = "assertSafeInteger"; + this.assert((value >= 0 && value < 0x1fffffffffffff), message, "NUMERIC_FAULT", { + operation, fault: "out-of-safe-range", value + }); + this.assert((value % 1) === 0, message, "NUMERIC_FAULT", { + operation, fault: "non-integer", value + }); + } + assertNormalize(form) { + if (_normalizeForms.indexOf(form) === -1) { + this.throwError("platform missing String.prototype.normalize", "UNSUPPORTED_OPERATION", { + operation: "String.prototype.normalize", info: { form } + }); + } + } + assertPrivate(givenGuard, guard, className = "") { + if (givenGuard !== guard) { + let method = className, operation = "new"; + if (className) { + method += "."; + operation += " " + className; + } + this.throwError(`private constructor; use ${method}from* methods`, "UNSUPPORTED_OPERATION", { + operation + }); + } + } + assertArgumentCount(count, expectedCount, message = "") { + if (message) { + message = ": " + message; + } + this.assert((count >= expectedCount), "missing arguemnt" + message, "MISSING_ARGUMENT", { + count: count, + expectedCount: expectedCount + }); + this.assert((count >= expectedCount), "too many arguemnts" + message, "UNEXPECTED_ARGUMENT", { + count: count, + expectedCount: expectedCount + }); + } + assertInt53(value, operation) { + __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_assertIntRange).call(this, "Int53", value, operation || "unknown", -maxValue$1); + } + assertUint53(value, operation) { + __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_assertIntRange).call(this, "Int53", value, operation || "unknown", 0); + } + assertInteger(value, operation = "unknown", min = 0, max = maxValue$1) { + //this.#assertIntRange("Int53", value, operation || "unknown", 0); + } + getBytes(value, name) { + return __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_getBytes).call(this, value, name, false); + } + getBytesCopy(value, name) { + return __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_getBytes).call(this, value, name, true); + } + getNumber(value, name) { + switch (typeof (value)) { + case "bigint": + if (value < -maxValue$1 || value > maxValue$1) { + this.throwArgumentError("overflow", name || "value", value); + } + return Number(value); + case "number": + if (!Number.isInteger(value)) { + this.throwArgumentError("underflow", name || "value", value); + } + else if (value < -maxValue$1 || value > maxValue$1) { + this.throwArgumentError("overflow", name || "value", value); + } + return value; + case "string": + try { + return this.getNumber(BigInt(value), name); + } + catch (e) { + this.throwArgumentError(`invalid numeric string: ${e.message}`, name || "value", value); + } + } + return this.throwArgumentError("invalid numeric value", name || "value", value); + } + getBigInt(value, name) { + switch (typeof (value)) { + case "bigint": return value; + case "number": + if (!Number.isInteger(value)) { + this.throwArgumentError("underflow", name || "value", value); + } + else if (value < -maxValue$1 || value > maxValue$1) { + this.throwArgumentError("overflow", name || "value", value); + } + return BigInt(value); + case "string": + try { + return BigInt(value); + } + catch (e) { + this.throwArgumentError(`invalid BigNumberish string: ${e.message}`, name || "value", value); + } + } + return this.throwArgumentError("invalid BigNumberish value", name || "value", value); + } + debug(...args) { + __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_log).call(this, LogLevel.DEBUG, args); + } + info(...args) { + __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_log).call(this, LogLevel.INFO, args); + } + warn(...args) { + __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_log).call(this, LogLevel.WARNING, args); + } + static globalLogger() { + if (!_globalLogger) { + _globalLogger = new Logger(version$g); + } + return _globalLogger; + } + static setLogLevel(logLevel) { + const level = LogLevels[logLevel.toLowerCase()]; + if (level == null) { + Logger.globalLogger().warn("invalid log level - " + logLevel); + return; + } + _logLevel = level; + } +} +_Logger_instances = new WeakSet(), _Logger_assertIntRange = function _Logger_assertIntRange(name, value, operation, minValue) { + if (typeof (value) !== "number" || isNaN(value)) { + this.throwArgumentError(`invalid ${name}`, "INVALID_ARGUMENT", { + name: "value", value + }); + } + let message = `invalid ${name} value`; + let fault = null; + if (isNaN(value)) { + fault = "not-a-number"; + } + else if (value < minValue || value > maxValue$1) { + message = `unsafe ${name} value`; + fault = "overflow"; + } + else if (Math.floor(value) !== value) { + fault = "underflow"; + } + if (fault) { + this.throwError(message, "NUMERIC_FAULT", { + operation, fault, value + }); + } +}, _Logger_getBytes = function _Logger_getBytes(value, name, copy) { + if (value instanceof Uint8Array) { + if (copy) { + return new Uint8Array(value); + } + return value; + } + if (typeof (value) === "string" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) { + const result = new Uint8Array((value.length - 2) / 2); + let offset = 2; + for (let i = 0; i < result.length; i++) { + result[i] = parseInt(value.substring(offset, offset + 2), 16); + offset += 2; + } + return result; + } + return this.throwArgumentError("invalid BytesLike value", name || "value", value); +}, _Logger_log = function _Logger_log(logLevel, args) { + const level = logLevel.toLowerCase(); + if (LogLevels[level] == null) { + this.throwArgumentError("invalid log level name", "logLevel", logLevel); + } + if (_logLevel > LogLevels[level]) { + return; + } + console.log.apply(console, args); +}; +//static readonly Errors = ErrorCode; +Logger.LogLevels = LogLevel; +//const l = new Logger(); +//l.makeError("foo", Logger.Errors.NUMERIC_FAULT, { fault: "foo", operation: "bar", value: 3 }); +//l.makeError("foo", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { transaction: null }); +//l.makeError("foo", ErrorCode.NUMERIC_FAULT, { fault: "foo", operation: "bar" }); +//l.makeError("foo", ErrorCode.NUMERIC_FAULT, { fault: "foo", operation: "bar", gii: "5" }); +//console.log(LogLevel); + +const version$f = "@ethersproject/abi@6.0.0-beta.1"; + +const logger$e = new Logger(version$f); + +var __classPrivateFieldSet$w = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$x = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _TokenString_instances, _TokenString_offset, _TokenString_tokens, _TokenString_subTokenString, _ParamType_instances, _ParamType_walkAsync; +var FormatType; +(function (FormatType) { + // Bare formatting, as is needed for computing a sighash of an event or function + FormatType["sighash"] = "sighash"; + // Human-Readable with Minimal spacing and without names (compact human-readable) + FormatType["minimal"] = "minimal"; + // Human-Readable with nice spacing, including all names + FormatType["full"] = "full"; + // JSON-format a la Solidity + FormatType["json"] = "json"; +})(FormatType || (FormatType = {})); +// [ "a", "b" ] => { "a": 1, "b": 1 } +function setify(items) { + const result = new Set(); + items.forEach((k) => result.add(k)); + return Object.freeze(result); +} +// Visibility Keywords +const _kwVisib = "constant external internal payable private public pure view"; +const KwVisib = setify(_kwVisib.split(" ")); +const _kwTypes = "constructor error event function struct"; +const KwTypes = setify(_kwTypes.split(" ")); +const _kwModifiers = "calldata memory storage payable indexed"; +const KwModifiers = setify(_kwModifiers.split(" ")); +const _kwOther = "tuple returns"; +// All Keywords +const _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(" "); +const Keywords = setify(_keywords.split(" ")); +// Single character tokens +const SimpleTokens = { + "(": "OPEN_PAREN", ")": "CLOSE_PAREN", + "[": "OPEN_BRACKET", "]": "CLOSE_BRACKET", + ",": "COMMA", "@": "AT" +}; +// Parser regexes to consume the next token +const regexWhitespace = new RegExp("^(\\s*)"); +const regexNumber = new RegExp("^([0-9]+)"); +const regexIdentifier = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"); +const regexType = new RegExp("^(address|bool|bytes(0-9*)|string|u?int([0-9]*))"); +class TokenString { + constructor(tokens) { + _TokenString_instances.add(this); + _TokenString_offset.set(this, void 0); + _TokenString_tokens.set(this, void 0); + __classPrivateFieldSet$w(this, _TokenString_offset, 0, "f"); + __classPrivateFieldSet$w(this, _TokenString_tokens, tokens.slice(), "f"); + } + get offset() { return __classPrivateFieldGet$x(this, _TokenString_offset, "f"); } + get length() { return __classPrivateFieldGet$x(this, _TokenString_tokens, "f").length - __classPrivateFieldGet$x(this, _TokenString_offset, "f"); } + clone() { return new TokenString(__classPrivateFieldGet$x(this, _TokenString_tokens, "f")); } + reset() { __classPrivateFieldSet$w(this, _TokenString_offset, 0, "f"); } + // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens + popKeyword(allowed) { + const top = this.peek(); + if (top.type !== "KEYWORD" || !allowed.has(top.text)) { + throw new Error(`expected keyword ${top.text}`); + } + return this.pop().text; + } + // Pops and returns the value of the next token if it is `type`; throws if out of tokens + popType(type) { + if (this.peek().type !== type) { + throw new Error(`expected ${type}; got ${JSON.stringify(this.peek())}`); + } + return this.pop().text; + } + // Pops and returns a "(" TOKENS ")" + popParen() { + const top = this.peek(); + if (top.type !== "OPEN_PAREN") { + throw new Error("bad start"); + } + const result = __classPrivateFieldGet$x(this, _TokenString_instances, "m", _TokenString_subTokenString).call(this, __classPrivateFieldGet$x(this, _TokenString_offset, "f") + 1, top.match + 1); + __classPrivateFieldSet$w(this, _TokenString_offset, top.match + 1, "f"); + return result; + } + // Pops and returns the items within "(" ITEM1 "," ITEM2 "," ... ")" + popParams() { + const top = this.peek(); + if (top.type !== "OPEN_PAREN") { + throw new Error("bad start"); + } + const result = []; + while (__classPrivateFieldGet$x(this, _TokenString_offset, "f") < top.match - 1) { + const link = this.peek().linkNext; + result.push(__classPrivateFieldGet$x(this, _TokenString_instances, "m", _TokenString_subTokenString).call(this, __classPrivateFieldGet$x(this, _TokenString_offset, "f") + 1, link)); + __classPrivateFieldSet$w(this, _TokenString_offset, link, "f"); + } + __classPrivateFieldSet$w(this, _TokenString_offset, top.match + 1, "f"); + return result; + } + // Returns the top Token, throwing if out of tokens + peek() { + if (__classPrivateFieldGet$x(this, _TokenString_offset, "f") >= __classPrivateFieldGet$x(this, _TokenString_tokens, "f").length) { + throw new Error("out-of-bounds"); + } + return __classPrivateFieldGet$x(this, _TokenString_tokens, "f")[__classPrivateFieldGet$x(this, _TokenString_offset, "f")]; + } + // Returns the next value, if it is a keyword in `allowed` + peekKeyword(allowed) { + const top = this.peekType("KEYWORD"); + return (top != null && allowed.has(top)) ? top : null; + } + // Returns the value of the next token if it is `type` + peekType(type) { + if (this.length === 0) { + return null; + } + const top = this.peek(); + return (top.type === type) ? top.text : null; + } + // Returns the next token; throws if out of tokens + pop() { + var _a; + const result = this.peek(); + __classPrivateFieldSet$w(this, _TokenString_offset, (_a = __classPrivateFieldGet$x(this, _TokenString_offset, "f"), _a++, _a), "f"); + return result; + } + toString() { + const tokens = []; + for (let i = __classPrivateFieldGet$x(this, _TokenString_offset, "f"); i < __classPrivateFieldGet$x(this, _TokenString_tokens, "f").length; i++) { + const token = __classPrivateFieldGet$x(this, _TokenString_tokens, "f")[i]; + tokens.push(`${token.type}:${token.text}`); + } + return ``; + } +} +_TokenString_offset = new WeakMap(), _TokenString_tokens = new WeakMap(), _TokenString_instances = new WeakSet(), _TokenString_subTokenString = function _TokenString_subTokenString(from = 0, to = 0) { + return new TokenString(__classPrivateFieldGet$x(this, _TokenString_tokens, "f").slice(from, to).map((t) => { + return Object.freeze(Object.assign({}, t, { + match: (t.match - from), + linkBack: (t.linkBack - from), + linkNext: (t.linkNext - from), + })); + })); +}; +function lex(text) { + const tokens = []; + const throwError = (message) => { + const token = (offset < text.length) ? JSON.stringify(text[offset]) : "$EOI"; + throw new Error(`invalid token ${token} at ${offset}: ${message}`); + }; + let brackets = []; + let commas = []; + let offset = 0; + while (offset < text.length) { + // Strip off any leading whitespace + let cur = text.substring(offset); + let match = cur.match(regexWhitespace); + if (match) { + offset += match[1].length; + cur = text.substring(offset); + } + const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: "", text: "", offset, value: -1 }; + tokens.push(token); + let type = (SimpleTokens[cur[0]] || ""); + if (type) { + token.type = type; + token.text = cur[0]; + offset++; + if (type === "OPEN_PAREN") { + brackets.push(tokens.length - 1); + commas.push(tokens.length - 1); + } + else if (type == "CLOSE_PAREN") { + if (brackets.length === 0) { + throwError("no matching open bracket"); + } + token.match = brackets.pop(); + (tokens[token.match]).match = tokens.length - 1; + token.depth--; + token.linkBack = commas.pop(); + (tokens[token.linkBack]).linkNext = tokens.length - 1; + } + else if (type === "COMMA") { + token.linkBack = commas.pop(); + (tokens[token.linkBack]).linkNext = tokens.length - 1; + commas.push(tokens.length - 1); + } + else if (type === "OPEN_BRACKET") { + token.type = "BRACKET"; + } + else if (type === "CLOSE_BRACKET") { + // Remove the CLOSE_BRACKET + let suffix = tokens.pop().text; + if (tokens.length > 0 && tokens[tokens.length - 1].type === "NUMBER") { + const value = tokens.pop().text; + suffix = value + suffix; + (tokens[tokens.length - 1]).value = logger$e.getNumber(value); + } + if (tokens.length === 0 || tokens[tokens.length - 1].type !== "BRACKET") { + throw new Error("missing opening bracket"); + } + (tokens[tokens.length - 1]).text += suffix; + } + continue; + } + match = cur.match(regexIdentifier); + if (match) { + token.text = match[1]; + offset += token.text.length; + if (Keywords.has(token.text)) { + token.type = "KEYWORD"; + continue; + } + if (token.text.match(regexType)) { + token.type = "TYPE"; + continue; + } + token.type = "ID"; + continue; + } + match = cur.match(regexNumber); + if (match) { + token.text = match[1]; + token.type = "NUMBER"; + offset += token.text.length; + continue; + } + throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`); + } + return new TokenString(tokens.map((t) => Object.freeze(t))); +} +// Check only one of `allowed` is in `set` +function allowSingle(set, allowed) { + let included = []; + for (const key in allowed.keys()) { + if (set.has(key)) { + included.push(key); + } + } + if (included.length > 1) { + throw new Error(`conflicting types: ${included.join(", ")}`); + } +} +// Functions to process a Solidity Signature TokenString from left-to-right for... +// ...the name with an optional type, returning the name +function consumeName(type, tokens) { + if (tokens.peekKeyword(KwTypes)) { + const keyword = tokens.pop().text; + if (keyword !== type) { + throw new Error(`expected ${type}, got ${keyword}`); + } + } + return tokens.popType("ID"); +} +// ...all keywords matching allowed, returning the keywords +function consumeKeywords(tokens, allowed) { + const keywords = new Set(); + while (true) { + const keyword = tokens.peekType("KEYWORD"); + if (keyword == null || (allowed && !allowed.has(keyword))) { + break; + } + tokens.pop(); + if (keywords.has(keyword)) { + throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`); + } + keywords.add(keyword); + } + return Object.freeze(keywords); +} +// ...all visibility keywords, returning the coalesced mutability +function consumeMutability(tokens) { + let modifiers = consumeKeywords(tokens, KwVisib); + // Detect conflicting modifiers + allowSingle(modifiers, setify("constant payable nonpayable".split(" "))); + allowSingle(modifiers, setify("pure view payable nonpayable".split(" "))); + // Process mutability states + if (modifiers.has("view")) { + return "view"; + } + if (modifiers.has("pure")) { + return "pure"; + } + if (modifiers.has("payable")) { + return "payable"; + } + if (modifiers.has("nonpayable")) { + return "nonpayable"; + } + // Process legacy `constant` last + if (modifiers.has("constant")) { + return "view"; + } + return "nonpayable"; +} +// ...a parameter list, returning the ParamType list +function consumeParams(tokens, allowIndexed) { + return tokens.popParams().map((t) => ParamType.fromTokens(t, allowIndexed)); +} +// ...a gas limit, returning a BigNumber or null if none +function consumeGas(tokens) { + if (tokens.peekType("AT")) { + tokens.pop(); + if (tokens.peekType("NUMBER")) { + return logger$e.getBigInt(tokens.pop().text); + } + throw new Error("invalid gas"); + } + return null; +} +function consumeEoi(tokens) { + if (tokens.length) { + throw new Error(`unexpected tokens: ${tokens.toString()}`); + } +} +const regexArrayType = new RegExp(/^(.*)\[([0-9]*)\]$/); +function verifyBasicType(type) { + const match = type.match(regexType); + if (!match) { + return logger$e.throwArgumentError("invalid type", "type", type); + } + if (type === "uint") { + return "uint256"; + } + if (type === "int") { + return "int256"; + } + if (match[2]) { + // bytesXX + const length = parseInt(match[2]); + if (length === 0 || length > 32) { + logger$e.throwArgumentError("invalid bytes length", "type", type); + } + } + else if (match[3]) { + // intXX or uintXX + const size = parseInt(match[3]); + if (size === 0 || size > 256 || size % 8) { + logger$e.throwArgumentError("invalid numeric width", "type", type); + } + } + return type; +} +// Make the Fragment constructors effectively private +const _guard$4 = {}; +const internal$1 = Symbol.for("_ethers_internal"); +const ParamTypeInternal = "_ParamTypeInternal"; +class ParamType { + constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) { + _ParamType_instances.add(this); + logger$e.assertPrivate(guard, _guard$4, "ParamType"); + Object.defineProperty(this, internal$1, { value: ParamTypeInternal }); + if (components) { + components = Object.freeze(components.slice()); + } + if (baseType === "array") { + if (arrayLength == null || arrayChildren == null) { + throw new Error(""); + } + } + else if (arrayLength != null || arrayChildren != null) { + throw new Error(""); + } + if (baseType === "tuple") { + if (components == null) { + throw new Error(""); + } + } + else if (components != null) { + throw new Error(""); + } + defineProperties(this, { + name, type, baseType, indexed, components, arrayLength, arrayChildren + }); + } + // Format the parameter fragment + // - sighash: "(uint256,address)" + // - minimal: "tuple(uint256,address) indexed" + // - full: "tuple(uint256 foo, address bar) indexed baz" + format(format = FormatType.sighash) { + if (!FormatType[format]) { + logger$e.throwArgumentError("invalid format type", "format", format); + } + if (format === FormatType.json) { + let result = { + type: ((this.baseType === "tuple") ? "tuple" : this.type), + name: (this.name || undefined) + }; + if (typeof (this.indexed) === "boolean") { + result.indexed = this.indexed; + } + if (this.isTuple()) { + result.components = this.components.map((c) => JSON.parse(c.format(format))); + } + return JSON.stringify(result); + } + let result = ""; + // Array + if (this.isArray()) { + result += this.arrayChildren.format(format); + result += `[${(this.arrayLength < 0 ? "" : String(this.arrayLength))}]`; + } + else { + if (this.isTuple()) { + if (format !== FormatType.sighash) { + result += this.type; + } + result += "(" + this.components.map((comp) => comp.format(format)).join((format === FormatType.full) ? ", " : ",") + ")"; + } + else { + result += this.type; + } + } + if (format !== FormatType.sighash) { + if (this.indexed === true) { + result += " indexed"; + } + if (format === FormatType.full && this.name) { + result += " " + this.name; + } + } + return result; + } + static isArray(value) { + return value && (value.baseType === "array"); + } + isArray() { + return (this.baseType === "array"); + } + isTuple() { + return (this.baseType === "tuple"); + } + isIndexable() { + return (this.indexed != null); + } + walk(value, process) { + if (this.isArray()) { + if (!Array.isArray(value)) { + throw new Error("invlaid array value"); + } + if (this.arrayLength !== -1 && value.length !== this.arrayLength) { + throw new Error("array is wrong length"); + } + return value.map((v) => (this.arrayChildren.walk(v, process))); + } + if (this.isTuple()) { + if (!Array.isArray(value)) { + throw new Error("invlaid tuple value"); + } + if (value.length !== this.components.length) { + throw new Error("array is wrong length"); + } + return value.map((v, i) => (this.components[i].walk(v, process))); + } + return process(this.type, value); + } + async walkAsync(value, process) { + const promises = []; + const result = [value]; + __classPrivateFieldGet$x(this, _ParamType_instances, "m", _ParamType_walkAsync).call(this, promises, value, process, (value) => { + result[0] = value; + }); + if (promises.length) { + await Promise.all(promises); + } + return result[0]; + } + static from(obj, allowIndexed) { + if (ParamType.isParamType(obj)) { + return obj; + } + if (typeof (obj) === "string") { + return ParamType.fromTokens(lex(obj), allowIndexed); + } + if (obj instanceof TokenString) { + return ParamType.fromTokens(obj, allowIndexed); + } + const name = obj.name; + if (name && (typeof (name) !== "string" || !name.match(regexIdentifier))) { + logger$e.throwArgumentError("invalid name", "obj.name", name); + } + let indexed = obj.indexed; + if (indexed != null) { + if (!allowIndexed) { + logger$e.throwArgumentError("parameter cannot be indexed", "obj.indexed", obj.indexed); + } + indexed = !!indexed; + } + let type = obj.type; + let arrayMatch = type.match(regexArrayType); + if (arrayMatch) { + const arrayLength = arrayMatch[2]; + const arrayChildren = ParamType.from({ + type: arrayMatch[1], + components: obj.components + }); + return new ParamType(_guard$4, name, type, "array", indexed, null, arrayLength, arrayChildren); + } + if (type.substring(0, 5) === "tuple(" || type[0] === "(") { + const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null; + const tuple = new ParamType(_guard$4, name, type, "tuple", indexed, comps, null, null); + // @TODO: use lexer to validate and normalize type + return tuple; + } + type = verifyBasicType(obj.type); + return new ParamType(_guard$4, name, type, type, indexed, null, null, null); + } + static fromObject(obj, allowIndexed) { + throw new Error("@TODO"); + } + static fromTokens(tokens, allowIndexed) { + let type = "", baseType = ""; + let comps = null; + if (consumeKeywords(tokens, setify(["tuple"])).has("tuple") || tokens.peekType("OPEN_PAREN")) { + // Tuple + baseType = "tuple"; + comps = tokens.popParams().map((t) => ParamType.from(t)); + type = `tuple(${comps.map((c) => c.format()).join(",")})`; + } + else { + // Normal + type = verifyBasicType(tokens.popType("TYPE")); + baseType = type; + } + // Check for Array + let arrayChildren = null; + let arrayLength = null; + while (tokens.length && tokens.peekType("BRACKET")) { + const bracket = tokens.pop(); //arrays[i]; + arrayChildren = new ParamType(_guard$4, "", type, baseType, null, comps, arrayLength, arrayChildren); + arrayLength = bracket.value; + type += bracket.text; + baseType = "array"; + comps = null; + } + let indexed = null; + const keywords = consumeKeywords(tokens, KwModifiers); + if (keywords.has("indexed")) { + if (!allowIndexed) { + throw new Error(""); + } + indexed = true; + } + const name = (tokens.peekType("ID") ? tokens.pop().text : ""); + if (tokens.length) { + throw new Error("leftover tokens"); + } + return new ParamType(_guard$4, name, type, baseType, indexed, comps, arrayLength, arrayChildren); + } + static isParamType(value) { + return (value && value[internal$1] === ParamTypeInternal); + } +} +_ParamType_instances = new WeakSet(), _ParamType_walkAsync = function _ParamType_walkAsync(promises, value, process, setValue) { + if (this.isArray()) { + if (!Array.isArray(value)) { + throw new Error("invlaid array value"); + } + if (this.arrayLength !== -1 && value.length !== this.arrayLength) { + throw new Error("array is wrong length"); + } + const childType = this.arrayChildren; + const result = value.slice(); + result.forEach((value, index) => { + __classPrivateFieldGet$x(childType, _ParamType_instances, "m", _ParamType_walkAsync).call(childType, promises, value, process, (value) => { + result[index] = value; + }); + }); + setValue(result); + return; + } + if (this.isTuple()) { + const components = this.components; + // Convert the object into an array + let result; + if (Array.isArray(value)) { + result = value.slice(); + } + else { + if (value == null || typeof (value) !== "object") { + throw new Error("invlaid tuple value"); + } + result = components.map((param) => { + if (!param.name) { + throw new Error("cannot use object value with unnamed components"); + } + if (!(param.name in value)) { + throw new Error(`missing value for component ${param.name}`); + } + return value[param.name]; + }); + } + if (value.length !== this.components.length) { + throw new Error("array is wrong length"); + } + result.forEach((value, index) => { + var _a; + __classPrivateFieldGet$x((_a = components[index]), _ParamType_instances, "m", _ParamType_walkAsync).call(_a, promises, value, process, (value) => { + result[index] = value; + }); + }); + setValue(result); + return; + } + const result = process(this.type, value); + if (result.then) { + promises.push((async function () { setValue(await result); })()); + } + else { + setValue(result); + } +}; +var FragmentType; +(function (FragmentType) { + FragmentType["constructor"] = "constructor"; + FragmentType["error"] = "error"; + FragmentType["event"] = "event"; + FragmentType["function"] = "function"; + FragmentType["struct"] = "struct"; +})(FragmentType || (FragmentType = {})); +class Fragment { + constructor(guard, type, inputs) { + logger$e.assertPrivate(guard, _guard$4, "Fragment"); + inputs = Object.freeze(inputs.slice()); + defineProperties(this, { type, inputs }); + } + static from(obj) { + if (typeof (obj) === "string") { + return this.fromString(obj); + } + if (obj instanceof TokenString) { + return this.fromTokens(obj); + } + if (typeof (obj) === "object") { + return this.fromObject(obj); + } + throw new Error(`unsupported type: ${obj}`); + } + static fromObject(obj) { + switch (obj.type) { + case "constructor": return ConstructorFragment.fromObject(obj); + case "error": return ErrorFragment.fromObject(obj); + case "event": return EventFragment.fromObject(obj); + case "function": return FunctionFragment.fromObject(obj); + case "struct": return StructFragment.fromObject(obj); + } + throw new Error("not implemented yet"); + } + static fromString(text) { + try { + Fragment.from(JSON.parse(text)); + } + catch (e) { } + return Fragment.fromTokens(lex(text)); + } + static fromTokens(tokens) { + const type = tokens.popKeyword(KwTypes); + switch (type) { + case "constructor": return ConstructorFragment.fromTokens(tokens); + case "error": return ErrorFragment.fromTokens(tokens); + case "event": return EventFragment.fromTokens(tokens); + case "function": return FunctionFragment.fromTokens(tokens); + case "struct": return StructFragment.fromTokens(tokens); + } + throw new Error(`unsupported type: ${type}`); + } + /* + static fromTokens(tokens: TokenString): Fragment { + const assertDone = () => { + if (tokens.length) { throw new Error(`unexpected tokens: ${ tokens.toString() }`); } + }); + + const type = (tokens.length && tokens.peek().type === "KEYWORD") ? tokens.peek().text: "unknown"; + + const name = consumeName("error", tokens); + const inputs = consumeParams(tokens, type === "event"); + + switch (type) { + case "event": case "struct": + assertDone(); + } + + } + */ + static isConstructor(value) { + return (value && value.type === "constructor"); + } + static isError(value) { + return (value && value.type === "error"); + } + static isEvent(value) { + return (value && value.type === "event"); + } + static isFunction(value) { + return (value && value.type === "function"); + } + static isStruct(value) { + return (value && value.type === "struct"); + } +} +class NamedFragment extends Fragment { + constructor(guard, type, name, inputs) { + super(guard, type, inputs); + inputs = Object.freeze(inputs.slice()); + defineProperties(this, { name }); + } +} +function joinParams(format, params) { + return "(" + params.map((p) => p.format(format)).join((format === FormatType.full) ? ", " : ",") + ")"; +} +class ErrorFragment extends NamedFragment { + constructor(guard, name, inputs) { + super(guard, FragmentType.error, name, inputs); + } + format(format = FormatType.sighash) { + if (!FormatType[format]) { + logger$e.throwArgumentError("invalid format type", "format", format); + } + if (format === FormatType.json) { + return JSON.stringify({ + type: "error", + name: this.name, + inputs: this.inputs.map((input) => JSON.parse(input.format(format))), + }); + } + const result = []; + if (format !== FormatType.sighash) { + result.push("error"); + } + result.push(this.name + joinParams(format, this.inputs)); + return result.join(" "); + } + static fromString(text) { + return ErrorFragment.fromTokens(lex(text)); + } + static fromTokens(tokens) { + const name = consumeName("error", tokens); + const inputs = consumeParams(tokens); + consumeEoi(tokens); + return new ErrorFragment(_guard$4, name, inputs); + } +} +class EventFragment extends NamedFragment { + constructor(guard, name, inputs, anonymous) { + super(guard, FragmentType.event, name, inputs); + defineProperties(this, { anonymous }); + } + format(format = FormatType.sighash) { + if (!FormatType[format]) { + logger$e.throwArgumentError("invalid format type", "format", format); + } + if (format === FormatType.json) { + return JSON.stringify({ + type: "event", + anonymous: this.anonymous, + name: this.name, + inputs: this.inputs.map((i) => JSON.parse(i.format(format))) + }); + } + const result = []; + if (format !== FormatType.sighash) { + result.push("event"); + } + result.push(this.name + joinParams(format, this.inputs)); + if (format !== FormatType.sighash && this.anonymous) { + result.push("anonymous"); + } + return result.join(" "); + } + static fromString(text) { + return EventFragment.fromTokens(lex(text)); + } + static fromTokens(tokens) { + const name = consumeName("event", tokens); + const inputs = consumeParams(tokens, true); + const anonymous = !!consumeKeywords(tokens, setify(["anonymous"])).has("anonymous"); + consumeEoi(tokens); + return new EventFragment(_guard$4, name, inputs, anonymous); + } +} +class ConstructorFragment extends Fragment { + constructor(guard, type, inputs, payable, gas) { + super(guard, type, inputs); + defineProperties(this, { payable, gas }); + } + format(format = FormatType.sighash) { + if (!FormatType[format]) { + logger$e.throwArgumentError("invalid format type", "format", format); + } + if (format === FormatType.sighash) { + logger$e.throwError("cannot format a constructor for sighash", "UNSUPPORTED_OPERATION", { + operation: "format(sighash)" + }); + } + if (format === FormatType.json) { + return JSON.stringify({ + type: "constructor", + stateMutability: (this.payable ? "payable" : "undefined"), + payable: this.payable, + gas: ((this.gas != null) ? this.gas : undefined), + inputs: this.inputs.map((i) => JSON.parse(i.format(format))) + }); + } + const result = [`constructor${joinParams(format, this.inputs)}`]; + result.push((this.payable) ? "payable" : "nonpayable"); + if (this.gas != null) { + result.push(`@${this.gas.toString()}`); + } + return result.join(" "); + } + static fromString(text) { + return ConstructorFragment.fromTokens(lex(text)); + } + static fromObject(obj) { + throw new Error("TODO"); + } + static fromTokens(tokens) { + consumeKeywords(tokens, setify(["constructor"])); + const inputs = consumeParams(tokens); + const payable = !!consumeKeywords(tokens, setify(["payable"])).has("payable"); + const gas = consumeGas(tokens); + consumeEoi(tokens); + return new ConstructorFragment(_guard$4, FragmentType.constructor, inputs, payable, gas); + } +} +class FunctionFragment extends NamedFragment { + constructor(guard, name, stateMutability, inputs, outputs, gas) { + super(guard, FragmentType.function, name, inputs); + outputs = Object.freeze(outputs.slice()); + const constant = (stateMutability === "view" || stateMutability === "pure"); + const payable = (stateMutability === "payable"); + defineProperties(this, { constant, gas, outputs, payable, stateMutability }); + } + format(format = FormatType.sighash) { + if (!FormatType[format]) { + logger$e.throwArgumentError("invalid format type", "format", format); + } + if (format === FormatType.json) { + return JSON.stringify({ + type: "function", + name: this.name, + constant: this.constant, + stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability : undefined), + payable: this.payable, + gas: ((this.gas != null) ? this.gas : undefined), + inputs: this.inputs.map((i) => JSON.parse(i.format(format))), + outputs: this.outputs.map((o) => JSON.parse(o.format(format))), + }); + } + const result = []; + if (format !== FormatType.sighash) { + result.push("function"); + } + result.push(this.name + joinParams(format, this.inputs)); + if (format !== FormatType.sighash) { + if (this.stateMutability !== "nonpayable") { + result.push(this.stateMutability); + } + if (this.outputs && this.outputs.length) { + result.push("returns"); + result.push(joinParams(format, this.outputs)); + } + if (this.gas != null) { + result.push(`@${this.gas.toString()}`); + } + } + return result.join(" "); + } + static fromString(text) { + return FunctionFragment.fromTokens(lex(text)); + } + static fromTokens(tokens) { + const name = consumeName("function", tokens); + const inputs = consumeParams(tokens); + const mutability = consumeMutability(tokens); + let outputs = []; + if (consumeKeywords(tokens, setify(["returns"])).has("returns")) { + outputs = consumeParams(tokens); + } + const gas = consumeGas(tokens); + consumeEoi(tokens); + return new FunctionFragment(_guard$4, name, mutability, inputs, outputs, gas); + } +} +class StructFragment extends NamedFragment { + format() { + throw new Error("@TODO"); + } + static fromString(text) { + return StructFragment.fromTokens(lex(text)); + } + static fromTokens(tokens) { + const name = consumeName("struct", tokens); + const inputs = consumeParams(tokens); + consumeEoi(tokens); + return new StructFragment(_guard$4, FragmentType.struct, name, inputs); + } +} + +const version$e = "@ethersproject/math@6.0.0-beta.1"; + +const logger$d = new Logger(version$e); + +// IEEE 754 support 53-bits of mantissa +const maxValue = 0x1fffffffffffff; +const nibbles$1 = "0123456789abcdef"; +const BN_0$7 = BigInt(0); +// Converts a value to a BigInt, including big endian data +function toBigInt(_value) { + if (_value instanceof Uint8Array) { + let result = "0x0"; + for (const v of _value) { + result += nibbles$1[v >> 4]; + result += nibbles$1[v & 0x0f]; + } + return BigInt(result); + } + return logger$d.getBigInt(_value, "value"); +} +function toNumber(_value) { + const value = toBigInt(_value); + if (value < -maxValue || value > maxValue) { + logger$d.throwArgumentError("overflow", "value", _value); + } + return Number(value); +} +// Converts value to hex, optionally padding on the left to width bytes +function toHex(_value, _width) { + const value = logger$d.getBigInt(_value, "value"); + if (value < 0) { + throw new Error("cannot convert negative value to hex"); + } + let result = value.toString(16); + if (_width == null) { + // Ensure the value is of even length + if (result.length % 2) { + result = "0" + result; + } + } + else { + const width = logger$d.getNumber(_width, "width"); + if (width * 2 < result.length) { + throw new Error(`value ${value} exceeds width ${width}`); + } + // Pad the value to the required width + while (result.length < (width * 2)) { + result = "0" + result; + } + } + return "0x" + result; +} +function toArray(_value) { + const value = logger$d.getBigInt(_value, "value"); + if (value < 0) { + throw new Error("cannot convert negative value to hex"); + } + if (value === BN_0$7) { + return new Uint8Array([]); + } + let hex = value.toString(16); + if (hex.length % 2) { + hex = "0" + hex; + } + const result = new Uint8Array(hex.length / 2); + for (let i = 0; i < result.length; i++) { + const offset = i * 2; + result[i] = parseInt(hex.substring(offset, offset + 2), 16); + } + return result; +} + +const BN_0$6 = BigInt(0); +const BN_1$5 = BigInt(1); +// Convert a value from a twos-compliment value +function fromTwos(_value, _width) { + const value = logger$d.getBigInt(_value, "value"); + const width = BigInt(logger$d.getNumber(_width, "width")); + // Top bit set; treat as a negative value + if (value >> (width - BN_1$5)) { + const mask = (BN_1$5 << width) - BN_1$5; + return -(((~value) & mask) + BN_1$5); + } + return value; +} +// Convert value to a twos-compliment value +function toTwos(_value, _width) { + const value = logger$d.getBigInt(_value, "value"); + const width = BigInt(logger$d.getNumber(_width, "width")); + if (value < BN_0$6) { + const mask = (BN_1$5 << width) - BN_1$5; + return ((~(-value)) & mask) + BN_1$5; + } + return value; +} +function mask(_value, _bits) { + const value = logger$d.getBigInt(_value, "value"); + const bits = logger$d.getBigInt(_bits, "bits"); + return value & ((BN_1$5 << bits) - BN_1$5); +} + +var __classPrivateFieldSet$v = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$w = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _FixedNumber_instances, _FixedNumber_value, _FixedNumber_checkFormat; +const _constructorGuard = {}; +//const Zero = BigInt(0); +const NegativeOne = BigInt(-1); +function throwFault(message, fault, operation, value) { + const params = { fault: fault, operation: operation }; + if (value !== undefined) { + params.value = value; + } + return logger$d.throwError(message, "NUMERIC_FAULT", params); +} +// Constant to pull zeros from for multipliers +let zeros$1 = "0"; +while (zeros$1.length < 256) { + zeros$1 += zeros$1; +} +// Returns a string "1" followed by decimal "0"s +function getMultiplier(decimals) { + if (typeof (decimals) !== "number" || decimals < 0 || decimals > 256 || decimals % 1) { + logger$d.throwArgumentError("invalid decimal length", "decimals", decimals); + } + return BigInt("1" + zeros$1.substring(0, decimals)); +} +function formatFixed(_value, _decimals = 0) { + let value = logger$d.getBigInt(_value, "value"); + const decimals = logger$d.getNumber(_decimals, "decimals"); + const multiplier = getMultiplier(decimals); + const multiplierStr = String(multiplier); + const negative = (value < 0); + if (negative) { + value *= NegativeOne; + } + let fraction = String(value % multiplier); + // Make sure there are enough place-holders + while (fraction.length < multiplierStr.length - 1) { + fraction = "0" + fraction; + } + // Strip training 0 + while (fraction.length > 1 && fraction.substring(fraction.length - 1) === "0") { + fraction = fraction.substring(0, fraction.length - 1); + } + let result = String(value / multiplier); + if (multiplierStr.length !== 1) { + result += "." + fraction; + } + if (negative) { + result = "-" + result; + } + return result; +} +function parseFixed(value, _decimals = 0) { + const decimals = logger$d.getNumber(_decimals, "decimals"); + const multiplier = getMultiplier(decimals); + if (typeof (value) !== "string" || !value.match(/^-?[0-9.]+$/)) { + logger$d.throwArgumentError("invalid decimal value", "value", value); + } + // Is it negative? + const negative = (value.substring(0, 1) === "-"); + if (negative) { + value = value.substring(1); + } + if (value === ".") { + logger$d.throwArgumentError("missing value", "value", value); + } + // Split it into a whole and fractional part + const comps = value.split("."); + if (comps.length > 2) { + logger$d.throwArgumentError("too many decimal points", "value", value); + } + let whole = (comps[0] || "0"), fraction = (comps[1] || "0"); + // Trim trialing zeros + while (fraction[fraction.length - 1] === "0") { + fraction = fraction.substring(0, fraction.length - 1); + } + // Check the fraction doesn't exceed our decimals size + if (fraction.length > String(multiplier).length - 1) { + throwFault("fractional component exceeds decimals", "underflow", "parseFixed"); + } + // If decimals is 0, we have an empty string for fraction + if (fraction === "") { + fraction = "0"; + } + // Fully pad the string with zeros to get to wei + while (fraction.length < String(multiplier).length - 1) { + fraction += "0"; + } + const wholeValue = BigInt(whole); + const fractionValue = BigInt(fraction); + let wei = (wholeValue * multiplier) + fractionValue; + if (negative) { + wei *= NegativeOne; + } + return wei; +} +class FixedFormat { + constructor(constructorGuard, signed, width, decimals) { + if (constructorGuard !== _constructorGuard) { + logger$d.throwError("cannot use FixedFormat constructor; use FixedFormat.from", "UNSUPPORTED_OPERATION", { + operation: "new FixedFormat" + }); + } + this.signed = signed; + this.width = width; + this.decimals = decimals; + this.name = (signed ? "" : "u") + "fixed" + String(width) + "x" + String(decimals); + this._multiplier = getMultiplier(decimals); + Object.freeze(this); + } + static from(value) { + if (value instanceof FixedFormat) { + return value; + } + if (typeof (value) === "number") { + value = `fixed128x${value}`; + } + let signed = true; + let width = 128; + let decimals = 18; + if (typeof (value) === "string") { + if (value === "fixed") ; + else if (value === "ufixed") { + signed = false; + } + else { + const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/); + if (!match) { + return logger$d.throwArgumentError("invalid fixed format", "format", value); + } + signed = (match[1] !== "u"); + width = parseInt(match[2]); + decimals = parseInt(match[3]); + } + } + else if (value) { + const check = (key, type, defaultValue) => { + if (value[key] == null) { + return defaultValue; + } + if (typeof (value[key]) !== type) { + logger$d.throwArgumentError("invalid fixed format (" + key + " not " + type + ")", "format." + key, value[key]); + } + return value[key]; + }; + signed = check("signed", "boolean", signed); + width = check("width", "number", width); + decimals = check("decimals", "number", decimals); + } + if (width % 8) { + logger$d.throwArgumentError("invalid fixed format width (not byte aligned)", "format.width", width); + } + if (decimals > 80) { + logger$d.throwArgumentError("invalid fixed format (decimals too large)", "format.decimals", decimals); + } + return new FixedFormat(_constructorGuard, signed, width, decimals); + } +} +class FixedNumber { + constructor(constructorGuard, hex, value, format) { + _FixedNumber_instances.add(this); + //#hex: string; + _FixedNumber_value.set(this, void 0); + if (constructorGuard !== _constructorGuard) { + logger$d.throwError("cannot use FixedNumber constructor; use FixedNumber.from", "UNSUPPORTED_OPERATION", { + operation: "new FixedFormat" + }); + } + this.format = FixedFormat.from(format); + //this.#hex = hex; + __classPrivateFieldSet$v(this, _FixedNumber_value, value, "f"); + this._isFixedNumber = true; + Object.freeze(this); + } + addUnsafe(other) { + __classPrivateFieldGet$w(this, _FixedNumber_instances, "m", _FixedNumber_checkFormat).call(this, other); + const a = parseFixed(__classPrivateFieldGet$w(this, _FixedNumber_value, "f"), this.format.decimals); + const b = parseFixed(__classPrivateFieldGet$w(other, _FixedNumber_value, "f"), other.format.decimals); + return FixedNumber.fromValue(a + b, this.format.decimals, this.format); + } + subUnsafe(other) { + __classPrivateFieldGet$w(this, _FixedNumber_instances, "m", _FixedNumber_checkFormat).call(this, other); + const a = parseFixed(__classPrivateFieldGet$w(this, _FixedNumber_value, "f"), this.format.decimals); + const b = parseFixed(__classPrivateFieldGet$w(other, _FixedNumber_value, "f"), other.format.decimals); + return FixedNumber.fromValue(a - b, this.format.decimals, this.format); + } + mulUnsafe(other) { + __classPrivateFieldGet$w(this, _FixedNumber_instances, "m", _FixedNumber_checkFormat).call(this, other); + const a = parseFixed(__classPrivateFieldGet$w(this, _FixedNumber_value, "f"), this.format.decimals); + const b = parseFixed(__classPrivateFieldGet$w(other, _FixedNumber_value, "f"), other.format.decimals); + return FixedNumber.fromValue((a * b) / this.format._multiplier, this.format.decimals, this.format); + } + divUnsafe(other) { + __classPrivateFieldGet$w(this, _FixedNumber_instances, "m", _FixedNumber_checkFormat).call(this, other); + const a = parseFixed(__classPrivateFieldGet$w(this, _FixedNumber_value, "f"), this.format.decimals); + const b = parseFixed(__classPrivateFieldGet$w(other, _FixedNumber_value, "f"), other.format.decimals); + return FixedNumber.fromValue((a * this.format._multiplier) / b, this.format.decimals, this.format); + } + floor() { + const comps = this.toString().split("."); + if (comps.length === 1) { + comps.push("0"); + } + let result = FixedNumber.from(comps[0], this.format); + const hasFraction = !comps[1].match(/^(0*)$/); + if (this.isNegative() && hasFraction) { + result = result.subUnsafe(ONE.toFormat(result.format)); + } + return result; + } + ceiling() { + const comps = this.toString().split("."); + if (comps.length === 1) { + comps.push("0"); + } + let result = FixedNumber.from(comps[0], this.format); + const hasFraction = !comps[1].match(/^(0*)$/); + if (!this.isNegative() && hasFraction) { + result = result.addUnsafe(ONE.toFormat(result.format)); + } + return result; + } + // @TODO: Support other rounding algorithms + round(decimals) { + if (decimals == null) { + decimals = 0; + } + // If we are already in range, we're done + const comps = this.toString().split("."); + if (comps.length === 1) { + comps.push("0"); + } + if (decimals < 0 || decimals > 80 || (decimals % 1)) { + logger$d.throwArgumentError("invalid decimal count", "decimals", decimals); + } + if (comps[1].length <= decimals) { + return this; + } + const factor = FixedNumber.from("1" + zeros$1.substring(0, decimals), this.format); + const bump = BUMP.toFormat(this.format); + return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor); + } + isZero() { + return (__classPrivateFieldGet$w(this, _FixedNumber_value, "f") === "0.0" || __classPrivateFieldGet$w(this, _FixedNumber_value, "f") === "0"); + } + isNegative() { + return (__classPrivateFieldGet$w(this, _FixedNumber_value, "f")[0] === "-"); + } + toString() { return __classPrivateFieldGet$w(this, _FixedNumber_value, "f"); } + toHexString(_width) { + throw new Error("TODO"); + /* + return toHex(); + if (width == null) { return this.#hex; } + + const width = logger.getNumeric(_width); + if (width % 8) { logger.throwArgumentError("invalid byte width", "width", width); } + + const hex = BigNumber.from(this.#hex).fromTwos(this.format.width).toTwos(width).toHexString(); + return zeroPadLeft(hex, width / 8); + */ + } + toUnsafeFloat() { return parseFloat(this.toString()); } + toFormat(format) { + return FixedNumber.fromString(__classPrivateFieldGet$w(this, _FixedNumber_value, "f"), format); + } + static fromValue(value, decimals = 0, format = "fixed") { + return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format)); + } + static fromString(value, format = "fixed") { + const fixedFormat = FixedFormat.from(format); + const numeric = parseFixed(value, fixedFormat.decimals); + if (!fixedFormat.signed && numeric < 0) { + throwFault("unsigned value cannot be negative", "overflow", "value", value); + } + const hex = (function () { + if (fixedFormat.signed) { + return toHex(toTwos(numeric, fixedFormat.width)); + } + return toHex(numeric, fixedFormat.width / 8); + })(); + const decimal = formatFixed(numeric, fixedFormat.decimals); + return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat); + } + static fromBytes(_value, format = "fixed") { + const value = logger$d.getBytes(_value, "value"); + const fixedFormat = FixedFormat.from(format); + if (value.length > fixedFormat.width / 8) { + throw new Error("overflow"); + } + let numeric = toBigInt(value); + if (fixedFormat.signed) { + numeric = fromTwos(numeric, fixedFormat.width); + } + const hex = toHex(toTwos(numeric, (fixedFormat.signed ? 0 : 1) + fixedFormat.width)); + const decimal = formatFixed(numeric, fixedFormat.decimals); + return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat); + } + static from(value, format) { + if (typeof (value) === "string") { + return FixedNumber.fromString(value, format); + } + if (value instanceof Uint8Array) { + return FixedNumber.fromBytes(value, format); + } + try { + return FixedNumber.fromValue(value, 0, format); + } + catch (error) { + // Allow NUMERIC_FAULT to bubble up + if (error.code !== "INVALID_ARGUMENT") { + throw error; + } + } + return logger$d.throwArgumentError("invalid FixedNumber value", "value", value); + } + static isFixedNumber(value) { + return !!(value && value._isFixedNumber); + } +} +_FixedNumber_value = new WeakMap(), _FixedNumber_instances = new WeakSet(), _FixedNumber_checkFormat = function _FixedNumber_checkFormat(other) { + if (this.format.name !== other.format.name) { + logger$d.throwArgumentError("incompatible format; use fixedNumber.toFormat", "other", other); + } +}; +const ONE = FixedNumber.from(1); +const BUMP = FixedNumber.from("0.5"); + +const Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +let Lookup = null; +function getAlpha(letter) { + if (Lookup == null) { + Lookup = {}; + for (let i = 0; i < Alphabet.length; i++) { + Lookup[Alphabet[i]] = BigInt(i); + } + } + const result = Lookup[letter]; + if (result == null) { + logger$d.throwArgumentError(`invalid base58 value`, "letter", letter); + } + return result; +} +const BN_0$5 = BigInt(0); +const BN_58 = BigInt(58); +function encodeBase58(_value) { + let value = toBigInt(logger$d.getBytes(_value)); + let result = ""; + while (value) { + result = Alphabet[Number(value % BN_58)] + result; + value /= BN_58; + } + return result; +} +function decodeBase58(value) { + let result = BN_0$5; + for (let i = 0; i < value.length; i++) { + result *= BN_58; + result += getAlpha(value[i]); + } + return toHex(result); +} + +function isHexString(value, length) { + if (typeof (value) !== "string" || !value.match(/^0x[0-9A-Fa-f]*$/)) { + return false; + } + if (typeof (length) === "number" && value.length !== 2 + 2 * length) { + return false; + } + if (length === true && (value.length % 2) !== 0) { + return false; + } + return true; +} +/* +function _isByte(value: number): boolean { + return (typeof(value) === "number" && value >= 0 && value < 256 && Math.floor(value) === value); +} +export function isBytes(value: any): value is Bytes { + if (value == null) { return false; } + + if (value instanceof Uint8Array) { return true; } + if (typeof(value) === "string") { return false; } + + if (Array.isArray(value)) { + for (let i = 0; i < value.length; i++) { + if (!_isByte(value[i])) { return false; } + } + return true; + } + + return false; +} +*/ +function isBytesLike(value) { + return (isHexString(value, true) || (value instanceof Uint8Array)); +} + +const version$d = "@ethersproject/bytes@6.0.0-beta.1"; + +const logger$c = new Logger(version$d); + +let BN_8 = null; +let BN_255$1 = null; +try { + BN_8 = BigInt("8"); + BN_255$1 = BigInt("255"); +} +catch (error) { + console.log("Unsupported bigint", error); +} +function isHexable(value) { + return (value && typeof (value.toHexString) === "function"); +} +function arrayify(data) { + if (data == null) { + logger$c.throwArgumentError("cannot arrayify nullish", "data", data); + } + if (typeof (data) === "number") { + logger$c.assertUint53(data); + const result = []; + while (data) { + result.unshift(data & 0xff); + data = parseInt(String(data / 256)); + } + if (result.length === 0) { + result.push(0); + } + return new Uint8Array(result); + } + if (BN_8 && typeof (data) === "bigint") { + const result = []; + while (data) { + result.unshift(Number(data & BN_255$1)); + data >>= BN_8; + } + if (result.length === 0) { + result.push(0); + } + return new Uint8Array(result); + } + if (isHexable(data)) { + return arrayify(data.toHexString()); + } + if (typeof (data) === "string") { + let hex = data; + //if (options.allowMissingPrefix && hex.substring(0, 2) !== "0x") { + // hex = "0x" + hex; + //} + if (!hex.match(/^0x[0-9a-f]*$/i)) { + throw new RangeError(`invalid hex data string (${JSON.stringify(data)})`); + } + const result = []; + for (let i = 2; i < hex.length; i += 2) { + result.push(parseInt(hex.substring(i, i + 2), 16)); + } + return new Uint8Array(result); + } + if (data instanceof Uint8Array) { + return new Uint8Array(data); + } + throw new TypeError(`cannot arrayify ${JSON.stringify(data)}`); +} +function _noCopyArrayify(data) { + if (!isBytesLike(data)) { + logger$c.throwArgumentError("invalid BytesLike value", "data", data); + } // @TODO: ArgumentE> + if (data instanceof Uint8Array) { + return data; + } + return arrayify(data); +} + +function decodeBase64(textData) { + return new Uint8Array(Buffer.from(textData, "base64")); +} +function encodeBase64(data) { + return Buffer.from(logger$c.getBytes(data, "data")).toString("base64"); +} + +const HexCharacters = "0123456789abcdef"; +function hexlify(data) { + const bytes = _noCopyArrayify(data); + let result = "0x"; + for (let i = 0; i < bytes.length; i++) { + const v = bytes[i]; + result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]; + } + return result; +} +function quantity(value) { + let result = hexlify(arrayify(value)).substring(2); + while (result.substring(0, 1) === "0") { + result = result.substring(1); + } + if (result === "") { + result = "0"; + } + return "0x" + result; +} + +function concat(datas) { + return "0x" + datas.map((d) => hexlify(d).substring(2)).join(""); +} +function dataLength(data) { + if (isHexString(data, true)) { + return (data.length - 2) / 2; + } + return _noCopyArrayify(data).length; +} +function dataSlice(data, start, end) { + const bytes = _noCopyArrayify(data); + if (end != null && end > bytes.length) { + logger$c.throwError("cannot slice beyond data bounds", "BUFFER_OVERRUN", { + buffer: bytes, length: bytes.length, offset: end + }); + } + return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end)); +} +function stripZerosLeft(data) { + let bytes = hexlify(data).substring(2); + while (bytes.substring(0, 2) == "00") { + bytes = bytes.substring(2); + } + return "0x" + bytes; +} + +function zeroPad(data, length, left) { + const bytes = _noCopyArrayify(data); + if (length < bytes.length) { + logger$c.throwError("padding exceeds data length", "BUFFER_OVERRUN", { + buffer: new Uint8Array(bytes), + length: length, + offset: length + 1 + }); + } + const result = new Uint8Array(length); + result.fill(0); + if (left) { + result.set(bytes, length - bytes.length); + } + else { + result.set(bytes, 0); + } + return hexlify(result); +} +function zeroPadLeft(data, length) { + return zeroPad(data, length, true); +} +function zeroPadRight(data, length) { + return zeroPad(data, length, false); +} + +var __classPrivateFieldSet$u = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$v = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Result_instances, _Result_indices, _Result_throwError, _Writer_instances, _Writer_data, _Writer_dataLength, _Writer_writeData, _Reader_instances, _Reader_data, _Reader_offset, _Reader_coerceFunc, _Reader_peekBytes; +const WordSize = 32; +const Padding = new Uint8Array(WordSize); +// Properties used to immediate pass through to the underlying object +// - `then` is used to detect if an object is a Promise for await +const passProperties$1 = ["then"]; +const _guard$3 = {}; +class Result extends Array { + constructor(guard, items, keys) { + logger$e.assertPrivate(guard, _guard$3, "Result"); + super(...items); + _Result_instances.add(this); + _Result_indices.set(this, void 0); + // Name lookup table + __classPrivateFieldSet$u(this, _Result_indices, new Map(), "f"); + if (keys) { + keys.forEach((key, index) => { + if (key == null) { + return; + } + if (__classPrivateFieldGet$v(this, _Result_indices, "f").has(key)) { + (__classPrivateFieldGet$v(this, _Result_indices, "f").get(key)).push(index); + } + else { + __classPrivateFieldGet$v(this, _Result_indices, "f").set(key, [index]); + } + }); + } + Object.freeze(this); + return new Proxy(this, { + get: (target, prop, receiver) => { + if (typeof (prop) === "string") { + if (prop.match(/^[0-9]+$/)) { + const index = logger$e.getNumber(prop, "%index"); + if (index < 0 || index >= this.length) { + throw new RangeError("out of result range"); + } + const item = target[index]; + if (item instanceof Error) { + __classPrivateFieldGet$v(this, _Result_instances, "m", _Result_throwError).call(this, `index ${index}`, item); + } + return item; + } + // Pass important checks (like `then` for Promise) through + if (prop in target || passProperties$1.indexOf(prop) >= 0) { + return Reflect.get(target, prop, receiver); + } + // Something that could be a result keyword value + if (!(prop in target)) { + return target.getValue(prop); + } + } + return Reflect.get(target, prop, receiver); + } + }); + } + slice(start, end) { + if (start == null) { + start = 0; + } + if (end == null) { + end = this.length; + } + const result = []; + for (let i = start; i < end; i++) { + let value; + try { + value = this[i]; + } + catch (error) { + value = error.error; + } + result.push(value); + } + return result; + } + getValue(name) { + const index = __classPrivateFieldGet$v(this, _Result_indices, "f").get(name); + if (index != null && index.length === 1) { + const item = this[index[0]]; + if (item instanceof Error) { + __classPrivateFieldGet$v(this, _Result_instances, "m", _Result_throwError).call(this, `property ${JSON.stringify(name)}`, item); + } + return item; + } + throw new Error(`no named parameter: ${JSON.stringify(name)}`); + } + static fromItems(items, keys) { + return new Result(_guard$3, items, keys); + } +} +_Result_indices = new WeakMap(), _Result_instances = new WeakSet(), _Result_throwError = function _Result_throwError(name, error) { + const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`); + wrapped.error = error; + throw wrapped; +}; +function getValue$1(value) { + let bytes = toArray(value); + if (bytes.length > WordSize) { + logger$e.throwError("value out-of-bounds", "BUFFER_OVERRUN", { + buffer: bytes, + length: WordSize, + offset: bytes.length + }); + } + if (bytes.length % WordSize) { + bytes = arrayify(concat([Padding.slice(bytes.length % WordSize), bytes])); + } + return bytes; +} +class Coder { + constructor(name, type, localName, dynamic) { + defineProperties(this, { name, type, localName, dynamic }, { + name: "string", type: "string", localName: "string", dynamic: "boolean" + }); + } + _throwError(message, value) { + return logger$e.throwArgumentError(message, this.localName, value); + } +} +class Writer { + constructor() { + _Writer_instances.add(this); + // An array of WordSize lengthed objects to concatenation + _Writer_data.set(this, void 0); + _Writer_dataLength.set(this, void 0); + __classPrivateFieldSet$u(this, _Writer_data, [], "f"); + __classPrivateFieldSet$u(this, _Writer_dataLength, 0, "f"); + } + get data() { + return concat(__classPrivateFieldGet$v(this, _Writer_data, "f")); + } + get length() { return __classPrivateFieldGet$v(this, _Writer_dataLength, "f"); } + appendWriter(writer) { + return __classPrivateFieldGet$v(this, _Writer_instances, "m", _Writer_writeData).call(this, arrayify(writer.data)); + } + // Arrayish item; pad on the right to *nearest* WordSize + writeBytes(value) { + let bytes = arrayify(value); + const paddingOffset = bytes.length % WordSize; + if (paddingOffset) { + bytes = arrayify(concat([bytes, Padding.slice(paddingOffset)])); + } + return __classPrivateFieldGet$v(this, _Writer_instances, "m", _Writer_writeData).call(this, bytes); + } + // Numeric item; pad on the left *to* WordSize + writeValue(value) { + return __classPrivateFieldGet$v(this, _Writer_instances, "m", _Writer_writeData).call(this, getValue$1(value)); + } + // Inserts a numeric place-holder, returning a callback that can + // be used to asjust the value later + writeUpdatableValue() { + const offset = __classPrivateFieldGet$v(this, _Writer_data, "f").length; + __classPrivateFieldGet$v(this, _Writer_data, "f").push(Padding); + __classPrivateFieldSet$u(this, _Writer_dataLength, __classPrivateFieldGet$v(this, _Writer_dataLength, "f") + WordSize, "f"); + return (value) => { + __classPrivateFieldGet$v(this, _Writer_data, "f")[offset] = getValue$1(value); + }; + } +} +_Writer_data = new WeakMap(), _Writer_dataLength = new WeakMap(), _Writer_instances = new WeakSet(), _Writer_writeData = function _Writer_writeData(data) { + __classPrivateFieldGet$v(this, _Writer_data, "f").push(data); + __classPrivateFieldSet$u(this, _Writer_dataLength, __classPrivateFieldGet$v(this, _Writer_dataLength, "f") + data.length, "f"); + return data.length; +}; +class Reader { + constructor(data, coerceFunc, allowLoose) { + _Reader_instances.add(this); + _Reader_data.set(this, void 0); + _Reader_offset.set(this, void 0); + _Reader_coerceFunc.set(this, void 0); + defineProperties(this, { allowLoose: !!allowLoose }); + __classPrivateFieldSet$u(this, _Reader_data, arrayify(data), "f"); + __classPrivateFieldSet$u(this, _Reader_coerceFunc, coerceFunc || Reader.coerce, "f"); + __classPrivateFieldSet$u(this, _Reader_offset, 0, "f"); + } + get data() { return hexlify(__classPrivateFieldGet$v(this, _Reader_data, "f")); } + get dataLength() { return __classPrivateFieldGet$v(this, _Reader_data, "f").length; } + get consumed() { return __classPrivateFieldGet$v(this, _Reader_offset, "f"); } + get bytes() { return new Uint8Array(__classPrivateFieldGet$v(this, _Reader_data, "f")); } + // The default Coerce function + static coerce(type, value) { + let match = type.match("^u?int([0-9]+)$"); + if (match && parseInt(match[1]) <= 48) { + value = value.toNumber(); + } + return value; + } + coerce(type, value) { + return __classPrivateFieldGet$v(this, _Reader_coerceFunc, "f").call(this, type, value); + } + // Create a sub-reader with the same underlying data, but offset + subReader(offset) { + return new Reader(__classPrivateFieldGet$v(this, _Reader_data, "f").slice(__classPrivateFieldGet$v(this, _Reader_offset, "f") + offset), __classPrivateFieldGet$v(this, _Reader_coerceFunc, "f"), this.allowLoose); + } + // Read bytes + readBytes(length, loose) { + let bytes = __classPrivateFieldGet$v(this, _Reader_instances, "m", _Reader_peekBytes).call(this, 0, length, !!loose); + __classPrivateFieldSet$u(this, _Reader_offset, __classPrivateFieldGet$v(this, _Reader_offset, "f") + bytes.length, "f"); + // @TODO: Make sure the length..end bytes are all 0? + return bytes.slice(0, length); + } + // Read a numeric values + readValue() { + return toBigInt(this.readBytes(WordSize)); + } + readIndex() { + return toNumber(this.readBytes(WordSize)); + } +} +_Reader_data = new WeakMap(), _Reader_offset = new WeakMap(), _Reader_coerceFunc = new WeakMap(), _Reader_instances = new WeakSet(), _Reader_peekBytes = function _Reader_peekBytes(offset, length, loose) { + let alignedLength = Math.ceil(length / WordSize) * WordSize; + if (__classPrivateFieldGet$v(this, _Reader_offset, "f") + alignedLength > __classPrivateFieldGet$v(this, _Reader_data, "f").length) { + if (this.allowLoose && loose && __classPrivateFieldGet$v(this, _Reader_offset, "f") + length <= __classPrivateFieldGet$v(this, _Reader_data, "f").length) { + alignedLength = length; + } + else { + logger$e.throwError("data out-of-bounds", "BUFFER_OVERRUN", { + buffer: arrayify(__classPrivateFieldGet$v(this, _Reader_data, "f")), + length: __classPrivateFieldGet$v(this, _Reader_data, "f").length, + offset: __classPrivateFieldGet$v(this, _Reader_offset, "f") + alignedLength + }); + } + } + return __classPrivateFieldGet$v(this, _Reader_data, "f").slice(__classPrivateFieldGet$v(this, _Reader_offset, "f"), __classPrivateFieldGet$v(this, _Reader_offset, "f") + alignedLength); +}; + +/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4)); +// Cast array to view +const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength); +// The rotate right (circular right shift) operation for uint32 +const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift); +const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44; +// There is almost no big endian hardware, but js typed arrays uses platform specific endianess. +// So, just to be sure not to corrupt anything. +if (!isLE) + throw new Error('Non little-endian hardware is not supported'); +Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0')); +// Currently avoid insertion of polyfills with packers (browserify/webpack/etc) +// But setTimeout is pretty slow, maybe worth to investigate howto do minimal polyfill here +const nextTick = (() => { + const nodeRequire = typeof module !== 'undefined' && + typeof module.require === 'function' && + module.require.bind(module); + try { + if (nodeRequire) { + const { setImmediate } = nodeRequire('timers'); + return () => new Promise((resolve) => setImmediate(resolve)); + } + } + catch (e) { } + return () => new Promise((resolve) => setTimeout(resolve, 0)); +})(); +// Returns control to thread each 'tick' ms to avoid blocking +async function asyncLoop(iters, tick, cb) { + let ts = Date.now(); + for (let i = 0; i < iters; i++) { + cb(i); + // Date.now() is not monotonic, so in case if clock goes backwards we return return control too + const diff = Date.now() - ts; + if (diff >= 0 && diff < tick) + continue; + await nextTick(); + ts += diff; + } +} +function utf8ToBytes(str) { + if (typeof str !== 'string') { + throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`); + } + return new TextEncoder().encode(str); +} +function toBytes(data) { + if (typeof data === 'string') + data = utf8ToBytes(data); + if (!(data instanceof Uint8Array)) + throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`); + return data; +} +function assertNumber(n) { + if (!Number.isSafeInteger(n) || n < 0) + throw new Error(`Wrong positive integer: ${n}`); +} +function assertHash(hash) { + if (typeof hash !== 'function' || typeof hash.create !== 'function') + throw new Error('Hash should be wrapped by utils.wrapConstructor'); + assertNumber(hash.outputLen); + assertNumber(hash.blockLen); +} +// For runtime check if class implements interface +class Hash { + // Safe version that clones internal state + clone() { + return this._cloneInto(); + } +} +// Check if object doens't have custom constructor (like Uint8Array/Array) +const isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object; +function checkOpts(def, _opts) { + if (_opts !== undefined && (typeof _opts !== 'object' || !isPlainObject(_opts))) + throw new TypeError('Options should be object or undefined'); + const opts = Object.assign(def, _opts); + return opts; +} +function wrapConstructor(hashConstructor) { + const hashC = (message) => hashConstructor().update(toBytes(message)).digest(); + const tmp = hashConstructor(); + hashC.outputLen = tmp.outputLen; + hashC.blockLen = tmp.blockLen; + hashC.create = () => hashConstructor(); + return hashC; +} +function wrapConstructorWithOpts(hashCons) { + const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest(); + const tmp = hashCons({}); + hashC.outputLen = tmp.outputLen; + hashC.blockLen = tmp.blockLen; + hashC.create = (opts) => hashCons(opts); + return hashC; +} + +// HMAC (RFC 2104) +class HMAC extends Hash { + constructor(hash, _key) { + super(); + this.finished = false; + this.destroyed = false; + assertHash(hash); + const key = toBytes(_key); + this.iHash = hash.create(); + if (!(this.iHash instanceof Hash)) + throw new TypeError('Expected instance of class which extends utils.Hash'); + const blockLen = (this.blockLen = this.iHash.blockLen); + this.outputLen = this.iHash.outputLen; + const pad = new Uint8Array(blockLen); + // blockLen can be bigger than outputLen + pad.set(key.length > this.iHash.blockLen ? hash.create().update(key).digest() : key); + for (let i = 0; i < pad.length; i++) + pad[i] ^= 0x36; + this.iHash.update(pad); + // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone + this.oHash = hash.create(); + // Undo internal XOR && apply outer XOR + for (let i = 0; i < pad.length; i++) + pad[i] ^= 0x36 ^ 0x5c; + this.oHash.update(pad); + pad.fill(0); + } + update(buf) { + if (this.destroyed) + throw new Error('instance is destroyed'); + this.iHash.update(buf); + return this; + } + digestInto(out) { + if (this.destroyed) + throw new Error('instance is destroyed'); + if (!(out instanceof Uint8Array) || out.length !== this.outputLen) + throw new Error('HMAC: Invalid output buffer'); + if (this.finished) + throw new Error('digest() was already called'); + this.finished = true; + this.iHash.digestInto(out); + this.oHash.update(out); + this.oHash.digestInto(out); + this.destroy(); + } + digest() { + const out = new Uint8Array(this.oHash.outputLen); + this.digestInto(out); + return out; + } + _cloneInto(to) { + // Create new instance without calling constructor since key already in state and we don't know it. + to || (to = Object.create(Object.getPrototypeOf(this), {})); + const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this; + to = to; + to.finished = finished; + to.destroyed = destroyed; + to.blockLen = blockLen; + to.outputLen = outputLen; + to.oHash = oHash._cloneInto(to.oHash); + to.iHash = iHash._cloneInto(to.iHash); + return to; + } + destroy() { + this.destroyed = true; + this.oHash.destroy(); + this.iHash.destroy(); + } +} +/** + * HMAC: RFC2104 message authentication code. + * @param hash - function that would be used e.g. sha256 + * @param key - message key + * @param message - message data + */ +const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest(); +hmac.create = (hash, key) => new HMAC(hash, key); + +// Common prologue and epilogue for sync/async functions +function pbkdf2Init(hash, _password, _salt, _opts) { + assertHash(hash); + const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts); + const { c, dkLen, asyncTick } = opts; + assertNumber(c); + assertNumber(dkLen); + assertNumber(asyncTick); + if (c < 1) + throw new Error('PBKDF2: iterations (c) should be >= 1'); + const password = toBytes(_password); + const salt = toBytes(_salt); + // DK = PBKDF2(PRF, Password, Salt, c, dkLen); + const DK = new Uint8Array(dkLen); + // U1 = PRF(Password, Salt + INT_32_BE(i)) + const PRF = hmac.create(hash, password); + const PRFSalt = PRF._cloneInto().update(salt); + return { c, dkLen, asyncTick, DK, PRF, PRFSalt }; +} +function pbkdf2Output(PRF, PRFSalt, DK, prfW, u) { + PRF.destroy(); + PRFSalt.destroy(); + if (prfW) + prfW.destroy(); + u.fill(0); + return DK; +} +/** + * PBKDF2-HMAC: RFC 2898 key derivation function + * @param hash - hash function that would be used e.g. sha256 + * @param password - password from which a derived key is generated + * @param salt - cryptographic salt + * @param opts - {c, dkLen} where c is work factor and dkLen is output message size + */ +function pbkdf2$1(hash, password, salt, opts) { + const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts); + let prfW; // Working copy + const arr = new Uint8Array(4); + const view = createView(arr); + const u = new Uint8Array(PRF.outputLen); + // DK = T1 + T2 + ⋯ + Tdklen/hlen + for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) { + // Ti = F(Password, Salt, c, i) + const Ti = DK.subarray(pos, pos + PRF.outputLen); + view.setInt32(0, ti, false); + // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc + // U1 = PRF(Password, Salt + INT_32_BE(i)) + (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u); + Ti.set(u.subarray(0, Ti.length)); + for (let ui = 1; ui < c; ui++) { + // Uc = PRF(Password, Uc−1) + PRF._cloneInto(prfW).update(u).digestInto(u); + for (let i = 0; i < Ti.length; i++) + Ti[i] ^= u[i]; + } + } + return pbkdf2Output(PRF, PRFSalt, DK, prfW, u); +} + +// Polyfill for Safari 14 +function setBigUint64(view, byteOffset, value, isLE) { + if (typeof view.setBigUint64 === 'function') + return view.setBigUint64(byteOffset, value, isLE); + const _32n = BigInt(32); + const _u32_max = BigInt(0xffffffff); + const wh = Number((value >> _32n) & _u32_max); + const wl = Number(value & _u32_max); + const h = isLE ? 4 : 0; + const l = isLE ? 0 : 4; + view.setUint32(byteOffset + h, wh, isLE); + view.setUint32(byteOffset + l, wl, isLE); +} +// Base SHA2 class (RFC 6234) +class SHA2 extends Hash { + constructor(blockLen, outputLen, padOffset, isLE) { + super(); + this.blockLen = blockLen; + this.outputLen = outputLen; + this.padOffset = padOffset; + this.isLE = isLE; + this.finished = false; + this.length = 0; + this.pos = 0; + this.destroyed = false; + this.buffer = new Uint8Array(blockLen); + this.view = createView(this.buffer); + } + update(data) { + if (this.destroyed) + throw new Error('instance is destroyed'); + const { view, buffer, blockLen, finished } = this; + if (finished) + throw new Error('digest() was already called'); + data = toBytes(data); + const len = data.length; + for (let pos = 0; pos < len;) { + const take = Math.min(blockLen - this.pos, len - pos); + // Fast path: we have at least one block in input, cast it to view and process + if (take === blockLen) { + const dataView = createView(data); + for (; blockLen <= len - pos; pos += blockLen) + this.process(dataView, pos); + continue; + } + buffer.set(data.subarray(pos, pos + take), this.pos); + this.pos += take; + pos += take; + if (this.pos === blockLen) { + this.process(view, 0); + this.pos = 0; + } + } + this.length += data.length; + this.roundClean(); + return this; + } + digestInto(out) { + if (this.destroyed) + throw new Error('instance is destroyed'); + if (!(out instanceof Uint8Array) || out.length < this.outputLen) + throw new Error('_Sha2: Invalid output buffer'); + if (this.finished) + throw new Error('digest() was already called'); + this.finished = true; + // Padding + // We can avoid allocation of buffer for padding completely if it + // was previously not allocated here. But it won't change performance. + const { buffer, view, blockLen, isLE } = this; + let { pos } = this; + // append the bit '1' to the message + buffer[pos++] = 0b10000000; + this.buffer.subarray(pos).fill(0); + // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again + if (this.padOffset > blockLen - pos) { + this.process(view, 0); + pos = 0; + } + // Pad until full block byte with zeros + for (let i = pos; i < blockLen; i++) + buffer[i] = 0; + // NOTE: sha512 requires length to be 128bit integer, but length in JS will overflow before that + // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen. + // So we just write lowest 64bit of that value. + setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE); + this.process(view, 0); + const oview = createView(out); + this.get().forEach((v, i) => oview.setUint32(4 * i, v, isLE)); + } + digest() { + const { buffer, outputLen } = this; + this.digestInto(buffer); + const res = buffer.slice(0, outputLen); + this.destroy(); + return res; + } + _cloneInto(to) { + to || (to = new this.constructor()); + to.set(...this.get()); + const { blockLen, buffer, length, finished, destroyed, pos } = this; + to.length = length; + to.pos = pos; + to.finished = finished; + to.destroyed = destroyed; + if (length % blockLen) + to.buffer.set(buffer); + return to; + } +} + +// Choice: a ? b : c +const Chi = (a, b, c) => (a & b) ^ (~a & c); +// Majority function, true if any two inpust is true +const Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c); +// Round constants: +// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311) +// prettier-ignore +const SHA256_K = new Uint32Array([ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +]); +// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19): +// prettier-ignore +const IV = new Uint32Array([ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 +]); +// Temporary buffer, not used to store anything between runs +// Named this way because it matches specification. +const SHA256_W = new Uint32Array(64); +class SHA256 extends SHA2 { + constructor() { + super(64, 32, 8, false); + // We cannot use array here since array allows indexing by variable + // which means optimizer/compiler cannot use registers. + this.A = IV[0] | 0; + this.B = IV[1] | 0; + this.C = IV[2] | 0; + this.D = IV[3] | 0; + this.E = IV[4] | 0; + this.F = IV[5] | 0; + this.G = IV[6] | 0; + this.H = IV[7] | 0; + } + get() { + const { A, B, C, D, E, F, G, H } = this; + return [A, B, C, D, E, F, G, H]; + } + // prettier-ignore + set(A, B, C, D, E, F, G, H) { + this.A = A | 0; + this.B = B | 0; + this.C = C | 0; + this.D = D | 0; + this.E = E | 0; + this.F = F | 0; + this.G = G | 0; + this.H = H | 0; + } + process(view, offset) { + // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array + for (let i = 0; i < 16; i++, offset += 4) + SHA256_W[i] = view.getUint32(offset, false); + for (let i = 16; i < 64; i++) { + const W15 = SHA256_W[i - 15]; + const W2 = SHA256_W[i - 2]; + const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3); + const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10); + SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0; + } + // Compression function main loop, 64 rounds + let { A, B, C, D, E, F, G, H } = this; + for (let i = 0; i < 64; i++) { + const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25); + const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0; + const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22); + const T2 = (sigma0 + Maj(A, B, C)) | 0; + H = G; + G = F; + F = E; + E = (D + T1) | 0; + D = C; + C = B; + B = A; + A = (T1 + T2) | 0; + } + // Add the compressed chunk to the current hash value + A = (A + this.A) | 0; + B = (B + this.B) | 0; + C = (C + this.C) | 0; + D = (D + this.D) | 0; + E = (E + this.E) | 0; + F = (F + this.F) | 0; + G = (G + this.G) | 0; + H = (H + this.H) | 0; + this.set(A, B, C, D, E, F, G, H); + } + roundClean() { + SHA256_W.fill(0); + } + destroy() { + this.set(0, 0, 0, 0, 0, 0, 0, 0); + this.buffer.fill(0); + } +} +/** + * SHA2-256 hash function + * @param message - data that would be hashed + */ +const sha256$1 = wrapConstructor(() => new SHA256()); + +const U32_MASK64 = BigInt(2 ** 32 - 1); +const _32n = BigInt(32); +function fromBig(n, le = false) { + if (le) + return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) }; + return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 }; +} +function split(lst, le = false) { + let Ah = new Uint32Array(lst.length); + let Al = new Uint32Array(lst.length); + for (let i = 0; i < lst.length; i++) { + const { h, l } = fromBig(lst[i], le); + [Ah[i], Al[i]] = [h, l]; + } + return [Ah, Al]; +} +// for Shift in [0, 32) +const shrSH = (h, l, s) => h >>> s; +const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s); +// Right rotate for Shift in [1, 32) +const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s)); +const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s); +// Right rotate for Shift in (32, 64), NOTE: 32 is special case. +const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32)); +const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s)); +// Left rotate for Shift in [1, 32) +const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s)); +const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s)); +// Left rotate for Shift in (32, 64), NOTE: 32 is special case. +const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s)); +const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s)); +// JS uses 32-bit signed integers for bitwise operations which means we cannot +// simple take carry out of low bit sum by shift, we need to use division. +function add(Ah, Al, Bh, Bl) { + const l = (Al >>> 0) + (Bl >>> 0); + return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 }; +} +// Addition with more than 2 elements +const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0); +const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0; +const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0); +const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0; +const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0); +const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0; + +// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409): +// prettier-ignore +const [SHA512_Kh, SHA512_Kl] = split([ + '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc', + '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118', + '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2', + '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694', + '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65', + '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5', + '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4', + '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70', + '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df', + '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b', + '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30', + '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8', + '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8', + '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3', + '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec', + '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b', + '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178', + '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b', + '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c', + '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817' +].map(n => BigInt(n))); +// Temporary buffer, not used to store anything between runs +const SHA512_W_H = new Uint32Array(80); +const SHA512_W_L = new Uint32Array(80); +class SHA512 extends SHA2 { + constructor() { + super(128, 64, 16, false); + // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers. + // Also looks cleaner and easier to verify with spec. + // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19): + // h -- high 32 bits, l -- low 32 bits + this.Ah = 0x6a09e667 | 0; + this.Al = 0xf3bcc908 | 0; + this.Bh = 0xbb67ae85 | 0; + this.Bl = 0x84caa73b | 0; + this.Ch = 0x3c6ef372 | 0; + this.Cl = 0xfe94f82b | 0; + this.Dh = 0xa54ff53a | 0; + this.Dl = 0x5f1d36f1 | 0; + this.Eh = 0x510e527f | 0; + this.El = 0xade682d1 | 0; + this.Fh = 0x9b05688c | 0; + this.Fl = 0x2b3e6c1f | 0; + this.Gh = 0x1f83d9ab | 0; + this.Gl = 0xfb41bd6b | 0; + this.Hh = 0x5be0cd19 | 0; + this.Hl = 0x137e2179 | 0; + } + // prettier-ignore + get() { + const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this; + return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl]; + } + // prettier-ignore + set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) { + this.Ah = Ah | 0; + this.Al = Al | 0; + this.Bh = Bh | 0; + this.Bl = Bl | 0; + this.Ch = Ch | 0; + this.Cl = Cl | 0; + this.Dh = Dh | 0; + this.Dl = Dl | 0; + this.Eh = Eh | 0; + this.El = El | 0; + this.Fh = Fh | 0; + this.Fl = Fl | 0; + this.Gh = Gh | 0; + this.Gl = Gl | 0; + this.Hh = Hh | 0; + this.Hl = Hl | 0; + } + process(view, offset) { + // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array + for (let i = 0; i < 16; i++, offset += 4) { + SHA512_W_H[i] = view.getUint32(offset); + SHA512_W_L[i] = view.getUint32((offset += 4)); + } + for (let i = 16; i < 80; i++) { + // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7) + const W15h = SHA512_W_H[i - 15] | 0; + const W15l = SHA512_W_L[i - 15] | 0; + const s0h = rotrSH(W15h, W15l, 1) ^ rotrSH(W15h, W15l, 8) ^ shrSH(W15h, W15l, 7); + const s0l = rotrSL(W15h, W15l, 1) ^ rotrSL(W15h, W15l, 8) ^ shrSL(W15h, W15l, 7); + // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6) + const W2h = SHA512_W_H[i - 2] | 0; + const W2l = SHA512_W_L[i - 2] | 0; + const s1h = rotrSH(W2h, W2l, 19) ^ rotrBH(W2h, W2l, 61) ^ shrSH(W2h, W2l, 6); + const s1l = rotrSL(W2h, W2l, 19) ^ rotrBL(W2h, W2l, 61) ^ shrSL(W2h, W2l, 6); + // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16]; + const SUMl = add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]); + const SUMh = add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]); + SHA512_W_H[i] = SUMh | 0; + SHA512_W_L[i] = SUMl | 0; + } + let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this; + // Compression function main loop, 80 rounds + for (let i = 0; i < 80; i++) { + // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41) + const sigma1h = rotrSH(Eh, El, 14) ^ rotrSH(Eh, El, 18) ^ rotrBH(Eh, El, 41); + const sigma1l = rotrSL(Eh, El, 14) ^ rotrSL(Eh, El, 18) ^ rotrBL(Eh, El, 41); + //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0; + const CHIh = (Eh & Fh) ^ (~Eh & Gh); + const CHIl = (El & Fl) ^ (~El & Gl); + // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i] + // prettier-ignore + const T1ll = add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]); + const T1h = add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]); + const T1l = T1ll | 0; + // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39) + const sigma0h = rotrSH(Ah, Al, 28) ^ rotrBH(Ah, Al, 34) ^ rotrBH(Ah, Al, 39); + const sigma0l = rotrSL(Ah, Al, 28) ^ rotrBL(Ah, Al, 34) ^ rotrBL(Ah, Al, 39); + const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch); + const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl); + Hh = Gh | 0; + Hl = Gl | 0; + Gh = Fh | 0; + Gl = Fl | 0; + Fh = Eh | 0; + Fl = El | 0; + ({ h: Eh, l: El } = add(Dh | 0, Dl | 0, T1h | 0, T1l | 0)); + Dh = Ch | 0; + Dl = Cl | 0; + Ch = Bh | 0; + Cl = Bl | 0; + Bh = Ah | 0; + Bl = Al | 0; + const All = add3L(T1l, sigma0l, MAJl); + Ah = add3H(All, T1h, sigma0h, MAJh); + Al = All | 0; + } + // Add the compressed chunk to the current hash value + ({ h: Ah, l: Al } = add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0)); + ({ h: Bh, l: Bl } = add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0)); + ({ h: Ch, l: Cl } = add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0)); + ({ h: Dh, l: Dl } = add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0)); + ({ h: Eh, l: El } = add(this.Eh | 0, this.El | 0, Eh | 0, El | 0)); + ({ h: Fh, l: Fl } = add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0)); + ({ h: Gh, l: Gl } = add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0)); + ({ h: Hh, l: Hl } = add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0)); + this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl); + } + roundClean() { + SHA512_W_H.fill(0); + SHA512_W_L.fill(0); + } + destroy() { + this.buffer.fill(0); + this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + } +} +class SHA512_256 extends SHA512 { + constructor() { + super(); + // h -- high 32 bits, l -- low 32 bits + this.Ah = 0x22312194 | 0; + this.Al = 0xfc2bf72c | 0; + this.Bh = 0x9f555fa3 | 0; + this.Bl = 0xc84c64c2 | 0; + this.Ch = 0x2393b86b | 0; + this.Cl = 0x6f53b151 | 0; + this.Dh = 0x96387719 | 0; + this.Dl = 0x5940eabd | 0; + this.Eh = 0x96283ee2 | 0; + this.El = 0xa88effe3 | 0; + this.Fh = 0xbe5e1e25 | 0; + this.Fl = 0x53863992 | 0; + this.Gh = 0x2b0199fc | 0; + this.Gl = 0x2c85b8aa | 0; + this.Hh = 0x0eb72ddc | 0; + this.Hl = 0x81c52ca2 | 0; + this.outputLen = 32; + } +} +class SHA384 extends SHA512 { + constructor() { + super(); + // h -- high 32 bits, l -- low 32 bits + this.Ah = 0xcbbb9d5d | 0; + this.Al = 0xc1059ed8 | 0; + this.Bh = 0x629a292a | 0; + this.Bl = 0x367cd507 | 0; + this.Ch = 0x9159015a | 0; + this.Cl = 0x3070dd17 | 0; + this.Dh = 0x152fecd8 | 0; + this.Dl = 0xf70e5939 | 0; + this.Eh = 0x67332667 | 0; + this.El = 0xffc00b31 | 0; + this.Fh = 0x8eb44a87 | 0; + this.Fl = 0x68581511 | 0; + this.Gh = 0xdb0c2e0d | 0; + this.Gl = 0x64f98fa7 | 0; + this.Hh = 0x47b5481d | 0; + this.Hl = 0xbefa4fa4 | 0; + this.outputLen = 48; + } +} +const sha512$1 = wrapConstructor(() => new SHA512()); +wrapConstructor(() => new SHA512_256()); +wrapConstructor(() => new SHA384()); + +const version$c = "@ethersproject/crypto@6.0.0-beta.1"; + +const logger$b = new Logger(version$c); + +/* Browser Crypto Shims */ +function getGlobal$1() { + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof global !== 'undefined') { + return global; + } + throw new Error('unable to locate global object'); +} +const anyGlobal = getGlobal$1(); +let crypto$1 = anyGlobal.crypto || anyGlobal.msCrypto; +function createHash(algo) { + switch (algo) { + case "sha256": return sha256$1.create(); + case "sha512": return sha512$1.create(); + } + return logger$b.throwArgumentError("invalid hashing algorithm name", "algorithm", algo); +} +function createHmac(_algo, key) { + const algo = ({ sha256: sha256$1, sha512: sha512$1 }[_algo]); + if (algo == null) { + return logger$b.throwArgumentError("invalid hmac algorithm", "algorithm", _algo); + } + return hmac.create(algo, key); +} +function pbkdf2Sync(password, salt, iterations, keylen, _algo) { + const algo = ({ sha256: sha256$1, sha512: sha512$1 }[_algo]); + if (algo == null) { + return logger$b.throwArgumentError("invalid pbkdf2 algorithm", "algorithm", _algo); + } + return pbkdf2$1(algo, password, salt, { c: iterations, dkLen: keylen }); +} +function randomBytes$1(length) { + if (crypto$1 == null) { + return logger$b.throwError("platform does not support secure random numbers", "UNSUPPORTED_OPERATION", { + operation: "randomBytes" + }); + } + if (length <= 0 || length > 1024 || (length % 1) || length != length) { + logger$b.throwArgumentError("invalid length", "length", length); + } + const result = new Uint8Array(length); + crypto$1.getRandomValues(result); + return result; +} + +let locked$4 = false; +const _computeHmac = function (algorithm, key, data) { + return "0x" + createHmac(algorithm, key).update(data).digest("hex"); +}; +let __computeHmac = _computeHmac; +function computeHmac(algorithm, _key, _data) { + const key = logger$b.getBytes(_key, "key"); + const data = logger$b.getBytes(_data, "data"); + return hexlify(__computeHmac(algorithm, key, data)); +} +computeHmac._ = _computeHmac; +computeHmac.lock = function () { locked$4 = true; }; +computeHmac.register = function (func) { + if (locked$4) { + throw new Error("computeHmac is locked"); + } + __computeHmac = func; +}; +Object.freeze(computeHmac); + +// Various per round constants calculations +const [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []]; +const _0n$1 = BigInt(0); +const _1n$1 = BigInt(1); +const _2n$1 = BigInt(2); +const _7n = BigInt(7); +const _256n = BigInt(256); +const _0x71n = BigInt(0x71); +for (let round = 0, R = _1n$1, x = 1, y = 0; round < 24; round++) { + // Pi + [x, y] = [y, (2 * x + 3 * y) % 5]; + SHA3_PI.push(2 * (5 * y + x)); + // Rotational + SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64); + // Iota + let t = _0n$1; + for (let j = 0; j < 7; j++) { + R = ((R << _1n$1) ^ ((R >> _7n) * _0x71n)) % _256n; + if (R & _2n$1) + t ^= _1n$1 << ((_1n$1 << BigInt(j)) - _1n$1); + } + _SHA3_IOTA.push(t); +} +const [SHA3_IOTA_H, SHA3_IOTA_L] = split(_SHA3_IOTA, true); +// Left rotation (without 0, 32, 64) +const rotlH = (h, l, s) => s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s); +const rotlL = (h, l, s) => s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s); +// Same as keccakf1600, but allows to skip some rounds +function keccakP(s, rounds = 24) { + const B = new Uint32Array(5 * 2); + // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js) + for (let round = 24 - rounds; round < 24; round++) { + // Theta θ + for (let x = 0; x < 10; x++) + B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40]; + for (let x = 0; x < 10; x += 2) { + const idx1 = (x + 8) % 10; + const idx0 = (x + 2) % 10; + const B0 = B[idx0]; + const B1 = B[idx0 + 1]; + const Th = rotlH(B0, B1, 1) ^ B[idx1]; + const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1]; + for (let y = 0; y < 50; y += 10) { + s[x + y] ^= Th; + s[x + y + 1] ^= Tl; + } + } + // Rho (ρ) and Pi (π) + let curH = s[2]; + let curL = s[3]; + for (let t = 0; t < 24; t++) { + const shift = SHA3_ROTL[t]; + const Th = rotlH(curH, curL, shift); + const Tl = rotlL(curH, curL, shift); + const PI = SHA3_PI[t]; + curH = s[PI]; + curL = s[PI + 1]; + s[PI] = Th; + s[PI + 1] = Tl; + } + // Chi (χ) + for (let y = 0; y < 50; y += 10) { + for (let x = 0; x < 10; x++) + B[x] = s[y + x]; + for (let x = 0; x < 10; x++) + s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10]; + } + // Iota (ι) + s[0] ^= SHA3_IOTA_H[round]; + s[1] ^= SHA3_IOTA_L[round]; + } + B.fill(0); +} +class Keccak extends Hash { + // NOTE: we accept arguments in bytes instead of bits here. + constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) { + super(); + this.blockLen = blockLen; + this.suffix = suffix; + this.outputLen = outputLen; + this.enableXOF = enableXOF; + this.rounds = rounds; + this.pos = 0; + this.posOut = 0; + this.finished = false; + this.destroyed = false; + // Can be passed from user as dkLen + assertNumber(outputLen); + // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes + if (0 >= this.blockLen || this.blockLen >= 200) + throw new Error('Sha3 supports only keccak-f1600 function'); + this.state = new Uint8Array(200); + this.state32 = u32(this.state); + } + keccak() { + keccakP(this.state32, this.rounds); + this.posOut = 0; + this.pos = 0; + } + update(data) { + if (this.destroyed) + throw new Error('instance is destroyed'); + if (this.finished) + throw new Error('digest() was already called'); + const { blockLen, state } = this; + data = toBytes(data); + const len = data.length; + for (let pos = 0; pos < len;) { + const take = Math.min(blockLen - this.pos, len - pos); + for (let i = 0; i < take; i++) + state[this.pos++] ^= data[pos++]; + if (this.pos === blockLen) + this.keccak(); + } + return this; + } + finish() { + if (this.finished) + return; + this.finished = true; + const { state, suffix, pos, blockLen } = this; + // Do the padding + state[pos] ^= suffix; + if ((suffix & 0x80) !== 0 && pos === blockLen - 1) + this.keccak(); + state[blockLen - 1] ^= 0x80; + this.keccak(); + } + writeInto(out) { + if (this.destroyed) + throw new Error('instance is destroyed'); + if (!(out instanceof Uint8Array)) + throw new Error('Keccak: invalid output buffer'); + this.finish(); + for (let pos = 0, len = out.length; pos < len;) { + if (this.posOut >= this.blockLen) + this.keccak(); + const take = Math.min(this.blockLen - this.posOut, len - pos); + out.set(this.state.subarray(this.posOut, this.posOut + take), pos); + this.posOut += take; + pos += take; + } + return out; + } + xofInto(out) { + // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF + if (!this.enableXOF) + throw new Error('XOF is not possible for this instance'); + return this.writeInto(out); + } + xof(bytes) { + assertNumber(bytes); + return this.xofInto(new Uint8Array(bytes)); + } + digestInto(out) { + if (out.length < this.outputLen) + throw new Error('Keccak: invalid output buffer'); + if (this.finished) + throw new Error('digest() was already called'); + this.finish(); + this.writeInto(out); + this.destroy(); + return out; + } + digest() { + return this.digestInto(new Uint8Array(this.outputLen)); + } + destroy() { + this.destroyed = true; + this.state.fill(0); + } + _cloneInto(to) { + const { blockLen, suffix, outputLen, rounds, enableXOF } = this; + to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds)); + to.state32.set(this.state32); + to.pos = this.pos; + to.posOut = this.posOut; + to.finished = this.finished; + to.rounds = rounds; + // Suffix can change in cSHAKE + to.suffix = suffix; + to.outputLen = outputLen; + to.enableXOF = enableXOF; + to.destroyed = this.destroyed; + return to; + } +} +const gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen)); +gen(0x06, 144, 224 / 8); +/** + * SHA3-256 hash function + * @param message - that would be hashed + */ +gen(0x06, 136, 256 / 8); +gen(0x06, 104, 384 / 8); +gen(0x06, 72, 512 / 8); +gen(0x01, 144, 224 / 8); +/** + * keccak-256 hash function. Different from SHA3-256. + * @param message - that would be hashed + */ +const keccak_256 = gen(0x01, 136, 256 / 8); +gen(0x01, 104, 384 / 8); +gen(0x01, 72, 512 / 8); +const genShake = (suffix, blockLen, outputLen) => wrapConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen !== undefined ? opts.dkLen : outputLen, true)); +genShake(0x1f, 168, 128 / 8); +genShake(0x1f, 136, 256 / 8); + +let locked$3 = false; +const _keccak256 = function (data) { + return keccak_256(data); +}; +let __keccak256 = _keccak256; +function keccak256(_data) { + const data = logger$b.getBytes(_data, "data"); + return hexlify(__keccak256(data)); +} +keccak256._ = _keccak256; +keccak256.lock = function () { locked$3 = true; }; +keccak256.register = function (func) { + if (locked$3) { + throw new TypeError("keccak256 is locked"); + } + __keccak256 = func; +}; +Object.freeze(keccak256); + +// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html +// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf +const Rho = new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]); +const Id = Uint8Array.from({ length: 16 }, (_, i) => i); +const Pi = Id.map((i) => (9 * i + 5) % 16); +let idxL = [Id]; +let idxR = [Pi]; +for (let i = 0; i < 4; i++) + for (let j of [idxL, idxR]) + j.push(j[i].map((k) => Rho[k])); +const shifts = [ + [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8], + [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7], + [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9], + [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6], + [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5], +].map((i) => new Uint8Array(i)); +const shiftsL = idxL.map((idx, i) => idx.map((j) => shifts[i][j])); +const shiftsR = idxR.map((idx, i) => idx.map((j) => shifts[i][j])); +const Kl = new Uint32Array([0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]); +const Kr = new Uint32Array([0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]); +// The rotate left (circular left shift) operation for uint32 +const rotl$1 = (word, shift) => (word << shift) | (word >>> (32 - shift)); +// It's called f() in spec. +function f(group, x, y, z) { + if (group === 0) + return x ^ y ^ z; + else if (group === 1) + return (x & y) | (~x & z); + else if (group === 2) + return (x | ~y) ^ z; + else if (group === 3) + return (x & z) | (y & ~z); + else + return x ^ (y | ~z); +} +// Temporary buffer, not used to store anything between runs +const BUF = new Uint32Array(16); +class RIPEMD160 extends SHA2 { + constructor() { + super(64, 20, 8, true); + this.h0 = 0x67452301 | 0; + this.h1 = 0xefcdab89 | 0; + this.h2 = 0x98badcfe | 0; + this.h3 = 0x10325476 | 0; + this.h4 = 0xc3d2e1f0 | 0; + } + get() { + const { h0, h1, h2, h3, h4 } = this; + return [h0, h1, h2, h3, h4]; + } + set(h0, h1, h2, h3, h4) { + this.h0 = h0 | 0; + this.h1 = h1 | 0; + this.h2 = h2 | 0; + this.h3 = h3 | 0; + this.h4 = h4 | 0; + } + process(view, offset) { + for (let i = 0; i < 16; i++, offset += 4) + BUF[i] = view.getUint32(offset, true); + // prettier-ignore + let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el; + // Instead of iterating 0 to 80, we split it into 5 groups + // And use the groups in constants, functions, etc. Much simpler + for (let group = 0; group < 5; group++) { + const rGroup = 4 - group; + const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore + const rl = idxL[group], rr = idxR[group]; // prettier-ignore + const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore + for (let i = 0; i < 16; i++) { + const tl = (rotl$1(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0; + al = el, el = dl, dl = rotl$1(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore + } + // 2 loops are 10% faster + for (let i = 0; i < 16; i++) { + const tr = (rotl$1(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0; + ar = er, er = dr, dr = rotl$1(cr, 10) | 0, cr = br, br = tr; // prettier-ignore + } + } + // Add the compressed chunk to the current hash value + this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0); + } + roundClean() { + BUF.fill(0); + } + destroy() { + this.destroyed = true; + this.buffer.fill(0); + this.set(0, 0, 0, 0, 0); + } +} +/** + * RIPEMD-160 - a hash function from 1990s. + * @param message - msg that would be hashed + */ +const ripemd160$1 = wrapConstructor(() => new RIPEMD160()); + +let locked$2 = false; +const _ripemd160 = function (data) { + return ripemd160$1(data); +}; +let __ripemd160 = _ripemd160; +function ripemd160(_data) { + const data = logger$b.getBytes(_data, "data"); + return hexlify(__ripemd160(data)); +} +ripemd160._ = _ripemd160; +ripemd160.lock = function () { locked$2 = true; }; +ripemd160.register = function (func) { + if (locked$2) { + throw new TypeError("ripemd160 is locked"); + } + __ripemd160 = func; +}; +Object.freeze(ripemd160); + +let locked$1 = false; +const _pbkdf2 = function (password, salt, iterations, keylen, algo) { + return pbkdf2Sync(password, salt, iterations, keylen, algo); +}; +let __pbkdf2 = _pbkdf2; +function pbkdf2(_password, _salt, iterations, keylen, algo) { + const password = logger$b.getBytes(_password, "password"); + const salt = logger$b.getBytes(_salt, "salt"); + return hexlify(__pbkdf2(password, salt, iterations, keylen, algo)); +} +pbkdf2._ = _pbkdf2; +pbkdf2.lock = function () { locked$1 = true; }; +pbkdf2.register = function (func) { + if (locked$1) { + throw new Error("pbkdf2 is locked"); + } + __pbkdf2 = func; +}; +Object.freeze(pbkdf2); + +let locked = false; +const _randomBytes = function (length) { + return new Uint8Array(randomBytes$1(length)); +}; +let __randomBytes = _randomBytes; +function randomBytes(length) { + return __randomBytes(length); +} +randomBytes._ = _randomBytes; +randomBytes.lock = function () { locked = true; }; +randomBytes.register = function (func) { + if (locked) { + throw new Error("random is locked"); + } + __randomBytes = func; +}; +Object.freeze(randomBytes); + +// RFC 7914 Scrypt KDF +// Left rotate for uint32 +const rotl = (a, b) => (a << b) | (a >>> (32 - b)); +// The main Scrypt loop: uses Salsa extensively. +// Six versions of the function were tried, this is the fastest one. +// prettier-ignore +function XorAndSalsa(prev, pi, input, ii, out, oi) { + // Based on https://cr.yp.to/salsa20.html + // Xor blocks + let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++]; + let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++]; + let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++]; + let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++]; + let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++]; + let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++]; + let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++]; + let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++]; + // Save state to temporary variables (salsa) + let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15; + // Main loop (salsa) + for (let i = 0; i < 8; i += 2) { + x04 ^= rotl(x00 + x12 | 0, 7); + x08 ^= rotl(x04 + x00 | 0, 9); + x12 ^= rotl(x08 + x04 | 0, 13); + x00 ^= rotl(x12 + x08 | 0, 18); + x09 ^= rotl(x05 + x01 | 0, 7); + x13 ^= rotl(x09 + x05 | 0, 9); + x01 ^= rotl(x13 + x09 | 0, 13); + x05 ^= rotl(x01 + x13 | 0, 18); + x14 ^= rotl(x10 + x06 | 0, 7); + x02 ^= rotl(x14 + x10 | 0, 9); + x06 ^= rotl(x02 + x14 | 0, 13); + x10 ^= rotl(x06 + x02 | 0, 18); + x03 ^= rotl(x15 + x11 | 0, 7); + x07 ^= rotl(x03 + x15 | 0, 9); + x11 ^= rotl(x07 + x03 | 0, 13); + x15 ^= rotl(x11 + x07 | 0, 18); + x01 ^= rotl(x00 + x03 | 0, 7); + x02 ^= rotl(x01 + x00 | 0, 9); + x03 ^= rotl(x02 + x01 | 0, 13); + x00 ^= rotl(x03 + x02 | 0, 18); + x06 ^= rotl(x05 + x04 | 0, 7); + x07 ^= rotl(x06 + x05 | 0, 9); + x04 ^= rotl(x07 + x06 | 0, 13); + x05 ^= rotl(x04 + x07 | 0, 18); + x11 ^= rotl(x10 + x09 | 0, 7); + x08 ^= rotl(x11 + x10 | 0, 9); + x09 ^= rotl(x08 + x11 | 0, 13); + x10 ^= rotl(x09 + x08 | 0, 18); + x12 ^= rotl(x15 + x14 | 0, 7); + x13 ^= rotl(x12 + x15 | 0, 9); + x14 ^= rotl(x13 + x12 | 0, 13); + x15 ^= rotl(x14 + x13 | 0, 18); + } + // Write output (salsa) + out[oi++] = (y00 + x00) | 0; + out[oi++] = (y01 + x01) | 0; + out[oi++] = (y02 + x02) | 0; + out[oi++] = (y03 + x03) | 0; + out[oi++] = (y04 + x04) | 0; + out[oi++] = (y05 + x05) | 0; + out[oi++] = (y06 + x06) | 0; + out[oi++] = (y07 + x07) | 0; + out[oi++] = (y08 + x08) | 0; + out[oi++] = (y09 + x09) | 0; + out[oi++] = (y10 + x10) | 0; + out[oi++] = (y11 + x11) | 0; + out[oi++] = (y12 + x12) | 0; + out[oi++] = (y13 + x13) | 0; + out[oi++] = (y14 + x14) | 0; + out[oi++] = (y15 + x15) | 0; +} +function BlockMix(input, ii, out, oi, r) { + // The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks) + let head = oi + 0; + let tail = oi + 16 * r; + for (let i = 0; i < 16; i++) + out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; // X ← B[2r−1] + for (let i = 0; i < r; i++, head += 16, ii += 16) { + // We write odd & even Yi at same time. Even: 0bXXXXX0 Odd: 0bXXXXX1 + XorAndSalsa(out, tail, input, ii, out, head); // head[i] = Salsa(blockIn[2*i] ^ tail[i-1]) + if (i > 0) + tail += 16; // First iteration overwrites tmp value in tail + XorAndSalsa(out, head, input, (ii += 16), out, tail); // tail[i] = Salsa(blockIn[2*i+1] ^ head[i]) + } +} +// Common prologue and epilogue for sync/async functions +function scryptInit(password, salt, _opts) { + // Maxmem - 1GB+1KB by default + const opts = checkOpts({ + dkLen: 32, + asyncTick: 10, + maxmem: 1024 ** 3 + 1024, + }, _opts); + const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts; + assertNumber(N); + assertNumber(r); + assertNumber(p); + assertNumber(dkLen); + assertNumber(asyncTick); + assertNumber(maxmem); + if (onProgress !== undefined && typeof onProgress !== 'function') + throw new Error('progressCb should be function'); + const blockSize = 128 * r; + const blockSize32 = blockSize / 4; + if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) { + // NOTE: we limit N to be less than 2**32 because of 32 bit variant of Integrify function + // There is no JS engines that allows alocate more than 4GB per single Uint8Array for now, but can change in future. + throw new Error('Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32'); + } + if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) { + throw new Error('Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)'); + } + if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) { + throw new Error('Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32'); + } + const memUsed = blockSize * (N + p); + if (memUsed > maxmem) { + throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`); + } + // [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor) + // Since it has only one iteration there is no reason to use async variant + const B = pbkdf2$1(sha256$1, password, salt, { c: 1, dkLen: blockSize * p }); + const B32 = u32(B); + // Re-used between parallel iterations. Array(iterations) of B + const V = u32(new Uint8Array(blockSize * N)); + const tmp = u32(new Uint8Array(blockSize)); + let blockMixCb = () => { }; + if (onProgress) { + const totalBlockMix = 2 * N * p; + // Invoke callback if progress changes from 10.01 to 10.02 + // Allows to draw smooth progress bar on up to 8K screen + const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1); + let blockMixCnt = 0; + blockMixCb = () => { + blockMixCnt++; + if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix)) + onProgress(blockMixCnt / totalBlockMix); + }; + } + return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick }; +} +function scryptOutput(password, dkLen, B, V, tmp) { + const res = pbkdf2$1(sha256$1, password, B, { c: 1, dkLen }); + B.fill(0); + V.fill(0); + tmp.fill(0); + return res; +} +/** + * Scrypt KDF from RFC 7914. + * @param password - pass + * @param salt - salt + * @param opts - parameters + * - `N` is cpu/mem work factor (power of 2 e.g. 2**18) + * - `r` is block size (8 is common), fine-tunes sequential memory read size and performance + * - `p` is parallelization factor (1 is common) + * - `dkLen` is output key length in bytes e.g. 32. + * - `asyncTick` - (default: 10) max time in ms for which async function can block execution + * - `maxmem` - (default: `1024 ** 3 + 1024` aka 1GB+1KB). A limit that the app could use for scrypt + * - `onProgress` - callback function that would be executed for progress report + * @returns Derived key + */ +function scrypt$1(password, salt, opts) { + const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts); + for (let pi = 0; pi < p; pi++) { + const Pi = blockSize32 * pi; + for (let i = 0; i < blockSize32; i++) + V[i] = B32[Pi + i]; // V[0] = B[i] + for (let i = 0, pos = 0; i < N - 1; i++) { + BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]); + blockMixCb(); + } + BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element + blockMixCb(); + for (let i = 0; i < N; i++) { + // First u32 of the last 64-byte block (u32 is LE) + const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations + for (let k = 0; k < blockSize32; k++) + tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j] + BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j]) + blockMixCb(); + } + } + return scryptOutput(password, dkLen, B, V, tmp); +} +/** + * Scrypt KDF from RFC 7914. + */ +async function scryptAsync(password, salt, opts) { + const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(password, salt, opts); + for (let pi = 0; pi < p; pi++) { + const Pi = blockSize32 * pi; + for (let i = 0; i < blockSize32; i++) + V[i] = B32[Pi + i]; // V[0] = B[i] + let pos = 0; + await asyncLoop(N - 1, asyncTick, (i) => { + BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]); + blockMixCb(); + }); + BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element + blockMixCb(); + await asyncLoop(N, asyncTick, (i) => { + // First u32 of the last 64-byte block (u32 is LE) + const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations + for (let k = 0; k < blockSize32; k++) + tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j] + BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j]) + blockMixCb(); + }); + } + return scryptOutput(password, dkLen, B, V, tmp); +} + +let lockedSync = false, lockedAsync = false; +const _scryptAsync = async function (passwd, salt, N, r, p, dkLen, onProgress) { + return await scryptAsync(passwd, salt, { N, r, p, dkLen, onProgress }); +}; +const _scryptSync = function (passwd, salt, N, r, p, dkLen) { + return scrypt$1(passwd, salt, { N, r, p, dkLen }); +}; +let __scryptAsync = _scryptAsync; +let __scryptSync = _scryptSync; +async function scrypt(_passwd, _salt, N, r, p, dkLen, progress) { + const passwd = logger$b.getBytes(_passwd, "passwd"); + const salt = logger$b.getBytes(_salt, "salt"); + return hexlify(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress)); +} +scrypt._ = _scryptAsync; +scrypt.lock = function () { lockedAsync = true; }; +scrypt.register = function (func) { + if (lockedAsync) { + throw new Error("scrypt is locked"); + } + __scryptAsync = func; +}; +Object.freeze(scrypt); +function scryptSync(_passwd, _salt, N, r, p, dkLen) { + const passwd = logger$b.getBytes(_passwd, "passwd"); + const salt = logger$b.getBytes(_salt, "salt"); + return hexlify(__scryptSync(passwd, salt, N, r, p, dkLen)); +} +scryptSync._ = _scryptSync; +scryptSync.lock = function () { lockedSync = true; }; +scryptSync.register = function (func) { + if (lockedSync) { + throw new Error("scryptSync is locked"); + } + __scryptSync = func; +}; +Object.freeze(scryptSync); + +const _sha256 = function (data) { + return createHash("sha256").update(data).digest(); +}; +const _sha512 = function (data) { + return createHash("sha512").update(data).digest(); +}; +let __sha256 = _sha256; +let __sha512 = _sha512; +let locked256 = false, locked512 = false; +function sha256(_data) { + const data = logger$b.getBytes(_data, "data"); + return hexlify(__sha256(data)); +} +sha256._ = _sha256; +sha256.lock = function () { locked256 = true; }; +sha256.register = function (func) { + if (locked256) { + throw new Error("sha256 is locked"); + } + __sha256 = func; +}; +Object.freeze(sha256); +function sha512(_data) { + const data = logger$b.getBytes(_data, "data"); + return hexlify(__sha512(data)); +} +sha512._ = _sha512; +sha512.lock = function () { locked512 = true; }; +sha512.register = function (func) { + if (locked512) { + throw new Error("sha512 is locked"); + } + __sha512 = func; +}; +Object.freeze(sha256); + +// We import all these so we can export lock() +function lock() { + computeHmac.lock(); + keccak256.lock(); + pbkdf2.lock(); + randomBytes.lock(); + ripemd160.lock(); + scrypt.lock(); + scryptSync.lock(); + sha256.lock(); + sha512.lock(); +} + +const version$b = "@ethersproject/address@6.0.0-beta.1"; + +const logger$a = new Logger(version$b); + +const BN_0$4 = BigInt(0); +const BN_36 = BigInt(36); +function getChecksumAddress(address) { + // if (!isHexString(address, 20)) { + // logger.throwArgumentError("invalid address", "address", address); + // } + address = address.toLowerCase(); + const chars = address.substring(2).split(""); + const expanded = new Uint8Array(40); + for (let i = 0; i < 40; i++) { + expanded[i] = chars[i].charCodeAt(0); + } + const hashed = arrayify(keccak256(expanded)); + for (let i = 0; i < 40; i += 2) { + if ((hashed[i >> 1] >> 4) >= 8) { + chars[i] = chars[i].toUpperCase(); + } + if ((hashed[i >> 1] & 0x0f) >= 8) { + chars[i + 1] = chars[i + 1].toUpperCase(); + } + } + return "0x" + chars.join(""); +} +// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number +// Create lookup table +const ibanLookup = {}; +for (let i = 0; i < 10; i++) { + ibanLookup[String(i)] = String(i); +} +for (let i = 0; i < 26; i++) { + ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); +} +// How many decimal digits can we process? (for 64-bit float, this is 15) +// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER)); +const safeDigits = 15; +function ibanChecksum(address) { + address = address.toUpperCase(); + address = address.substring(4) + address.substring(0, 2) + "00"; + let expanded = address.split("").map((c) => { return ibanLookup[c]; }).join(""); + // Javascript can handle integers safely up to 15 (decimal) digits + while (expanded.length >= safeDigits) { + let block = expanded.substring(0, safeDigits); + expanded = parseInt(block, 10) % 97 + expanded.substring(block.length); + } + let checksum = String(98 - (parseInt(expanded, 10) % 97)); + while (checksum.length < 2) { + checksum = "0" + checksum; + } + return checksum; +} +const Base36 = (function () { + const result = {}; + for (let i = 0; i < 36; i++) { + const key = "0123456789abcdefghijklmnopqrstuvwxyz"[i]; + result[key] = BigInt(i); + } + return result; +})(); +function fromBase36(value) { + value = value.toLowerCase(); + let result = BN_0$4; + for (let i = 0; i < value.length; i++) { + result = result * BN_36 + Base36[value[i]]; + } + return result; +} +function getAddress(address) { + if (typeof (address) !== "string") { + logger$a.throwArgumentError("invalid address", "address", address); + } + if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) { + // Missing the 0x prefix + if (address.substring(0, 2) !== "0x") { + address = "0x" + address; + } + const result = getChecksumAddress(address); + // It is a checksummed address with a bad checksum + if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) { + logger$a.throwArgumentError("bad address checksum", "address", address); + } + return result; + } + // Maybe ICAP? (we only support direct mode) + if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) { + // It is an ICAP address with a bad checksum + if (address.substring(2, 4) !== ibanChecksum(address)) { + logger$a.throwArgumentError("bad icap checksum", "address", address); + } + let result = fromBase36(address.substring(4)).toString(16); + while (result.length < 40) { + result = "0" + result; + } + return getChecksumAddress("0x" + result); + } + return logger$a.throwArgumentError("invalid address", "address", address); +} +function getIcapAddress(address) { + //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase(); + let base36 = BigInt(getAddress(address)).toString(36).toUpperCase(); + while (base36.length < 30) { + base36 = "0" + base36; + } + return "XE" + ibanChecksum("XE00" + base36) + base36; +} + +const version$a = "@ethersproject/rlp@6.0.0-beta.1"; + +const logger$9 = new Logger(version$a); + +//See: https://github.com/ethereum/wiki/wiki/RLP +function arrayifyInteger(value) { + const result = []; + while (value) { + result.unshift(value & 0xff); + value >>= 8; + } + return result; +} +function _encode(object) { + if (Array.isArray(object)) { + let payload = []; + object.forEach(function (child) { + payload = payload.concat(_encode(child)); + }); + if (payload.length <= 55) { + payload.unshift(0xc0 + payload.length); + return payload; + } + const length = arrayifyInteger(payload.length); + length.unshift(0xf7 + length.length); + return length.concat(payload); + } + const data = Array.prototype.slice.call(logger$9.getBytes(object, "object")); + if (data.length === 1 && data[0] <= 0x7f) { + return data; + } + else if (data.length <= 55) { + data.unshift(0x80 + data.length); + return data; + } + const length = arrayifyInteger(data.length); + length.unshift(0xb7 + length.length); + return length.concat(data); +} +const nibbles = "0123456789abcdef"; +function encodeRlp(object) { + let result = "0x"; + for (const v of _encode(object)) { + result += nibbles[v >> 4]; + result += nibbles[v & 0xf]; + } + return result; +} + +//See: https://github.com/ethereum/wiki/wiki/RLP +function hexlifyByte(value) { + let result = value.toString(16); + while (result.length < 2) { + result = "0" + result; + } + return "0x" + result; +} +function unarrayifyInteger(data, offset, length) { + let result = 0; + for (let i = 0; i < length; i++) { + result = (result * 256) + data[offset + i]; + } + return result; +} +function _decodeChildren(data, offset, childOffset, length) { + const result = []; + while (childOffset < offset + 1 + length) { + const decoded = _decode(data, childOffset); + result.push(decoded.result); + childOffset += decoded.consumed; + if (childOffset > offset + 1 + length) { + logger$9.throwError("child data too short", "BUFFER_OVERRUN", { + buffer: data, length, offset + }); + } + } + return { consumed: (1 + length), result: result }; +} +// returns { consumed: number, result: Object } +function _decode(data, offset) { + if (data.length === 0) { + logger$9.throwError("data too short", "BUFFER_OVERRUN", { + buffer: data, length: 0, offset: 1 + }); + } + const checkOffset = (offset) => { + if (offset > data.length) { + logger$9.throwError("data short segment too short", "BUFFER_OVERRUN", { + buffer: data, length: data.length, offset + }); + } + }; + // Array with extra length prefix + if (data[offset] >= 0xf8) { + const lengthLength = data[offset] - 0xf7; + checkOffset(offset + 1 + lengthLength); + const length = unarrayifyInteger(data, offset + 1, lengthLength); + checkOffset(offset + 1 + lengthLength + length); + return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length); + } + else if (data[offset] >= 0xc0) { + const length = data[offset] - 0xc0; + checkOffset(offset + 1 + length); + return _decodeChildren(data, offset, offset + 1, length); + } + else if (data[offset] >= 0xb8) { + const lengthLength = data[offset] - 0xb7; + checkOffset(offset + 1 + lengthLength); + const length = unarrayifyInteger(data, offset + 1, lengthLength); + checkOffset(offset + 1 + lengthLength + length); + const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length)); + return { consumed: (1 + lengthLength + length), result: result }; + } + else if (data[offset] >= 0x80) { + const length = data[offset] - 0x80; + checkOffset(offset + 1 + length); + const result = hexlify(data.slice(offset + 1, offset + 1 + length)); + return { consumed: (1 + length), result: result }; + } + return { consumed: 1, result: hexlifyByte(data[offset]) }; +} +function decodeRlp(_data) { + const data = logger$9.getBytes(_data, "data"); + const decoded = _decode(data, 0); + if (decoded.consumed !== data.length) { + logger$9.throwArgumentError("unexpected junk after rlp payload", "data", _data); + } + return decoded.result; +} + +// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed +function getCreateAddress(tx) { + const from = getAddress(tx.from); + const nonce = logger$a.getBigInt(tx.nonce, "tx.nonce"); + let nonceHex = nonce.toString(16); + if (nonceHex === "0") { + nonceHex = "0x"; + } + else if (nonceHex.length % 2) { + nonceHex = "0x0" + nonceHex; + } + else { + nonceHex = "0x" + nonceHex; + } + return getAddress(dataSlice(keccak256(encodeRlp([from, nonceHex])), 12)); +} +function getCreate2Address(_from, _salt, _initCodeHash) { + const from = getAddress(_from); + const salt = logger$a.getBytes(_salt, "salt"); + const initCodeHash = logger$a.getBytes(_initCodeHash, "initCodeHash"); + if (salt.length !== 32) { + logger$a.throwArgumentError("salt must be 32 bytes", "salt", _salt); + } + if (initCodeHash.length !== 32) { + logger$a.throwArgumentError("initCodeHash must be 32 bytes", "initCodeHash", _initCodeHash); + } + return getAddress(dataSlice(keccak256(concat(["0xff", from, salt, initCodeHash])), 12)); +} + +function isAddressable(value) { + return (value && typeof (value.getAddress) === "function"); +} +function isAddress(value) { + try { + getAddress(value); + return true; + } + catch (error) { } + return false; +} +// Resolves an Ethereum address, ENS name or Addressable object, +// throwing if the result is null; an explicit null returns null +//export async function resolveAddress(target?: null, resolver?: null | NameResolver): Promise; +//export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver): Promise; +//export async function resolveAddress(target: null | undefined | string | Addressable, resolver?: null | NameResolver) { +async function resolveAddress(target, resolver) { + //if (target == null) { return null; } + if (typeof (target) === "string") { + if (target.match(/^0x[0-9a-f]{40}$/i)) { + return getAddress(target); + } + if (resolver == null) { + return logger$a.throwError("ENS resolution requires a provider", "UNSUPPORTED_OPERATION", { + operation: "resolveName", + }); + } + const result = await resolver.resolveName(target); + if (result == null || result === "0x0000000000000000000000000000000000000000") { + return logger$a.throwError("unconfigured name", "UNCONFIGURED_NAME", { value: target }); + } + return getAddress(result); + } + else if (isAddressable(target)) { + const result = await target.getAddress(); + if (result == null) { + logger$a.throwArgumentError("addressable resolved to null", "target", target); + } + return getAddress(result); + } + return logger$a.throwArgumentError("unsupported addressable value", "target", target); +} + +var __classPrivateFieldSet$t = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$u = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Typed_options; +const _gaurd = {}; +function n(value, width) { + let signed = false; + if (width < 0) { + signed = true; + width *= -1; + } + // @TODO: Check range is valid for value + return new Typed(_gaurd, `${signed ? "" : "u"}int${width}`, value, { signed, width }); +} +function b(value, size) { + // @TODO: Check range is valid for value + return new Typed(_gaurd, `bytes${(size) ? size : ""}`, value, { size }); +} +const _typedSymbol = Symbol.for("_ethers_typed"); +class Typed { + constructor(gaurd, type, value, options = null) { + _Typed_options.set(this, void 0); + if (gaurd !== _gaurd) { + throw new Error("private constructor"); + } + defineProperties(this, { _typedSymbol, type, value }); + __classPrivateFieldSet$t(this, _Typed_options, options, "f"); + // Check the value is valid + this.format(); + } + format() { + if (this.type === "array") { + throw new Error(""); + } + else if (this.type === "dynamicArray") { + throw new Error(""); + } + else if (this.type === "tuple") { + return `tuple(${this.value.map((v) => v.format()).join(",")})`; + } + return this.type; + } + defaultValue() { + return 0; + } + minValue() { + return 0; + } + maxValue() { + return 0; + } + isBigInt() { + return !!(this.type.match(/^u?int[0-9]+$/)); + } + isData() { + return (this.type.substring(0, 5) === "bytes"); + } + isString() { + return (this.type === "string"); + } + get tupleName() { + if (this.type !== "tuple") { + throw TypeError("not a tuple"); + } + return __classPrivateFieldGet$u(this, _Typed_options, "f"); + } + // Returns the length of this type as an array + // - `null` indicates the length is unforced, it could be dynamic + // - `-1` indicates the length is dynamic + // - any other value indicates it is a static array and is its length + get arrayLength() { + if (this.type !== "array") { + throw TypeError("not an array"); + } + if (__classPrivateFieldGet$u(this, _Typed_options, "f") === true) { + return -1; + } + if (__classPrivateFieldGet$u(this, _Typed_options, "f") === false) { + return (this.value).length; + } + return null; + } + static from(type, value) { + return new Typed(_gaurd, type, value); + } + static uint8(v) { return n(v, 8); } + static uint16(v) { return n(v, 16); } + static uint24(v) { return n(v, 24); } + static uint32(v) { return n(v, 32); } + static uint40(v) { return n(v, 40); } + static uint48(v) { return n(v, 46); } + static uint56(v) { return n(v, 56); } + static uint64(v) { return n(v, 64); } + static uint72(v) { return n(v, 72); } + static uint80(v) { return n(v, 80); } + static uint88(v) { return n(v, 88); } + static uint96(v) { return n(v, 96); } + static uint104(v) { return n(v, 104); } + static uint112(v) { return n(v, 112); } + static uint120(v) { return n(v, 120); } + static uint128(v) { return n(v, 128); } + static uint136(v) { return n(v, 136); } + static uint144(v) { return n(v, 144); } + static uint152(v) { return n(v, 152); } + static uint160(v) { return n(v, 160); } + static uint168(v) { return n(v, 168); } + static uint176(v) { return n(v, 176); } + static uint184(v) { return n(v, 184); } + static uint192(v) { return n(v, 192); } + static uint200(v) { return n(v, 200); } + static uint208(v) { return n(v, 208); } + static uint216(v) { return n(v, 216); } + static uint224(v) { return n(v, 224); } + static uint232(v) { return n(v, 232); } + static uint240(v) { return n(v, 240); } + static uint248(v) { return n(v, 248); } + static uint256(v) { return n(v, 256); } + static uint(v) { return n(v, 256); } + static int8(v) { return n(v, -8); } + static int16(v) { return n(v, -16); } + static int24(v) { return n(v, -24); } + static int32(v) { return n(v, -32); } + static int40(v) { return n(v, -40); } + static int48(v) { return n(v, -46); } + static int56(v) { return n(v, -56); } + static int64(v) { return n(v, -64); } + static int72(v) { return n(v, -72); } + static int80(v) { return n(v, -80); } + static int88(v) { return n(v, -88); } + static int96(v) { return n(v, -96); } + static int104(v) { return n(v, -104); } + static int112(v) { return n(v, -112); } + static int120(v) { return n(v, -120); } + static int128(v) { return n(v, -128); } + static int136(v) { return n(v, -136); } + static int144(v) { return n(v, -144); } + static int152(v) { return n(v, -152); } + static int160(v) { return n(v, -160); } + static int168(v) { return n(v, -168); } + static int176(v) { return n(v, -176); } + static int184(v) { return n(v, -184); } + static int192(v) { return n(v, -192); } + static int200(v) { return n(v, -200); } + static int208(v) { return n(v, -208); } + static int216(v) { return n(v, -216); } + static int224(v) { return n(v, -224); } + static int232(v) { return n(v, -232); } + static int240(v) { return n(v, -240); } + static int248(v) { return n(v, -248); } + static int256(v) { return n(v, -256); } + static int(v) { return n(v, -256); } + static bytes(v) { return b(v); } + static bytes1(v) { return b(v, 1); } + static bytes2(v) { return b(v, 2); } + static bytes3(v) { return b(v, 3); } + static bytes4(v) { return b(v, 4); } + static bytes5(v) { return b(v, 5); } + static bytes6(v) { return b(v, 6); } + static bytes7(v) { return b(v, 7); } + static bytes8(v) { return b(v, 8); } + static bytes9(v) { return b(v, 9); } + static bytes10(v) { return b(v, 10); } + static bytes11(v) { return b(v, 11); } + static bytes12(v) { return b(v, 12); } + static bytes13(v) { return b(v, 13); } + static bytes14(v) { return b(v, 14); } + static bytes15(v) { return b(v, 15); } + static bytes16(v) { return b(v, 16); } + static bytes17(v) { return b(v, 17); } + static bytes18(v) { return b(v, 18); } + static bytes19(v) { return b(v, 19); } + static bytes20(v) { return b(v, 20); } + static bytes21(v) { return b(v, 21); } + static bytes22(v) { return b(v, 22); } + static bytes23(v) { return b(v, 23); } + static bytes24(v) { return b(v, 24); } + static bytes25(v) { return b(v, 25); } + static bytes26(v) { return b(v, 26); } + static bytes27(v) { return b(v, 27); } + static bytes28(v) { return b(v, 28); } + static bytes29(v) { return b(v, 29); } + static bytes30(v) { return b(v, 30); } + static bytes31(v) { return b(v, 31); } + static bytes32(v) { return b(v, 32); } + static address(v) { return new Typed(_gaurd, "address", v); } + static bool(v) { return new Typed(_gaurd, "bool", !!v); } + static string(v) { return new Typed(_gaurd, "string", v); } + static array(v, dynamic) { + throw new Error("not implemented yet"); + } + static tuple(v, name) { + throw new Error("not implemented yet"); + } + static overrides(v) { + return new Typed(_gaurd, "overrides", Object.assign({}, v)); + } + static isTyped(value) { + return (value && value._typedSymbol === _typedSymbol); + } + static dereference(value, type) { + if (Typed.isTyped(value)) { + if (value.type !== type) { + throw new Error(`invalid type: expecetd ${type}, got ${value.type}`); + } + return value.value; + } + return value; + } +} +_Typed_options = new WeakMap(); + +class AddressCoder extends Coder { + constructor(localName) { + super("address", "address", localName, false); + } + defaultValue() { + return "0x0000000000000000000000000000000000000000"; + } + encode(writer, _value) { + let value = Typed.dereference(_value, "string"); + try { + value = getAddress(value); + } + catch (error) { + return this._throwError(error.message, _value); + } + return writer.writeValue(value); + } + decode(reader) { + return getAddress(toHex(reader.readValue(), 20)); + } +} + +// Clones the functionality of an existing Coder, but without a localName +class AnonymousCoder extends Coder { + constructor(coder) { + super(coder.name, coder.type, "_", coder.dynamic); + this.coder = coder; + } + defaultValue() { + return this.coder.defaultValue(); + } + encode(writer, value) { + return this.coder.encode(writer, value); + } + decode(reader) { + return this.coder.decode(reader); + } +} + +function pack(writer, coders, values) { + let arrayValues = []; + if (Array.isArray(values)) { + arrayValues = values; + } + else if (values && typeof (values) === "object") { + let unique = {}; + arrayValues = coders.map((coder) => { + const name = coder.localName; + if (!name) { + logger$e.throwError("cannot encode object for signature with missing names", "INVALID_ARGUMENT", { + argument: "values", + info: { coder }, + value: values + }); + } + if (unique[name]) { + logger$e.throwError("cannot encode object for signature with duplicate names", "INVALID_ARGUMENT", { + argument: "values", + info: { coder }, + value: values + }); + } + unique[name] = true; + return values[name]; + }); + } + else { + logger$e.throwArgumentError("invalid tuple value", "tuple", values); + } + if (coders.length !== arrayValues.length) { + logger$e.throwArgumentError("types/value length mismatch", "tuple", values); + } + let staticWriter = new Writer(); + let dynamicWriter = new Writer(); + let updateFuncs = []; + coders.forEach((coder, index) => { + let value = arrayValues[index]; + if (coder.dynamic) { + // Get current dynamic offset (for the future pointer) + let dynamicOffset = dynamicWriter.length; + // Encode the dynamic value into the dynamicWriter + coder.encode(dynamicWriter, value); + // Prepare to populate the correct offset once we are done + let updateFunc = staticWriter.writeUpdatableValue(); + updateFuncs.push((baseOffset) => { + updateFunc(baseOffset + dynamicOffset); + }); + } + else { + coder.encode(staticWriter, value); + } + }); + // Backfill all the dynamic offsets, now that we know the static length + updateFuncs.forEach((func) => { func(staticWriter.length); }); + let length = writer.appendWriter(staticWriter); + length += writer.appendWriter(dynamicWriter); + return length; +} +function unpack(reader, coders) { + let values = []; + let keys = []; + // A reader anchored to this base + let baseReader = reader.subReader(0); + coders.forEach((coder) => { + let value = null; + if (coder.dynamic) { + let offset = reader.readIndex(); + let offsetReader = baseReader.subReader(offset); + try { + value = coder.decode(offsetReader); + } + catch (error) { + // Cannot recover from this + if (isError(error, "BUFFER_OVERRUN")) { + throw error; + } + value = error; + value.baseType = coder.name; + value.name = coder.localName; + value.type = coder.type; + } + } + else { + try { + value = coder.decode(reader); + } + catch (error) { + // Cannot recover from this + if (isError(error, "BUFFER_OVERRUN")) { + throw error; + } + value = error; + value.baseType = coder.name; + value.name = coder.localName; + value.type = coder.type; + } + } + if (value == undefined) { + throw new Error("investigate"); + } + values.push(value); + keys.push(coder.localName || null); + }); + return Result.fromItems(values, keys); +} +class ArrayCoder extends Coder { + constructor(coder, length, localName) { + const type = (coder.type + "[" + (length >= 0 ? length : "") + "]"); + const dynamic = (length === -1 || coder.dynamic); + super("array", type, localName, dynamic); + defineProperties(this, { coder, length }); + } + defaultValue() { + // Verifies the child coder is valid (even if the array is dynamic or 0-length) + const defaultChild = this.coder.defaultValue(); + const result = []; + for (let i = 0; i < this.length; i++) { + result.push(defaultChild); + } + return result; + } + encode(writer, _value) { + const value = Typed.dereference(_value, "array"); + if (!Array.isArray(value)) { + this._throwError("expected array value", value); + } + let count = this.length; + if (count === -1) { + count = value.length; + writer.writeValue(value.length); + } + logger$e.assertArgumentCount(value.length, count, "coder array" + (this.localName ? (" " + this.localName) : "")); + let coders = []; + for (let i = 0; i < value.length; i++) { + coders.push(this.coder); + } + return pack(writer, coders, value); + } + decode(reader) { + let count = this.length; + if (count === -1) { + count = reader.readIndex(); + // Check that there is *roughly* enough data to ensure + // stray random data is not being read as a length. Each + // slot requires at least 32 bytes for their value (or 32 + // bytes as a link to the data). This could use a much + // tighter bound, but we are erroring on the side of safety. + if (count * WordSize > reader.dataLength) { + logger$e.throwError("insufficient data length", "BUFFER_OVERRUN", { + buffer: reader.bytes, + offset: count * WordSize, + length: reader.dataLength + }); + } + } + let coders = []; + for (let i = 0; i < count; i++) { + coders.push(new AnonymousCoder(this.coder)); + } + return reader.coerce(this.name, unpack(reader, coders)); + } +} + +class BooleanCoder extends Coder { + constructor(localName) { + super("bool", "bool", localName, false); + } + defaultValue() { + return false; + } + encode(writer, _value) { + const value = Typed.dereference(_value, "bool"); + return writer.writeValue(value ? 1 : 0); + } + decode(reader) { + return reader.coerce(this.type, !reader.readValue()); + } +} + +class DynamicBytesCoder extends Coder { + constructor(type, localName) { + super(type, type, localName, true); + } + defaultValue() { + return "0x"; + } + encode(writer, value) { + value = arrayify(value); + let length = writer.writeValue(value.length); + length += writer.writeBytes(value); + return length; + } + decode(reader) { + return reader.readBytes(reader.readIndex(), true); + } +} +class BytesCoder extends DynamicBytesCoder { + constructor(localName) { + super("bytes", localName); + } + decode(reader) { + return reader.coerce(this.name, hexlify(super.decode(reader))); + } +} + +class FixedBytesCoder extends Coder { + constructor(size, localName) { + let name = "bytes" + String(size); + super(name, name, localName, false); + defineProperties(this, { size }, { size: "number" }); + } + defaultValue() { + return ("0x0000000000000000000000000000000000000000000000000000000000000000").substring(0, 2 + this.size * 2); + } + encode(writer, _value) { + let data = arrayify(Typed.dereference(_value, this.type)); + if (data.length !== this.size) { + this._throwError("incorrect data length", _value); + } + return writer.writeBytes(data); + } + decode(reader) { + return reader.coerce(this.name, hexlify(reader.readBytes(this.size))); + } +} + +const Empty$1 = new Uint8Array([]); +class NullCoder extends Coder { + constructor(localName) { + super("null", "", localName, false); + } + defaultValue() { + return null; + } + encode(writer, value) { + if (value != null) { + this._throwError("not null", value); + } + return writer.writeBytes(Empty$1); + } + decode(reader) { + reader.readBytes(0); + return reader.coerce(this.name, null); + } +} + +const BN_0$3 = BigInt(0); +const BN_1$4 = BigInt(1); +const BN_MAX_UINT256$2 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); +class NumberCoder extends Coder { + constructor(size, signed, localName) { + const name = ((signed ? "int" : "uint") + (size * 8)); + super(name, name, localName, false); + defineProperties(this, { size, signed }, { size: "number", signed: "boolean" }); + } + defaultValue() { + return 0; + } + encode(writer, _value) { + let value = logger$e.getBigInt(Typed.dereference(_value, this.type)); + // Check bounds are safe for encoding + let maxUintValue = mask(BN_MAX_UINT256$2, WordSize * 8); + if (this.signed) { + let bounds = mask(maxUintValue, (this.size * 8) - 1); + if (value > bounds || value < -(bounds + BN_1$4)) { + this._throwError("value out-of-bounds", _value); + } + } + else if (value < BN_0$3 || value > mask(maxUintValue, this.size * 8)) { + this._throwError("value out-of-bounds", _value); + } + value = mask(toTwos(value, this.size * 8), this.size * 8); + if (this.signed) { + value = toTwos(fromTwos(value, this.size * 8), 8 * WordSize); + } + return writer.writeValue(value); + } + decode(reader) { + let value = mask(reader.readValue(), this.size * 8); + if (this.signed) { + value = fromTwos(value, this.size * 8); + } + return reader.coerce(this.name, value); + } +} + +const version$9 = "@ethersproject/strings@6.0.0-beta.1"; + +const logger$8 = new Logger(version$9); + +/////////////////////////////// +var UnicodeNormalizationForm; +(function (UnicodeNormalizationForm) { + UnicodeNormalizationForm["current"] = ""; + UnicodeNormalizationForm["NFC"] = "NFC"; + UnicodeNormalizationForm["NFD"] = "NFD"; + UnicodeNormalizationForm["NFKC"] = "NFKC"; + UnicodeNormalizationForm["NFKD"] = "NFKD"; +})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {})); +var Utf8ErrorReason; +(function (Utf8ErrorReason) { + // A continuation byte was present where there was nothing to continue + // - offset = the index the codepoint began in + Utf8ErrorReason["UNEXPECTED_CONTINUE"] = "unexpected continuation byte"; + // An invalid (non-continuation) byte to start a UTF-8 codepoint was found + // - offset = the index the codepoint began in + Utf8ErrorReason["BAD_PREFIX"] = "bad codepoint prefix"; + // The string is too short to process the expected codepoint + // - offset = the index the codepoint began in + Utf8ErrorReason["OVERRUN"] = "string overrun"; + // A missing continuation byte was expected but not found + // - offset = the index the continuation byte was expected at + Utf8ErrorReason["MISSING_CONTINUE"] = "missing continuation byte"; + // The computed code point is outside the range for UTF-8 + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; outside the UTF-8 range + Utf8ErrorReason["OUT_OF_RANGE"] = "out of UTF-8 range"; + // UTF-8 strings may not contain UTF-16 surrogate pairs + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range + Utf8ErrorReason["UTF16_SURROGATE"] = "UTF-16 surrogate"; + // The string is an overlong representation + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; already bounds checked + Utf8ErrorReason["OVERLONG"] = "overlong representation"; +})(Utf8ErrorReason || (Utf8ErrorReason = {})); +function errorFunc(reason, offset, bytes, output, badCodepoint) { + return logger$8.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, "bytes", bytes); +} +function ignoreFunc(reason, offset, bytes, output, badCodepoint) { + // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes + if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) { + let i = 0; + for (let o = offset + 1; o < bytes.length; o++) { + if (bytes[o] >> 6 !== 0x02) { + break; + } + i++; + } + return i; + } + // This byte runs us past the end of the string, so just jump to the end + // (but the first byte was read already read and therefore skipped) + if (reason === Utf8ErrorReason.OVERRUN) { + return bytes.length - offset - 1; + } + // Nothing to skip + return 0; +} +function replaceFunc(reason, offset, bytes, output, badCodepoint) { + // Overlong representations are otherwise "valid" code points; just non-deistingtished + if (reason === Utf8ErrorReason.OVERLONG) { + output.push((badCodepoint != null) ? badCodepoint : -1); + return 0; + } + // Put the replacement character into the output + output.push(0xfffd); + // Otherwise, process as if ignoring errors + return ignoreFunc(reason, offset, bytes); +} +// Common error handing strategies +const Utf8ErrorFuncs = Object.freeze({ + error: errorFunc, + ignore: ignoreFunc, + replace: replaceFunc +}); +// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499 +function getUtf8CodePoints(_bytes, onError) { + if (onError == null) { + onError = Utf8ErrorFuncs.error; + } + const bytes = logger$8.getBytes(_bytes, "bytes"); + const result = []; + let i = 0; + // Invalid bytes are ignored + while (i < bytes.length) { + const c = bytes[i++]; + // 0xxx xxxx + if (c >> 7 === 0) { + result.push(c); + continue; + } + // Multibyte; how many bytes left for this character? + let extraLength = null; + let overlongMask = null; + // 110x xxxx 10xx xxxx + if ((c & 0xe0) === 0xc0) { + extraLength = 1; + overlongMask = 0x7f; + // 1110 xxxx 10xx xxxx 10xx xxxx + } + else if ((c & 0xf0) === 0xe0) { + extraLength = 2; + overlongMask = 0x7ff; + // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx + } + else if ((c & 0xf8) === 0xf0) { + extraLength = 3; + overlongMask = 0xffff; + } + else { + if ((c & 0xc0) === 0x80) { + i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result); + } + else { + i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result); + } + continue; + } + // Do we have enough bytes in our data? + if (i - 1 + extraLength >= bytes.length) { + i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result); + continue; + } + // Remove the length prefix from the char + let res = c & ((1 << (8 - extraLength - 1)) - 1); + for (let j = 0; j < extraLength; j++) { + let nextChar = bytes[i]; + // Invalid continuation byte + if ((nextChar & 0xc0) != 0x80) { + i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result); + res = null; + break; + } + res = (res << 6) | (nextChar & 0x3f); + i++; + } + // See above loop for invalid continuation byte + if (res === null) { + continue; + } + // Maximum code point + if (res > 0x10ffff) { + i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res); + continue; + } + // Reserved for UTF-16 surrogate halves + if (res >= 0xd800 && res <= 0xdfff) { + i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res); + continue; + } + // Check for overlong sequences (more bytes than needed) + if (res <= overlongMask) { + i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res); + continue; + } + result.push(res); + } + return result; +} +// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array +function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) { + if (form != UnicodeNormalizationForm.current) { + logger$8.assertNormalize(form); + str = str.normalize(form); + } + let result = []; + for (let i = 0; i < str.length; i++) { + const c = str.charCodeAt(i); + if (c < 0x80) { + result.push(c); + } + else if (c < 0x800) { + result.push((c >> 6) | 0xc0); + result.push((c & 0x3f) | 0x80); + } + else if ((c & 0xfc00) == 0xd800) { + i++; + const c2 = str.charCodeAt(i); + if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) { + throw new Error("invalid utf-8 string"); + } + // Surrogate Pair + const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); + result.push((pair >> 18) | 0xf0); + result.push(((pair >> 12) & 0x3f) | 0x80); + result.push(((pair >> 6) & 0x3f) | 0x80); + result.push((pair & 0x3f) | 0x80); + } + else { + result.push((c >> 12) | 0xe0); + result.push(((c >> 6) & 0x3f) | 0x80); + result.push((c & 0x3f) | 0x80); + } + } + return new Uint8Array(result); +} +function escapeChar(value) { + const hex = ("0000" + value.toString(16)); + return "\\u" + hex.substring(hex.length - 4); +} +function _toEscapedUtf8String(bytes, onError) { + return '"' + getUtf8CodePoints(bytes, onError).map((codePoint) => { + if (codePoint < 256) { + switch (codePoint) { + case 8: return "\\b"; + case 9: return "\\t"; + case 10: return "\\n"; + case 13: return "\\r"; + case 34: return "\\\""; + case 92: return "\\\\"; + } + if (codePoint >= 32 && codePoint < 127) { + return String.fromCharCode(codePoint); + } + } + if (codePoint <= 0xffff) { + return escapeChar(codePoint); + } + codePoint -= 0x10000; + return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00); + }).join("") + '"'; +} +function _toUtf8String(codePoints) { + return codePoints.map((codePoint) => { + if (codePoint <= 0xffff) { + return String.fromCharCode(codePoint); + } + codePoint -= 0x10000; + return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00)); + }).join(""); +} +function toUtf8String(bytes, onError) { + return _toUtf8String(getUtf8CodePoints(bytes, onError)); +} +function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) { + return getUtf8CodePoints(toUtf8Bytes(str, form)); +} + +function formatBytes32String(text) { + // Get the bytes + const bytes = toUtf8Bytes(text); + // Check we have room for null-termination + if (bytes.length > 31) { + throw new Error("bytes32 string must be less than 32 bytes"); + } + // Zero-pad (implicitly null-terminates) + return zeroPadRight(bytes, 32); +} +function parseBytes32String(_bytes) { + const data = logger$8.getBytes(_bytes, "bytes"); + // Must be 32 bytes with a null-termination + if (data.length !== 32) { + throw new Error("invalid bytes32 - not 32 bytes long"); + } + if (data[31] !== 0) { + throw new Error("invalid bytes32 string - no null terminator"); + } + // Find the null termination + let length = 31; + while (data[length - 1] === 0) { + length--; + } + // Determine the string value + return toUtf8String(data.slice(0, length)); +} + +function bytes2(data) { + if ((data.length % 4) !== 0) { + throw new Error("should not happen; bad data"); + } + let result = []; + for (let i = 0; i < data.length; i += 4) { + result.push(parseInt(data.substring(i, i + 4), 16)); + } + return result; +} +function createTable(data, _func) { + const func = _func || function (value) { return [parseInt(value, 16)]; }; + let lo = 0; + let result = {}; + data.split(",").forEach((pair) => { + let comps = pair.split(":"); + lo += parseInt(comps[0], 16); + result[lo] = func(comps[1]); + }); + return result; +} +function createRangeTable(data) { + let hi = 0; + return data.split(",").map((v) => { + let comps = v.split("-"); + if (comps.length === 1) { + comps[1] = "0"; + } + else if (comps[1] === "") { + comps[1] = "1"; + } + let lo = hi + parseInt(comps[0], 16); + hi = parseInt(comps[1], 16); + return { l: lo, h: hi }; + }); +} +function matchMap(value, ranges) { + let lo = 0; + for (let i = 0; i < ranges.length; i++) { + let range = ranges[i]; + lo += range.l; + if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) { + if (range.e && range.e.indexOf(value - lo) !== -1) { + continue; + } + return range; + } + } + return null; +} +const Table_A_1_ranges = createRangeTable("221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d"); +// @TODO: Make this relative... +const Table_B_1_flags = "ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff".split(",").map((v) => parseInt(v, 16)); +const Table_B_2_ranges = [ + { h: 25, s: 32, l: 65 }, + { h: 30, s: 32, e: [23], l: 127 }, + { h: 54, s: 1, e: [48], l: 64, d: 2 }, + { h: 14, s: 1, l: 57, d: 2 }, + { h: 44, s: 1, l: 17, d: 2 }, + { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 }, + { h: 16, s: 1, l: 68, d: 2 }, + { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 }, + { h: 26, s: 32, e: [17], l: 435 }, + { h: 22, s: 1, l: 71, d: 2 }, + { h: 15, s: 80, l: 40 }, + { h: 31, s: 32, l: 16 }, + { h: 32, s: 1, l: 80, d: 2 }, + { h: 52, s: 1, l: 42, d: 2 }, + { h: 12, s: 1, l: 55, d: 2 }, + { h: 40, s: 1, e: [38], l: 15, d: 2 }, + { h: 14, s: 1, l: 48, d: 2 }, + { h: 37, s: 48, l: 49 }, + { h: 148, s: 1, l: 6351, d: 2 }, + { h: 88, s: 1, l: 160, d: 2 }, + { h: 15, s: 16, l: 704 }, + { h: 25, s: 26, l: 854 }, + { h: 25, s: 32, l: 55915 }, + { h: 37, s: 40, l: 1247 }, + { h: 25, s: -119711, l: 53248 }, + { h: 25, s: -119763, l: 52 }, + { h: 25, s: -119815, l: 52 }, + { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 }, + { h: 25, s: -119919, l: 52 }, + { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 }, + { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 }, + { h: 25, s: -120075, l: 52 }, + { h: 25, s: -120127, l: 52 }, + { h: 25, s: -120179, l: 52 }, + { h: 25, s: -120231, l: 52 }, + { h: 25, s: -120283, l: 52 }, + { h: 25, s: -120335, l: 52 }, + { h: 24, s: -119543, e: [17], l: 56 }, + { h: 24, s: -119601, e: [17], l: 58 }, + { h: 24, s: -119659, e: [17], l: 58 }, + { h: 24, s: -119717, e: [17], l: 58 }, + { h: 24, s: -119775, e: [17], l: 58 } +]; +const Table_B_2_lut_abs = createTable("b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3"); +const Table_B_2_lut_rel = createTable("179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7"); +const Table_B_2_complex = createTable("df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D", bytes2); +const Table_C_ranges = createRangeTable("80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001"); +function flatten(values) { + return values.reduce((accum, value) => { + value.forEach((value) => { accum.push(value); }); + return accum; + }, []); +} +function _nameprepTableA1(codepoint) { + return !!matchMap(codepoint, Table_A_1_ranges); +} +function _nameprepTableB2(codepoint) { + const range = matchMap(codepoint, Table_B_2_ranges); + if (range) { + if (range.s == null) { + throw new Error("should not happenl bad range"); + } + return [codepoint + range.s]; + } + const codes = Table_B_2_lut_abs[codepoint]; + if (codes) { + return codes; + } + const shift = Table_B_2_lut_rel[codepoint]; + if (shift) { + return [codepoint + shift[0]]; + } + const complex = Table_B_2_complex[codepoint]; + if (complex) { + return complex; + } + return null; +} +function _nameprepTableC(codepoint) { + return !!matchMap(codepoint, Table_C_ranges); +} +function nameprep(value) { + // This allows platforms with incomplete normalize to bypass + // it for very basic names which the built-in toLowerCase + // will certainly handle correctly + if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) { + return value.toLowerCase(); + } + // Get the code points (keeping the current normalization) + let codes = toUtf8CodePoints(value); + codes = flatten(codes.map((code) => { + // Substitute Table B.1 (Maps to Nothing) + if (Table_B_1_flags.indexOf(code) >= 0) { + return []; + } + if (code >= 0xfe00 && code <= 0xfe0f) { + return []; + } + // Substitute Table B.2 (Case Folding) + let codesTableB2 = _nameprepTableB2(code); + if (codesTableB2) { + return codesTableB2; + } + // No Substitution + return [code]; + })); + // Normalize using form KC + codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC); + // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9 + codes.forEach((code) => { + if (_nameprepTableC(code)) { + logger$8.throwArgumentError("STRINGPREP_CONTAINS_PROHIBITED", "value", value); + } + }); + // Prohibit Unassigned Code Points (Table A.1) + codes.forEach((code) => { + if (_nameprepTableA1(code)) { + logger$8.throwArgumentError("STRINGPREP_CONTAINS_UNASSIGNED", "value", value); + } + }); + // IDNA extras + let name = _toUtf8String(codes); + // IDNA: 4.2.3.1 + if (name.substring(0, 1) === "-" || name.substring(2, 4) === "--" || name.substring(name.length - 1) === "-") { + logger$8.throwArgumentError("invalid hyphen", "value", value); + } + // IDNA: 4.2.4 + if (name.length > 63) { + logger$8.throwArgumentError("too long", "value", value); + } + return name; +} + +class StringCoder extends DynamicBytesCoder { + constructor(localName) { + super("string", localName); + } + defaultValue() { + return ""; + } + encode(writer, _value) { + return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, "string"))); + } + decode(reader) { + return toUtf8String(super.decode(reader)); + } +} + +class TupleCoder extends Coder { + constructor(coders, localName) { + let dynamic = false; + const types = []; + coders.forEach((coder) => { + if (coder.dynamic) { + dynamic = true; + } + types.push(coder.type); + }); + const type = ("tuple(" + types.join(",") + ")"); + super("tuple", type, localName, dynamic); + defineProperties(this, { coders: Object.freeze(coders.slice()) }); + } + defaultValue() { + const values = []; + this.coders.forEach((coder) => { + values.push(coder.defaultValue()); + }); + // We only output named properties for uniquely named coders + const uniqueNames = this.coders.reduce((accum, coder) => { + const name = coder.localName; + if (name) { + if (!accum[name]) { + accum[name] = 0; + } + accum[name]++; + } + return accum; + }, {}); + // Add named values + this.coders.forEach((coder, index) => { + let name = coder.localName; + if (!name || uniqueNames[name] !== 1) { + return; + } + if (name === "length") { + name = "_length"; + } + if (values[name] != null) { + return; + } + values[name] = values[index]; + }); + return Object.freeze(values); + } + encode(writer, _value) { + const value = Typed.dereference(_value, "tuple"); + return pack(writer, this.coders, value); + } + decode(reader) { + return reader.coerce(this.name, unpack(reader, this.coders)); + } +} + +var __classPrivateFieldGet$t = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _AbiCoder_instances, _AbiCoder_getCoder; +const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/); +const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/); +class AbiCoder { + constructor(coerceFunc) { + _AbiCoder_instances.add(this); + defineProperties(this, { coerceFunc }, {}, { coerceFunc: null }); + } + getDefaultValue(types) { + const coders = types.map((type) => __classPrivateFieldGet$t(this, _AbiCoder_instances, "m", _AbiCoder_getCoder).call(this, ParamType.from(type))); + const coder = new TupleCoder(coders, "_"); + return coder.defaultValue(); + } + encode(types, values) { + logger$e.assertArgumentCount(values.length, types.length, "types/values length mismatch"); + const coders = types.map((type) => __classPrivateFieldGet$t(this, _AbiCoder_instances, "m", _AbiCoder_getCoder).call(this, ParamType.from(type))); + const coder = (new TupleCoder(coders, "_")); + const writer = new Writer(); + coder.encode(writer, values); + return writer.data; + } + decode(types, data, loose) { + const coders = types.map((type) => __classPrivateFieldGet$t(this, _AbiCoder_instances, "m", _AbiCoder_getCoder).call(this, ParamType.from(type))); + const coder = new TupleCoder(coders, "_"); + return coder.decode(new Reader(data, this.coerceFunc, loose)); + } +} +_AbiCoder_instances = new WeakSet(), _AbiCoder_getCoder = function _AbiCoder_getCoder(param) { + if (param.isArray()) { + return new ArrayCoder(__classPrivateFieldGet$t(this, _AbiCoder_instances, "m", _AbiCoder_getCoder).call(this, param.arrayChildren), param.arrayLength, param.name); + } + if (param.isTuple()) { + return new TupleCoder(param.components.map((c) => __classPrivateFieldGet$t(this, _AbiCoder_instances, "m", _AbiCoder_getCoder).call(this, c)), param.name); + } + switch (param.baseType) { + case "address": + return new AddressCoder(param.name); + case "bool": + return new BooleanCoder(param.name); + case "string": + return new StringCoder(param.name); + case "bytes": + return new BytesCoder(param.name); + case "": + return new NullCoder(param.name); + } + // u?int[0-9]* + let match = param.type.match(paramTypeNumber); + if (match) { + let size = parseInt(match[2] || "256"); + if (size === 0 || size > 256 || (size % 8) !== 0) { + logger$e.throwArgumentError("invalid " + match[1] + " bit length", "param", param); + } + return new NumberCoder(size / 8, (match[1] === "int"), param.name); + } + // bytes[0-9]+ + match = param.type.match(paramTypeBytes); + if (match) { + let size = parseInt(match[1]); + if (size === 0 || size > 32) { + logger$e.throwArgumentError("invalid bytes length", "param", param); + } + return new FixedBytesCoder(size, param.name); + } + return logger$e.throwArgumentError("invalid type", "type", param.type); +}; +const defaultAbiCoder = new AbiCoder(); + +function id(value) { + return keccak256(toUtf8Bytes(value)); +} + +const version$8 = "@ethersproject/hash@6.0.0-beta.1"; + +const logger$7 = new Logger(version$8); + +const Zeros = new Uint8Array(32); +Zeros.fill(0); +const Partition = new RegExp("^((.*)\\.)?([^.]+)$"); +function isValidName(name) { + try { + const comps = name.split("."); + for (let i = 0; i < comps.length; i++) { + if (nameprep(comps[i]).length === 0) { + throw new Error("empty"); + } + } + return true; + } + catch (error) { } + return false; +} +function namehash(name) { + if (typeof (name) !== "string") { + logger$7.throwArgumentError("invalid ENS name; not a string", "name", name); + } + let current = name; + let result = Zeros; + while (current.length) { + const partition = current.match(Partition); + if (partition == null || partition[2] === "") { + return logger$7.throwArgumentError("invalid ENS name; missing component", "name", name); + } + const label = toUtf8Bytes(nameprep(partition[3])); + result = keccak256(concat([result, keccak256(label)])); + current = partition[2] || ""; + } + return hexlify(result); +} +function dnsEncode(name) { + if (typeof (name) !== "string") { + logger$7.throwArgumentError("invalid DNS name; not a string", "name", name); + } + if (name === "") { + return "0x00"; + } + // @TODO: should we enforce the 255 octet limit? + return concat(name.split(".").map((comp) => { + if (comp === "") { + logger$7.throwArgumentError("invalid DNS name; missing component", "name", name); + } + // We jam in an _ prefix to fill in with the length later + // Note: Nameprep throws if the component is over 63 bytes + const bytes = toUtf8Bytes("_" + nameprep(comp)); + bytes[0] = bytes.length - 1; + return bytes; + })) + "00"; +} + +const messagePrefix = "\x19Ethereum Signed Message:\n"; +function hashMessage(message) { + if (typeof (message) === "string") { + message = toUtf8Bytes(message); + } + return keccak256(concat([ + toUtf8Bytes(messagePrefix), + toUtf8Bytes(String(message.length)), + message + ])); +} + +var __classPrivateFieldSet$s = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$s = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _TypedDataEncoder_instances, _TypedDataEncoder_types, _TypedDataEncoder_fullTypes, _TypedDataEncoder_encoderCache, _TypedDataEncoder_getEncoder; +const padding = new Uint8Array(32); +padding.fill(0); +const BN__1 = BigInt(-1); +const BN_0$2 = BigInt(0); +const BN_1$3 = BigInt(1); +const BN_MAX_UINT256$1 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); +function hexPadRight(value) { + const bytes = arrayify(value); + const padOffset = bytes.length % 32; + if (padOffset) { + return concat([bytes, padding.slice(padOffset)]); + } + return hexlify(bytes); +} +const hexTrue = toHex(BN_1$3, 32); +const hexFalse = toHex(BN_0$2, 32); +const domainFieldTypes = { + name: "string", + version: "string", + chainId: "uint256", + verifyingContract: "address", + salt: "bytes32" +}; +const domainFieldNames = [ + "name", "version", "chainId", "verifyingContract", "salt" +]; +function checkString(key) { + return function (value) { + if (typeof (value) !== "string") { + logger$7.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value); + } + return value; + }; +} +const domainChecks = { + name: checkString("name"), + version: checkString("version"), + chainId: function (value) { + return logger$7.getBigInt(value, "domain.chainId"); + }, + verifyingContract: function (value) { + try { + return getAddress(value).toLowerCase(); + } + catch (error) { } + return logger$7.throwArgumentError(`invalid domain value "verifyingContract"`, "domain.verifyingContract", value); + }, + salt: function (value) { + const bytes = logger$7.getBytes(value, "domain.salt"); + if (bytes.length !== 32) { + logger$7.throwArgumentError(`invalid domain value "salt"`, "domain.salt", value); + } + return hexlify(bytes); + } +}; +function getBaseEncoder(type) { + // intXX and uintXX + { + const match = type.match(/^(u?)int(\d*)$/); + if (match) { + const signed = (match[1] === ""); + const width = parseInt(match[2] || "256"); + if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) { + logger$7.throwArgumentError("invalid numeric width", "type", type); + } + const boundsUpper = mask(BN_MAX_UINT256$1, signed ? (width - 1) : width); + const boundsLower = signed ? ((boundsUpper + BN_1$3) * BN__1) : BN_0$2; + return function (_value) { + const value = logger$7.getBigInt(_value, "value"); + if (value < boundsLower || value > boundsUpper) { + logger$7.throwArgumentError(`value out-of-bounds for ${type}`, "value", value); + } + return toHex(toTwos(value, 256), 32); + }; + } + } + // bytesXX + { + const match = type.match(/^bytes(\d+)$/); + if (match) { + const width = parseInt(match[1]); + if (width === 0 || width > 32 || match[1] !== String(width)) { + logger$7.throwArgumentError("invalid bytes width", "type", type); + } + return function (value) { + const bytes = arrayify(value); + if (bytes.length !== width) { + logger$7.throwArgumentError(`invalid length for ${type}`, "value", value); + } + return hexPadRight(value); + }; + } + } + switch (type) { + case "address": return function (value) { + return zeroPadLeft(getAddress(value), 32); + }; + case "bool": return function (value) { + return ((!value) ? hexFalse : hexTrue); + }; + case "bytes": return function (value) { + return keccak256(value); + }; + case "string": return function (value) { + return id(value); + }; + } + return null; +} +function encodeType(name, fields) { + return `${name}(${fields.map(({ name, type }) => (type + " " + name)).join(",")})`; +} +class TypedDataEncoder { + constructor(types) { + _TypedDataEncoder_instances.add(this); + _TypedDataEncoder_types.set(this, void 0); + _TypedDataEncoder_fullTypes.set(this, void 0); + _TypedDataEncoder_encoderCache.set(this, void 0); + __classPrivateFieldSet$s(this, _TypedDataEncoder_types, JSON.stringify(types), "f"); + __classPrivateFieldSet$s(this, _TypedDataEncoder_fullTypes, new Map(), "f"); + __classPrivateFieldSet$s(this, _TypedDataEncoder_encoderCache, new Map(), "f"); + // Link struct types to their direct child structs + const links = new Map(); + // Link structs to structs which contain them as a child + const parents = new Map(); + // Link all subtypes within a given struct + const subtypes = new Map(); + Object.keys(types).forEach((type) => { + links.set(type, new Set()); + parents.set(type, []); + subtypes.set(type, new Set()); + }); + for (const name in types) { + const uniqueNames = new Set(); + for (const field of types[name]) { + // Check each field has a unique name + if (uniqueNames.has(field.name)) { + logger$7.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, "types", types); + } + uniqueNames.add(field.name); + // Get the base type (drop any array specifiers) + const baseType = (field.type.match(/^([^\x5b]*)(\x5b|$)/))[1] || null; + if (baseType === name) { + logger$7.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, "types", types); + } + // Is this a base encoding type? + const encoder = getBaseEncoder(baseType); + if (encoder) { + continue; + } + if (!parents.has(baseType)) { + logger$7.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, "types", types); + } + // Add linkage + parents.get(baseType).push(name); + links.get(name).add(baseType); + } + } + // Deduce the primary type + const primaryTypes = Array.from(parents.keys()).filter((n) => (parents.get(n).length === 0)); + if (primaryTypes.length === 0) { + logger$7.throwArgumentError("missing primary type", "types", types); + } + else if (primaryTypes.length > 1) { + logger$7.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(", ")}`, "types", types); + } + defineProperties(this, { primaryType: primaryTypes[0] }); + // Check for circular type references + function checkCircular(type, found) { + if (found.has(type)) { + logger$7.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, "types", types); + } + found.add(type); + for (const child of links.get(type)) { + if (!parents.has(child)) { + continue; + } + // Recursively check children + checkCircular(child, found); + // Mark all ancestors as having this decendant + for (const subtype of found) { + subtypes.get(subtype).add(child); + } + } + found.delete(type); + } + checkCircular(this.primaryType, new Set()); + // Compute each fully describe type + for (const [name, set] of subtypes) { + const st = Array.from(set); + st.sort(); + __classPrivateFieldGet$s(this, _TypedDataEncoder_fullTypes, "f").set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join("")); + } + } + get types() { + return JSON.parse(__classPrivateFieldGet$s(this, _TypedDataEncoder_types, "f")); + } + getEncoder(type) { + let encoder = __classPrivateFieldGet$s(this, _TypedDataEncoder_encoderCache, "f").get(type); + if (!encoder) { + encoder = __classPrivateFieldGet$s(this, _TypedDataEncoder_instances, "m", _TypedDataEncoder_getEncoder).call(this, type); + __classPrivateFieldGet$s(this, _TypedDataEncoder_encoderCache, "f").set(type, encoder); + } + return encoder; + } + encodeType(name) { + const result = __classPrivateFieldGet$s(this, _TypedDataEncoder_fullTypes, "f").get(name); + if (!result) { + return logger$7.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, "name", name); + } + return result; + } + encodeData(type, value) { + return this.getEncoder(type)(value); + } + hashStruct(name, value) { + return keccak256(this.encodeData(name, value)); + } + encode(value) { + return this.encodeData(this.primaryType, value); + } + hash(value) { + return this.hashStruct(this.primaryType, value); + } + _visit(type, value, callback) { + // Basic encoder type (address, bool, uint256, etc) + { + const encoder = getBaseEncoder(type); + if (encoder) { + return callback(type, value); + } + } + // Array + const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/); + if (match) { + const subtype = match[1]; + const length = parseInt(match[3]); + if (length >= 0 && value.length !== length) { + logger$7.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value); + } + return value.map((v) => this._visit(subtype, v, callback)); + } + // Struct + const fields = this.types[type]; + if (fields) { + return fields.reduce((accum, { name, type }) => { + accum[name] = this._visit(type, value[name], callback); + return accum; + }, {}); + } + return logger$7.throwArgumentError(`unknown type: ${type}`, "type", type); + } + visit(value, callback) { + return this._visit(this.primaryType, value, callback); + } + static from(types) { + return new TypedDataEncoder(types); + } + static getPrimaryType(types) { + return TypedDataEncoder.from(types).primaryType; + } + static hashStruct(name, types, value) { + return TypedDataEncoder.from(types).hashStruct(name, value); + } + static hashDomain(domain) { + const domainFields = []; + for (const name in domain) { + const type = domainFieldTypes[name]; + if (!type) { + logger$7.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, "domain", domain); + } + domainFields.push({ name, type }); + } + domainFields.sort((a, b) => { + return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name); + }); + return TypedDataEncoder.hashStruct("EIP712Domain", { EIP712Domain: domainFields }, domain); + } + static encode(domain, types, value) { + return concat([ + "0x1901", + TypedDataEncoder.hashDomain(domain), + TypedDataEncoder.from(types).hash(value) + ]); + } + static hash(domain, types, value) { + return keccak256(TypedDataEncoder.encode(domain, types, value)); + } + // Replaces all address types with ENS names with their looked up address + static async resolveNames(domain, types, value, resolveName) { + // Make a copy to isolate it from the object passed in + domain = Object.assign({}, domain); + // Look up all ENS names + const ensCache = {}; + // Do we need to look up the domain's verifyingContract? + if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) { + ensCache[domain.verifyingContract] = "0x"; + } + // We are going to use the encoder to visit all the base values + const encoder = TypedDataEncoder.from(types); + // Get a list of all the addresses + encoder.visit(value, (type, value) => { + if (type === "address" && !isHexString(value, 20)) { + ensCache[value] = "0x"; + } + return value; + }); + // Lookup each name + for (const name in ensCache) { + ensCache[name] = await resolveName(name); + } + // Replace the domain verifyingContract if needed + if (domain.verifyingContract && ensCache[domain.verifyingContract]) { + domain.verifyingContract = ensCache[domain.verifyingContract]; + } + // Replace all ENS names with their address + value = encoder.visit(value, (type, value) => { + if (type === "address" && ensCache[value]) { + return ensCache[value]; + } + return value; + }); + return { domain, value }; + } + static getPayload(domain, types, value) { + // Validate the domain fields + TypedDataEncoder.hashDomain(domain); + // Derive the EIP712Domain Struct reference type + const domainValues = {}; + const domainTypes = []; + domainFieldNames.forEach((name) => { + const value = domain[name]; + if (value == null) { + return; + } + domainValues[name] = domainChecks[name](value); + domainTypes.push({ name, type: domainFieldTypes[name] }); + }); + const encoder = TypedDataEncoder.from(types); + const typesWithDomain = Object.assign({}, types); + if (typesWithDomain.EIP712Domain) { + logger$7.throwArgumentError("types must not contain EIP712Domain type", "types.EIP712Domain", types); + } + else { + typesWithDomain.EIP712Domain = domainTypes; + } + // Validate the data structures and types + encoder.encode(value); + return { + types: typesWithDomain, + domain: domainValues, + primaryType: encoder.primaryType, + message: encoder.visit(value, (type, value) => { + // bytes + if (type.match(/^bytes(\d*)/)) { + return hexlify(logger$7.getBytes(value)); + } + // uint or int + if (type.match(/^u?int/)) { + return logger$7.getBigInt(value).toString(); + } + switch (type) { + case "address": + return value.toLowerCase(); + case "bool": + return !!value; + case "string": + if (typeof (value) !== "string") { + logger$7.throwArgumentError(`invalid string`, "value", value); + } + return value; + } + return logger$7.throwArgumentError("unsupported type", "type", type); + }) + }; + } +} +_TypedDataEncoder_types = new WeakMap(), _TypedDataEncoder_fullTypes = new WeakMap(), _TypedDataEncoder_encoderCache = new WeakMap(), _TypedDataEncoder_instances = new WeakSet(), _TypedDataEncoder_getEncoder = function _TypedDataEncoder_getEncoder(type) { + // Basic encoder type (address, bool, uint256, etc) + { + const encoder = getBaseEncoder(type); + if (encoder) { + return encoder; + } + } + // Array + const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/); + if (match) { + const subtype = match[1]; + const subEncoder = this.getEncoder(subtype); + const length = parseInt(match[3]); + return (value) => { + if (length >= 0 && value.length !== length) { + logger$7.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value); + } + let result = value.map(subEncoder); + if (__classPrivateFieldGet$s(this, _TypedDataEncoder_fullTypes, "f").has(subtype)) { + result = result.map(keccak256); + } + return keccak256(concat(result)); + }; + } + // Struct + const fields = this.types[type]; + if (fields) { + const encodedType = id(__classPrivateFieldGet$s(this, _TypedDataEncoder_fullTypes, "f").get(type)); + return (value) => { + const values = fields.map(({ name, type }) => { + const result = this.getEncoder(type)(value[name]); + if (__classPrivateFieldGet$s(this, _TypedDataEncoder_fullTypes, "f").has(type)) { + return keccak256(result); + } + return result; + }); + values.unshift(encodedType); + return concat(values); + }; + } + return logger$7.throwArgumentError(`unknown type: ${type}`, "type", type); +}; + +var __classPrivateFieldSet$r = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$r = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Interface_instances, _Interface_errors, _Interface_events, _Interface_functions, _Interface_abiCoder, _Interface_getFunction, _Interface_getEvent; +class LogDescription { + constructor(fragment, topic, args) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, signature, topic, args + }); + } +} +class TransactionDescription { + constructor(fragment, selector, args, value) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, args, signature, selector, value + }); + } +} +class ErrorDescription { + constructor(fragment, selector, args) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, args, signature, selector + }); + } +} +class Indexed { + constructor(hash) { + defineProperties(this, { hash, _isIndexed: true }); + } + static isIndexed(value) { + return !!(value && value._isIndexed); + } +} +// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require +const PanicReasons = { + "0": "generic panic", + "1": "assert(false)", + "17": "arithmetic overflow", + "18": "division or modulo by zero", + "33": "enum overflow", + "34": "invalid encoded storage byte array accessed", + "49": "out-of-bounds array access; popping on an empty array", + "50": "out-of-bounds access of an array or bytesN", + "65": "out of memory", + "81": "uninitialized function", +}; +const BuiltinErrors = { + "0x08c379a0": { + signature: "Error(string)", + name: "Error", + inputs: ["string"], + reason: (message) => { + return `reverted with reason string ${JSON.stringify(message)}`; + } + }, + "0x4e487b71": { + signature: "Panic(uint256)", + name: "Panic", + inputs: ["uint256"], + reason: (code) => { + let reason = "unknown panic code"; + if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) { + reason = PanicReasons[code.toString()]; + } + return `reverted with panic code 0x${code.toString(16)} (${reason})`; + } + } +}; +class Interface { + constructor(fragments) { + _Interface_instances.add(this); + _Interface_errors.set(this, void 0); + _Interface_events.set(this, void 0); + _Interface_functions.set(this, void 0); + // #structs: Map; + _Interface_abiCoder.set(this, void 0); + let abi = []; + if (typeof (fragments) === "string") { + abi = JSON.parse(fragments); + } + else { + abi = fragments; + } + __classPrivateFieldSet$r(this, _Interface_functions, new Map(), "f"); + __classPrivateFieldSet$r(this, _Interface_errors, new Map(), "f"); + __classPrivateFieldSet$r(this, _Interface_events, new Map(), "f"); + // this.#structs = new Map(); + defineProperties(this, { + fragments: Object.freeze(abi.map((f) => Fragment.from(f)).filter((f) => (f != null))), + }); + __classPrivateFieldSet$r(this, _Interface_abiCoder, this.getAbiCoder(), "f"); + // Add all fragments by their signature + this.fragments.forEach((fragment) => { + let bucket; + switch (fragment.type) { + case "constructor": + if (this.deploy) { + logger$e.warn("duplicate definition - constructor"); + return; + } + //checkNames(fragment, "input", fragment.inputs); + defineProperties(this, { deploy: fragment }); + return; + case "function": + //checkNames(fragment, "input", fragment.inputs); + //checkNames(fragment, "output", (fragment).outputs); + bucket = __classPrivateFieldGet$r(this, _Interface_functions, "f"); + break; + case "event": + //checkNames(fragment, "input", fragment.inputs); + bucket = __classPrivateFieldGet$r(this, _Interface_events, "f"); + break; + case "error": + bucket = __classPrivateFieldGet$r(this, _Interface_errors, "f"); + break; + default: + return; + } + const signature = fragment.format(); + if (bucket.has(signature)) { + logger$e.warn("duplicate definition - " + signature); + return; + } + bucket.set(signature, fragment); + }); + // If we do not have a constructor add a default + if (!this.deploy) { + defineProperties(this, { + deploy: ConstructorFragment.fromString("constructor()") + }); + } + } + // @TODO: multi sig? + format(format) { + if (!format) { + format = FormatType.full; + } + if (format === FormatType.sighash) { + logger$e.throwArgumentError("interface does not support formatting sighash", "format", format); + } + const abi = this.fragments.map((f) => f.format(format)); + // We need to re-bundle the JSON fragments a bit + if (format === FormatType.json) { + return JSON.stringify(abi.map((j) => JSON.parse(j))); + } + return abi; + } + getAbiCoder() { + return defaultAbiCoder; + } + getFunctionName(key) { + return (__classPrivateFieldGet$r(this, _Interface_instances, "m", _Interface_getFunction).call(this, key, null, false)).name; + } + getFunction(key, values) { + return __classPrivateFieldGet$r(this, _Interface_instances, "m", _Interface_getFunction).call(this, key, values || null, true); + } + getEventName(key) { + return (__classPrivateFieldGet$r(this, _Interface_instances, "m", _Interface_getEvent).call(this, key, null, false)).name; + } + getEvent(key, values) { + return __classPrivateFieldGet$r(this, _Interface_instances, "m", _Interface_getEvent).call(this, key, values || null, true); + } + // Find a function definition by any means necessary (unless it is ambiguous) + getError(key, values) { + if (isHexString(key)) { + const selector = key.toLowerCase(); + for (const fragment of __classPrivateFieldGet$r(this, _Interface_errors, "f").values()) { + if (selector === this.getSelector(fragment)) { + return fragment; + } + } + logger$e.throwArgumentError("no matching error", "selector", key); + } + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = []; + for (const [name, fragment] of __classPrivateFieldGet$r(this, _Interface_errors, "f")) { + if (name.split("(" /* fix:) */)[0] === key) { + matching.push(fragment); + } + } + if (matching.length === 0) { + logger$e.throwArgumentError("no matching error", "name", key); + } + else if (matching.length > 1) { + // @TODO: refine by Typed + logger$e.throwArgumentError("multiple matching errors", "name", key); + } + return matching[0]; + } + // Normalize the signature and lookup the function + const result = __classPrivateFieldGet$r(this, _Interface_errors, "f").get(ErrorFragment.fromString(key).format()); + if (result) { + return result; + } + return logger$e.throwArgumentError("no matching error", "signature", key); + } + // Get the 4-byte selector used by Solidity to identify a function + getSelector(fragment) { + /* + if (typeof(fragment) === "string") { + const matches: Array = [ ]; + + try { matches.push(this.getFunction(fragment)); } catch (error) { } + try { matches.push(this.getError(fragment)); } catch (_) { } + + if (matches.length === 0) { + logger.throwArgumentError("unknown fragment", "key", fragment); + } else if (matches.length > 1) { + logger.throwArgumentError("ambiguous fragment matches function and error", "key", fragment); + } + + fragment = matches[0]; + } + */ + return dataSlice(id(fragment.format()), 0, 4); + } + // Get the 32-byte topic hash used by Solidity to identify an event + getEventTopic(fragment) { + //if (typeof(fragment) === "string") { fragment = this.getEvent(eventFragment); } + return id(fragment.format()); + } + _decodeParams(params, data) { + return __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(params, data); + } + _encodeParams(params, values) { + return __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").encode(params, values); + } + encodeDeploy(values) { + return this._encodeParams(this.deploy.inputs, values || []); + } + decodeErrorResult(fragment, data) { + if (typeof (fragment) === "string") { + fragment = this.getError(fragment); + } + if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) { + logger$e.throwArgumentError(`data signature does not match error ${fragment.name}.`, "data", data); + } + return this._decodeParams(fragment.inputs, dataSlice(data, 4)); + } + encodeErrorResult(fragment, values) { + if (typeof (fragment) === "string") { + fragment = this.getError(fragment); + } + return concat([ + this.getSelector(fragment), + this._encodeParams(fragment.inputs, values || []) + ]); + } + // Decode the data for a function call (e.g. tx.data) + decodeFunctionData(fragment, data) { + if (typeof (fragment) === "string") { + fragment = this.getFunction(fragment); + } + if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) { + logger$e.throwArgumentError(`data signature does not match function ${fragment.name}.`, "data", data); + } + return this._decodeParams(fragment.inputs, dataSlice(data, 4)); + } + // Encode the data for a function call (e.g. tx.data) + encodeFunctionData(fragment, values) { + if (typeof (fragment) === "string") { + fragment = this.getFunction(fragment); + } + return concat([ + this.getSelector(fragment), + this._encodeParams(fragment.inputs, values || []) + ]); + } + // Decode the result from a function call (e.g. from eth_call) + decodeFunctionResult(fragment, data) { + if (typeof (fragment) === "string") { + fragment = this.getFunction(fragment); + } + let message = "invalid length for result data"; + const bytes = arrayify(data); + if ((bytes.length % 32) === 0) { + try { + return __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(fragment.outputs, bytes); + } + catch (error) { + message = "could not decode result data"; + } + } + // Call returned data with no error, but the data is junk + return logger$e.throwError(message, "BAD_DATA", { + value: hexlify(bytes), + info: { method: fragment.name, signature: fragment.format() } + }); + } + makeError(fragment, _data, tx) { + if (typeof (fragment) === "string") { + fragment = this.getFunction(fragment); + } + const data = logger$e.getBytes(_data); + let args = undefined; + if (tx) { + try { + args = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(fragment.inputs, tx.data || "0x"); + } + catch (error) { + console.log(error); + } + } + let errorArgs = undefined; + let errorName = undefined; + let errorSignature = undefined; + let reason = "unknown reason"; + if (data.length === 0) { + reason = "missing error reason"; + } + else if ((data.length % 32) === 4) { + const selector = hexlify(data.slice(0, 4)); + const builtin = BuiltinErrors[selector]; + if (builtin) { + try { + errorName = builtin.name; + errorSignature = builtin.signature; + errorArgs = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(builtin.inputs, data.slice(4)); + reason = builtin.reason(...errorArgs); + } + catch (error) { + console.log(error); // @TODO: remove + } + } + else { + reason = "unknown custom error"; + try { + const error = this.getError(selector); + errorName = error.name; + errorSignature = error.format(); + reason = `custom error: ${errorSignature}`; + try { + errorArgs = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(error.inputs, data.slice(4)); + } + catch (error) { + reason = `custom error: ${errorSignature} (coult not decode error data)`; + } + } + catch (error) { + console.log(error); // @TODO: remove + } + } + } + return logger$e.makeError("call revert exception", "CALL_EXCEPTION", { + data: hexlify(data), transaction: null, + method: fragment.name, signature: fragment.format(), args, + errorArgs, errorName, errorSignature, reason + }); + } + // Encode the result for a function call (e.g. for eth_call) + encodeFunctionResult(functionFragment, values) { + if (typeof (functionFragment) === "string") { + functionFragment = this.getFunction(functionFragment); + } + return hexlify(__classPrivateFieldGet$r(this, _Interface_abiCoder, "f").encode(functionFragment.outputs, values || [])); + } + /* + spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> { + const promises: Array> = [ ]; + const process = function(type: ParamType, value: any): any { + if (type.baseType === "array") { + return descend(type.child + } + if (type. === "address") { + } + }; + + const descend = function (inputs: Array, values: ReadonlyArray) { + if (inputs.length !== values.length) { throw new Error("length mismatch"); } + + }; + + const result: Array = [ ]; + values.forEach((value, index) => { + if (value == null) { + topics.push(null); + } else if (param.baseType === "array" || param.baseType === "tuple") { + logger.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value); + } else if (Array.isArray(value)) { + topics.push(value.map((value) => encodeTopic(param, value))); + } else { + topics.push(encodeTopic(param, value)); + } + }); + } + */ + // Create the filter for the event with search criteria (e.g. for eth_filterLog) + encodeFilterTopics(eventFragment, values) { + if (typeof (eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + if (values.length > eventFragment.inputs.length) { + logger$e.throwError("too many arguments for " + eventFragment.format(), "UNEXPECTED_ARGUMENT", { + count: values.length, + expectedCount: eventFragment.inputs.length + }); + } + const topics = []; + if (!eventFragment.anonymous) { + topics.push(this.getEventTopic(eventFragment)); + } + const encodeTopic = (param, value) => { + if (param.type === "string") { + return id(value); + } + else if (param.type === "bytes") { + return keccak256(hexlify(value)); + } + // Check addresses are valid + if (param.type === "address") { + __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").encode(["address"], [value]); + } + return zeroPadLeft(hexlify(value), 32); + //@TOOD should probably be return toHex(value, 32) + }; + values.forEach((value, index) => { + const param = eventFragment.inputs[index]; + if (!param.indexed) { + if (value != null) { + logger$e.throwArgumentError("cannot filter non-indexed parameters; must be null", ("contract." + param.name), value); + } + return; + } + if (value == null) { + topics.push(null); + } + else if (param.baseType === "array" || param.baseType === "tuple") { + logger$e.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value); + } + else if (Array.isArray(value)) { + topics.push(value.map((value) => encodeTopic(param, value))); + } + else { + topics.push(encodeTopic(param, value)); + } + }); + // Trim off trailing nulls + while (topics.length && topics[topics.length - 1] === null) { + topics.pop(); + } + return topics; + } + encodeEventLog(eventFragment, values) { + if (typeof (eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + const topics = []; + const dataTypes = []; + const dataValues = []; + if (!eventFragment.anonymous) { + topics.push(this.getEventTopic(eventFragment)); + } + if (values.length !== eventFragment.inputs.length) { + logger$e.throwArgumentError("event arguments/values mismatch", "values", values); + } + eventFragment.inputs.forEach((param, index) => { + const value = values[index]; + if (param.indexed) { + if (param.type === "string") { + topics.push(id(value)); + } + else if (param.type === "bytes") { + topics.push(keccak256(value)); + } + else if (param.baseType === "tuple" || param.baseType === "array") { + // @TODO + throw new Error("not implemented"); + } + else { + topics.push(__classPrivateFieldGet$r(this, _Interface_abiCoder, "f").encode([param.type], [value])); + } + } + else { + dataTypes.push(param); + dataValues.push(value); + } + }); + return { + data: __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").encode(dataTypes, dataValues), + topics: topics + }; + } + // Decode a filter for the event and the search criteria + decodeEventLog(eventFragment, data, topics) { + if (typeof (eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + if (topics != null && !eventFragment.anonymous) { + const eventTopic = this.getEventTopic(eventFragment); + if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== eventTopic) { + logger$e.throwArgumentError("fragment/topic mismatch", "topics[0]", topics[0]); + } + topics = topics.slice(1); + } + const indexed = []; + const nonIndexed = []; + const dynamic = []; + eventFragment.inputs.forEach((param, index) => { + if (param.indexed) { + if (param.type === "string" || param.type === "bytes" || param.baseType === "tuple" || param.baseType === "array") { + indexed.push(ParamType.fromObject({ type: "bytes32", name: param.name })); + dynamic.push(true); + } + else { + indexed.push(param); + dynamic.push(false); + } + } + else { + nonIndexed.push(param); + dynamic.push(false); + } + }); + const resultIndexed = (topics != null) ? __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(indexed, concat(topics)) : null; + const resultNonIndexed = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(nonIndexed, data, true); + //const result: (Array & { [ key: string ]: any }) = [ ]; + const values = []; + const keys = []; + let nonIndexedIndex = 0, indexedIndex = 0; + eventFragment.inputs.forEach((param, index) => { + let value = null; + if (param.indexed) { + if (resultIndexed == null) { + value = new Indexed(null); + } + else if (dynamic[index]) { + value = new Indexed(resultIndexed[indexedIndex++]); + } + else { + try { + value = resultIndexed[indexedIndex++]; + } + catch (error) { + value = error; + } + } + } + else { + try { + value = resultNonIndexed[nonIndexedIndex++]; + } + catch (error) { + value = error; + } + } + values.push(value); + keys.push(param.name || null); + }); + return Result.fromItems(values, keys); + } + // Given a transaction, find the matching function fragment (if any) and + // determine all its properties and call parameters + parseTransaction(tx) { + const data = logger$e.getBytes(tx.data, "tx.data"); + const value = logger$e.getBigInt((tx.value != null) ? tx.value : 0, "tx.value"); + const fragment = this.getFunction(hexlify(data.slice(0, 4))); + if (!fragment) { + return null; + } + const args = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(fragment.inputs, data.slice(4)); + return new TransactionDescription(fragment, this.getSelector(fragment), args, value); + } + // @TODO + //parseCallResult(data: BytesLike): ?? + // Given an event log, find the matching event fragment (if any) and + // determine all its properties and values + parseLog(log) { + const fragment = this.getEvent(log.topics[0]); + if (!fragment || fragment.anonymous) { + return null; + } + // @TODO: If anonymous, and the only method, and the input count matches, should we parse? + // Probably not, because just because it is the only event in the ABI does + // not mean we have the full ABI; maybe just a fragment? + return new LogDescription(fragment, this.getEventTopic(fragment), this.decodeEventLog(fragment, log.data, log.topics)); + } + parseError(data) { + const hexData = hexlify(data); + const fragment = this.getError(dataSlice(hexData, 0, 4)); + if (!fragment) { + return null; + } + const args = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(fragment.inputs, dataSlice(hexData, 4)); + return new ErrorDescription(fragment, this.getSelector(fragment), args); + } + static from(value) { + // Already an Interface, which is immutable + if (value instanceof Interface) { + return value; + } + // JSON + if (typeof (value) === "string") { + return new Interface(JSON.parse(value)); + } + // Maybe an interface from an older version, or from a symlinked copy + if (typeof (value.format) === "function") { + return new Interface(value.format(FormatType.json)); + } + // Array of fragments + return new Interface(value); + } +} +_Interface_errors = new WeakMap(), _Interface_events = new WeakMap(), _Interface_functions = new WeakMap(), _Interface_abiCoder = new WeakMap(), _Interface_instances = new WeakSet(), _Interface_getFunction = function _Interface_getFunction(key, values, forceUnique) { + // Selector + if (isHexString(key)) { + const selector = key.toLowerCase(); + for (const fragment of __classPrivateFieldGet$r(this, _Interface_functions, "f").values()) { + if (selector === this.getSelector(fragment)) { + return fragment; + } + } + logger$e.throwArgumentError("no matching function", "selector", key); + } + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = []; + for (const [name, fragment] of __classPrivateFieldGet$r(this, _Interface_functions, "f")) { + if (name.split("(" /* fix:) */)[0] === key) { + matching.push(fragment); + } + } + if (values) { + const lastValue = (values.length > 0) ? values[values.length - 1] : null; + let valueLength = values.length; + let allowOptions = true; + if (Typed.isTyped(lastValue) && lastValue.type === "overrides") { + allowOptions = false; + valueLength--; + } + // Remove all matches that don't have a compatible length. The args + // may contain an overrides, so the match may have n or n - 1 parameters + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs.length; + if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) { + matching.splice(i, 1); + } + } + // Remove all matches that don't match the Typed signature + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs; + for (let j = 0; j < values.length; j++) { + // Not a typed value + if (!Typed.isTyped(values[j])) { + continue; + } + // We are past the inputs + if (j >= inputs.length) { + if (values[j].type === "overrides") { + continue; + } + matching.splice(i, 1); + break; + } + // Make sure the value type matches the input type + if (values[j].type !== inputs[j].baseType) { + matching.splice(i, 1); + break; + } + } + } + } + // We found a single matching signature with an overrides, but the + // last value is something that cannot possibly be an options + if (matching.length === 1 && values && values.length !== matching[0].inputs.length) { + const lastArg = values[values.length - 1]; + if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== "object") { + matching.splice(0, 1); + } + } + if (matching.length === 0) { + logger$e.throwArgumentError("no matching function", "name", key); + } + else if (matching.length > 1 && forceUnique) { + const matchStr = matching.map((m) => JSON.stringify(m.format())).join(", "); + logger$e.throwArgumentError(`multiple matching functions (i.e. ${matchStr})`, "name", key); + } + return matching[0]; + } + // Normalize the signature and lookup the function + const result = __classPrivateFieldGet$r(this, _Interface_functions, "f").get(FunctionFragment.fromString(key).format()); + if (result) { + return result; + } + return logger$e.throwArgumentError("no matching function", "signature", key); +}, _Interface_getEvent = function _Interface_getEvent(key, values, forceUnique) { + // EventTopic + if (isHexString(key)) { + const eventTopic = key.toLowerCase(); + for (const fragment of __classPrivateFieldGet$r(this, _Interface_events, "f").values()) { + if (eventTopic === this.getEventTopic(fragment)) { + return fragment; + } + } + logger$e.throwArgumentError("no matching event", "eventTopic", key); + } + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = []; + for (const [name, fragment] of __classPrivateFieldGet$r(this, _Interface_events, "f")) { + if (name.split("(" /* fix:) */)[0] === key) { + matching.push(fragment); + } + } + if (values) { + // Remove all matches that don't have a compatible length. + for (let i = matching.length - 1; i >= 0; i--) { + if (matching[i].inputs.length < values.length) { + matching.splice(i, 1); + } + } + // Remove all matches that don't match the Typed signature + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs; + for (let j = 0; j < values.length; j++) { + // Not a typed value + if (!Typed.isTyped(values[j])) { + continue; + } + // Make sure the value type matches the input type + if (values[j].type !== inputs[j].baseType) { + matching.splice(i, 1); + break; + } + } + } + } + if (matching.length === 0) { + logger$e.throwArgumentError("no matching event", "name", key); + } + else if (matching.length > 1 && forceUnique) { + // @TODO: refine by Typed + logger$e.throwArgumentError("multiple matching events", "name", key); + } + return matching[0]; + } + // Normalize the signature and lookup the function + const result = __classPrivateFieldGet$r(this, _Interface_events, "f").get(EventFragment.fromString(key).format()); + if (result) { + return result; + } + return logger$e.throwArgumentError("no matching event", "signature", key); +}; + +const version$7 = "@ethersproject/web@6.0.0-beta.1"; + +const logger$6 = new Logger(version$7); + +var __classPrivateFieldSet$q = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$q = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _FetchResponse_props, _FetchResponse_error; +class FetchResponse { + constructor(statusCode, statusMessage, headers, body, request) { + _FetchResponse_props.set(this, void 0); + _FetchResponse_error.set(this, void 0); + __classPrivateFieldSet$q(this, _FetchResponse_props, { + statusCode, + statusMessage, + headers: Object.freeze(Object.assign({}, Object.keys(headers).reduce((accum, k) => { + accum[k.toLowerCase()] = headers[k]; + return accum; + }, {}))), + body: ((body == null) ? null : new Uint8Array(body)), + request: (request || null), + }, "f"); + __classPrivateFieldSet$q(this, _FetchResponse_error, { message: "" }, "f"); + } + toString() { + const body = getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "body"); + return ``; + } + get statusCode() { return getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "statusCode"); } + get statusMessage() { return getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "statusMessage"); } + get headers() { return getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "headers"); } + get body() { + const body = getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "body"); + return (body == null) ? null : new Uint8Array(body); + } + get bodyText() { + try { + const body = getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "body"); + return (body == null) ? "" : toUtf8String(body); + } + catch (error) { + return logger$6.throwError("response body is not valid UTF-8 data", "UNSUPPORTED_OPERATION", { + operation: "bodyText", info: { response: this } + }); + } + } + get bodyJson() { + try { + return JSON.parse(this.bodyText); + } + catch (error) { + return logger$6.throwError("response body is not valid JSON", "UNSUPPORTED_OPERATION", { + operation: "bodyJson", info: { response: this } + }); + } + } + [(_FetchResponse_props = new WeakMap(), _FetchResponse_error = new WeakMap(), Symbol.iterator)]() { + const headers = this.headers; + const keys = Object.keys(headers); + let index = 0; + return { + next: () => { + if (index < keys.length) { + const key = keys[index++]; + return { + value: [key, headers[key]], done: false + }; + } + return { value: undefined, done: true }; + } + }; + } + makeServerError(message, error) { + let statusMessage; + if (!message) { + message = `${this.statusCode} ${this.statusMessage}`; + statusMessage = `CLIENT ESCALATED SERVER ERROR (${message})`; + } + else { + statusMessage = `CLIENT ESCALATED SERVER ERROR (${this.statusCode} ${this.statusMessage}; ${message})`; + } + const response = new FetchResponse(599, statusMessage, this.headers, this.body, getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "request") || undefined); + __classPrivateFieldSet$q(response, _FetchResponse_error, { message, error }, "f"); + return response; + } + throwThrottleError(message, stall) { + if (stall == null) { + stall = 1000; + } + if (typeof (stall) !== "number" || !Number.isInteger(stall) || stall < 0) { + logger$6.throwArgumentError("invalid stall timeout", "stall", stall); + } + const error = new Error(message || "throttling requests"); + defineProperties(error, { stall, throttle: true }); + throw error; + } + getHeader(key) { + return this.headers[key.toLowerCase()]; + } + hasBody() { + const body = getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "body"); + return (body != null); + } + get request() { return getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "request"); } + ok() { + return (__classPrivateFieldGet$q(this, _FetchResponse_error, "f").message === "" && this.statusCode >= 200 && this.statusCode < 300); + } + assertOk() { + if (this.ok()) { + return; + } + let { message, error } = __classPrivateFieldGet$q(this, _FetchResponse_error, "f"); + if (message === "") { + message = `server response ${this.statusCode} ${this.statusMessage}`; + } + logger$6.throwError(message, "SERVER_ERROR", { + request: (this.request || "unknown request"), response: this, error + }); + } +} + +async function getUrl(req, timeout) { + const protocol = req.url.split(":")[0].toLowerCase(); + if (protocol !== "http" && protocol !== "https") { + logger$6.throwError(`unsupported protocol ${protocol}`, "UNSUPPORTED_OPERATION", { + info: { protocol }, + operation: "request" + }); + } + if (req.credentials && !req.allowInsecureAuthentication) { + logger$6.throwError("insecure authorized connections unsupported", "UNSUPPORTED_OPERATION", { + operation: "request" + }); + } + const init = { + method: req.method, + headers: new Headers(Array.from(req)), + body: req.body || undefined, + }; + const resp = await fetch(req.url, init); + const headers = {}; + resp.headers.forEach((value, key) => { + headers[key.toLowerCase()] = value; + }); + const body = new Uint8Array(await resp.arrayBuffer()); + return new FetchResponse(resp.status, resp.statusText, headers, body, req); +} + +var __classPrivateFieldSet$p = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$p = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _FetchRequest_props; +function check(value, type, name) { + if (typeof (value) !== type) { + throw new Error(`invalid ${name}`); + } + return value; +} +class FetchRequest { + constructor(url) { + _FetchRequest_props.set(this, void 0); + __classPrivateFieldSet$p(this, _FetchRequest_props, { + allowInsecure: false, + gzip: false, + headers: {}, + method: "", + timeout: 300, + url: check(url, "string", "url") + }, "f"); + } + // URL + get url() { return getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "url"); } + set url(url) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "url", check(url, "string", "url")); + } + // Body + get body() { + const body = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body"); + if (body == null) { + return null; + } + if (this.isFrozen()) { + return new Uint8Array(body); + } + return body; + } + set body(body) { + if (body == null) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body", undefined); + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType", undefined); + } + else if (typeof (body) === "string") { + // @TODO: utf8-check + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body", toUtf8Bytes(body)); + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType", "text/plain"); + } + else if (body instanceof Uint8Array) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body", body); + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType", "application/octet-stream"); + } + else if (typeof (body) === "object") { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body", toUtf8Bytes(JSON.stringify(body))); + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType", "application/json"); + } + else { + throw new Error("invalid body"); + } + } + hasBody() { + return (getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body") != null); + } + // Method (default: GET with no body, POST with a body) + get method() { + const method = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "method"); + if (method) { + return method.toUpperCase(); + } + if (this.body) { + return "POST"; + } + return "GET"; + } + set method(method) { + if (method == null) { + method = ""; + } + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "method", check(method, "string", "method")); + } + // Headers (automatically fills content-type if not explicitly set) + get headers() { + const headers = Object.assign({}, getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers")); + const bodyType = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType"); + if (this.credentials) ; + if (this.allowGzip) { + headers["accept-encoding"] = "gzip"; + } + if (headers["content-type"] == null && bodyType) { + headers["content-type"] = bodyType; + } + if (this.body) { + headers["content-length"] = String(this.body.length); + } + return Object.freeze(headers); + } + getHeader(key) { + return this.headers[key.toLowerCase()]; + } + setHeader(key, value) { + const headers = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers"); + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers", headers); + headers[check(key, "string", "key").toLowerCase()] = String(value); + } + clearHeaders() { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers", {}); + } + [(_FetchRequest_props = new WeakMap(), Symbol.iterator)]() { + const headers = this.headers; + const keys = Object.keys(headers); + let index = 0; + return { + next: () => { + if (index < keys.length) { + const key = keys[index++]; + return { + value: [key, headers[key]], done: false + }; + } + return { value: undefined, done: true }; + } + }; + } + // Configure an Authorization header + get credentials() { + return getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "creds") || null; + } + setCredentials(username, password) { + if (username.match(/:/)) { + logger$6.throwArgumentError("invalid basic authentication username", "username", "[REDACTED]"); + } + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "creds", `${username}:${password}`); + // @TODO: + //const auth = username + ":" + password; + //this.setHeader("authorization", "Basic " + base64Encode(toUtf8Bytes(auth))) + //this.setHeader("authorization", "Basic TODO:" + auth); + } + // Configure the request to allow gzipped responses + get allowGzip() { + return getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "gzip"); + } + set allowGzip(value) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "gzip", !!value); + } + // Allow credentials to be sent over an insecure (non-HTTPS) channel + get allowInsecureAuthentication() { + return !!getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "allowInsecure"); + } + set allowInsecureAuthentication(value) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "allowInsecure", check(value, "boolean", "allowInsecureAuthentication")); + } + // Timeout (seconds) + get timeout() { return getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "timeout"); } + set timeout(timeout) { + timeout = check(timeout, "number", "timeout"); + if (timeout <= 0) { + throw new Error("invalid timerout"); + } + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "timeout", timeout); + } + redirect(location) { + // Redirection; for now we only support absolute locataions + const current = this.url.split(":")[0].toLowerCase(); + const target = location.split(":")[0].toLowerCase(); + if (this.method !== "GET" || (current === "https" && target === "http") || + !location.match(/^https?:$/)) { + return logger$6.throwError(`unsupported redirect`, "UNSUPPORTED_OPERATION", { + operation: `redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(location)})` + }); + } + // Create a copy of this request, with a new URL + const req = new FetchRequest(location); + req.method = "GET"; + req.allowGzip = this.allowGzip; + req.timeout = this.timeout; + setStore(__classPrivateFieldGet$p(req, _FetchRequest_props, "f"), "body", getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body")); + setStore(__classPrivateFieldGet$p(req, _FetchRequest_props, "f"), "headers", Object.assign({}, getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers"))); + setStore(__classPrivateFieldGet$p(req, _FetchRequest_props, "f"), "bodyType", getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType")); + // Do not forward credentials unless on the same domain; only absolute + //req.allowInsecure = false; + // paths are currently supported; may want a way to specify to forward? + //setStore(req.#props, "creds", getStore(this.#pros, "creds")); + return req; + } + clone() { + const clone = new FetchRequest(this.url); + // Preserve "default method" (i.e. null) + setStore(__classPrivateFieldGet$p(clone, _FetchRequest_props, "f"), "method", getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "method")); + // Preserve "default body" with type, copying the Uint8Array is present + const body = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body"); + setStore(__classPrivateFieldGet$p(clone, _FetchRequest_props, "f"), "body", (body == null) ? undefined : new Uint8Array(body)); + setStore(__classPrivateFieldGet$p(clone, _FetchRequest_props, "f"), "bodyType", getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType")); + // Preserve "default headers" + setStore(__classPrivateFieldGet$p(clone, _FetchRequest_props, "f"), "headers", Object.assign({}, getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers"))); + // Credentials is readonly, so we copy internally + setStore(__classPrivateFieldGet$p(clone, _FetchRequest_props, "f"), "creds", getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "creds")); + if (this.allowGzip) { + clone.allowGzip = true; + } + clone.timeout = this.timeout; + if (this.allowInsecureAuthentication) { + clone.allowInsecureAuthentication = true; + } + return clone; + } + freeze() { + // Copy the body so any changes to previous access do not modify it + const body = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body"); + if (body != null) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body", new Uint8Array(body)); + } + Object.freeze(__classPrivateFieldGet$p(this, _FetchRequest_props, "f").headers); + Object.freeze(__classPrivateFieldGet$p(this, _FetchRequest_props, "f")); + return this; + } + isFrozen() { + return Object.isFrozen(__classPrivateFieldGet$p(this, _FetchRequest_props, "f")); + } +} + +async function delay(duration) { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} +// @TODO: Add option for global preflightRequest? +function getTime$2() { return (new Date()).getTime(); } +function unpercent(value) { + value = value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => { + return String.fromCharCode(parseInt(code, 16)); + }); + return toUtf8Bytes(value); +} +let lockGateways = false; +async function fetchData(connection) { + const conn = (typeof (connection) === "string") ? { + request: new FetchRequest(connection) + } : (connection instanceof FetchRequest) ? { + request: connection + } : Object.assign({}, connection); + if (conn.request == null) { + return logger$6.throwArgumentError("missing request", "connection", connection); + } + let req = conn.request.clone().freeze(); + switch (conn.request.url.split(":")[0]) { + case "data": { + const match = req.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i); + if (match) { + try { + const headers = { + "content-type": (match[1] ? match[1] : "text/plain") + }; + const body = (match[2] ? decodeBase64(match[3]) : unpercent(match[3])); + return new FetchResponse(200, "OK", headers, body, req.clone()); + } + catch (error) { + return new FetchResponse(400, "BAD REQUEST (invalid base64 encoded data)", {}, null, req.clone()); + } + } + return new FetchResponse(500, "INTERNAL SERVER ERROR (unsupported dara URI)", {}, null, req.clone()); + } + case "ipfs": + case "ipns": + case "ar": + throw new Error("not implemented yet"); + case "http": + case "https": + break; + default: + throw new Error("unsupported scheme"); + } + const attempts = (conn.throttleLimit != null) ? conn.throttleLimit : 12; + if (!Number.isInteger(attempts) || attempts < 1) { + return logger$6.throwArgumentError("invalid throttleLimit", "connection", connection); + } + const slotInterval = (conn.throttleSlotInterval != null) ? conn.throttleSlotInterval : 100; + //logger.assertInteger(slotInterval, "connection.throttleSlotInterval", connection.throttleSlotInterval); + if (!Number.isInteger(slotInterval) || attempts < 0) { + return logger$6.throwArgumentError("invalid throttleSlotInterval", "connection", connection); + } + const retryFunc = (conn.throttleRetry != null) ? conn.throttleRetry : null; + if (retryFunc && typeof (retryFunc) !== "function") { + return logger$6.throwArgumentError("invalid throttleRetry callback", "connection", connection); + } + const preflightRequest = conn.preflightRequest || null; + if (preflightRequest && typeof (preflightRequest) !== "function") { + return logger$6.throwArgumentError("invalid preflightRequest callback", "connection", connection); + } + const processResponse = conn.processResponse || null; + if (processResponse && typeof (processResponse) !== "function") { + return logger$6.throwArgumentError("invalid processResponse callback", "connection", connection); + } + // Start time of this fetch (for timeouts) + const t0 = getTime$2(); + let response = null; + for (let a = 0; a < attempts; a++) { + let request = req.clone(); + if (preflightRequest) { + request = (await preflightRequest(request.freeze())).clone(); + } + const remainingTime = getTime$2() - t0; + if (remainingTime < 0) { + return logger$6.throwError("timeout", "TIMEOUT", { operation: "request", request }); + } + response = await getUrl(request); + // Retry logic (server forced) + if (a < attempts) { + if (response.statusCode === 301 || response.statusCode === 302) { + // Try following the redirect; the request will through if the + // type of redirect is not supported + try { + req = request.redirect(response.headers.location || ""); + continue; + } + catch (error) { } + // Things won't get any better on another attempt; abort + return response; + } + else if (response.statusCode === 429) { + if (retryFunc == null || (await retryFunc(request.freeze(), response, a))) { + const retryAfter = response.headers["retry-after"]; + if (typeof (retryAfter) === "string" && retryAfter.match(/^[1-9][0-9]*$/)) { + await delay(parseInt(retryAfter)); + } + else { + await delay(slotInterval * Math.trunc(Math.random() * Math.pow(2, a))); + } + continue; + } + } + } + // Optional post-processing response; also allows trapping + // HTTP status errors and doing "something different", + // including any further throttling. + if (processResponse) { + try { + return await processResponse(request, response); + } + catch (error) { + // response.throwThrottleError + if (error.throttle && typeof (error.stall) === "number") { + if (a < attempts) { + await delay(error.stall); + continue; + } + // Too many retries should behave more like a 5xx server error + return response.makeServerError("exceeded maximum retry limit", error); + } + // Something went wrong during processing; throw a 5xx server error + response.makeServerError("error in post-processing function", error).assertOk(); + } + } + return response; + } + // Too many retries should behave more like a 5xx server error + return response.makeServerError("exceeded maximum retry limit"); +} +fetchData.lock = function () { + lockGateways = true; +}; +// @TODO: Allow a master Gateway function +fetchData.setGateway = function (gateway) { +}; +fetchData.setIpfsGateway = function (gateway) { + if (lockGateways) { + logger$6.throwError("gateways are locked", "UNSUPPORTED_OPERATION", { + operation: "setIpfsGateway" + }); + } +}; +fetchData.setArGateway = function (gateway) { + if (lockGateways) { + logger$6.throwError("gateways are locked", "UNSUPPORTED_OPERATION", { + operation: "setArGateway" + }); + } +}; + +const version$6 = "@ethersproject/providers@6.0.0-beta.1"; + +const logger$5 = new Logger(version$6); + +var __classPrivateFieldSet$o = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$o = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _a$1, _EnsResolver_supports2544, _EnsResolver_getResolver; +const BN_1$2 = BigInt(1); +const Empty = new Uint8Array([]); +const HashZero = "0x0000000000000000000000000000000000000000000000000000000000000000"; +function parseBytes(result, start) { + if (result === "0x") { + return null; + } + const offset = toNumber(dataSlice(result, start, start + 32)); + const length = toNumber(dataSlice(result, offset, offset + 32)); + return dataSlice(result, offset + 32, offset + 32 + length); +} +function parseString(result, start) { + try { + const bytes = parseBytes(result, start); + if (bytes != null) { + return toUtf8String(bytes); + } + } + catch (error) { } + return null; +} +function numPad$1(value) { + const result = toArray(value); + if (result.length > 32) { + throw new Error("internal; should not happen"); + } + const padded = new Uint8Array(32); + padded.set(result, 32 - result.length); + return padded; +} +function bytesPad$1(value) { + if ((value.length % 32) === 0) { + return value; + } + const result = new Uint8Array(Math.ceil(value.length / 32) * 32); + result.set(value); + return result; +} +// ABI Encodes a series of (bytes, bytes, ...) +function encodeBytes$1(datas) { + const result = []; + let byteCount = 0; + // Add place-holders for pointers as we add items + for (let i = 0; i < datas.length; i++) { + result.push(Empty); + byteCount += 32; + } + for (let i = 0; i < datas.length; i++) { + const data = logger$5.getBytes(datas[i]); + // Update the bytes offset + result[i] = numPad$1(byteCount); + // The length and padded value of data + result.push(numPad$1(data.length)); + result.push(bytesPad$1(data)); + byteCount += 32 + Math.ceil(data.length / 32) * 32; + } + return concat(result); +} +// @TODO: This should use the fetch-data:ipfs gateway +// Trim off the ipfs:// prefix and return the default gateway URL +function getIpfsLink(link) { + if (link.match(/^ipfs:\/\/ipfs\//i)) { + link = link.substring(12); + } + else if (link.match(/^ipfs:\/\//i)) { + link = link.substring(7); + } + else { + logger$5.throwArgumentError("unsupported IPFS format", "link", link); + } + return `https:/\/gateway.ipfs.io/ipfs/${link}`; +} +class MulticoinProviderPlugin { + constructor(name) { + defineProperties(this, { name }); + } + validate(proivder) { + return this; + } + supportsCoinType(coinType) { + return false; + } + async encodeAddress(coinType, address) { + throw new Error("unsupported coin"); + } + async decodeAddress(coinType, data) { + throw new Error("unsupported coin"); + } +} +const matcherIpfs = new RegExp("^(ipfs):/\/(.*)$", "i"); +const matchers = [ + new RegExp("^(https):/\/(.*)$", "i"), + new RegExp("^(data):(.*)$", "i"), + matcherIpfs, + new RegExp("^eip155:[0-9]+/(erc[0-9]+):(.*)$", "i"), +]; +class EnsResolver { + constructor(provider, address, name) { + // For EIP-2544 names, the ancestor that provided the resolver + _EnsResolver_supports2544.set(this, void 0); + defineProperties(this, { provider, address, name }); + __classPrivateFieldSet$o(this, _EnsResolver_supports2544, null, "f"); + } + async supportsWildcard() { + if (!__classPrivateFieldGet$o(this, _EnsResolver_supports2544, "f")) { + // supportsInterface(bytes4 = selector("resolve(bytes,bytes)")) + __classPrivateFieldSet$o(this, _EnsResolver_supports2544, this.provider.call({ + to: this.address, + data: "0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000" + }).then((result) => { + return (logger$5.getBigInt(result) === BN_1$2); + }).catch((error) => { + if (error.code === "CALL_EXCEPTION") { + return false; + } + // Rethrow the error: link is down, etc. Let future attempts retry. + __classPrivateFieldSet$o(this, _EnsResolver_supports2544, null, "f"); + throw error; + }), "f"); + } + return await __classPrivateFieldGet$o(this, _EnsResolver_supports2544, "f"); + } + async _fetch(selector, parameters = "0x") { + // e.g. keccak256("addr(bytes32,uint256)") + const addrData = concat([selector, namehash(this.name), parameters]); + const tx = { + to: this.address, + enableCcipRead: true, + data: addrData + }; + // Wildcard support; use EIP-2544 to resolve the request + let wrapped = false; + if (await this.supportsWildcard()) { + wrapped = true; + // selector("resolve(bytes,bytes)") + tx.data = concat(["0x9061b923", encodeBytes$1([dnsEncode(this.name), addrData])]); + } + try { + let data = await this.provider.call(tx); + if ((logger$5.getBytes(data).length % 32) === 4) { + return logger$5.throwError("resolver threw error", "CALL_EXCEPTION", { + transaction: tx, data + }); + } + if (wrapped) { + return parseBytes(data, 0); + } + return data; + } + catch (error) { + if (error.code !== "CALL_EXCEPTION") { + throw error; + } + } + return null; + } + async getAddress(coinType = 60) { + if (coinType === 60) { + try { + // keccak256("addr(bytes32)") + const result = await this._fetch("0x3b3b57de"); + // No address + if (result === "0x" || result === HashZero) { + return null; + } + const network = await this.provider.getNetwork(); + return network.formatter.callAddress(result); + } + catch (error) { + if (error.code === "CALL_EXCEPTION") { + return null; + } + throw error; + } + } + let coinPlugin = null; + for (const plugin of this.provider.plugins) { + if (!(plugin instanceof MulticoinProviderPlugin)) { + continue; + } + if (plugin.supportsCoinType(coinType)) { + coinPlugin = plugin; + break; + } + } + if (coinPlugin == null) { + return null; + } + // keccak256("addr(bytes32,uint256") + const data = parseBytes((await this._fetch("0xf1cb7e06", numPad$1(coinType))) || "0x", 0); + // No address + if (data == null || data === "0x") { + return null; + } + // Compute the address + const address = await coinPlugin.encodeAddress(coinType, data); + if (address != null) { + return address; + } + return logger$5.throwError(`invalid coin data`, "UNSUPPORTED_OPERATION", { + operation: `getAddress(${coinType})`, + info: { coinType, data } + }); + } + async getText(key) { + // The key encoded as parameter to fetchBytes + let keyBytes = toUtf8Bytes(key); + // The nodehash consumes the first slot, so the string pointer targets + // offset 64, with the length at offset 64 and data starting at offset 96 + const calldata = logger$5.getBytes(concat([numPad$1(64), numPad$1(keyBytes.length), keyBytes])); + const hexBytes = parseBytes((await this._fetch("0x59d1d43c", bytesPad$1(calldata))) || "0x", 0); + if (hexBytes == null || hexBytes === "0x") { + return null; + } + return toUtf8String(hexBytes); + } + async getContentHash() { + // keccak256("contenthash()") + const hexBytes = parseBytes((await this._fetch("0xbc1c58d1")) || "0x", 0); + // No contenthash + if (hexBytes == null || hexBytes === "0x") { + return null; + } + // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key) + const ipfs = hexBytes.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/); + if (ipfs) { + const scheme = (ipfs[1] === "e3010170") ? "ipfs" : "ipns"; + const length = parseInt(ipfs[4], 16); + if (ipfs[5].length === length * 2) { + return `${scheme}:/\/${encodeBase58("0x" + ipfs[2])}`; + } + } + // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32) + const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/); + if (swarm && swarm[1].length === 64) { + return `bzz:/\/${swarm[1]}`; + } + return logger$5.throwError(`invalid or unsupported content hash data`, "UNSUPPORTED_OPERATION", { + operation: "getContentHash()", + info: { data: hexBytes } + }); + } + async getAvatar() { + return (await this._getAvatar()).url; + } + async _getAvatar() { + const linkage = [{ type: "name", value: this.name }]; + try { + // test data for ricmoo.eth + //const avatar = "eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233"; + const avatar = await this.getText("avatar"); + if (avatar == null) { + linkage.push({ type: "!avatar", value: "" }); + throw new Error("!avatar"); + } + linkage.push({ type: "avatar", value: avatar }); + for (let i = 0; i < matchers.length; i++) { + const match = avatar.match(matchers[i]); + if (match == null) { + continue; + } + const scheme = match[1].toLowerCase(); + switch (scheme) { + case "https": + case "data": + linkage.push({ type: "url", value: avatar }); + return { linkage, url: avatar }; + case "ipfs": { + const url = getIpfsLink(avatar); + linkage.push({ type: "ipfs", value: avatar }); + linkage.push({ type: "url", value: url }); + return { linkage, url }; + } + case "erc721": + case "erc1155": { + // Depending on the ERC type, use tokenURI(uint256) or url(uint256) + const selector = (scheme === "erc721") ? "0xc87b56dd" : "0x0e89341c"; + linkage.push({ type: scheme, value: avatar }); + // The owner of this name + const owner = await this.getAddress(); + if (owner == null) { + linkage.push({ type: "!owner", value: "" }); + throw new Error("!owner"); + } + const comps = (match[2] || "").split("/"); + if (comps.length !== 2) { + linkage.push({ type: `!${scheme}caip`, value: (match[2] || "") }); + throw new Error("!caip"); + } + const formatter = (await this.provider.getNetwork()).formatter; + const addr = formatter.address(comps[0]); + const tokenId = numPad$1(comps[1]); + // Check that this account owns the token + if (scheme === "erc721") { + // ownerOf(uint256 tokenId) + const tokenOwner = formatter.callAddress(await this.provider.call({ + to: addr, data: concat(["0x6352211e", tokenId]) + })); + if (owner !== tokenOwner) { + linkage.push({ type: "!owner", value: tokenOwner }); + throw new Error("!owner"); + } + linkage.push({ type: "owner", value: tokenOwner }); + } + else if (scheme === "erc1155") { + // balanceOf(address owner, uint256 tokenId) + const balance = logger$5.getBigInt(await this.provider.call({ + to: addr, data: concat(["0x00fdd58e", zeroPadLeft(owner, 32), tokenId]) + })); + if (!balance) { + linkage.push({ type: "!balance", value: "0" }); + throw new Error("!balance"); + } + linkage.push({ type: "balance", value: balance.toString() }); + } + // Call the token contract for the metadata URL + const tx = { + to: comps[0], + data: concat([selector, tokenId]) + }; + let metadataUrl = parseString(await this.provider.call(tx), 0); + if (metadataUrl == null) { + linkage.push({ type: "!metadata-url", value: "" }); + throw new Error("!metadata-url"); + } + linkage.push({ type: "metadata-url-base", value: metadataUrl }); + // ERC-1155 allows a generic {id} in the URL + if (scheme === "erc1155") { + metadataUrl = metadataUrl.replace("{id}", hexlify(tokenId).substring(2)); + linkage.push({ type: "metadata-url-expanded", value: metadataUrl }); + } + // Transform IPFS metadata links + if (metadataUrl.match(/^ipfs:/i)) { + metadataUrl = getIpfsLink(metadataUrl); + } + linkage.push({ type: "metadata-url", value: metadataUrl }); + // Get the token metadata + let metadata = {}; + const response = await fetchData(metadataUrl); + try { + metadata = response.bodyJson; + } + catch (error) { + try { + linkage.push({ type: "!metadata", value: response.bodyText }); + } + catch (error) { + const bytes = response.body; + if (bytes) { + linkage.push({ type: "!metadata", value: hexlify(bytes) }); + } + throw error; + } + throw error; + } + if (!metadata) { + linkage.push({ type: "!metadata", value: "" }); + throw new Error("!metadata"); + } + linkage.push({ type: "metadata", value: JSON.stringify(metadata) }); + // Pull the image URL out + let imageUrl = metadata.image; + if (typeof (imageUrl) !== "string") { + linkage.push({ type: "!imageUrl", value: "" }); + throw new Error("!imageUrl"); + } + if (imageUrl.match(/^(https:\/\/|data:)/i)) { + // Allow + } + else { + // Transform IPFS link to gateway + const ipfs = imageUrl.match(matcherIpfs); + if (ipfs == null) { + linkage.push({ type: "!imageUrl-ipfs", value: imageUrl }); + throw new Error("!imageUrl-ipfs"); + } + linkage.push({ type: "imageUrl-ipfs", value: imageUrl }); + imageUrl = getIpfsLink(imageUrl); + } + linkage.push({ type: "url", value: imageUrl }); + return { linkage, url: imageUrl }; + } + } + } + } + catch (error) { + console.log("EE", error); + } + return { linkage, url: null }; + } + static async fromName(provider, name) { + let currentName = name; + while (true) { + if (currentName === "" || currentName === ".") { + return null; + } + // Optimization since the eth node cannot change and does + // not have a wildcar resolver + if (name !== "eth" && currentName === "eth") { + return null; + } + // Check the current node for a resolver + const addr = await __classPrivateFieldGet$o(EnsResolver, _a$1, "m", _EnsResolver_getResolver).call(EnsResolver, provider, currentName); + // Found a resolver! + if (addr != null) { + const resolver = new EnsResolver(provider, addr, name); + // Legacy resolver found, using EIP-2544 so it isn't safe to use + if (currentName !== name && !(await resolver.supportsWildcard())) { + return null; + } + return resolver; + } + // Get the parent node + currentName = currentName.split(".").slice(1).join("."); + } + } +} +_a$1 = EnsResolver, _EnsResolver_supports2544 = new WeakMap(), _EnsResolver_getResolver = async function _EnsResolver_getResolver(provider, name) { + const network = await provider.getNetwork(); + const ensPlugin = network.getPlugin("org.ethers.plugins.ens"); + // No ENS... + if (!ensPlugin) { + return logger$5.throwError("network does not support ENS", "UNSUPPORTED_OPERATION", { + operation: "getResolver", info: { network: network.name } + }); + } + try { + // keccak256("resolver(bytes32)") + const addrData = await provider.call({ + to: ensPlugin.address, + data: concat(["0x0178b8bf" + namehash(name)]), + enableCcipRead: true + }); + const addr = network.formatter.callAddress(addrData); + if (addr === dataSlice(HashZero, 0, 20)) { + return null; + } + return addr; + } + catch (error) { + // ENS registry cannot throw errors on resolver(bytes32), + // so probably a link error + throw error; + } + return null; +}; + +const version$5 = "@ethersproject/signing-key@6.0.0-beta.1"; + +const logger$4 = new Logger(version$5); + +var __classPrivateFieldSet$n = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$n = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Signature_props; +// Constants +const BN_0$1 = BigInt(0); +const BN_1$1 = BigInt(1); +const BN_2$2 = BigInt(2); +const BN_27 = BigInt(27); +const BN_28 = BigInt(28); +const BN_35 = BigInt(35); +const BN_255 = BigInt(255); +const BN_MASK_255 = (BN_1$1 << BN_255) - BN_1$1; +const _guard$2 = {}; +const Zero = "0x0000000000000000000000000000000000000000000000000000000000000000"; +class Signature$1 { + constructor(guard, r, s, v) { + _Signature_props.set(this, void 0); + logger$4.assertPrivate(guard, _guard$2, "Signature"); + __classPrivateFieldSet$n(this, _Signature_props, { r, s, v, networkV: null }, "f"); + } + get r() { return getStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "r"); } + set r(value) { + if (dataLength(value) !== 32) { + logger$4.throwArgumentError("invalid r", "value", value); + } + setStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "r", hexlify(value)); + } + get s() { return getStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "s"); } + set s(value) { + if (dataLength(value) !== 32) { + logger$4.throwArgumentError("invalid r", "value", value); + } + else if (arrayify(value)[0] & 0x80) { + logger$4.throwArgumentError("non-canonical s", "value", value); + } + setStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "s", hexlify(value)); + } + get v() { return getStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "v"); } + set v(value) { + const v = logger$4.getNumber(value, "value"); + if (v !== 27 && v !== 28) { + throw new Error("@TODO"); + } + setStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "v", v); + } + get networkV() { return getStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "networkV"); } + get legacyChainId() { + const v = this.networkV; + if (v == null) { + return null; + } + return Signature$1.getChainId(v); + } + get vs() { + // The EIP-2098 compact representation + const vs = arrayify(this.s); + if (this.yParity) { + vs[0] |= 0x80; + } + return hexlify(vs); + } + get yParity() { + if (this.v === 27) { + return 0; + } + return 1; + /* + // When v is 0 or 1 it is the recid directly + if (this.v.isZero()) { return 0; } + if (this.v.eq(1)) { return 1; } + + // Otherwise, odd (e.g. 27) is 0 and even (e.g. 28) is 1 + return this.v.and(1).isZero() ? 1: 0; + */ + } + get serialized() { + return concat([this.r, this.s, (this.yParity ? "0x1c" : "0x1b")]); + } + [(_Signature_props = new WeakMap(), Symbol.for('nodejs.util.inspect.custom'))]() { + return `Signature { r: "${this.r}", s: "${this.s}", yParity: ${this.yParity}, networkV: ${this.networkV} }`; + } + clone() { + if (getStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "networkV")) { + logger$4.throwError("cannot clone EIP-155 signatures", "UNSUPPORTED_OPERATION", { + operation: "clone" + }); + } + const { r, s, v } = __classPrivateFieldGet$n(this, _Signature_props, "f"); + return new Signature$1(_guard$2, r, s, v); + } + freeze() { + Object.freeze(__classPrivateFieldGet$n(this, _Signature_props, "f")); + return this; + } + isFrozen() { + return Object.isFrozen(__classPrivateFieldGet$n(this, _Signature_props, "f")); + } + toJSON() { + const { r, s, v, networkV } = this; + return { + _type: "signature", + networkV: ((networkV != null) ? networkV.toString() : null), + r, s, v, + }; + } + static create() { + return new Signature$1(_guard$2, Zero, Zero, 27); + } + // Get the chain ID from an EIP-155 v + static getChainId(v) { + const bv = logger$4.getBigInt(v, "v"); + // The v is not an EIP-155 v, so it is the unspecified chain ID + if ((bv == BN_27) || (bv == BN_28)) { + return BN_0$1; + } + // Bad value for an EIP-155 v + if (bv < BN_35) { + logger$4.throwArgumentError("invalid EIP-155 v", "v", v); + } + return (bv - BN_35) / BN_2$2; + } + // Get the EIP-155 v transformed for a given chainId + static getChainIdV(chainId, v) { + return (logger$4.getBigInt(chainId) * BN_2$2) + BigInt(35 + v - 27); + } + // Convert an EIP-155 v into a normalized v + static getNormalizedV(v) { + const bv = logger$4.getBigInt(v); + if (bv == BN_0$1) { + return 27; + } + if (bv == BN_1$1) { + return 28; + } + // Otherwise, EIP-155 v means odd is 27 and even is 28 + return (bv & BN_1$1) ? 27 : 28; + } + static fromTransaction(r, s, _v) { + const v = logger$4.getBigInt(_v, "v"); + const sig = Signature$1.from({ r, s, v }); + setStore(__classPrivateFieldGet$n(sig, _Signature_props, "f"), "networkV", v); + return sig.freeze(); + } + static from(sig) { + const throwError = (message) => { + return logger$4.throwArgumentError(message, "signature", sig); + }; + if (typeof (sig) === "string") { + if (dataLength(sig) !== 65) { + throwError("invlaid raw signature length"); + } + const r = dataSlice(sig, 0, 32); + const s = dataSlice(sig, 32, 64); + if (BigInt(s) >> BN_255) { + throwError("non-canonical s"); + } + const v = Signature$1.getNormalizedV(dataSlice(sig, 64, 65)); + return new Signature$1(_guard$2, r, s, v); + } + if (sig instanceof Signature$1) { + return sig.clone(); + } + const r = sig.r; + if (r == null) { + throwError("missing r"); + } + if (!isHexString(r, 32)) { + throwError("invalid r"); + } + const s = (function (s, vs) { + if (s) { + if (!isHexString(s, 32)) { + throwError("invalid s"); + } + return s; + } + if (vs) { + if (!isHexString(vs, 32)) { + throwError("invalid vs"); + } + return toHex(BigInt(vs) & BN_MASK_255, 32); + } + return throwError("missing s"); + })(sig.s, sig.vs); + if (BigInt(s) >> BN_255) { + throwError("non-canonical s"); + } + const v = (function (v, vs, yParity) { + if (v) { + return Signature$1.getNormalizedV(v); + } + if (vs) { + if (!isHexString(vs, 32)) { + throwError("invalid vs"); + } + return ((arrayify(vs)[0] & 0x80) ? 28 : 27); + } + if (yParity) { + switch (yParity) { + case 0: return 27; + case 1: return 28; + } + return throwError("invalid yParity"); + } + //if (chainId) { return BigNumber.from(chainId).and(1).sub(27); } // @TODO: check this + return throwError("missing v"); + })(sig.v, sig.vs, sig.yParity); + // @TODO: check vs, chainId, yParity + const result = new Signature$1(_guard$2, r, s, v); + if (sig.yParity && sig.yParity !== result.yParity) ; + if (sig.vs && sig.vs !== result.vs) ; + //if (sig.chainId && sig.chainId !== result.chainId) { + //} + return result; + } +} + +/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */ +const nodeCrypto = undefined; /* ethers:rollup */ +const _0n = BigInt(0); +const _1n = BigInt(1); +const _2n = BigInt(2); +const _3n = BigInt(3); +const _8n = BigInt(8); +const POW_2_256 = _2n ** BigInt(256); +const CURVE = { + a: _0n, + b: BigInt(7), + P: POW_2_256 - _2n ** BigInt(32) - BigInt(977), + n: POW_2_256 - BigInt('432420386565659656852420866394968145599'), + h: _1n, + Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'), + Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'), + beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'), +}; +function weistrass(x) { + const { a, b } = CURVE; + const x2 = mod(x * x); + const x3 = mod(x2 * x); + return mod(x3 + a * x + b); +} +const USE_ENDOMORPHISM = CURVE.a === _0n; +class JacobianPoint { + constructor(x, y, z) { + this.x = x; + this.y = y; + this.z = z; + } + static fromAffine(p) { + if (!(p instanceof Point)) { + throw new TypeError('JacobianPoint#fromAffine: expected Point'); + } + return new JacobianPoint(p.x, p.y, _1n); + } + static toAffineBatch(points) { + const toInv = invertBatch(points.map((p) => p.z)); + return points.map((p, i) => p.toAffine(toInv[i])); + } + static normalizeZ(points) { + return JacobianPoint.toAffineBatch(points).map(JacobianPoint.fromAffine); + } + equals(other) { + if (!(other instanceof JacobianPoint)) + throw new TypeError('JacobianPoint expected'); + const { x: X1, y: Y1, z: Z1 } = this; + const { x: X2, y: Y2, z: Z2 } = other; + const Z1Z1 = mod(Z1 ** _2n); + const Z2Z2 = mod(Z2 ** _2n); + const U1 = mod(X1 * Z2Z2); + const U2 = mod(X2 * Z1Z1); + const S1 = mod(mod(Y1 * Z2) * Z2Z2); + const S2 = mod(mod(Y2 * Z1) * Z1Z1); + return U1 === U2 && S1 === S2; + } + negate() { + return new JacobianPoint(this.x, mod(-this.y), this.z); + } + double() { + const { x: X1, y: Y1, z: Z1 } = this; + const A = mod(X1 ** _2n); + const B = mod(Y1 ** _2n); + const C = mod(B ** _2n); + const D = mod(_2n * (mod((X1 + B) ** _2n) - A - C)); + const E = mod(_3n * A); + const F = mod(E ** _2n); + const X3 = mod(F - _2n * D); + const Y3 = mod(E * (D - X3) - _8n * C); + const Z3 = mod(_2n * Y1 * Z1); + return new JacobianPoint(X3, Y3, Z3); + } + add(other) { + if (!(other instanceof JacobianPoint)) + throw new TypeError('JacobianPoint expected'); + const { x: X1, y: Y1, z: Z1 } = this; + const { x: X2, y: Y2, z: Z2 } = other; + if (X2 === _0n || Y2 === _0n) + return this; + if (X1 === _0n || Y1 === _0n) + return other; + const Z1Z1 = mod(Z1 ** _2n); + const Z2Z2 = mod(Z2 ** _2n); + const U1 = mod(X1 * Z2Z2); + const U2 = mod(X2 * Z1Z1); + const S1 = mod(mod(Y1 * Z2) * Z2Z2); + const S2 = mod(mod(Y2 * Z1) * Z1Z1); + const H = mod(U2 - U1); + const r = mod(S2 - S1); + if (H === _0n) { + if (r === _0n) { + return this.double(); + } + else { + return JacobianPoint.ZERO; + } + } + const HH = mod(H ** _2n); + const HHH = mod(H * HH); + const V = mod(U1 * HH); + const X3 = mod(r ** _2n - HHH - _2n * V); + const Y3 = mod(r * (V - X3) - S1 * HHH); + const Z3 = mod(Z1 * Z2 * H); + return new JacobianPoint(X3, Y3, Z3); + } + subtract(other) { + return this.add(other.negate()); + } + multiplyUnsafe(scalar) { + let n = normalizeScalar(scalar); + const P0 = JacobianPoint.ZERO; + if (n === _0n) + return P0; + if (n === _1n) + return this; + if (!USE_ENDOMORPHISM) { + let p = P0; + let d = this; + while (n > _0n) { + if (n & _1n) + p = p.add(d); + d = d.double(); + n >>= _1n; + } + return p; + } + let { k1neg, k1, k2neg, k2 } = splitScalarEndo(n); + let k1p = P0; + let k2p = P0; + let d = this; + while (k1 > _0n || k2 > _0n) { + if (k1 & _1n) + k1p = k1p.add(d); + if (k2 & _1n) + k2p = k2p.add(d); + d = d.double(); + k1 >>= _1n; + k2 >>= _1n; + } + if (k1neg) + k1p = k1p.negate(); + if (k2neg) + k2p = k2p.negate(); + k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z); + return k1p.add(k2p); + } + precomputeWindow(W) { + const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1; + const points = []; + let p = this; + let base = p; + for (let window = 0; window < windows; window++) { + base = p; + points.push(base); + for (let i = 1; i < 2 ** (W - 1); i++) { + base = base.add(p); + points.push(base); + } + p = base.double(); + } + return points; + } + wNAF(n, affinePoint) { + if (!affinePoint && this.equals(JacobianPoint.BASE)) + affinePoint = Point.BASE; + const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1; + if (256 % W) { + throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2'); + } + let precomputes = affinePoint && pointPrecomputes.get(affinePoint); + if (!precomputes) { + precomputes = this.precomputeWindow(W); + if (affinePoint && W !== 1) { + precomputes = JacobianPoint.normalizeZ(precomputes); + pointPrecomputes.set(affinePoint, precomputes); + } + } + let p = JacobianPoint.ZERO; + let f = JacobianPoint.ZERO; + const windows = 1 + (USE_ENDOMORPHISM ? 128 / W : 256 / W); + const windowSize = 2 ** (W - 1); + const mask = BigInt(2 ** W - 1); + const maxNumber = 2 ** W; + const shiftBy = BigInt(W); + for (let window = 0; window < windows; window++) { + const offset = window * windowSize; + let wbits = Number(n & mask); + n >>= shiftBy; + if (wbits > windowSize) { + wbits -= maxNumber; + n += _1n; + } + if (wbits === 0) { + let pr = precomputes[offset]; + if (window % 2) + pr = pr.negate(); + f = f.add(pr); + } + else { + let cached = precomputes[offset + Math.abs(wbits) - 1]; + if (wbits < 0) + cached = cached.negate(); + p = p.add(cached); + } + } + return { p, f }; + } + multiply(scalar, affinePoint) { + let n = normalizeScalar(scalar); + let point; + let fake; + if (USE_ENDOMORPHISM) { + const { k1neg, k1, k2neg, k2 } = splitScalarEndo(n); + let { p: k1p, f: f1p } = this.wNAF(k1, affinePoint); + let { p: k2p, f: f2p } = this.wNAF(k2, affinePoint); + if (k1neg) + k1p = k1p.negate(); + if (k2neg) + k2p = k2p.negate(); + k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z); + point = k1p.add(k2p); + fake = f1p.add(f2p); + } + else { + const { p, f } = this.wNAF(n, affinePoint); + point = p; + fake = f; + } + return JacobianPoint.normalizeZ([point, fake])[0]; + } + toAffine(invZ = invert(this.z)) { + const { x, y, z } = this; + const iz1 = invZ; + const iz2 = mod(iz1 * iz1); + const iz3 = mod(iz2 * iz1); + const ax = mod(x * iz2); + const ay = mod(y * iz3); + const zz = mod(z * iz1); + if (zz !== _1n) + throw new Error('invZ was invalid'); + return new Point(ax, ay); + } +} +JacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n); +JacobianPoint.ZERO = new JacobianPoint(_0n, _1n, _0n); +const pointPrecomputes = new WeakMap(); +class Point { + constructor(x, y) { + this.x = x; + this.y = y; + } + _setWindowSize(windowSize) { + this._WINDOW_SIZE = windowSize; + pointPrecomputes.delete(this); + } + static fromCompressedHex(bytes) { + const isShort = bytes.length === 32; + const x = bytesToNumber(isShort ? bytes : bytes.subarray(1)); + if (!isValidFieldElement(x)) + throw new Error('Point is not on curve'); + const y2 = weistrass(x); + let y = sqrtMod(y2); + const isYOdd = (y & _1n) === _1n; + if (isShort) { + if (isYOdd) + y = mod(-y); + } + else { + const isFirstByteOdd = (bytes[0] & 1) === 1; + if (isFirstByteOdd !== isYOdd) + y = mod(-y); + } + const point = new Point(x, y); + point.assertValidity(); + return point; + } + static fromUncompressedHex(bytes) { + const x = bytesToNumber(bytes.subarray(1, 33)); + const y = bytesToNumber(bytes.subarray(33, 65)); + const point = new Point(x, y); + point.assertValidity(); + return point; + } + static fromHex(hex) { + const bytes = ensureBytes(hex); + const len = bytes.length; + const header = bytes[0]; + if (len === 32 || (len === 33 && (header === 0x02 || header === 0x03))) { + return this.fromCompressedHex(bytes); + } + if (len === 65 && header === 0x04) + return this.fromUncompressedHex(bytes); + throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${len}`); + } + static fromPrivateKey(privateKey) { + return Point.BASE.multiply(normalizePrivateKey(privateKey)); + } + static fromSignature(msgHash, signature, recovery) { + msgHash = ensureBytes(msgHash); + const h = truncateHash(msgHash); + const { r, s } = normalizeSignature(signature); + if (recovery !== 0 && recovery !== 1) { + throw new Error('Cannot recover signature: invalid recovery bit'); + } + if (h === _0n) + throw new Error('Cannot recover signature: msgHash cannot be 0'); + const prefix = recovery & 1 ? '03' : '02'; + const R = Point.fromHex(prefix + numTo32bStr(r)); + const { n } = CURVE; + const rinv = invert(r, n); + const u1 = mod(-h * rinv, n); + const u2 = mod(s * rinv, n); + const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); + if (!Q) + throw new Error('Cannot recover signature: point at infinify'); + Q.assertValidity(); + return Q; + } + toRawBytes(isCompressed = false) { + return hexToBytes(this.toHex(isCompressed)); + } + toHex(isCompressed = false) { + const x = numTo32bStr(this.x); + if (isCompressed) { + const prefix = this.y & _1n ? '03' : '02'; + return `${prefix}${x}`; + } + else { + return `04${x}${numTo32bStr(this.y)}`; + } + } + toHexX() { + return this.toHex(true).slice(2); + } + toRawX() { + return this.toRawBytes(true).slice(1); + } + assertValidity() { + const msg = 'Point is not on elliptic curve'; + const { x, y } = this; + if (!isValidFieldElement(x) || !isValidFieldElement(y)) + throw new Error(msg); + const left = mod(y * y); + const right = weistrass(x); + if (mod(left - right) !== _0n) + throw new Error(msg); + } + equals(other) { + return this.x === other.x && this.y === other.y; + } + negate() { + return new Point(this.x, mod(-this.y)); + } + double() { + return JacobianPoint.fromAffine(this).double().toAffine(); + } + add(other) { + return JacobianPoint.fromAffine(this).add(JacobianPoint.fromAffine(other)).toAffine(); + } + subtract(other) { + return this.add(other.negate()); + } + multiply(scalar) { + return JacobianPoint.fromAffine(this).multiply(scalar, this).toAffine(); + } + multiplyAndAddUnsafe(Q, a, b) { + const P = JacobianPoint.fromAffine(this); + const aP = P.multiply(a); + const bQ = JacobianPoint.fromAffine(Q).multiplyUnsafe(b); + const sum = aP.add(bQ); + return sum.equals(JacobianPoint.ZERO) ? undefined : sum.toAffine(); + } +} +Point.BASE = new Point(CURVE.Gx, CURVE.Gy); +Point.ZERO = new Point(_0n, _0n); +function sliceDER(s) { + return Number.parseInt(s[0], 16) >= 8 ? '00' + s : s; +} +function parseDERInt(data) { + if (data.length < 2 || data[0] !== 0x02) { + throw new Error(`Invalid signature integer tag: ${bytesToHex(data)}`); + } + const len = data[1]; + const res = data.subarray(2, len + 2); + if (!len || res.length !== len) { + throw new Error(`Invalid signature integer: wrong length`); + } + if (res[0] === 0x00 && res[1] <= 0x7f) { + throw new Error('Invalid signature integer: trailing length'); + } + return { data: bytesToNumber(res), left: data.subarray(len + 2) }; +} +function parseDERSignature(data) { + if (data.length < 2 || data[0] != 0x30) { + throw new Error(`Invalid signature tag: ${bytesToHex(data)}`); + } + if (data[1] !== data.length - 2) { + throw new Error('Invalid signature: incorrect length'); + } + const { data: r, left: sBytes } = parseDERInt(data.subarray(2)); + const { data: s, left: rBytesLeft } = parseDERInt(sBytes); + if (rBytesLeft.length) { + throw new Error(`Invalid signature: left bytes after parsing: ${bytesToHex(rBytesLeft)}`); + } + return { r, s }; +} +class Signature { + constructor(r, s) { + this.r = r; + this.s = s; + this.assertValidity(); + } + static fromCompact(hex) { + const arr = isUint8a(hex); + const name = 'Signature.fromCompact'; + if (typeof hex !== 'string' && !arr) + throw new TypeError(`${name}: Expected string or Uint8Array`); + const str = arr ? bytesToHex(hex) : hex; + if (str.length !== 128) + throw new Error(`${name}: Expected 64-byte hex`); + return new Signature(hexToNumber(str.slice(0, 64)), hexToNumber(str.slice(64, 128))); + } + static fromDER(hex) { + const arr = isUint8a(hex); + if (typeof hex !== 'string' && !arr) + throw new TypeError(`Signature.fromDER: Expected string or Uint8Array`); + const { r, s } = parseDERSignature(arr ? hex : hexToBytes(hex)); + return new Signature(r, s); + } + static fromHex(hex) { + return this.fromDER(hex); + } + assertValidity() { + const { r, s } = this; + if (!isWithinCurveOrder(r)) + throw new Error('Invalid Signature: r must be 0 < r < n'); + if (!isWithinCurveOrder(s)) + throw new Error('Invalid Signature: s must be 0 < s < n'); + } + hasHighS() { + const HALF = CURVE.n >> _1n; + return this.s > HALF; + } + normalizeS() { + return this.hasHighS() ? new Signature(this.r, CURVE.n - this.s) : this; + } + toDERRawBytes(isCompressed = false) { + return hexToBytes(this.toDERHex(isCompressed)); + } + toDERHex(isCompressed = false) { + const sHex = sliceDER(numberToHexUnpadded(this.s)); + if (isCompressed) + return sHex; + const rHex = sliceDER(numberToHexUnpadded(this.r)); + const rLen = numberToHexUnpadded(rHex.length / 2); + const sLen = numberToHexUnpadded(sHex.length / 2); + const length = numberToHexUnpadded(rHex.length / 2 + sHex.length / 2 + 4); + return `30${length}02${rLen}${rHex}02${sLen}${sHex}`; + } + toRawBytes() { + return this.toDERRawBytes(); + } + toHex() { + return this.toDERHex(); + } + toCompactRawBytes() { + return hexToBytes(this.toCompactHex()); + } + toCompactHex() { + return numTo32bStr(this.r) + numTo32bStr(this.s); + } +} +function concatBytes(...arrays) { + if (!arrays.every(isUint8a)) + throw new Error('Uint8Array list expected'); + if (arrays.length === 1) + return arrays[0]; + const length = arrays.reduce((a, arr) => a + arr.length, 0); + const result = new Uint8Array(length); + for (let i = 0, pad = 0; i < arrays.length; i++) { + const arr = arrays[i]; + result.set(arr, pad); + pad += arr.length; + } + return result; +} +function isUint8a(bytes) { + return bytes instanceof Uint8Array; +} +const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0')); +function bytesToHex(uint8a) { + if (!(uint8a instanceof Uint8Array)) + throw new Error('Expected Uint8Array'); + let hex = ''; + for (let i = 0; i < uint8a.length; i++) { + hex += hexes[uint8a[i]]; + } + return hex; +} +function numTo32bStr(num) { + if (num > POW_2_256) + throw new Error('Expected number < 2^256'); + return num.toString(16).padStart(64, '0'); +} +function numTo32b(num) { + return hexToBytes(numTo32bStr(num)); +} +function numberToHexUnpadded(num) { + const hex = num.toString(16); + return hex.length & 1 ? `0${hex}` : hex; +} +function hexToNumber(hex) { + if (typeof hex !== 'string') { + throw new TypeError('hexToNumber: expected string, got ' + typeof hex); + } + return BigInt(`0x${hex}`); +} +function hexToBytes(hex) { + if (typeof hex !== 'string') { + throw new TypeError('hexToBytes: expected string, got ' + typeof hex); + } + if (hex.length % 2) + throw new Error('hexToBytes: received invalid unpadded hex' + hex.length); + const array = new Uint8Array(hex.length / 2); + for (let i = 0; i < array.length; i++) { + const j = i * 2; + const hexByte = hex.slice(j, j + 2); + const byte = Number.parseInt(hexByte, 16); + if (Number.isNaN(byte) || byte < 0) + throw new Error('Invalid byte sequence'); + array[i] = byte; + } + return array; +} +function bytesToNumber(bytes) { + return hexToNumber(bytesToHex(bytes)); +} +function ensureBytes(hex) { + return hex instanceof Uint8Array ? Uint8Array.from(hex) : hexToBytes(hex); +} +function normalizeScalar(num) { + if (typeof num === 'number' && Number.isSafeInteger(num) && num > 0) + return BigInt(num); + if (typeof num === 'bigint' && isWithinCurveOrder(num)) + return num; + throw new TypeError('Expected valid private scalar: 0 < scalar < curve.n'); +} +function mod(a, b = CURVE.P) { + const result = a % b; + return result >= _0n ? result : b + result; +} +function pow2(x, power) { + const { P } = CURVE; + let res = x; + while (power-- > _0n) { + res *= res; + res %= P; + } + return res; +} +function sqrtMod(x) { + const { P } = CURVE; + const _6n = BigInt(6); + const _11n = BigInt(11); + const _22n = BigInt(22); + const _23n = BigInt(23); + const _44n = BigInt(44); + const _88n = BigInt(88); + const b2 = (x * x * x) % P; + const b3 = (b2 * b2 * x) % P; + const b6 = (pow2(b3, _3n) * b3) % P; + const b9 = (pow2(b6, _3n) * b3) % P; + const b11 = (pow2(b9, _2n) * b2) % P; + const b22 = (pow2(b11, _11n) * b11) % P; + const b44 = (pow2(b22, _22n) * b22) % P; + const b88 = (pow2(b44, _44n) * b44) % P; + const b176 = (pow2(b88, _88n) * b88) % P; + const b220 = (pow2(b176, _44n) * b44) % P; + const b223 = (pow2(b220, _3n) * b3) % P; + const t1 = (pow2(b223, _23n) * b22) % P; + const t2 = (pow2(t1, _6n) * b2) % P; + return pow2(t2, _2n); +} +function invert(number, modulo = CURVE.P) { + if (number === _0n || modulo <= _0n) { + throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`); + } + let a = mod(number, modulo); + let b = modulo; + let x = _0n, u = _1n; + while (a !== _0n) { + const q = b / a; + const r = b % a; + const m = x - u * q; + b = a, a = r, x = u, u = m; + } + const gcd = b; + if (gcd !== _1n) + throw new Error('invert: does not exist'); + return mod(x, modulo); +} +function invertBatch(nums, p = CURVE.P) { + const scratch = new Array(nums.length); + const lastMultiplied = nums.reduce((acc, num, i) => { + if (num === _0n) + return acc; + scratch[i] = acc; + return mod(acc * num, p); + }, _1n); + const inverted = invert(lastMultiplied, p); + nums.reduceRight((acc, num, i) => { + if (num === _0n) + return acc; + scratch[i] = mod(acc * scratch[i], p); + return mod(acc * num, p); + }, inverted); + return scratch; +} +const divNearest = (a, b) => (a + b / _2n) / b; +const POW_2_128 = _2n ** BigInt(128); +function splitScalarEndo(k) { + const { n } = CURVE; + const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15'); + const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3'); + const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8'); + const b2 = a1; + const c1 = divNearest(b2 * k, n); + const c2 = divNearest(-b1 * k, n); + let k1 = mod(k - c1 * a1 - c2 * a2, n); + let k2 = mod(-c1 * b1 - c2 * b2, n); + const k1neg = k1 > POW_2_128; + const k2neg = k2 > POW_2_128; + if (k1neg) + k1 = n - k1; + if (k2neg) + k2 = n - k2; + if (k1 > POW_2_128 || k2 > POW_2_128) { + throw new Error('splitScalarEndo: Endomorphism failed, k=' + k); + } + return { k1neg, k1, k2neg, k2 }; +} +function truncateHash(hash) { + const { n } = CURVE; + const byteLength = hash.length; + const delta = byteLength * 8 - 256; + let h = bytesToNumber(hash); + if (delta > 0) + h = h >> BigInt(delta); + if (h >= n) + h -= n; + return h; +} +class HmacDrbg { + constructor() { + this.v = new Uint8Array(32).fill(1); + this.k = new Uint8Array(32).fill(0); + this.counter = 0; + } + hmac(...values) { + return utils.hmacSha256(this.k, ...values); + } + hmacSync(...values) { + if (typeof utils.hmacSha256Sync !== 'function') + throw new Error('utils.hmacSha256Sync is undefined, you need to set it'); + const res = utils.hmacSha256Sync(this.k, ...values); + if (res instanceof Promise) + throw new Error('To use sync sign(), ensure utils.hmacSha256 is sync'); + return res; + } + incr() { + if (this.counter >= 1000) { + throw new Error('Tried 1,000 k values for sign(), all were invalid'); + } + this.counter += 1; + } + async reseed(seed = new Uint8Array()) { + this.k = await this.hmac(this.v, Uint8Array.from([0x00]), seed); + this.v = await this.hmac(this.v); + if (seed.length === 0) + return; + this.k = await this.hmac(this.v, Uint8Array.from([0x01]), seed); + this.v = await this.hmac(this.v); + } + reseedSync(seed = new Uint8Array()) { + this.k = this.hmacSync(this.v, Uint8Array.from([0x00]), seed); + this.v = this.hmacSync(this.v); + if (seed.length === 0) + return; + this.k = this.hmacSync(this.v, Uint8Array.from([0x01]), seed); + this.v = this.hmacSync(this.v); + } + async generate() { + this.incr(); + this.v = await this.hmac(this.v); + return this.v; + } + generateSync() { + this.incr(); + this.v = this.hmacSync(this.v); + return this.v; + } +} +function isWithinCurveOrder(num) { + return _0n < num && num < CURVE.n; +} +function isValidFieldElement(num) { + return _0n < num && num < CURVE.P; +} +function kmdToSig(kBytes, m, d) { + const k = bytesToNumber(kBytes); + if (!isWithinCurveOrder(k)) + return; + const { n } = CURVE; + const q = Point.BASE.multiply(k); + const r = mod(q.x, n); + if (r === _0n) + return; + const s = mod(invert(k, n) * mod(m + d * r, n), n); + if (s === _0n) + return; + const sig = new Signature(r, s); + const recovery = (q.x === sig.r ? 0 : 2) | Number(q.y & _1n); + return { sig, recovery }; +} +function normalizePrivateKey(key) { + let num; + if (typeof key === 'bigint') { + num = key; + } + else if (typeof key === 'number' && Number.isSafeInteger(key) && key > 0) { + num = BigInt(key); + } + else if (typeof key === 'string') { + if (key.length !== 64) + throw new Error('Expected 32 bytes of private key'); + num = hexToNumber(key); + } + else if (isUint8a(key)) { + if (key.length !== 32) + throw new Error('Expected 32 bytes of private key'); + num = bytesToNumber(key); + } + else { + throw new TypeError('Expected valid private key'); + } + if (!isWithinCurveOrder(num)) + throw new Error('Expected private key: 0 < key < n'); + return num; +} +function normalizePublicKey(publicKey) { + if (publicKey instanceof Point) { + publicKey.assertValidity(); + return publicKey; + } + else { + return Point.fromHex(publicKey); + } +} +function normalizeSignature(signature) { + if (signature instanceof Signature) { + signature.assertValidity(); + return signature; + } + try { + return Signature.fromDER(signature); + } + catch (error) { + return Signature.fromCompact(signature); + } +} +function getPublicKey(privateKey, isCompressed = false) { + return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed); +} +function recoverPublicKey(msgHash, signature, recovery, isCompressed = false) { + return Point.fromSignature(msgHash, signature, recovery).toRawBytes(isCompressed); +} +function isPub(item) { + const arr = isUint8a(item); + const str = typeof item === 'string'; + const len = (arr || str) && item.length; + if (arr) + return len === 33 || len === 65; + if (str) + return len === 66 || len === 130; + if (item instanceof Point) + return true; + return false; +} +function getSharedSecret(privateA, publicB, isCompressed = false) { + if (isPub(privateA)) + throw new TypeError('getSharedSecret: first arg must be private key'); + if (!isPub(publicB)) + throw new TypeError('getSharedSecret: second arg must be public key'); + const b = normalizePublicKey(publicB); + b.assertValidity(); + return b.multiply(normalizePrivateKey(privateA)).toRawBytes(isCompressed); +} +function bits2int(bytes) { + const slice = bytes.length > 32 ? bytes.slice(0, 32) : bytes; + return bytesToNumber(slice); +} +function bits2octets(bytes) { + const z1 = bits2int(bytes); + const z2 = mod(z1, CURVE.n); + return int2octets(z2 < _0n ? z1 : z2); +} +function int2octets(num) { + if (typeof num !== 'bigint') + throw new Error('Expected bigint'); + const hex = numTo32bStr(num); + return hexToBytes(hex); +} +function initSigArgs(msgHash, privateKey, extraEntropy) { + if (msgHash == null) + throw new Error(`sign: expected valid message hash, not "${msgHash}"`); + const h1 = ensureBytes(msgHash); + const d = normalizePrivateKey(privateKey); + const seedArgs = [int2octets(d), bits2octets(h1)]; + if (extraEntropy != null) { + if (extraEntropy === true) + extraEntropy = utils.randomBytes(32); + const e = ensureBytes(extraEntropy); + if (e.length !== 32) + throw new Error('sign: Expected 32 bytes of extra data'); + seedArgs.push(e); + } + const seed = concatBytes(...seedArgs); + const m = bits2int(h1); + return { seed, m, d }; +} +function finalizeSig(recSig, opts) { + let { sig, recovery } = recSig; + const { canonical, der, recovered } = Object.assign({ canonical: true, der: true }, opts); + if (canonical && sig.hasHighS()) { + sig = sig.normalizeS(); + recovery ^= 1; + } + const hashed = der ? sig.toDERRawBytes() : sig.toCompactRawBytes(); + return recovered ? [hashed, recovery] : hashed; +} +function signSync(msgHash, privKey, opts = {}) { + const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy); + let sig; + const drbg = new HmacDrbg(); + drbg.reseedSync(seed); + while (!(sig = kmdToSig(drbg.generateSync(), m, d))) + drbg.reseedSync(); + return finalizeSig(sig, opts); +} +Point.BASE._setWindowSize(8); +const crypto = { + node: nodeCrypto, + web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined, +}; +const utils = { + isValidPrivateKey(privateKey) { + try { + normalizePrivateKey(privateKey); + return true; + } + catch (error) { + return false; + } + }, + hashToPrivateKey: (hash) => { + hash = ensureBytes(hash); + if (hash.length < 40 || hash.length > 1024) + throw new Error('Expected 40-1024 bytes of private key as per FIPS 186'); + const num = mod(bytesToNumber(hash), CURVE.n); + if (num === _0n || num === _1n) + throw new Error('Invalid private key'); + return numTo32b(num); + }, + randomBytes: (bytesLength = 32) => { + if (crypto.web) { + return crypto.web.getRandomValues(new Uint8Array(bytesLength)); + } + else { + throw new Error("The environment doesn't have randomBytes function"); + } + }, + randomPrivateKey: () => { + return utils.hashToPrivateKey(utils.randomBytes(40)); + }, + bytesToHex, + mod, + sha256: async (message) => { + if (crypto.web) { + const buffer = await crypto.web.subtle.digest('SHA-256', message.buffer); + return new Uint8Array(buffer); + } + else { + throw new Error("The environment doesn't have sha256 function"); + } + }, + hmacSha256: async (key, ...messages) => { + if (crypto.web) { + const ckey = await crypto.web.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']); + const message = concatBytes(...messages); + const buffer = await crypto.web.subtle.sign('HMAC', ckey, message); + return new Uint8Array(buffer); + } + else { + throw new Error("The environment doesn't have hmac-sha256 function"); + } + }, + sha256Sync: undefined, + hmacSha256Sync: undefined, + precompute(windowSize = 8, point = Point.BASE) { + const cached = point === Point.BASE ? point : new Point(point.x, point.y); + cached._setWindowSize(windowSize); + cached.multiply(_3n); + return cached; + }, +}; + +var __classPrivateFieldSet$m = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$m = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _SigningKey_privateKey; +// Make noble-secp256k1 sync +utils.hmacSha256Sync = function (key, ...messages) { + return arrayify(computeHmac("sha256", key, concat(messages))); +}; +class SigningKey { + constructor(privateKey) { + _SigningKey_privateKey.set(this, void 0); + logger$4.assertArgument((dataLength(privateKey) === 32), "invalid private key length", "privateKey", "[REDACTED]"); + __classPrivateFieldSet$m(this, _SigningKey_privateKey, hexlify(privateKey), "f"); + } + get privateKey() { return __classPrivateFieldGet$m(this, _SigningKey_privateKey, "f"); } + get publicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet$m(this, _SigningKey_privateKey, "f")); } + get compressedPublicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet$m(this, _SigningKey_privateKey, "f"), true); } + sign(digest) { + logger$4.assertArgument((dataLength(digest) === 32), "invalid digest length", "digest", digest); + const [sigDer, recid] = signSync(arrayify(digest), arrayify(__classPrivateFieldGet$m(this, _SigningKey_privateKey, "f")), { + recovered: true, + canonical: true + }); + const sig = Signature.fromHex(sigDer); + return Signature$1.from({ + r: toHex("0x" + sig.r.toString(16), 32), + s: toHex("0x" + sig.s.toString(16), 32), + v: (recid ? 0x1c : 0x1b) + }).freeze(); + } + computeShardSecret(other) { + const pubKey = SigningKey.computePublicKey(other); + return hexlify(getSharedSecret(arrayify(__classPrivateFieldGet$m(this, _SigningKey_privateKey, "f")), pubKey)); + } + static computePublicKey(key, compressed) { + let bytes = logger$4.getBytes(key, "key"); + if (bytes.length === 32) { + const pubKey = getPublicKey(bytes, !!compressed); + return hexlify(pubKey); + } + if (bytes.length === 64) { + const pub = new Uint8Array(65); + pub[0] = 0x04; + pub.set(bytes, 1); + bytes = pub; + } + const point = Point.fromHex(bytes); + return hexlify(point.toRawBytes(compressed)); + } + static recoverPublicKey(digest, signature) { + const sig = Signature$1.from(signature); + const der = Signature.fromCompact(arrayify(concat([sig.r, sig.s]))).toDERRawBytes(); + const pubKey = recoverPublicKey(arrayify(digest), der, sig.yParity); + if (pubKey != null) { + return hexlify(pubKey); + } + return logger$4.throwArgumentError("invalid signautre for digest", "signature", signature); + } + static _addPoints(p0, p1, compressed) { + const pub0 = Point.fromHex(SigningKey.computePublicKey(p0).substring(2)); + const pub1 = Point.fromHex(SigningKey.computePublicKey(p1).substring(2)); + return "0x" + pub0.add(pub1).toHex(!!compressed); + } +} +_SigningKey_privateKey = new WeakMap(); +/* +const key = new SigningKey("0x1234567890123456789012345678901234567890123456789012345678901234"); +console.log(key); +console.log(key.sign("0x1234567890123456789012345678901234567890123456789012345678901234")); +{ + const privKey = "0x1234567812345678123456781234567812345678123456781234567812345678"; + const signingKey = new SigningKey(privKey); + console.log("0", signingKey, signingKey.publicKey, signingKey.publicKeyCompressed); + + let pubKey = SigningKey.computePublicKey(privKey); + let pubKeyComp = SigningKey.computePublicKey(privKey, true); + let pubKeyRaw = "0x" + SigningKey.computePublicKey(privKey).substring(4); + console.log("A", pubKey, pubKeyComp); + + let a = SigningKey.computePublicKey(pubKey); + let b = SigningKey.computePublicKey(pubKey, true); + console.log("B", a, b); + + a = SigningKey.computePublicKey(pubKeyComp); + b = SigningKey.computePublicKey(pubKeyComp, true); + console.log("C", a, b); + + a = SigningKey.computePublicKey(pubKeyRaw); + b = SigningKey.computePublicKey(pubKeyRaw, true); + console.log("D", a, b); + + const digest = "0x1122334411223344112233441122334411223344112233441122334411223344"; + const sig = signingKey.sign(digest); + console.log("SS", sig, sig.r, sig.s, sig.yParity); + + console.log("R", SigningKey.recoverPublicKey(digest, sig)); +} +*/ + +function accessSetify(addr, storageKeys) { + return { + address: getAddress(addr), + storageKeys: (storageKeys || []).map((storageKey, index) => { + if (dataLength(storageKey) !== 32) { + //logger.throwArgumentError("invalid access list storageKey", `accessList[${ addr }> + throw new Error(""); + } + return storageKey.toLowerCase(); + }) + }; +} +function accessListify(value) { + if (Array.isArray(value)) { + return value.map((set, index) => { + if (Array.isArray(set)) { + if (set.length > 2) { + //logger.throwArgumentError("access list expected to be [ address, storageKeys[> + throw new Error(""); + } + return accessSetify(set[0], set[1]); + } + return accessSetify(set.address, set.storageKeys); + }); + } + const result = Object.keys(value).map((addr) => { + const storageKeys = value[addr].reduce((accum, storageKey) => { + accum[storageKey] = true; + return accum; + }, {}); + return accessSetify(addr, Object.keys(storageKeys).sort()); + }); + result.sort((a, b) => (a.address.localeCompare(b.address))); + return result; +} + +const version$4 = "@ethersproject/transactions@6.0.0-beta.1"; + +const logger$3 = new Logger(version$4); + +var __classPrivateFieldSet$l = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$l = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Transaction_props; +const BN_0 = BigInt(0); +function formatNumber(_value, name) { + const value = logger$3.getBigInt(_value, "value"); + const result = toArray(value); + if (result.length > 32) { + logger$3.throwArgumentError(`value too large`, `tx.${name}`, value); + } + return result; +} +function formatAccessList(value) { + return accessListify(value).map((set) => [set.address, set.storageKeys]); +} +function _parseLegacy(data) { + return {}; +} +function _serializeLegacy(tx, sig) { + const fields = [ + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.gasPrice || 0, "gasPrice"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to) : "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + ]; + let chainId = BN_0; + if (tx.chainId != null) { + // A chainId was provided; if non-zero we'll use EIP-155 + chainId = logger$3.getBigInt(tx.chainId, "tx.chainId"); + // We have a chainId in the tx and an EIP-155 v in the signature, + // make sure they agree with each other + if (sig && sig.networkV != null && sig.legacyChainId !== chainId) { + logger$3.throwArgumentError("tx.chainId/sig.v mismatch", "sig", sig); + } + } + else if (sig) { + // No chainId provided, but the signature is signing with EIP-155; derive chainId + const legacy = sig.legacyChainId; + if (legacy != null) { + chainId = legacy; + } + } + // Requesting an unsigned transaction + if (!sig) { + // We have an EIP-155 transaction (chainId was specified and non-zero) + if (chainId !== BN_0) { + fields.push(toArray(chainId)); + fields.push("0x"); + fields.push("0x"); + } + return encodeRlp(fields); + } + // We pushed a chainId and null r, s on for hashing only; remove those + let v = BigInt(27 + sig.yParity); + if (chainId !== BN_0) { + v = Signature$1.getChainIdV(chainId, sig.v); + } + else if (BigInt(sig.v) !== v) { + logger$3.throwArgumentError("tx.chainId/sig.v mismatch", "sig", sig); + } + fields.push(toArray(v)); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + return encodeRlp(fields); +} +function _parseEip1559(data) { + throw new Error("@TODO"); +} +function _serializeEip1559(tx, sig) { + // If there is an explicit gasPrice, make sure it matches the + // EIP-1559 fees; otherwise they may not understand what they + // think they are setting in terms of fee. + //if (tx.gasPrice != null) { + // if (tx.gasPrice !== (tx.maxFeePerGas || BN_0)) { + // logger.throwArgumentError("mismatch EIP-1559 gasPrice != maxFeePerGas", "tx", tx); + // } + //} + const fields = [ + formatNumber(tx.chainId || 0, "chainId"), + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.maxPriorityFeePerGas || 0, "maxPriorityFeePerGas"), + formatNumber(tx.maxFeePerGas || 0, "maxFeePerGas"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to) : "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + (formatAccessList(tx.accessList || [])) + ]; + if (sig) { + fields.push(formatNumber(sig.yParity, "yParity")); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + } + return concat(["0x02", encodeRlp(fields)]); +} +function _parseEip2930(data) { + throw new Error("@TODO"); +} +function _serializeEip2930(tx, sig) { + const fields = [ + formatNumber(tx.chainId || 0, "chainId"), + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.gasPrice || 0, "gasPrice"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to) : "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + (formatAccessList(tx.accessList || [])) + ]; + if (sig) { + fields.push(formatNumber(sig.yParity, "recoveryParam")); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + } + return concat(["0x01", encodeRlp(fields)]); +} +class Transaction { + constructor() { + _Transaction_props.set(this, void 0); + __classPrivateFieldSet$l(this, _Transaction_props, { + type: null, + to: null, + nonce: 0, + gasLimit: BigInt(0), + gasPrice: null, + maxPriorityFeePerGas: null, + maxFeePerGas: null, + data: "0x", + value: BigInt(0), + chainId: BigInt(0), + sig: null, + accessList: null + }, "f"); + } + // A type of null indicates the type will be populated automatically + get type() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "type"); } + get typeName() { + switch (this.type) { + case 0: return "legacy"; + case 1: return "eip-2930"; + case 2: return "eip-1559"; + } + return null; + } + set type(value) { + switch (value) { + case null: + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "type", null); + break; + case 0: + case "legacy": + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "type", 0); + break; + case 1: + case "berlin": + case "eip-2930": + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "type", 1); + break; + case 2: + case "london": + case "eip-1559": + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "type", 2); + break; + default: + throw new Error(`unsupported transaction type`); + } + } + /* + detectType(): number { + const hasFee = (this.maxFeePerGas != null) || (this.maxPriorityFeePerGas != null); + const hasAccessList = (this.accessList != null); + const hasLegacy = (this.gasPrice != null); + + if (hasLegacy) { + if (hasFee) { + throw new Error("cannot mix legacy and london properties"); + } + if (hasAccessList) { return 1; } + return 0; + } + + return 2; + } + */ + get to() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "to"); } + set to(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "to", (value == null) ? null : getAddress(value)); + } + get nonce() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "nonce"); } + set nonce(value) { setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "nonce", logger$3.getNumber(value, "value")); } + get gasLimit() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "gasLimit"); } + set gasLimit(value) { setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "gasLimit", logger$3.getBigInt(value)); } + get gasPrice() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "gasPrice"); } + set gasPrice(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "gasPrice", (value == null) ? null : logger$3.getBigInt(value)); + } + get maxPriorityFeePerGas() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "maxPriorityFeePerGas"); } + set maxPriorityFeePerGas(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "maxPriorityFeePerGas", (value == null) ? null : logger$3.getBigInt(value)); + } + get maxFeePerGas() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "maxFeePerGas"); } + set maxFeePerGas(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "maxFeePerGas", (value == null) ? null : logger$3.getBigInt(value)); + } + get data() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "data"); } + set data(value) { setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "data", hexlify(value)); } + get value() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "value"); } + set value(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "value", logger$3.getBigInt(value)); + } + get chainId() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "chainId"); } + set chainId(value) { setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "chainId", logger$3.getBigInt(value)); } + get signature() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "sig") || null; } + set signature(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "sig", (value == null) ? null : Signature$1.from(value)); + } + get accessList() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "accessList") || null; } + set accessList(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "accessList", (value == null) ? null : accessListify(value)); + } + get hash() { + if (this.signature == null) { + throw new Error("cannot hash unsigned transaction; maybe you meant .unsignedHash"); + } + return keccak256(this.serialized); + } + get unsignedHash() { + return keccak256(this.unsignedSerialized); + } + get from() { + if (this.signature == null) { + return null; + } + // use ecomputeAddress(this.fromPublicKey); + return ""; + } + get fromPublicKey() { + if (this.signature == null) { + return null; + } + // use ecrecover + return ""; + } + isSigned() { + return this.signature != null; + } + get serialized() { + if (this.signature == null) { + throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized"); + } + const types = this.inferTypes(); + if (types.length !== 1) { + throw new Error("cannot determine transaction type; specify type manually"); + } + switch (types[0]) { + case 0: + return _serializeLegacy(this, this.signature); + case 1: + return _serializeEip2930(this, this.signature); + case 2: + return _serializeEip1559(this, this.signature); + } + throw new Error("unsupported type"); + } + get unsignedSerialized() { + if (this.signature != null) { + throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized"); + } + const types = this.inferTypes(); + if (types.length !== 1) { + throw new Error("cannot determine transaction type; specify type manually"); + } + switch (types[0]) { + case 0: + return _serializeLegacy(this); + case 1: + return _serializeEip2930(this); + case 2: + return _serializeEip1559(this); + } + throw new Error("unsupported type"); + } + // Validates properties and lists possible types this transaction adheres to + inferTypes() { + // Checks that there are no conflicting properties set + const hasGasPrice = this.gasPrice != null; + const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null); + const hasAccessList = (this.accessList != null); + //if (hasGasPrice && hasFee) { + // throw new Error("transaction cannot have gasPrice and maxFeePerGas"); + //} + if (!!this.maxFeePerGas && !!this.maxPriorityFeePerGas) { + if (this.maxFeePerGas < this.maxPriorityFeePerGas) { + throw new Error("priorityFee cannot be more than maxFee"); + } + } + //if (this.type === 2 && hasGasPrice) { + // throw new Error("eip-1559 transaction cannot have gasPrice"); + //} + if ((this.type === 0 || this.type === 1) && hasFee) { + throw new Error("transaction type cannot have maxFeePerGas or maxPriorityFeePerGas"); + } + if (this.type === 0 && hasAccessList) { + throw new Error("legacy transaction cannot have accessList"); + } + const types = []; + // Explicit type + if (this.type != null) { + types.push(this.type); + } + else { + if (hasFee) { + types.push(2); + } + else if (hasGasPrice) { + types.push(1); + if (!hasAccessList) { + types.push(0); + } + } + else if (hasAccessList) { + types.push(1); + types.push(2); + } + else { + types.push(0); + types.push(1); + types.push(2); + } + } + types.sort(); + return types; + } + clone() { + return Transaction.from(this); + } + freeze() { + if (__classPrivateFieldGet$l(this, _Transaction_props, "f").sig) { + __classPrivateFieldGet$l(this, _Transaction_props, "f").sig = (__classPrivateFieldGet$l(this, _Transaction_props, "f").sig.clone().freeze()); + } + if (__classPrivateFieldGet$l(this, _Transaction_props, "f").accessList) { + __classPrivateFieldGet$l(this, _Transaction_props, "f").accessList = Object.freeze(__classPrivateFieldGet$l(this, _Transaction_props, "f").accessList.map((set) => { + Object.freeze(set.storageKeys); + return Object.freeze(set); + })); + } + Object.freeze(__classPrivateFieldGet$l(this, _Transaction_props, "f")); + return this; + } + isFrozen() { + return Object.isFrozen(__classPrivateFieldGet$l(this, _Transaction_props, "f")); + } + static from(tx) { + if (typeof (tx) === "string") { + const payload = arrayify(tx); + if (payload[0] >= 0x7f) { // @TODO: > vs >= ?? + return Transaction.from(_parseLegacy()); + } + switch (payload[0]) { + case 1: return Transaction.from(_parseEip2930(payload.slice(1))); + case 2: return Transaction.from(_parseEip1559(payload.slice(1))); + } + throw new Error("unsupported transaction type"); + } + const result = new Transaction(); + if (tx.type != null) { + result.type = tx.type; + } + if (tx.to != null) { + result.to = tx.to; + } + if (tx.nonce != null) { + result.nonce = tx.nonce; + } + if (tx.gasLimit != null) { + result.gasLimit = tx.gasLimit; + } + if (tx.gasPrice != null) { + result.gasPrice = tx.gasPrice; + } + if (tx.maxPriorityFeePerGas != null) { + result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas; + } + if (tx.maxFeePerGas != null) { + result.maxFeePerGas = tx.maxFeePerGas; + } + if (tx.data != null) { + result.data = tx.data; + } + if (tx.value != null) { + result.value = tx.value; + } + if (tx.chainId != null) { + result.chainId = tx.chainId; + } + if (tx.signature != null) { + result.signature = Signature$1.from(tx.signature); + } + if (tx.accessList != null) { + result.accessList = tx.accessList; + } + // Should these be checked?? Should from be allowed if there is no signature? + // from?: null | A; + // hash?: null | string; + return result; + } +} +_Transaction_props = new WeakMap(); + +var __classPrivateFieldSet$k = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$k = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Block_transactions, _TransactionReceipt_logs; +// ----------------------- +function getValue(value) { + if (value == null) { + return null; + } + return value; +} +function toJson(value) { + if (value == null) { + return null; + } + return value.toString(); +} +// @TODO? implements Required +class FeeData { + constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) { + defineProperties(this, { + gasPrice: getValue(gasPrice), + maxFeePerGas: getValue(maxFeePerGas), + maxPriorityFeePerGas: getValue(maxPriorityFeePerGas) + }); + } + toJSON() { + const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this; + return { + _type: "FeeData", + gasPrice: toJson(gasPrice), + maxFeePerGas: toJson(maxFeePerGas), + maxPriorityFeePerGas: toJson(maxPriorityFeePerGas), + }; + } +} +function copyRequest$1(req) { + const result = {}; + // These could be addresses, ENS names or Addressables + if (req.to) { + result.to = req.to; + } + if (req.from) { + result.from = req.from; + } + if (req.data) { + result.data = hexlify(req.data); + } + const bigIntKeys = "chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value".split(/,/); + for (const key in bigIntKeys) { + if (!(key in req) || req[key] == null) { + continue; + } + result[key] = logger$5.getBigInt(req[key], `request.${key}`); + } + const numberKeys = "type,nonce".split(/,/); + for (const key in numberKeys) { + if (!(key in req) || req[key] == null) { + continue; + } + result[key] = logger$5.getNumber(req[key], `request.${key}`); + } + if (req.accessList) { + result.accessList = accessListify(req.accessList); + } + if ("blockTag" in req) { + result.blockTag = req.blockTag; + } + if ("enableCcipRead" in req) { + result.enableCcipReadEnabled = !!req.enableCcipRead; + } + if ("customData" in req) { + result.customData = req.customData; + } + return result; +} +class Block { + constructor(block, provider) { + _Block_transactions.set(this, void 0); + if (provider == null) { + provider = dummyProvider; + } + __classPrivateFieldSet$k(this, _Block_transactions, Object.freeze(block.transactions.map((tx) => { + if (typeof (tx) !== "string" && tx.provider !== provider) { + throw new Error("provider mismatch"); + } + return tx; + })), "f"); + defineProperties(this, { + provider, + hash: getValue(block.hash), + number: block.number, + timestamp: block.timestamp, + parentHash: block.parentHash, + nonce: block.nonce, + difficulty: block.difficulty, + gasLimit: block.gasLimit, + gasUsed: block.gasUsed, + miner: block.miner, + extraData: block.extraData, + baseFeePerGas: getValue(block.baseFeePerGas) + }); + } + get transactions() { return __classPrivateFieldGet$k(this, _Block_transactions, "f"); } + //connect(provider: Provider): Block { + // return new Block(this, provider); + //} + toJSON() { + const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, nonce, number, parentHash, timestamp, transactions } = this; + return { + _type: "Block", + baseFeePerGas: toJson(baseFeePerGas), + difficulty: toJson(difficulty), + extraData, + gasLimit: toJson(gasLimit), + gasUsed: toJson(gasUsed), + hash, miner, nonce, number, parentHash, timestamp, + transactions, + }; + } + [(_Block_transactions = new WeakMap(), Symbol.iterator)]() { + let index = 0; + return { + next: () => { + if (index < this.length) { + return { + value: this.transactions[index++], done: false + }; + } + return { value: undefined, done: true }; + } + }; + } + get length() { return this.transactions.length; } + get date() { + if (this.timestamp == null) { + return null; + } + return new Date(this.timestamp * 1000); + } + async getTransaction(index) { + const tx = this.transactions[index]; + if (tx == null) { + throw new Error("no such tx"); + } + if (typeof (tx) === "string") { + return (await this.provider.getTransaction(tx)); + } + else { + return tx; + } + } + isMined() { return !!this.hash; } + isLondon() { return !!this.baseFeePerGas; } + orphanedEvent() { + if (!this.isMined()) { + throw new Error(""); + } + return createOrphanedBlockFilter(this); + } +} +class Log { + constructor(log, provider) { + if (provider == null) { + provider = dummyProvider; + } + this.provider = provider; + const topics = Object.freeze(log.topics.slice()); + defineProperties(this, { + transactionHash: log.transactionHash, + blockHash: log.blockHash, + blockNumber: log.blockNumber, + removed: log.removed, + address: log.address, + data: log.data, + topics, + index: log.index, + transactionIndex: log.transactionIndex, + }); + } + //connect(provider: Provider): Log { + // return new Log(this, provider); + //} + toJSON() { + const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this; + return { + _type: "log", + address, blockHash, blockNumber, data, index, + removed, topics, transactionHash, transactionIndex + }; + } + async getBlock() { + return (await this.provider.getBlock(this.blockHash)); + } + async getTransaction() { + return (await this.provider.getTransaction(this.transactionHash)); + } + async getTransactionReceipt() { + return (await this.provider.getTransactionReceipt(this.transactionHash)); + } + removedEvent() { + return createRemovedLogFilter(this); + } +} +class TransactionReceipt { + constructor(tx, provider) { + _TransactionReceipt_logs.set(this, void 0); + if (provider == null) { + provider = dummyProvider; + } + __classPrivateFieldSet$k(this, _TransactionReceipt_logs, Object.freeze(tx.logs.map((log) => { + if (provider !== log.provider) { + //return log.connect(provider); + throw new Error("provider mismatch"); + } + return log; + })), "f"); + defineProperties(this, { + provider, + to: tx.to, + from: tx.from, + contractAddress: tx.contractAddress, + hash: tx.hash, + index: tx.index, + blockHash: tx.blockHash, + blockNumber: tx.blockNumber, + logsBloom: tx.logsBloom, + gasUsed: tx.gasUsed, + cumulativeGasUsed: tx.cumulativeGasUsed, + gasPrice: (tx.effectiveGasPrice || tx.gasPrice), + byzantium: tx.byzantium, + status: tx.status, + root: tx.root + }); + } + get logs() { return __classPrivateFieldGet$k(this, _TransactionReceipt_logs, "f"); } + //connect(provider: Provider): TransactionReceipt { + // return new TransactionReceipt(this, provider); + //} + toJSON() { + const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, byzantium, status, root } = this; + return { + _type: "TransactionReceipt", + blockHash, blockNumber, byzantium, contractAddress, + cumulativeGasUsed: toJson(this.cumulativeGasUsed), + from, + gasPrice: toJson(this.gasPrice), + gasUsed: toJson(this.gasUsed), + hash, index, logs, logsBloom, root, status, to + }; + } + get length() { return this.logs.length; } + [(_TransactionReceipt_logs = new WeakMap(), Symbol.iterator)]() { + let index = 0; + return { + next: () => { + if (index < this.length) { + return { value: this.logs[index++], done: false }; + } + return { value: undefined, done: true }; + } + }; + } + get fee() { + return this.gasUsed * this.gasPrice; + } + async getBlock() { + const block = await this.provider.getBlock(this.blockHash); + if (block == null) { + throw new Error("TODO"); + } + return block; + } + async getTransaction() { + const tx = await this.provider.getTransaction(this.hash); + if (tx == null) { + throw new Error("TODO"); + } + return tx; + } + async confirmations() { + return (await this.provider.getBlockNumber()) - this.blockNumber + 1; + } + removedEvent() { + return createRemovedTransactionFilter(this); + } + reorderedEvent(other) { + if (other && !other.isMined()) { + return logger$5.throwError("unmined 'other' transction cannot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "reorderedEvent(other)" + }); + } + return createReorderedTransactionFilter(this, other); + } +} +class TransactionResponse { + constructor(tx, provider) { + if (provider == null) { + provider = dummyProvider; + } + this.provider = provider; + this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null; + this.blockHash = (tx.blockHash != null) ? tx.blockHash : null; + this.hash = tx.hash; + this.index = tx.index; + this.type = tx.type; + this.from = tx.from; + this.to = tx.to || null; + this.gasLimit = tx.gasLimit; + this.nonce = tx.nonce; + this.data = tx.data; + this.value = tx.value; + this.gasPrice = tx.gasPrice; + this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null; + this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null; + this.chainId = tx.chainId; + this.signature = tx.signature; + this.accessList = (tx.accessList != null) ? tx.accessList : null; + } + //connect(provider: Provider): TransactionResponse { + // return new TransactionResponse(this, provider); + //} + toJSON() { + const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList } = this; + return { + _type: "TransactionReceipt", + accessList, blockNumber, blockHash, + chainId: toJson(this.chainId), + data, from, + gasLimit: toJson(this.gasLimit), + gasPrice: toJson(this.gasPrice), + hash, + maxFeePerGas: toJson(this.maxFeePerGas), + maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas), + nonce, signature, to, index, type, + value: toJson(this.value), + }; + } + async getBlock() { + let blockNumber = this.blockNumber; + if (blockNumber == null) { + const tx = await this.getTransaction(); + if (tx) { + blockNumber = tx.blockNumber; + } + } + if (blockNumber == null) { + return null; + } + const block = this.provider.getBlock(blockNumber); + if (block == null) { + throw new Error("TODO"); + } + return block; + } + async getTransaction() { + return this.provider.getTransaction(this.hash); + } + async wait(confirms) { + return this.provider.waitForTransaction(this.hash, confirms); + } + isMined() { + return (this.blockHash != null); + } + isLegacy() { + return (this.type === 0); + } + isBerlin() { + return (this.type === 1); + } + isLondon() { + return (this.type === 2); + } + removedEvent() { + if (!this.isMined()) { + return logger$5.throwError("unmined transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" + }); + } + return createRemovedTransactionFilter(this); + } + reorderedEvent(other) { + if (!this.isMined()) { + return logger$5.throwError("unmined transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" + }); + } + if (other && !other.isMined()) { + return logger$5.throwError("unmined 'other' transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" + }); + } + return createReorderedTransactionFilter(this, other); + } +} +function createOrphanedBlockFilter(block) { + return { orphan: "drop-block", hash: block.hash, number: block.number }; +} +function createReorderedTransactionFilter(tx, other) { + return { orphan: "reorder-transaction", tx, other }; +} +function createRemovedTransactionFilter(tx) { + return { orphan: "drop-transaction", tx }; +} +function createRemovedLogFilter(log) { + return { orphan: "drop-log", log: { + transactionHash: log.transactionHash, + blockHash: log.blockHash, + blockNumber: log.blockNumber, + address: log.address, + data: log.data, + topics: Object.freeze(log.topics.slice()), + index: log.index + } }; +} +function fail() { + throw new Error("this provider should not be used"); +} +class DummyProvider { + async getNetwork() { return fail(); } + async getFeeData() { return fail(); } + async estimateGas(tx) { return fail(); } + async call(tx) { return fail(); } + async resolveName(name) { return fail(); } + // State + async getBlockNumber() { return fail(); } + // Account + async getBalanceOf(address, blockTag) { + return fail(); + } + async getTransactionCountOf(address, blockTag) { + return fail(); + } + async getCode(address, blockTag) { + return fail(); + } + async getStorageAt(address, position, blockTag) { + return fail(); + } + // Write + async broadcastTransaction(signedTx) { return fail(); } + // Queries + async getBlock(blockHashOrBlockTag) { + return fail(); + } + async getBlockWithTransactions(blockHashOrBlockTag) { + return fail(); + } + async getTransaction(hash) { + return fail(); + } + async getTransactionReceipt(hash) { + return fail(); + } + // Bloom-filter Queries + async getLogs(filter) { + return fail(); + } + // ENS + async lookupAddress(address) { + return fail(); + } + async waitForTransaction(hash, confirms, timeout) { + return fail(); + } + async waitForBlock(blockTag) { + return fail(); + } + // EventEmitterable + async on(event, listener) { return fail(); } + async once(event, listener) { return fail(); } + async emit(event, ...args) { return fail(); } + async listenerCount(event) { return fail(); } + async listeners(event) { return fail(); } + async off(event, listener) { return fail(); } + async removeAllListeners(event) { return fail(); } + async addListener(event, listener) { return fail(); } + async removeListener(event, listener) { return fail(); } +} +// A singleton provider instance that can be used as a placeholder. This +// allows API that have a Provider added later to not require a null check. +const dummyProvider = new DummyProvider(); + +// Belongs to Networks; requires abstract-provider +// provider requires abstract-provider and network +var __classPrivateFieldSet$j = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$j = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Formatter_format, _Formatter_baseBlock; +const BN_MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); +//export type AccessListSet = { address: string, storageKeys: Array }; +//export type AccessList = Array; +//export type AccessListish = AccessList | +// Array<[ string, Array ]> | +// Record>; +function stringify(value) { + if (typeof (value) !== "string") { + throw new Error("invalid string"); + } + return value; +} +class Formatter { + constructor() { + _Formatter_format.set(this, void 0); + _Formatter_baseBlock.set(this, void 0); + const address = this.address.bind(this); + const bigNumber = this.bigNumber.bind(this); + const blockTag = this.blockTag.bind(this); + const data = this.data.bind(this); + const hash = this.hash.bind(this); + const number = this.number.bind(this); + const uint256 = this.uint256.bind(this); + const topics = this.arrayOf(hash); + __classPrivateFieldSet$j(this, _Formatter_format, { + address, + bigNumber, + blockTag, + data, + hash, + number, + uint256, + topics, + filter: this.object({ + fromBlock: this.allowNull(blockTag, undefined), + toBlock: this.allowNull(blockTag, undefined), + blockHash: this.allowNull(hash, undefined), + address: this.allowNull(address, undefined), + topics: this.allowNull(topics, undefined) + }), + transactionRequest: this.object({ + from: this.allowNull(address), + type: this.allowNull(number), + to: this.allowNull(address), + nonce: this.allowNull(number), + gasLimit: this.allowNull(uint256), + gasPrice: this.allowNull(uint256), + maxFeePerGas: this.allowNull(uint256), + maxPriorityFeePerGas: this.allowNull(uint256), + data: this.allowNull(data), + value: this.allowNull(uint256), + }), + transactionResponse: this.object({ + hash: hash, + index: number, + type: this.allowNull(number, 0), + // These can be null for pending blocks + blockHash: this.allowNull(hash), + blockNumber: this.allowNull(number), + // For Legacy transactions, this comes from the v + chainId: this.allowNull(number), + from: address, + to: this.address, + gasLimit: bigNumber, + gasPrice: this.allowNull(bigNumber), + maxFeePerGas: this.allowNull(bigNumber), + maxPriorityFeePerGas: this.allowNull(bigNumber), + value: bigNumber, + data: data, + nonce: number, + r: hash, + s: hash, + v: number, + accessList: this.allowNull(this.accessList) + }, { + index: ["transactionIndex"] + }), + }, "f"); + __classPrivateFieldSet$j(this, _Formatter_baseBlock, this.object({ + number: number, + hash: this.allowNull(hash, null), + timestamp: number, + parentHash: hash, + nonce: this.allowNull(stringify, "0x0000000000000000"), + difficulty: bigNumber, + gasLimit: bigNumber, + gasUsed: bigNumber, + miner: this.allowNull(address, "0x0000000000000000000000000000000000000000"), + extraData: stringify, + baseFeePerGas: this.allowNull(bigNumber), + }), "f"); + } + // An address + address(value) { + return getAddress(value); + } + // An address from a call result; may be zero-padded + callAddress(value) { + if (dataLength(value) !== 32 || dataSlice(value, 0, 12) !== "0x000000000000000000000000") { + logger$5.throwArgumentError("invalid call address", "value", value); + } + return this.address(dataSlice(value, 12)); + } + // An address from a transaction (e.g. { from: string, nonce: number }) + contractAddress(value) { + return getCreateAddress({ + from: this.address(value.from), + nonce: logger$5.getNumber(value.nonce, "value.nonce") + }); + } + // Block Tag + blockTag(value) { + if (value == null) { + return "latest"; + } + switch (value) { + case "earliest": + return "0x0"; + case "latest": + case "pending": + return value; + } + if (typeof (value) === "number" || (isHexString(value) && dataLength(value) < 32)) { + return quantity(value); + } + return logger$5.throwArgumentError("invalid blockTag", "value", value); + } + // Block objects + block(value, provider) { + const params = __classPrivateFieldGet$j(this, _Formatter_baseBlock, "f").call(this, value); + params.transactions = value.transactions.map((t) => this.hash(t)); + return new Block(params, provider); + } + blockWithTransactions(value, provider) { + throw new Error(); + } + // Transactions + transactionRequest(value, provider) { + return __classPrivateFieldGet$j(this, _Formatter_format, "f").transactionRequest(value); + } + transactionResponse(value, provider) { + value = Object.assign({}, value); + // @TODO: Use the remap feature + if (value.data == null && value.input != null) { + value.data = value.input; + } + if (value.gasLimit == null && value.gas) { + value.gasLimit = value.gas; + } + value = __classPrivateFieldGet$j(this, _Formatter_format, "f").transactionResponse(value); + const sig = Signature$1.fromTransaction(value.r, value.s, value.v); + value.signature = sig; + if (value.chainId == null) { + value.chainId = sig.legacyChainId; + } + return new TransactionResponse(value, provider); + } + // Receipts + log(value, provider) { + const log = this.object({ + address: this.address, + blockHash: this.hash, + blockNumber: this.number, + data: this.data, + index: this.number, + removed: this.boolean, + topics: this.topics, + transactionHash: this.hash, + transactionIndex: this.number, + }, { + index: ["logIndex"] + })(value); + return new Log(log, provider); + } + receipt(value, provider) { + const receipt = this.object({ + blockHash: this.hash, + blockNumber: this.number, + contractAddress: this.allowNull(this.address), + cumulativeGasUsed: this.bigNumber, + from: this.address, + gasUsed: this.bigNumber, + logs: this.arrayOf((v) => (this.log(v, provider))), + logsBloom: this.data, + root: this.allowNull(this.data), + status: this.allowNull(this.number), + to: this.address, + gasPrice: this.allowNull(this.bigNumber), + hash: this.hash, + index: this.number, + type: this.allowNull(this.number, 0), + }, { + hash: ["transactionHash"], + gasPrice: ["effectiveGasPrice"], + index: ["transactionIndex"] + })(value); + // RSK incorrectly implemented EIP-658, so we munge things a bit here for it + if (receipt.root != null) { + if (receipt.root.length <= 4) { + // Could be 0x00, 0x0, 0x01 or 0x1 + const value = parseInt(receipt.root); + if (value === 0 || value === 1) { + // Make sure if both are specified, they match + if (receipt.status != null && receipt.status !== value) { + return logger$5.throwError("alt-root-status/status mismatch", "BAD_DATA", { + value: { root: receipt.root, status: receipt.status } + }); + } + receipt.status = value; + delete receipt.root; + } + else { + return logger$5.throwError("invalid alt-root-status", "BAD_DATA", { + value: receipt.root + }); + } + } + else if (!isHexString(receipt.root, 32)) { + // Must be a valid bytes32 + return logger$5.throwError("invalid receipt root hash", "BAD_DATA", { + value: receipt.root + }); + } + } + //receipt.byzantium = (receipt.root == null); + return new TransactionReceipt(receipt, provider); + } + // Fitlers + topics(value) { + return __classPrivateFieldGet$j(this, _Formatter_format, "f").topics(value); + } + filter(value) { + return __classPrivateFieldGet$j(this, _Formatter_format, "f").filter(value); + } + filterLog(value) { + console.log("ME", value); + return null; + } + // Converts a serialized transaction to a TransactionResponse + transaction(value) { + throw new Error(); + } + // Useful utility formatters functions, which if need be use the + // methods within the formatter to ensure internal compatibility + // Access List; converts an AccessListish to an AccessList + accessList(value) { + return accessListify(value); + } + // Converts falsish values to a specific value, otherwise use the formatter. Calls preserve `this`. + allowFalsish(format, ifFalse) { + return ((value) => { + if (!value) { + return ifFalse; + } + return format.call(this, value); + }); + } + // Allows null, optionally replacing it with a default value. Calls preserve `this`. + allowNull(format, ifNull) { + return ((value) => { + if (value == null) { + return ifNull; + } + return format.call(this, value); + }); + } + // Requires an Array satisfying the formatter. Calls preserves `this`. + arrayOf(format) { + return ((array) => { + if (!Array.isArray(array)) { + throw new Error("not an array"); + } + return array.map((i) => format.call(this, i)); + }); + } + // Requires a value which is a value BigNumber + bigNumber(value) { + return logger$5.getBigInt(value, "value"); + } + uint256(value) { + const result = this.bigNumber(value); + if (result < 0 || result > BN_MAX_UINT256) { + logger$5.throwArgumentError("invalid uint256", "value", value); + } + return result; + } + // Requires a value which is a value boolean or string equivalent + boolean(value) { + switch (value) { + case true: + case "true": + return true; + case false: + case "false": + return false; + } + return logger$5.throwArgumentError(`invalid boolean; ${JSON.stringify(value)}`, "value", value); + } + // Requires a value which is a valid hexstring. If dataOrLength is true, + // the length must be even (i.e. a datahexstring) or if it is a number, + // specifies teh number of bytes value must represent + _hexstring(dataOrLength) { + if (dataOrLength == null) { + dataOrLength = false; + } + return (function (value) { + if (isHexString(value, dataOrLength)) { + return value.toLowerCase(); + } + throw new Error("bad hexstring"); + }); + } + data(value) { + if (dataLength(value) == null) { + logger$5.throwArgumentError("", "value", value); + } + return value; + } + // Requires a network-native hash + hash(value) { + if (dataLength(value) !== 32) { + logger$5.throwArgumentError("", "value", value); + } + return __classPrivateFieldGet$j(this, _Formatter_format, "f").data(value); + } + // Requires a valid number, within the IEEE 754 safe range + number(value) { + return logger$5.getNumber(value); + } + // Requires an object which matches a fleet of other formatters + // Any FormatFunc may return `undefined` to have the value omitted + // from the result object. Calls preserve `this`. + object(format, altNames) { + return ((value) => { + const result = {}; + for (const key in format) { + let srcKey = key; + if (altNames && key in altNames && !(srcKey in value)) { + for (const altKey of altNames[key]) { + if (altKey in value) { + srcKey = altKey; + break; + } + } + } + try { + const nv = format[key].call(this, value[srcKey]); + if (nv !== undefined) { + result[key] = nv; + } + } + catch (error) { + const message = (error instanceof Error) ? error.message : "not-an-error"; + logger$5.throwError(`invalid value for value.${key} (${message})`, "BAD_DATA", { value }); + } + } + return result; + }); + } + // Requires a value which matches a network-native storage slot + storageSlot(value) { + return toHex(logger$5.getBigInt(value), 32); + } +} +_Formatter_format = new WeakMap(), _Formatter_baseBlock = new WeakMap(); + +const EnsAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; +class NetworkPlugin { + constructor(name) { + defineProperties(this, { name }); + } + clone() { + return new NetworkPlugin(this.name); + } + validate(network) { + return this; + } +} +class GasCostPlugin extends NetworkPlugin { + constructor(effectiveBlock = 0, costs) { + super(`org.ethers.plugins.gas-cost#${(effectiveBlock || 0)}`); + const props = { effectiveBlock }; + function set(name, nullish) { + let value = (costs || {})[name]; + if (value == null) { + value = nullish; + } + if (typeof (value) !== "number") { + logger$5.throwArgumentError(`invalud value for ${name}`, "costs", costs); + } + props[name] = value; + } + set("txBase", 21000); + set("txCreate", 32000); + set("txDataZero", 4); + set("txDataNonzero", 16); + set("txAccessListStorageKey", 1900); + set("txAccessListAddress", 2400); + defineProperties(this, props); + } + clone() { + return new GasCostPlugin(this.effectiveBlock, this); + } +} +// Networks shoudl use this plugin to specify the contract address +// and network necessary to resolve ENS names. +class EnsPlugin extends NetworkPlugin { + constructor(address, targetNetwork) { + super("org.ethers.plugins.ens"); + defineProperties(this, { + address: (address || EnsAddress), + targetNetwork: ((targetNetwork == null) ? 1 : targetNetwork) + }); + } + clone() { + return new EnsPlugin(this.address, this.targetNetwork); + } + validate(network) { + network.formatter.address(this.address); + return this; + } +} +class MaxPriorityFeePlugin extends NetworkPlugin { + constructor(priorityFee) { + super("org.ethers.plugins.max-priority-fee"); + defineProperties(this, { + priorityFee: logger$5.getBigInt(priorityFee) + }); + } + async getPriorityFee(provider) { + return this.priorityFee; + } + clone() { + return new MaxPriorityFeePlugin(this.priorityFee); + } +} + +var __classPrivateFieldSet$i = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$i = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Network_props; +/* * * * +// Networks which operation against an L2 can use this plugin to +// specify how to access L1, for the purpose of resolving ENS, +// for example. +export class LayerOneConnectionPlugin extends NetworkPlugin { + readonly provider!: Provider; +// @TODO: Rename to ChainAccess and allow for connecting to any chain + constructor(provider: Provider) { + super("org.ethers.plugins.layer-one-connection"); + defineProperties(this, { provider }); + } + + clone(): LayerOneConnectionPlugin { + return new LayerOneConnectionPlugin(this.provider); + } +} +*/ +/* * * * +export class PriceOraclePlugin extends NetworkPlugin { + readonly address!: string; + + constructor(address: string) { + super("org.ethers.plugins.price-oracle"); + defineProperties(this, { address }); + } + + clone(): PriceOraclePlugin { + return new PriceOraclePlugin(this.address); + } +} +*/ +// Networks or clients with a higher need for security (such as clients +// that may automatically make CCIP requests without user interaction) +// can use this plugin to anonymize requests or intercept CCIP requests +// to notify and/or receive authorization from the user +/* * * * +export type FetchDataFunc = (req: Frozen) => Promise; +export class CcipPreflightPlugin extends NetworkPlugin { + readonly fetchData!: FetchDataFunc; + + constructor(fetchData: FetchDataFunc) { + super("org.ethers.plugins.ccip-preflight"); + defineProperties(this, { fetchData }); + } + + clone(): CcipPreflightPlugin { + return new CcipPreflightPlugin(this.fetchData); + } +} +*/ +const Networks = new Map(); +const defaultFormatter = new Formatter(); +class Network$1 { + constructor(name, _chainId, formatter) { + _Network_props.set(this, void 0); + const chainId = logger$5.getBigInt(_chainId); + if (formatter == null) { + formatter = defaultFormatter; + } + const plugins = new Map(); + __classPrivateFieldSet$i(this, _Network_props, { name, chainId, formatter, plugins }, "f"); + } + toJSON() { + return { name: this.name, chainId: this.chainId }; + } + get name() { return getStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "name"); } + set name(value) { setStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "name", value); } + get chainId() { return getStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "chainId"); } + set chainId(value) { setStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "chainId", logger$5.getBigInt(value, "chainId")); } + get formatter() { return getStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "formatter"); } + set formatter(value) { setStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "formatter", value); } + get plugins() { + return Array.from(__classPrivateFieldGet$i(this, _Network_props, "f").plugins.values()); + } + attachPlugin(plugin) { + if (this.isFrozen()) { + throw new Error("frozen"); + } + if (__classPrivateFieldGet$i(this, _Network_props, "f").plugins.get(plugin.name)) { + throw new Error(`cannot replace existing plugin: ${plugin.name} `); + } + __classPrivateFieldGet$i(this, _Network_props, "f").plugins.set(plugin.name, plugin.validate(this)); + return this; + } + getPlugin(name) { + return (__classPrivateFieldGet$i(this, _Network_props, "f").plugins.get(name)) || null; + } + // Gets a list of Plugins which match basename, ignoring any fragment + getPlugins(basename) { + return (this.plugins.filter((p) => (p.name.split("#")[0] === basename))); + } + clone() { + const clone = new Network$1(this.name, this.chainId, this.formatter); + this.plugins.forEach((plugin) => { + clone.attachPlugin(plugin.clone()); + }); + return clone; + } + freeze() { + Object.freeze(__classPrivateFieldGet$i(this, _Network_props, "f")); + return this; + } + isFrozen() { + return Object.isFrozen(__classPrivateFieldGet$i(this, _Network_props, "f")); + } + computeIntrinsicGas(tx) { + const costs = this.getPlugin("org.ethers.gas-cost") || (new GasCostPlugin()); + let gas = costs.txBase; + if (tx.to == null) { + gas += costs.txCreate; + } + if (tx.data) { + for (let i = 2; i < tx.data.length; i += 2) { + if (tx.data.substring(i, i + 2) === "00") { + gas += costs.txDataZero; + } + else { + gas += costs.txDataNonzero; + } + } + } + if (tx.accessList) { + const accessList = this.formatter.accessList(tx.accessList); + for (const addr in accessList) { + gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length; + } + } + return gas; + } + static from(network) { + // Default network + if (network == null) { + return Network$1.from("homestead"); + } + // Canonical name or chain ID + if (typeof (network) === "number") { + network = BigInt(network); + } + if (typeof (network) === "string" || typeof (network) === "bigint") { + const networkFunc = Networks.get(network); + if (networkFunc) { + return networkFunc(); + } + if (typeof (network) === "bigint") { + return new Network$1("unknown", network); + } + logger$5.throwArgumentError("unknown network", "network", network); + } + // Clonable with network-like abilities + if (typeof (network.clone) === "function") { + const clone = network.clone(); + //if (typeof(network.name) !== "string" || typeof(network.chainId) !== "number") { + //} + return clone; + } + // Networkish + if (typeof (network) === "object") { + if (typeof (network.name) !== "string" || typeof (network.chainId) !== "number") { + logger$5.throwArgumentError("invalid network object name or chainId", "network", network); + } + const custom = new Network$1((network.name), (network.chainId)); + if (network.ensAddress || network.ensNetwork != null) { + custom.attachPlugin(new EnsPlugin(network.ensAddress, network.ensNetwork)); + } + //if ((network).layerOneConnection) { + // custom.attachPlugin(new LayerOneConnectionPlugin((network).layerOneConnection)); + //} + return custom; + } + return logger$5.throwArgumentError("invalid network", "network", network); + } + static register(nameOrChainId, networkFunc) { + if (typeof (nameOrChainId) === "number") { + nameOrChainId = BigInt(nameOrChainId); + } + const existing = Networks.get(nameOrChainId); + if (existing) { + logger$5.throwArgumentError(`conflicting network for ${JSON.stringify(existing.name)}`, "nameOrChainId", nameOrChainId); + } + Networks.set(nameOrChainId, networkFunc); + } +} +_Network_props = new WeakMap(); + +var __classPrivateFieldSet$h = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$h = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _PollingBlockSubscriber_instances, _PollingBlockSubscriber_provider, _PollingBlockSubscriber_poller, _PollingBlockSubscriber_interval, _PollingBlockSubscriber_blockNumber, _PollingBlockSubscriber_poll, _OnBlockSubscriber_provider, _OnBlockSubscriber_poll, _PollingOrphanSubscriber_filter, _PollingTransactionSubscriber_hash, _PollingEventSubscriber_instances, _PollingEventSubscriber_provider, _PollingEventSubscriber_filter, _PollingEventSubscriber_poller, _PollingEventSubscriber_blockNumber, _PollingEventSubscriber_poll; +function copy$3(obj) { + return JSON.parse(JSON.stringify(obj)); +} +// @TODO: refactor this +class PollingBlockSubscriber { + constructor(provider) { + _PollingBlockSubscriber_instances.add(this); + _PollingBlockSubscriber_provider.set(this, void 0); + _PollingBlockSubscriber_poller.set(this, void 0); + _PollingBlockSubscriber_interval.set(this, void 0); + // The most recent block we have scanned for events. The value -2 + // indicates we still need to fetch an initial block number + _PollingBlockSubscriber_blockNumber.set(this, void 0); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_provider, provider, "f"); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_poller, null, "f"); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_interval, 4000, "f"); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_blockNumber, -2, "f"); + } + get pollingInterval() { return __classPrivateFieldGet$h(this, _PollingBlockSubscriber_interval, "f"); } + set pollingInterval(value) { __classPrivateFieldSet$h(this, _PollingBlockSubscriber_interval, value, "f"); } + start() { + if (__classPrivateFieldGet$h(this, _PollingBlockSubscriber_poller, "f")) { + throw new Error("subscriber already running"); + } + __classPrivateFieldGet$h(this, _PollingBlockSubscriber_instances, "m", _PollingBlockSubscriber_poll).call(this); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet$h(this, _PollingBlockSubscriber_instances, "m", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet$h(this, _PollingBlockSubscriber_interval, "f")), "f"); + } + stop() { + if (!__classPrivateFieldGet$h(this, _PollingBlockSubscriber_poller, "f")) { + throw new Error("subscriber not running"); + } + clearTimeout(__classPrivateFieldGet$h(this, _PollingBlockSubscriber_poller, "f")); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_poller, null, "f"); + } + pause(dropWhilePaused) { + this.stop(); + if (dropWhilePaused) { + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_blockNumber, -2, "f"); + } + } + resume() { + this.start(); + } +} +_PollingBlockSubscriber_provider = new WeakMap(), _PollingBlockSubscriber_poller = new WeakMap(), _PollingBlockSubscriber_interval = new WeakMap(), _PollingBlockSubscriber_blockNumber = new WeakMap(), _PollingBlockSubscriber_instances = new WeakSet(), _PollingBlockSubscriber_poll = async function _PollingBlockSubscriber_poll() { + const blockNumber = await __classPrivateFieldGet$h(this, _PollingBlockSubscriber_provider, "f").getBlockNumber(); + if (__classPrivateFieldGet$h(this, _PollingBlockSubscriber_blockNumber, "f") === -2) { + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_blockNumber, blockNumber, "f"); + return; + } + // @TODO: Put a cap on the maximum number of events per loop? + if (blockNumber !== __classPrivateFieldGet$h(this, _PollingBlockSubscriber_blockNumber, "f")) { + for (let b = __classPrivateFieldGet$h(this, _PollingBlockSubscriber_blockNumber, "f") + 1; b <= blockNumber; b++) { + __classPrivateFieldGet$h(this, _PollingBlockSubscriber_provider, "f").emit("block", b); + } + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_blockNumber, blockNumber, "f"); + } + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet$h(this, _PollingBlockSubscriber_instances, "m", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet$h(this, _PollingBlockSubscriber_interval, "f")), "f"); +}; +class OnBlockSubscriber { + constructor(provider) { + _OnBlockSubscriber_provider.set(this, void 0); + _OnBlockSubscriber_poll.set(this, void 0); + __classPrivateFieldSet$h(this, _OnBlockSubscriber_provider, provider, "f"); + __classPrivateFieldSet$h(this, _OnBlockSubscriber_poll, (blockNumber) => { + this._poll(blockNumber, __classPrivateFieldGet$h(this, _OnBlockSubscriber_provider, "f")); + }, "f"); + } + async _poll(blockNumber, provider) { + throw new Error("sub-classes must override this"); + } + start() { + __classPrivateFieldGet$h(this, _OnBlockSubscriber_poll, "f").call(this, -2); + __classPrivateFieldGet$h(this, _OnBlockSubscriber_provider, "f").on("block", __classPrivateFieldGet$h(this, _OnBlockSubscriber_poll, "f")); + } + stop() { + __classPrivateFieldGet$h(this, _OnBlockSubscriber_provider, "f").off("block", __classPrivateFieldGet$h(this, _OnBlockSubscriber_poll, "f")); + } + pause(dropWhilePaused) { this.stop(); } + resume() { this.start(); } +} +_OnBlockSubscriber_provider = new WeakMap(), _OnBlockSubscriber_poll = new WeakMap(); +class PollingOrphanSubscriber extends OnBlockSubscriber { + constructor(provider, filter) { + super(provider); + _PollingOrphanSubscriber_filter.set(this, void 0); + __classPrivateFieldSet$h(this, _PollingOrphanSubscriber_filter, copy$3(filter), "f"); + } + async _poll(blockNumber, provider) { + console.log(__classPrivateFieldGet$h(this, _PollingOrphanSubscriber_filter, "f")); + throw new Error("@TODO"); + } +} +_PollingOrphanSubscriber_filter = new WeakMap(); +class PollingTransactionSubscriber extends OnBlockSubscriber { + constructor(provider, hash) { + super(provider); + _PollingTransactionSubscriber_hash.set(this, void 0); + __classPrivateFieldSet$h(this, _PollingTransactionSubscriber_hash, hash, "f"); + } + async _poll(blockNumber, provider) { + const tx = await provider.getTransactionReceipt(__classPrivateFieldGet$h(this, _PollingTransactionSubscriber_hash, "f")); + if (tx) { + provider.emit(__classPrivateFieldGet$h(this, _PollingTransactionSubscriber_hash, "f"), tx); + } + } +} +_PollingTransactionSubscriber_hash = new WeakMap(); +class PollingEventSubscriber { + constructor(provider, filter) { + _PollingEventSubscriber_instances.add(this); + _PollingEventSubscriber_provider.set(this, void 0); + _PollingEventSubscriber_filter.set(this, void 0); + _PollingEventSubscriber_poller.set(this, void 0); + // The most recent block we have scanned for events. The value -2 + // indicates we still need to fetch an initial block number + _PollingEventSubscriber_blockNumber.set(this, void 0); + __classPrivateFieldSet$h(this, _PollingEventSubscriber_provider, provider, "f"); + __classPrivateFieldSet$h(this, _PollingEventSubscriber_filter, copy$3(filter), "f"); + __classPrivateFieldSet$h(this, _PollingEventSubscriber_poller, __classPrivateFieldGet$h(this, _PollingEventSubscriber_instances, "m", _PollingEventSubscriber_poll).bind(this), "f"); + __classPrivateFieldSet$h(this, _PollingEventSubscriber_blockNumber, -2, "f"); + } + start() { + if (__classPrivateFieldGet$h(this, _PollingEventSubscriber_blockNumber, "f") === -2) { + __classPrivateFieldGet$h(this, _PollingEventSubscriber_provider, "f").getBlockNumber().then((blockNumber) => { + __classPrivateFieldSet$h(this, _PollingEventSubscriber_blockNumber, blockNumber, "f"); + }); + } + __classPrivateFieldGet$h(this, _PollingEventSubscriber_provider, "f").on("block", __classPrivateFieldGet$h(this, _PollingEventSubscriber_poller, "f")); + } + stop() { + __classPrivateFieldGet$h(this, _PollingEventSubscriber_provider, "f").off("block", __classPrivateFieldGet$h(this, _PollingEventSubscriber_poller, "f")); + } + pause(dropWhilePaused) { + this.stop(); + if (dropWhilePaused) { + __classPrivateFieldSet$h(this, _PollingEventSubscriber_blockNumber, -2, "f"); + } + } + resume() { + this.start(); + } +} +_PollingEventSubscriber_provider = new WeakMap(), _PollingEventSubscriber_filter = new WeakMap(), _PollingEventSubscriber_poller = new WeakMap(), _PollingEventSubscriber_blockNumber = new WeakMap(), _PollingEventSubscriber_instances = new WeakSet(), _PollingEventSubscriber_poll = async function _PollingEventSubscriber_poll(blockNumber) { + // The initial block hasn't been determined yet + if (__classPrivateFieldGet$h(this, _PollingEventSubscriber_blockNumber, "f") === -2) { + return; + } + const filter = copy$3(__classPrivateFieldGet$h(this, _PollingEventSubscriber_filter, "f")); + filter.fromBlock = __classPrivateFieldGet$h(this, _PollingEventSubscriber_blockNumber, "f") + 1; + filter.toBlock = blockNumber; + __classPrivateFieldSet$h(this, _PollingEventSubscriber_blockNumber, blockNumber, "f"); + const logs = await __classPrivateFieldGet$h(this, _PollingEventSubscriber_provider, "f").getLogs(filter); + for (const log of logs) { + __classPrivateFieldGet$h(this, _PollingEventSubscriber_provider, "f").emit(__classPrivateFieldGet$h(this, _PollingEventSubscriber_filter, "f"), log); + } +}; + +// @TODO +// Event coalescence +// When we register an event with an async value (e.g. address is a Signer +// or ENS name), we need to add it immeidately for the Event API, but also +// need time to resolve the address. Upon resolving the address, we need to +// migrate the listener to the static event. We also need to maintain a map +// of Signer/ENS name to address so we can sync respond to listenerCount. +var __classPrivateFieldSet$g = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$g = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _AbstractProvider_instances, _AbstractProvider_subs, _AbstractProvider_plugins, _AbstractProvider_pausedState, _AbstractProvider_networkPromise, _AbstractProvider_anyNetwork, _AbstractProvider_performCache, _AbstractProvider_nextTimer, _AbstractProvider_timers, _AbstractProvider_disableCcipRead, _AbstractProvider_perform, _AbstractProvider_call, _AbstractProvider_getBlock, _AbstractProvider_hasSub, _AbstractProvider_getSub; +// Constants +const BN_2$1 = BigInt(2); +const MAX_CCIP_REDIRECTS = 10; +function getTag(prefix, value) { + return prefix + ":" + JSON.stringify(value, (k, v) => { + if (typeof (v) === "bigint") { + return `bigint:${v.toString()}`; + } + if (typeof (v) === "string") { + return v.toLowerCase(); + } + // Sort object keys + if (typeof (v) === "object" && !Array.isArray(v)) { + const keys = Object.keys(v); + keys.sort(); + return keys.reduce((accum, key) => { + accum[key] = v[key]; + return accum; + }, {}); + } + return v; + }); +} +class UnmanagedSubscriber { + constructor(name) { defineProperties(this, { name }); } + start() { } + stop() { } + pause(dropWhilePaused) { } + resume() { } +} +function copy$2(value) { + return JSON.parse(JSON.stringify(value)); +} +function concisify$1(items) { + items = Array.from((new Set(items)).values()); + items.sort(); + return items; +} +// Normalize a ProviderEvent into a Subscription +// @TODO: Make events sync if possible; like block +//function getSyncSubscription(_event: ProviderEvent): Subscription { +//} +async function getSubscription(_event, provider) { + if (_event == null) { + throw new Error("invalid event"); + } + // Normalize topic array info an EventFilter + if (Array.isArray(_event)) { + _event = { topics: _event }; + } + if (typeof (_event) === "string") { + switch (_event) { + case "block": + case "pending": + case "debug": + case "network": { + return { type: _event, tag: _event }; + } + } + } + if (isHexString(_event, 32)) { + const hash = _event.toLowerCase(); + return { type: "transaction", tag: getTag("tx", { hash }), hash }; + } + if (_event.orphan) { + const event = _event; + // @TODO: Should lowercase and whatnot things here instead of copy... + return { type: "orphan", tag: getTag("orphan", event), filter: copy$2(event) }; + } + if ((_event.address || _event.topics)) { + const event = _event; + const filter = { + topics: ((event.topics || []).map((t) => { + if (t == null) { + return null; + } + if (Array.isArray(t)) { + return concisify$1(t.map((t) => t.toLowerCase())); + } + return t.toLowerCase(); + })) + }; + if (event.address) { + const addresses = []; + const promises = []; + const addAddress = (addr) => { + if (isHexString(addr)) { + addresses.push(addr); + } + else { + promises.push((async () => { + addresses.push(await resolveAddress(addr, provider)); + })()); + } + }; + if (Array.isArray(event.address)) { + event.address.forEach(addAddress); + } + else { + addAddress(event.address); + } + if (promises.length) { + await Promise.all(promises); + } + filter.address = concisify$1(addresses.map((a) => a.toLowerCase())); + } + return { filter, tag: getTag("event", filter), type: "event" }; + } + return logger$5.throwArgumentError("unknown ProviderEvent", "event", _event); +} +function getTime$1() { return (new Date()).getTime(); } +function copyRequest(tx) { + // @TODO: copy the copy from contracts and use it from this + return tx; +} +class AbstractProvider { + // @TODO: This should be a () => Promise so network can be + // done when needed; or rely entirely on _detectNetwork? + constructor(_network) { + _AbstractProvider_instances.add(this); + _AbstractProvider_subs.set(this, void 0); + _AbstractProvider_plugins.set(this, void 0); + // null=unpaused, true=paused+dropWhilePaused, false=paused + _AbstractProvider_pausedState.set(this, void 0); + _AbstractProvider_networkPromise.set(this, void 0); + _AbstractProvider_anyNetwork.set(this, void 0); + _AbstractProvider_performCache.set(this, void 0); + _AbstractProvider_nextTimer.set(this, void 0); + _AbstractProvider_timers.set(this, void 0); + _AbstractProvider_disableCcipRead.set(this, void 0); + if (_network === "any") { + __classPrivateFieldSet$g(this, _AbstractProvider_anyNetwork, true, "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, null, "f"); + } + else if (_network) { + const network = Network$1.from(_network); + __classPrivateFieldSet$g(this, _AbstractProvider_anyNetwork, false, "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, Promise.resolve(network), "f"); + setTimeout(() => { this.emit("network", network, null); }, 0); + } + else { + __classPrivateFieldSet$g(this, _AbstractProvider_anyNetwork, false, "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, null, "f"); + } + //this.#approxNumber = -2; + //this.#approxNumberT0 = 0; + __classPrivateFieldSet$g(this, _AbstractProvider_performCache, new Map(), "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_subs, new Map(), "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_plugins, new Map(), "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_pausedState, null, "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_nextTimer, 0, "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_timers, new Map(), "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_disableCcipRead, false, "f"); + } + get plugins() { + return Array.from(__classPrivateFieldGet$g(this, _AbstractProvider_plugins, "f").values()); + } + attachPlugin(plugin) { + if (__classPrivateFieldGet$g(this, _AbstractProvider_plugins, "f").get(plugin.name)) { + throw new Error(`cannot replace existing plugin: ${plugin.name} `); + } + __classPrivateFieldGet$g(this, _AbstractProvider_plugins, "f").set(plugin.name, plugin.validate(this)); + return this; + } + getPlugin(name) { + return (__classPrivateFieldGet$g(this, _AbstractProvider_plugins, "f").get(name)) || null; + } + set disableCcipRead(value) { __classPrivateFieldSet$g(this, _AbstractProvider_disableCcipRead, !!value, "f"); } + get disableCcipRead() { return __classPrivateFieldGet$g(this, _AbstractProvider_disableCcipRead, "f"); } + async ccipReadFetch(tx, calldata, urls) { + if (this.disableCcipRead || urls.length === 0 || tx.to == null) { + return null; + } + const sender = tx.to.toLowerCase(); + const data = calldata.toLowerCase(); + const errorMessages = []; + for (let i = 0; i < urls.length; i++) { + const url = urls[i]; + // URL expansion + const href = url.replace("{sender}", sender).replace("{data}", data); + // If no {data} is present, use POST; otherwise GET + //const json: string | null = (url.indexOf("{data}") >= 0) ? null: JSON.stringify({ data, sender }); + //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => { + // value.status = response.statusCode; + // return value; + //}); + const request = new FetchRequest(href); + if (url.indexOf("{data}") === -1) { + request.body = { data, sender }; + } + let errorMessage = "unknown error"; + const resp = await fetchData(request); + try { + const result = resp.bodyJson; + if (result.data) { + return result.data; + } + if (result.message) { + errorMessage = result.message; + } + } + catch (error) { } + // 4xx indicates the result is not present; stop + if (resp.statusCode >= 400 && resp.statusCode < 500) { + return logger$5.throwError(`response not found during CCIP fetch: ${errorMessage}`, "OFFCHAIN_FAULT", { + reason: "404_MISSING_RESOURCE", + transaction: tx, info: { url, errorMessage } + }); + } + // 5xx indicates server issue; try the next url + errorMessages.push(errorMessage); + } + return logger$5.throwError(`error encountered during CCIP fetch: ${errorMessages.map((m) => JSON.stringify(m)).join(", ")}`, "OFFCHAIN_FAULT", { + reason: "500_SERVER_ERROR", + transaction: tx, info: { urls, errorMessages } + }); + } + _wrapTransaction(tx, hash, blockNumber) { + return tx; + } + _detectNetwork() { + return logger$5.throwError("sub-classes must implement this", "UNSUPPORTED_OPERATION", { + operation: "_detectNetwork" + }); + } + async _perform(req) { + return logger$5.throwError(`unsupported method: ${req.method}`, "UNSUPPORTED_OPERATION", { + operation: req.method, + info: req + }); + } + // State + async getBlockNumber() { + return logger$5.getNumber(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getBlockNumber" }), "%response"); + } + async _getAddress(address) { + if (typeof (address) === "string") { + return address; + } + return await address.getAddress(); + } + async _getBlockTag(blockTag) { + const network = await this.getNetwork(); + if (typeof (blockTag) === "number" && Number.isSafeInteger(blockTag) && blockTag < 0) { + //let blockNumber = await this._getApproxBlockNumber(500); + let blockNumber = await this.getBlockNumber(); + blockNumber += blockTag; + if (blockNumber < 0) { + blockNumber = 0; + } + return network.formatter.blockTag(blockNumber); + } + return network.formatter.blockTag(blockTag); + } + async getNetwork() { + // No explicit network was set and this is our first time + if (__classPrivateFieldGet$g(this, _AbstractProvider_networkPromise, "f") == null) { + // Detect the current network (shared with all calls) + const detectNetwork = this._detectNetwork().then((network) => { + this.emit("network", network, null); + return network; + }, (error) => { + // Reset the networkPromise on failure, so we will try again + if (__classPrivateFieldGet$g(this, _AbstractProvider_networkPromise, "f") === detectNetwork) { + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, null, "f"); + } + throw error; + }); + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, detectNetwork, "f"); + return await detectNetwork; + } + const networkPromise = __classPrivateFieldGet$g(this, _AbstractProvider_networkPromise, "f"); + const [expected, actual] = await Promise.all([ + networkPromise, + this._detectNetwork() // The actual connected network + ]); + if (expected.chainId !== actual.chainId) { + if (__classPrivateFieldGet$g(this, _AbstractProvider_anyNetwork, "f")) { + // The "any" network can change, so notify listeners + this.emit("network", actual, expected); + // Update the network if something else hasn't already changed it + if (__classPrivateFieldGet$g(this, _AbstractProvider_networkPromise, "f") === networkPromise) { + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, Promise.resolve(actual), "f"); + } + } + else { + // Otherwise, we do not allow changes to the underlying network + logger$5.throwError(`network changed: ${expected.chainId} => ${actual.chainId} `, "NETWORK_ERROR", { + event: "changed" + }); + } + } + return expected.clone().freeze(); + } + async getFeeData() { + const { block, gasPrice } = await resolveProperties({ + block: this.getBlock("latest"), + gasPrice: ((async () => { + try { + const gasPrice = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getGasPrice" }); + return logger$5.getBigInt(gasPrice, "%response"); + } + catch (error) { } + return null; + })()) + }); + let maxFeePerGas = null, maxPriorityFeePerGas = null; + if (block && block.baseFeePerGas) { + // We may want to compute this more accurately in the future, + // using the formula "check if the base fee is correct". + // See: https://eips.ethereum.org/EIPS/eip-1559 + maxPriorityFeePerGas = BigInt("1500000000"); + // Allow a network to override their maximum priority fee per gas + const priorityFeePlugin = (await this.getNetwork()).getPlugin("org.ethers.plugins.max-priority-fee"); + if (priorityFeePlugin) { + maxPriorityFeePerGas = await priorityFeePlugin.getPriorityFee(this); + } + maxFeePerGas = (block.baseFeePerGas * BN_2$1) + maxPriorityFeePerGas; + } + return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas); + } + async _getTransaction(_request) { + const network = await this.getNetwork(); + // Fill in any addresses + const request = Object.assign({}, _request, await resolveProperties({ + to: (_request.to ? resolveAddress(_request.to, this) : undefined), + from: (_request.from ? resolveAddress(_request.from, this) : undefined), + })); + return network.formatter.transactionRequest(request); + } + async estimateGas(_tx) { + const transaction = await this._getTransaction(_tx); + return logger$5.getBigInt(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "estimateGas", transaction + }), "%response"); + } + async call(_tx) { + const { tx, blockTag } = await resolveProperties({ + tx: this._getTransaction(_tx), + blockTag: this._getBlockTag(_tx.blockTag) + }); + return __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_call).call(this, tx, blockTag, _tx.enableCcipRead ? 0 : -1); + } + // Account + async getBalanceOf(_address, _blockTag) { + const { address, blockTag } = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + return logger$5.getBigInt(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getBalance", address, blockTag + }), "%response"); + } + async getTransactionCountOf(_address, _blockTag) { + const { address, blockTag } = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + return logger$5.getNumber(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getTransactionCount", address, blockTag + }), "%response"); + } + async getCode(_address, _blockTag) { + const { address, blockTag } = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + return hexlify(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getCode", address, blockTag + })); + } + async getStorageAt(_address, _position, _blockTag) { + const position = logger$5.getBigInt(_position); + const { address, blockTag } = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + return hexlify(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getStorageAt", address, position, blockTag + })); + } + // Write + async broadcastTransaction(signedTx) { + throw new Error(); + } + // Queries + async getBlock(block) { + const format = (await this.getNetwork()).formatter; + const params = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_getBlock).call(this, block, false); + if (params == null) { + return null; + } + return format.block(params, this); + } + async getBlockWithTransactions(block) { + const format = (await this.getNetwork()).formatter; + const params = __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_getBlock).call(this, block, true); + if (params == null) { + return null; + } + return format.blockWithTransactions(params, this); + } + async getTransaction(hash) { + const format = (await this.getNetwork()).formatter; + const params = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getTransaction", hash }); + return format.transactionResponse(params, this); + } + async getTransactionReceipt(hash) { + const format = (await this.getNetwork()).formatter; + const receipt = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getTransactionReceipt", hash }); + if (receipt == null) { + return null; + } + // Some backends did not backfill the effectiveGasPrice into old transactions + // in the receipt, so we look it up manually and inject it. + if (receipt.gasPrice == null && receipt.effectiveGasPrice == null) { + const tx = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getTransaction", hash }); + receipt.effectiveGasPrice = tx.gasPrice; + } + return format.receipt(receipt, this); + } + async _getFilter(filter) { + const lookup = {}; + if (filter.address) { + if (Array.isArray(filter.address)) { + lookup.address = Promise.all(filter.address.map((a) => resolveAddress(a, this))); + } + else { + lookup.address = resolveAddress(filter.address, this); + } + } + const addBlockTag = (key) => { + if (filter[key] == null) { + return; + } + lookup[key] = this._getBlockTag(filter[key]); + }; + addBlockTag("fromBlock"); + addBlockTag("toBlock"); + const result = await resolveProperties(lookup); + if (Array.isArray(result.address)) { + result.address.sort(); + } + if (filter.blockHash) { + if (filter.fromBlock || filter.toBlock) { + throw new Error("invalid filter"); + } + result.blockHash = filter.blockHash; + } + return result; + } + // Bloom-filter Queries + async getLogs(_filter) { + const { network, filter } = await resolveProperties({ + network: this.getNetwork(), + filter: this._getFilter(_filter) + }); + return (await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getLogs", filter })).map((l) => { + return network.formatter.log(l, this); + }); + } + // ENS + _getProvider(chainId) { + return logger$5.throwError("provider cannot connect to target network", "UNSUPPORTED_OPERATION", { + operation: "_getProvider()" + }); + } + async getResolver(name) { + return await EnsResolver.fromName(this, name); + } + async getAvatar(name) { + const resolver = await this.getResolver(name); + if (resolver) { + return await resolver.getAvatar(); + } + return null; + } + async resolveName(name) { + if (typeof (name) === "string") { + const resolver = await this.getResolver(name); + if (resolver) { + return await resolver.getAddress(); + } + } + else { + const address = await name.getAddress(); + if (address == null) { + return logger$5.throwArgumentError("Addressable returned no address", "name", name); + } + return address; + } + return null; + } + async lookupAddress(address) { + throw new Error(); + //return "TODO"; + } + async waitForTransaction(hash, confirms = 1, timeout) { + if (confirms === 0) { + return this.getTransactionReceipt(hash); + } + return new Promise(async (resolve, reject) => { + let timer = null; + const listener = (async (blockNumber) => { + try { + const receipt = await this.getTransactionReceipt(hash); + if (receipt != null) { + if (blockNumber - receipt.blockNumber + 1 >= confirms) { + resolve(receipt); + this.off("block", listener); + if (timer) { + clearTimeout(timer); + timer = null; + } + return; + } + } + } + catch (error) { + console.log("EEE", error); + } + this.once("block", listener); + }); + if (timeout != null) { + timer = setTimeout(() => { + if (timer == null) { + return; + } + timer = null; + this.off("block", listener); + reject(logger$5.makeError("timeout", "TIMEOUT", {})); + }, timeout); + } + listener(await this.getBlockNumber()); + }); + } + async waitForBlock(blockTag) { + throw new Error(); + //return new Block({ }, this); + } + _clearTimeout(timerId) { + const timer = __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").get(timerId); + if (!timer) { + return; + } + if (timer.timer) { + clearTimeout(timer.timer); + } + __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").delete(timerId); + } + _setTimeout(_func, timeout = 0) { + var _a, _b; + const timerId = (__classPrivateFieldSet$g(this, _AbstractProvider_nextTimer, (_b = __classPrivateFieldGet$g(this, _AbstractProvider_nextTimer, "f"), _a = _b++, _b), "f"), _a); + const func = () => { + __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").delete(timerId); + _func(); + }; + if (this.paused) { + __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").set(timerId, { timer: null, func, time: timeout }); + } + else { + const timer = setTimeout(func, timeout); + __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").set(timerId, { timer, func, time: getTime$1() }); + } + return timerId; + } + _forEachSubscriber(func) { + for (const sub of __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").values()) { + func(sub.subscriber); + } + } + // Event API; sub-classes should override this; any supported + // event filter will have been munged into an EventFilter + _getSubscriber(sub) { + switch (sub.type) { + case "debug": + case "network": + return new UnmanagedSubscriber(sub.type); + case "block": + return new PollingBlockSubscriber(this); + case "event": + return new PollingEventSubscriber(this, sub.filter); + case "transaction": + return new PollingTransactionSubscriber(this, sub.hash); + case "orphan": + return new PollingOrphanSubscriber(this, sub.filter); + } + throw new Error(`unsupported event: ${sub.type}`); + } + _recoverSubscriber(oldSub, newSub) { + for (const sub of __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").values()) { + if (sub.subscriber === oldSub) { + if (sub.started) { + sub.subscriber.stop(); + } + sub.subscriber = newSub; + if (sub.started) { + newSub.start(); + } + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") != null) { + newSub.pause(__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f")); + } + break; + } + } + } + async on(event, listener) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_getSub).call(this, event); + sub.listeners.push({ listener, once: false }); + if (!sub.started) { + sub.subscriber.start(); + sub.started = true; + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") != null) { + sub.subscriber.pause(__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f")); + } + } + return this; + } + async once(event, listener) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_getSub).call(this, event); + sub.listeners.push({ listener, once: true }); + if (!sub.started) { + sub.subscriber.start(); + sub.started = true; + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") != null) { + sub.subscriber.pause(__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f")); + } + } + return this; + } + async emit(event, ...args) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_hasSub).call(this, event, args); + if (!sub) { + return false; + } + const count = sub.listeners.length; + sub.listeners = sub.listeners.filter(({ listener, once }) => { + const payload = new EventPayload(this, (once ? null : listener), event); + setTimeout(() => { listener.call(this, ...args, payload); }, 0); + return !once; + }); + return (count > 0); + } + async listenerCount(event) { + if (event) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_hasSub).call(this, event); + if (!sub) { + return 0; + } + return sub.listeners.length; + } + let total = 0; + for (const { listeners } of __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").values()) { + total += listeners.length; + } + return total; + } + async listeners(event) { + if (event) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_hasSub).call(this, event); + if (!sub) { + return []; + } + return sub.listeners.map(({ listener }) => listener); + } + let result = []; + for (const { listeners } of __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").values()) { + result = result.concat(listeners.map(({ listener }) => listener)); + } + return result; + } + async off(event, listener) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_hasSub).call(this, event); + if (!sub) { + return this; + } + if (listener) { + const index = sub.listeners.map(({ listener }) => listener).indexOf(listener); + if (index >= 0) { + sub.listeners.splice(index, 1); + } + } + if (!listener || sub.listeners.length === 0) { + if (sub.started) { + sub.subscriber.stop(); + } + __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").delete(sub.tag); + } + return this; + } + async removeAllListeners(event) { + if (event) { + const { tag, started, subscriber } = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_getSub).call(this, event); + if (started) { + subscriber.stop(); + } + __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").delete(tag); + } + else { + for (const [tag, { started, subscriber }] of __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f")) { + if (started) { + subscriber.stop(); + } + __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").delete(tag); + } + } + return this; + } + // Alias for "on" + async addListener(event, listener) { + return await this.on(event, listener); + } + // Alias for "off" + async removeListener(event, listener) { + return this.off(event, listener); + } + // Sub-classes should override this to shutdown any sockets, etc. + // but MUST call this super.shutdown. + async shutdown() { + // Stop all listeners + this.removeAllListeners(); + // Shut down all tiemrs + for (const timerId of __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").keys()) { + this._clearTimeout(timerId); + } + } + get paused() { return (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") != null); } + pause(dropWhilePaused) { + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") != null) { + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") == !!dropWhilePaused) { + return; + } + return logger$5.throwError("cannot change pause type; resume first", "UNSUPPORTED_OPERATION", { + operation: "pause" + }); + } + this._forEachSubscriber((s) => s.pause(dropWhilePaused)); + __classPrivateFieldSet$g(this, _AbstractProvider_pausedState, !!dropWhilePaused, "f"); + for (const timer of __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").values()) { + // Clear the timer + if (timer.timer) { + clearTimeout(timer.timer); + } + // Remaining time needed for when we become unpaused + timer.time = getTime$1() - timer.time; + } + } + resume() { + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") == null) { + return; + } + this._forEachSubscriber((s) => s.resume()); + __classPrivateFieldSet$g(this, _AbstractProvider_pausedState, null, "f"); + for (const timer of __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").values()) { + // Remaining time when we were paused + let timeout = timer.time; + if (timeout < 0) { + timeout = 0; + } + // Start time (in cause paused, so we con compute remaininf time) + timer.time = getTime$1(); + // Start the timer + setTimeout(timer.func, timeout); + } + } +} +_AbstractProvider_subs = new WeakMap(), _AbstractProvider_plugins = new WeakMap(), _AbstractProvider_pausedState = new WeakMap(), _AbstractProvider_networkPromise = new WeakMap(), _AbstractProvider_anyNetwork = new WeakMap(), _AbstractProvider_performCache = new WeakMap(), _AbstractProvider_nextTimer = new WeakMap(), _AbstractProvider_timers = new WeakMap(), _AbstractProvider_disableCcipRead = new WeakMap(), _AbstractProvider_instances = new WeakSet(), _AbstractProvider_perform = +// Shares multiple identical requests made during the same 250ms +async function _AbstractProvider_perform(req) { + // Create a tag + const tag = getTag(req.method, req); + let perform = __classPrivateFieldGet$g(this, _AbstractProvider_performCache, "f").get(tag); + if (!perform) { + perform = this._perform(req); + __classPrivateFieldGet$g(this, _AbstractProvider_performCache, "f").set(tag, perform); + setTimeout(() => { + if (__classPrivateFieldGet$g(this, _AbstractProvider_performCache, "f").get(tag) === perform) { + __classPrivateFieldGet$g(this, _AbstractProvider_performCache, "f").delete(tag); + } + }, 250); + } + return await perform; +}, _AbstractProvider_call = async function _AbstractProvider_call(tx, blockTag, attempt) { + if (attempt >= MAX_CCIP_REDIRECTS) { + logger$5.throwError("CCIP read exceeded maximum redirections", "OFFCHAIN_FAULT", { + reason: "TOO_MANY_REDIRECTS", + transaction: Object.assign({}, tx, { blockTag, enableCcipRead: true }) + }); + } + const transaction = copyRequest(tx); + try { + return hexlify(await this._perform({ method: "call", transaction, blockTag })); + } + catch (error) { + // CCIP Read OffchainLookup + if (!this.disableCcipRead && isCallException(error) && attempt >= 0 && blockTag === "latest" && transaction.to != null && dataSlice(error.data, 0, 4) === "0x556f1830") { + const data = error.data; + const txSender = await resolveAddress(transaction.to, this); + // Parse the CCIP Read Arguments + let ccipArgs; + try { + ccipArgs = parseOffchainLookup(dataSlice(error.data, 4)); + } + catch (error) { + return logger$5.throwError(error.message, "OFFCHAIN_FAULT", { + reason: "BAD_DATA", + transaction, info: { data } + }); + } + // Check the sender of the OffchainLookup matches the transaction + if (ccipArgs.sender.toLowerCase() !== txSender.toLowerCase()) { + return logger$5.throwError("CCIP Read sender mismatch", "CALL_EXCEPTION", { + data, transaction, + errorSignature: "OffchainLookup(address,string[],bytes,bytes4,bytes)", + errorName: "OffchainLookup", + errorArgs: ccipArgs.errorArgs + }); + } + const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls); + if (ccipResult == null) { + return logger$5.throwError("CCIP Read failed to fetch data", "OFFCHAIN_FAULT", { + reason: "FETCH_FAILED", + transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs } + }); + } + return __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_call).call(this, { + to: txSender, + data: concat([ + ccipArgs.selector, encodeBytes([ccipResult, ccipArgs.extraData]) + ]), + }, blockTag, attempt + 1); + } + throw error; + } +}, _AbstractProvider_getBlock = async function _AbstractProvider_getBlock(block, includeTransactions) { + const format = (await this.getNetwork()).formatter; + if (isHexString(block, 32)) { + return await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getBlock", blockHash: block, includeTransactions + }); + } + return await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getBlock", blockTag: format.blockTag(block), includeTransactions + }); +}, _AbstractProvider_hasSub = async function _AbstractProvider_hasSub(event, emitArgs) { + let sub = await getSubscription(event, this); + // This is a log that is removing an existing log; we actually want + // to emit an orphan event for the removed log + if (sub.type === "event" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) { + sub = await getSubscription({ orphan: "drop-log", log: emitArgs[0] }, this); + } + return __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").get(sub.tag) || null; +}, _AbstractProvider_getSub = async function _AbstractProvider_getSub(event) { + const subscription = await getSubscription(event, this); + // Prevent tampering with our tag in any subclass' _getSubscriber + const tag = subscription.tag; + let sub = __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").get(tag); + if (!sub) { + const subscriber = this._getSubscriber(subscription); + const addressableMap = new WeakMap(); + const nameMap = new Map(); + sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [] }; + __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").set(tag, sub); + } + return sub; +}; +function _parseString(result, start) { + try { + const bytes = _parseBytes(result, start); + if (bytes) { + return toUtf8String(bytes); + } + } + catch (error) { } + return null; +} +function _parseBytes(result, start) { + if (result === "0x") { + return null; + } + try { + const offset = logger$5.getNumber(dataSlice(result, start, start + 32)); + const length = logger$5.getNumber(dataSlice(result, offset, offset + 32)); + return dataSlice(result, offset + 32, offset + 32 + length); + } + catch (error) { } + return null; +} +function numPad(value) { + const result = toArray(value); + if (result.length > 32) { + throw new Error("internal; should not happen"); + } + const padded = new Uint8Array(32); + padded.set(result, 32 - result.length); + return padded; +} +function bytesPad(value) { + if ((value.length % 32) === 0) { + return value; + } + const result = new Uint8Array(Math.ceil(value.length / 32) * 32); + result.set(value); + return result; +} +const empty = new Uint8Array([]); +// ABI Encodes a series of (bytes, bytes, ...) +function encodeBytes(datas) { + const result = []; + let byteCount = 0; + // Add place-holders for pointers as we add items + for (let i = 0; i < datas.length; i++) { + result.push(empty); + byteCount += 32; + } + for (let i = 0; i < datas.length; i++) { + const data = logger$5.getBytes(datas[i]); + // Update the bytes offset + result[i] = numPad(byteCount); + // The length and padded value of data + result.push(numPad(data.length)); + result.push(bytesPad(data)); + byteCount += 32 + Math.ceil(data.length / 32) * 32; + } + return concat(result); +} +const zeros = "0x0000000000000000000000000000000000000000000000000000000000000000"; +function parseOffchainLookup(data) { + const result = { + sender: "", urls: [], calldata: "", selector: "", extraData: "", errorArgs: [] + }; + if (dataLength(data) < 5 * 32) { + throw new Error("insufficient OffchainLookup data"); + } + const sender = dataSlice(data, 0, 32); + if (dataSlice(sender, 0, 12) !== dataSlice(zeros, 0, 12)) { + throw new Error("corrupt OffchainLookup sender"); + } + result.sender = dataSlice(sender, 12); + // Read the URLs from the response + try { + const urls = []; + const urlsOffset = logger$5.getNumber(dataSlice(data, 32, 64)); + const urlsLength = logger$5.getNumber(dataSlice(data, urlsOffset, urlsOffset + 32)); + const urlsData = dataSlice(data, urlsOffset + 32); + for (let u = 0; u < urlsLength; u++) { + const url = _parseString(urlsData, u * 32); + if (url == null) { + throw new Error("abort"); + } + urls.push(url); + } + result.urls = urls; + } + catch (error) { + throw new Error("corrupt OffchainLookup urls"); + } + // Get the CCIP calldata to forward + try { + const calldata = _parseBytes(data, 64); + if (calldata == null) { + throw new Error("abort"); + } + result.calldata = calldata; + } + catch (error) { + throw new Error("corrupt OffchainLookup calldata"); + } + // Get the callbackSelector (bytes4) + if (dataSlice(data, 100, 128) !== dataSlice(zeros, 0, 28)) { + throw new Error("corrupt OffchainLookup callbaackSelector"); + } + result.selector = dataSlice(data, 96, 100); + // Get the extra data to send back to the contract as context + try { + const extraData = _parseBytes(data, 128); + if (extraData == null) { + throw new Error("abort"); + } + result.extraData = extraData; + } + catch (error) { + throw new Error("corrupt OffchainLookup extraData"); + } + result.errorArgs = "sender,urls,calldata,selector,extraData".split(/,/).map((k) => result[k]); + return result; +} + +var __classPrivateFieldGet$f = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var __classPrivateFieldSet$f = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var _AbstractSigner_instances, _AbstractSigner_checkProvider, _AbstractSigner_fromify, _VoidSigner_instances, _VoidSigner_throwUnsupported, _WrappedSigner_signer; +class AbstractSigner { + constructor(provider) { + _AbstractSigner_instances.add(this); + defineProperties(this, { provider: (provider || null) }); + } + async getBalance(blockTag) { + return __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "getBalance").getBalanceOf(await this.getAddress(), blockTag); + } + async getTransactionCount(blockTag) { + return __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "getTransactionCount").getTransactionCountOf(await this.getAddress(), blockTag); + } + async estimateGas(tx) { + return __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "estimateGas").estimateGas(await __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_fromify).call(this, tx)); + } + async call(tx) { + return __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "call").call(await __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_fromify).call(this, tx)); + } + async populateTransaction(tx) { + const provider = __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "populateTransaction"); + //let pop: Deferrable = Object.assign({ }, tx); + let pop = Object.assign({}, tx); + if (pop.to != null) { + pop.to = provider.resolveName(pop.to).then((to) => { + if (to == null) { + return logger$5.throwArgumentError("transaction to ENS name not configured", "tx.to", pop.to); + } + return to; + }); + } + if (pop.from != null) { + const from = pop.from; + pop.from = Promise.all([ + this.getAddress(), + this.resolveName(from) + ]).then(([address, from]) => { + if (!from || address.toLowerCase() !== from.toLowerCase()) { + return logger$5.throwArgumentError("transaction from mismatch", "tx.from", from); + } + return address; + }); + } + if (pop.nonce == null) { + pop.nonce = this.getTransactionCount(); + } + pop = resolveProperties(pop); + if (pop.gasLimit == null) { + pop.gasLimit = provider.estimateGas(pop); + } + pop = resolveProperties(pop); + //@TODO: Copy logic from AbstractSigner in v5 + return await resolveProperties(pop); + } + async resolveName(name) { + const provider = __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "resolveName"); + return await provider.resolveName(name); + } + async sendTransaction(tx) { + const provider = __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "sendTransaction"); + const txObj = Transaction.from(await this.populateTransaction(tx)); + return await provider.broadcastTransaction(await this.signTransaction(txObj)); + } +} +_AbstractSigner_instances = new WeakSet(), _AbstractSigner_checkProvider = function _AbstractSigner_checkProvider(operation) { + if (this.provider) { + return this.provider; + } + return logger$5.throwError("missing provider", "UNSUPPORTED_OPERATION", { operation }); +}, _AbstractSigner_fromify = async function _AbstractSigner_fromify(tx) { + tx = Object.assign({}, tx); + const actions = []; + if (tx.from != null) { + const from = tx.from; + actions.push(Promise.all([ + this.getAddress(), + this.resolveName(from) + ]).then(([address, from]) => { + if (!from || address.toLowerCase() !== from.toLowerCase()) { + logger$5.throwArgumentError("transaction from mismatch", "tx.from", from); + } + tx.from = address; + })); + } + await Promise.all(actions); + return tx; +}; +class VoidSigner extends AbstractSigner { + constructor(address, provider) { + super(provider); + _VoidSigner_instances.add(this); + defineProperties(this, { address }); + } + async getAddress() { return this.address; } + connect(provider) { + return new VoidSigner(this.address, provider); + } + async signTransaction(tx) { + __classPrivateFieldGet$f(this, _VoidSigner_instances, "m", _VoidSigner_throwUnsupported).call(this, "transactions", "signTransaction"); + } + async signMessage(message) { + __classPrivateFieldGet$f(this, _VoidSigner_instances, "m", _VoidSigner_throwUnsupported).call(this, "messages", "signMessage"); + } + async signTypedData(domain, types, value) { + __classPrivateFieldGet$f(this, _VoidSigner_instances, "m", _VoidSigner_throwUnsupported).call(this, "typed-data", "signTypedData"); + } +} +_VoidSigner_instances = new WeakSet(), _VoidSigner_throwUnsupported = function _VoidSigner_throwUnsupported(suffix, operation) { + return logger$5.throwError(`VoidSigner cannot sign ${suffix}`, "UNSUPPORTED_OPERATION", { + operation + }); +}; +class WrappedSigner extends AbstractSigner { + //get provider(): null | Provider { return this.#signer.provider; } + constructor(signer) { + super(signer.provider); + _WrappedSigner_signer.set(this, void 0); + __classPrivateFieldSet$f(this, _WrappedSigner_signer, signer, "f"); + } + async getAddress() { + return await __classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").getAddress(); + } + connect(provider) { + return new WrappedSigner(__classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").connect(provider)); + } + async signTransaction(tx) { + return await __classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").signTransaction(tx); + } + async sendTransaction(tx) { + return await __classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").sendTransaction(tx); + } + async signMessage(message) { + return await __classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").signMessage(message); + } + async signTypedData(domain, types, value) { + return await __classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").signTypedData(domain, types, value); + } +} +_WrappedSigner_signer = new WeakMap(); + +// Show the throttle message only once +const shown = new Set(); +function showThrottleMessage(service) { + if (shown.has(service)) { + return; + } + shown.add(service); + console.log("========= NOTICE ========="); + console.log(`Request-Rate Exceeded for ${service} (this message will not be repeated)`); + console.log(""); + console.log("The default API keys for each service are provided as a highly-throttled,"); + console.log("community resource for low-traffic projects and early prototyping."); + console.log(""); + console.log("While your application will continue to function, we highly recommended"); + console.log("signing up for your own API keys to improve performance, increase your"); + console.log("request rate/limit and enable other perks, such as metrics and advanced APIs."); + console.log(""); + console.log("For more details: https:/\/docs.ethers.io/api-keys/"); + console.log("=========================="); +} + +var __classPrivateFieldSet$e = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$e = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _FilterIdSubscriber_instances, _FilterIdSubscriber_provider, _FilterIdSubscriber_filterIdPromise, _FilterIdSubscriber_poller, _FilterIdSubscriber_network, _FilterIdSubscriber_poll, _FilterIdSubscriber_teardown, _FilterIdEventSubscriber_event; +function copy$1(obj) { + return JSON.parse(JSON.stringify(obj)); +} +class FilterIdSubscriber { + constructor(provider) { + _FilterIdSubscriber_instances.add(this); + _FilterIdSubscriber_provider.set(this, void 0); + _FilterIdSubscriber_filterIdPromise.set(this, void 0); + _FilterIdSubscriber_poller.set(this, void 0); + _FilterIdSubscriber_network.set(this, void 0); + __classPrivateFieldSet$e(this, _FilterIdSubscriber_provider, provider, "f"); + __classPrivateFieldSet$e(this, _FilterIdSubscriber_filterIdPromise, null, "f"); + __classPrivateFieldSet$e(this, _FilterIdSubscriber_poller, __classPrivateFieldGet$e(this, _FilterIdSubscriber_instances, "m", _FilterIdSubscriber_poll).bind(this), "f"); + __classPrivateFieldSet$e(this, _FilterIdSubscriber_network, null, "f"); + } + _subscribe(provider) { + throw new Error("subclasses must override this"); + } + _emitResults(provider, result) { + throw new Error("subclasses must override this"); + } + _recover(provider) { + throw new Error("subclasses must override this"); + } + start() { __classPrivateFieldGet$e(this, _FilterIdSubscriber_instances, "m", _FilterIdSubscriber_poll).call(this, -2); } + stop() { + __classPrivateFieldGet$e(this, _FilterIdSubscriber_instances, "m", _FilterIdSubscriber_teardown).call(this); + __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").off("block", __classPrivateFieldGet$e(this, _FilterIdSubscriber_poller, "f")); + } + pause(dropWhilePaused) { + if (dropWhilePaused) { + __classPrivateFieldGet$e(this, _FilterIdSubscriber_instances, "m", _FilterIdSubscriber_teardown).call(this); + } + __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").off("block", __classPrivateFieldGet$e(this, _FilterIdSubscriber_poller, "f")); + } + resume() { this.start(); } +} +_FilterIdSubscriber_provider = new WeakMap(), _FilterIdSubscriber_filterIdPromise = new WeakMap(), _FilterIdSubscriber_poller = new WeakMap(), _FilterIdSubscriber_network = new WeakMap(), _FilterIdSubscriber_instances = new WeakSet(), _FilterIdSubscriber_poll = async function _FilterIdSubscriber_poll(blockNumber) { + try { + if (__classPrivateFieldGet$e(this, _FilterIdSubscriber_filterIdPromise, "f") == null) { + __classPrivateFieldSet$e(this, _FilterIdSubscriber_filterIdPromise, this._subscribe(__classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f")), "f"); + } + const filterId = await __classPrivateFieldGet$e(this, _FilterIdSubscriber_filterIdPromise, "f"); + if (filterId == null) { + __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f")._recoverSubscriber(this, this._recover(__classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f"))); + return; + } + const network = await __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").getNetwork(); + if (!__classPrivateFieldGet$e(this, _FilterIdSubscriber_network, "f")) { + __classPrivateFieldSet$e(this, _FilterIdSubscriber_network, network, "f"); + } + if (__classPrivateFieldGet$e(this, _FilterIdSubscriber_network, "f").chainId !== network.chainId) { + throw new Error("chaid changed"); + } + const result = await __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").send("eth_getFilterChanges", [filterId]); + await this._emitResults(__classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f"), result); + } + catch (error) { + console.log("@TODO", error); + } + __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").once("block", __classPrivateFieldGet$e(this, _FilterIdSubscriber_poller, "f")); +}, _FilterIdSubscriber_teardown = function _FilterIdSubscriber_teardown() { + const filterIdPromise = __classPrivateFieldGet$e(this, _FilterIdSubscriber_filterIdPromise, "f"); + if (filterIdPromise) { + __classPrivateFieldSet$e(this, _FilterIdSubscriber_filterIdPromise, null, "f"); + filterIdPromise.then((filterId) => { + __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").send("eth_uninstallFilter", [filterId]); + }); + } +}; +class FilterIdEventSubscriber extends FilterIdSubscriber { + constructor(provider, filter) { + super(provider); + _FilterIdEventSubscriber_event.set(this, void 0); + __classPrivateFieldSet$e(this, _FilterIdEventSubscriber_event, copy$1(filter), "f"); + } + _recover(provider) { + return new PollingEventSubscriber(provider, __classPrivateFieldGet$e(this, _FilterIdEventSubscriber_event, "f")); + } + async _subscribe(provider) { + const filterId = await provider.send("eth_newFilter", [__classPrivateFieldGet$e(this, _FilterIdEventSubscriber_event, "f")]); + console.log("____SUB", filterId); + return filterId; + } + async _emitResults(provider, results) { + const network = await provider.getNetwork(); + for (const result of results) { + const log = network.formatter.log(result, provider); + provider.emit(__classPrivateFieldGet$e(this, _FilterIdEventSubscriber_event, "f"), log); + } + } +} +_FilterIdEventSubscriber_event = new WeakMap(); +class FilterIdPendingSubscriber extends FilterIdSubscriber { + async _subscribe(provider) { + return await provider.send("eth_newPendingTransactionFilter", []); + } + async _emitResults(provider, results) { + const network = await provider.getNetwork(); + for (const result of results) { + provider.emit("pending", network.formatter.hash(result)); + } + } +} + +// @TODO: +// - Add the batching API +var __classPrivateFieldSet$d = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$d = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _JsonRpcApiProvider_nextId, _JsonRpcApiProvider_options, _JsonRpcProvider_connect, _JsonRpcProvider_pollingInterval; +function copy(value) { + return JSON.parse(JSON.stringify(value)); +} +const Primitive = "bigint,boolean,function,number,string,symbol".split(/,/g); +//const Methods = "getAddress,then".split(/,/g); +function deepCopy(value) { + if (value == null || Primitive.indexOf(typeof (value)) >= 0) { + return value; + } + // Keep any Addressable + if (typeof (value.getAddress) === "function") { + return value; + } + if (Array.isArray(value)) { + return (value.map(deepCopy)); + } + if (typeof (value) === "object") { + return Object.keys(value).reduce((accum, key) => { + accum[key] = value[key]; + return accum; + }, {}); + } + throw new Error(`should not happen: ${value} (${typeof (value)})`); +} +function getLowerCase(value) { + if (value) { + return value.toLowerCase(); + } + return value; +} +function isPollable(value) { + return (value && typeof (value.pollingInterval) === "number"); +} +const defaultOptions = { + // Default to use filter ID (the FilterIdSubscriber will + // fallback onto polling if subscription fails) + polling: false, + // Maximum batch size (in bytes) + batchMaxSize: (1 << 20), + // How long to wait before dispatching a new batch + batchStallTime: 250, +}; +// @TODO: Unchecked Signers +class JsonRpcSigner { + constructor(provider, address) { + defineProperties(this, { provider, address }); + } + connect(provider) { + return logger$5.throwError("cannot reconnect JsonRpcSigner", "UNSUPPORTED_OPERATION", { + operation: "signer.connect" + }); + } + async getAddress() { + return this.address; + } + async getNetwork() { + return await this.provider.getNetwork(); + } + async getFeeData() { + return await this.provider.getFeeData(); + } + async estimateGas(tx) { + return await this.provider.estimateGas(tx); + } + async call(tx) { + return await this.provider.call(tx); + } + async resolveName(name) { + return await this.provider.resolveName(name); + } + async getBalance(blockTag) { + return await this.provider.getBalanceOf(this.address); + } + async getTransactionCount(blockTag) { + return await this.provider.getTransactionCountOf(this.address); + } + // Returns just the hash of the transaction after sent, which is what + // the bare JSON-RPC API does; + async sendUncheckedTransaction(_tx) { + const tx = deepCopy(_tx); + const promises = []; + // Make sure the from matches the sender + if (tx.from) { + const _from = tx.from; + promises.push((async () => { + const from = await resolveAddress(_from, this.provider); + if (from == null || from.toLowerCase() !== this.address.toLowerCase()) { + logger$5.throwArgumentError("from address mismatch", "transaction", _tx); + } + tx.from = from; + })()); + } + else { + tx.from = this.address; + } + // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user + // wishes to use this, it is easy to specify explicitly, otherwise + // we look it up for them. + if (tx.gasLimit == null) { + promises.push((async () => { + tx.gasLimit = await this.provider.estimateGas(Object.assign(Object.assign({}, tx), { from: this.address })); + })()); + } + // The address may be an ENS name or Addressable + if (tx.to != null) { + const _to = tx.to; + promises.push((async () => { + tx.to = await resolveAddress(_to, this.provider); + })()); + } + // Wait until all of our properties are filled in + if (promises.length) { + await Promise.all(promises); + } + const hexTx = this.provider.getRpcTransaction(tx); + return this.provider.send("eth_sendTransaction", [hexTx]); + } + async sendTransaction(tx) { + // This cannot be mined any earlier than any recent block + const blockNumber = await this.provider.getBlockNumber(); + // Send the transaction + const hash = await this.sendUncheckedTransaction(tx); + // Unfortunately, JSON-RPC only provides and opaque transaction hash + // for a response, and we need the actual transaction, so we poll + // for it; it should show up very quickly + return await (new Promise((resolve, reject) => { + const checkTx = async (duration) => { + // Try getting the transaction + const tx = await this.provider.getTransaction(hash); + if (tx != null) { + resolve(this.provider._wrapTransaction(tx, hash, blockNumber)); + return; + } + // Wait another 4 seconds + this.provider._setTimeout(() => { checkTx(4000); }, duration); + }; + checkTx(1000); + })); + } + async signTransaction(_tx) { + const tx = deepCopy(_tx); + // Make sure the from matches the sender + if (tx.from) { + const from = await resolveAddress(tx.from, this.provider); + if (from == null || from.toLowerCase() !== this.address.toLowerCase()) { + return logger$5.throwArgumentError("from address mismatch", "transaction", _tx); + } + tx.from = from; + } + else { + tx.from = this.address; + } + const hexTx = this.provider.getRpcTransaction(tx); + return await this.provider.send("eth_sign_Transaction", [hexTx]); + } + async signMessage(_message) { + const message = ((typeof (_message) === "string") ? toUtf8Bytes(_message) : _message); + return await this.provider.send("personal_sign", [ + hexlify(message), this.address.toLowerCase() + ]); + } + async signTypedData(domain, types, _value) { + const value = deepCopy(_value); + // Populate any ENS names (in-place) + const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value) => { + const address = await resolveAddress(value); + if (address == null) { + return logger$5.throwArgumentError("TypedData does not support null address", "value", value); + } + return address; + }); + return await this.provider.send("eth_signTypedData_v4", [ + this.address.toLowerCase(), + JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value)) + ]); + } + async unlock(password) { + return this.provider.send("personal_unlockAccount", [ + this.address.toLowerCase(), password, null + ]); + } + // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign + async _legacySignMessage(_message) { + const message = ((typeof (_message) === "string") ? toUtf8Bytes(_message) : _message); + return await this.provider.send("eth_sign", [ + this.address.toLowerCase(), hexlify(message) + ]); + } +} +class JsonRpcApiProvider extends AbstractProvider { + constructor(network) { + super(network); + _JsonRpcApiProvider_nextId.set(this, void 0); + _JsonRpcApiProvider_options.set(this, void 0); + __classPrivateFieldSet$d(this, _JsonRpcApiProvider_nextId, 1, "f"); + __classPrivateFieldSet$d(this, _JsonRpcApiProvider_options, Object.assign({}, defaultOptions), "f"); + } + _getOptions(key) { + return __classPrivateFieldGet$d(this, _JsonRpcApiProvider_options, "f")[key]; + } + _setOptions(options) { + // Validate all the options + for (const _key in options) { + const key = _key; + const value = options[key]; + if (typeof (value) !== typeof (__classPrivateFieldGet$d(this, _JsonRpcApiProvider_options, "f")[key])) { + return logger$5.throwArgumentError("invalid option value", `options.${key}`, value); + } + } + // Update the values + for (const _key in options) { + const key = _key; + __classPrivateFieldGet$d(this, _JsonRpcApiProvider_options, "f")[key] = (options[key]); + } + } + prepareRequest(method, params) { + var _a, _b; + return { + method, params, id: (__classPrivateFieldSet$d(this, _JsonRpcApiProvider_nextId, (_b = __classPrivateFieldGet$d(this, _JsonRpcApiProvider_nextId, "f"), _a = _b++, _b), "f"), _a), jsonrpc: "2.0" + }; + } + // Sends the payload to the backend + //async sendPayload(payload: any): Promise { + // throw new Error("sub-class must implement this"); + //} + async send(method, params) { + // @TODO: This should construct and queue the payload + throw new Error("sub-class must implement this"); + } + async getSigner(address = 0) { + const network = await this.getNetwork(); + const accounts = await this.send("eth_accounts", []); + // Account index + if (typeof (address) === "number") { + if (address > accounts.length) { + throw new Error("no such account"); + } + return new JsonRpcSigner(this, accounts[address]); + } + // Account address + address = network.formatter.address(address); + for (const account of accounts) { + if (network.formatter.address(account) === account) { + return new JsonRpcSigner(this, account); + } + } + throw new Error("invalid account"); + } + // Sub-classes can override this; it detects the *actual* network we + // are connected to + async _detectNetwork() { + return Network$1.from(logger$5.getBigInt(await this._perform({ method: "chainId" }))); + } + _getSubscriber(sub) { + // Pending Filters aren't availble via polling + if (sub.type === "pending") { + return new FilterIdPendingSubscriber(this); + } + if (sub.type === "event") { + return new FilterIdEventSubscriber(this, sub.filter); + } + // Orphaned Logs are handled automatically, by the filter, since + // logs with removed are emitted by it + if (sub.type === "orphan" && sub.filter.orphan === "drop-log") { + return new UnmanagedSubscriber("orphan"); + } + return super._getSubscriber(sub); + } + getRpcTransaction(tx) { + const result = {}; + // JSON-RPC now requires numeric values to be "quantity" values + ["chainId", "gasLimit", "gasPrice", "type", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "value"].forEach((key) => { + if (tx[key] == null) { + return; + } + let dstKey = key; + if (key === "gasLimit") { + dstKey = "gas"; + } + result[dstKey] = quantity(tx[key]); + }); + // Make sure addresses and data are lowercase + ["from", "to", "data"].forEach((key) => { + if (tx[key] == null) { + return; + } + result[key] = hexlify(tx[key]); + }); + // Normalize the access list object + if (tx.accessList) { + result["accessList"] = accessListify(tx.accessList); + } + return result; + } + getRpcRequest(req) { + switch (req.method) { + case "chainId": + return { method: "eth_chainId", args: [] }; + case "getBlockNumber": + return { method: "eth_blockNumber", args: [] }; + case "getGasPrice": + return { method: "eth_gasPrice", args: [] }; + case "getBalance": + return { + method: "eth_getBalance", + args: [getLowerCase(req.address), req.blockTag] + }; + case "getTransactionCount": + return { + method: "eth_getTransactionCount", + args: [getLowerCase(req.address), req.blockTag] + }; + case "getCode": + return { + method: "eth_getCode", + args: [getLowerCase(req.address), req.blockTag] + }; + case "getStorageAt": + return { + method: "eth_getStorageAt", + args: [ + getLowerCase(req.address), + ("0x" + req.position.toString(16)), + req.blockTag + ] + }; + case "sendTransaction": + return { + method: "eth_sendRawTransaction", + args: [req.signedTransaction] + }; + case "getBlock": + if ("blockTag" in req) { + return { + method: "eth_getBlockByNumber", + args: [req.blockTag, !!req.includeTransactions] + }; + } + else if ("blockHash" in req) { + return { + method: "eth_getBlockByHash", + args: [req.blockHash, !!req.includeTransactions] + }; + } + break; + case "getTransaction": + return { + method: "eth_getTransactionByHash", + args: [req.hash] + }; + case "getTransactionReceipt": + return { + method: "eth_getTransactionReceipt", + args: [req.hash] + }; + case "call": + return { + method: "eth_call", + args: [this.getRpcTransaction(req.transaction), req.blockTag] + }; + case "estimateGas": { + return { + method: "eth_estimateGas", + args: [this.getRpcTransaction(req.transaction)] + }; + } + case "getLogs": + if (req.filter && req.filter.address != null) { + if (Array.isArray(req.filter.address)) { + req.filter.address = req.filter.address.map(getLowerCase); + } + else { + req.filter.address = getLowerCase(req.filter.address); + } + } + return { method: "eth_getLogs", args: [req.filter] }; + } + return null; + } + getRpcError(method, args, error) { + if (method === "eth_call") { + const result = spelunkData(error); + if (result) { + // @TODO: Extract errorSignature, errorName, errorArgs, reason if + // it is Error(string) or Panic(uint25) + return logger$5.makeError("execution reverted during JSON-RPC call", "CALL_EXCEPTION", { + data: result.data, + transaction: args[0] + }); + } + return logger$5.makeError("missing revert data during JSON-RPC call", "CALL_EXCEPTION", { + data: "0x", transaction: args[0], info: { error } + }); + } + const message = JSON.stringify(spelunkMessage(error)); + if (message.match(/insufficient funds|base fee exceeds gas limit/)) { + return logger$5.makeError("insufficient funds for intrinsic transaction cost", "INSUFFICIENT_FUNDS", { + transaction: args[0] + }); + } + if (message.match(/nonce/) && message.match(/too low/)) { + return logger$5.makeError("nonce has already been used", "NONCE_EXPIRED", { + transaction: args[0] + }); + } + // "replacement transaction underpriced" + if (message.match(/replacement transaction/) && message.match(/underpriced/)) { + return logger$5.makeError("replacement fee too low", "REPLACEMENT_UNDERPRICED", { + transaction: args[0] + }); + } + if (message.match(/only replay-protected/)) { + return logger$5.makeError("legacy pre-eip-155 transactions not supported", "UNSUPPORTED_OPERATION", { + operation: method, info: { transaction: args[0] } + }); + } + if (method === "estimateGas" && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) { + return logger$5.makeError("cannot estimate gas; transaction may fail or may require manual gas limit", "UNPREDICTABLE_GAS_LIMIT", { + transaction: args[0] + }); + } + return error; + } + async _perform(req) { + // Legacy networks do not like the type field being passed along (which + // is fair), so we delete type if it is 0 and a non-EIP-1559 network + if (req.method === "call" || req.method === "estimateGas") { + let tx = req.transaction; + if (tx && tx.type != null && logger$5.getBigInt(tx.type)) { + // If there are no EIP-1559 properties, it might be non-EIP-a559 + if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) { + const feeData = await this.getFeeData(); + if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) { + // Network doesn't know about EIP-1559 (and hence type) + req = Object.assign({}, req, { + transaction: Object.assign({}, tx, { type: undefined }) + }); + } + } + } + } + const request = this.getRpcRequest(req); + if (request != null) { + this.emit("debug", { type: "sendRequest", request }); + try { + const result = await this.send(request.method, request.args); + //console.log("RR", result); + this.emit("debug", { type: "getResponse", result }); + return result; + } + catch (error) { + this.emit("debug", { type: "getError", error }); + throw this.getRpcError(request.method, request.args, error); + } + } + return super._perform(req); + } +} +_JsonRpcApiProvider_nextId = new WeakMap(), _JsonRpcApiProvider_options = new WeakMap(); +class JsonRpcProvider extends JsonRpcApiProvider { + constructor(url, network) { + if (url == null) { + url = "http:/\/localhost:8545"; + } + super(network); + _JsonRpcProvider_connect.set(this, void 0); + _JsonRpcProvider_pollingInterval.set(this, void 0); + if (typeof (url) === "string") { + __classPrivateFieldSet$d(this, _JsonRpcProvider_connect, { request: new FetchRequest(url) }, "f"); + } + else { + __classPrivateFieldSet$d(this, _JsonRpcProvider_connect, Object.assign({}, url), "f"); + __classPrivateFieldGet$d(this, _JsonRpcProvider_connect, "f").request = __classPrivateFieldGet$d(this, _JsonRpcProvider_connect, "f").request.clone(); + } + __classPrivateFieldSet$d(this, _JsonRpcProvider_pollingInterval, 4000, "f"); + } + async send(method, params) { + params = copy(params); + // Configure a POST connection for the requested method + const connection = Object.assign({}, __classPrivateFieldGet$d(this, _JsonRpcProvider_connect, "f")); + connection.request = connection.request.clone(); + connection.request.body = this.prepareRequest(method, params); + const result = (await fetchData(connection)).bodyJson; + if ("error" in result) { + return logger$5.throwError("error from JSON-RPC", "UNKNOWN_ERROR", { + result + }); + } + return result.result; + } + get pollingInterval() { return __classPrivateFieldGet$d(this, _JsonRpcProvider_pollingInterval, "f"); } + set pollingInterval(value) { + if (!Number.isInteger(value) || value < 0) { + throw new Error("invalid interval"); + } + __classPrivateFieldSet$d(this, _JsonRpcProvider_pollingInterval, value, "f"); + this._forEachSubscriber((sub) => { + if (isPollable(sub)) { + sub.pollingInterval = __classPrivateFieldGet$d(this, _JsonRpcProvider_pollingInterval, "f"); + } + }); + } +} +_JsonRpcProvider_connect = new WeakMap(), _JsonRpcProvider_pollingInterval = new WeakMap(); +// This class should only be used when it is not possible for the +// underlying network to change, such as with INFURA. If you are +// using MetaMask or some other client which allows users to change +// their network DO NOT USE THIS. Bad things will happen. +class StaticJsonRpcProvider extends JsonRpcProvider { + constructor(url, network) { + super(url, network); + defineProperties(this, { network }); + } + async _detectNetwork() { + return this.network; + } +} +function spelunkData(value) { + if (value == null) { + return null; + } + // These *are* the droids we're looking for. + if (typeof (value.message) === "string" && value.message.match("reverted") && isHexString(value.data)) { + return { message: value.message, data: value.data }; + } + // Spelunk further... + if (typeof (value) === "object") { + for (const key in value) { + const result = spelunkData(value[key]); + if (result) { + return result; + } + } + return null; + } + // Might be a JSON string we can further descend... + if (typeof (value) === "string") { + try { + return spelunkData(JSON.parse(value)); + } + catch (error) { } + } + return null; +} +function _spelunkMessage(value, result) { + if (value == null) { + return; + } + // These *are* the droids we're looking for. + if (typeof (value.message) === "string") { + result.push(value.message); + } + // Spelunk further... + if (typeof (value) === "object") { + for (const key in value) { + _spelunkMessage(value[key], result); + } + } + // Might be a JSON string we can further descend... + if (typeof (value) === "string") { + try { + return _spelunkMessage(JSON.parse(value), result); + } + catch (error) { } + } +} +function spelunkMessage(value) { + const result = []; + _spelunkMessage(value, result); + return result; +} + +const defaultApiKey$2 = "9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972"; +function getHost$3(name) { + switch (name) { + case "homestead": + return "rpc.ankr.com/eth"; + case "matic": + return "rpc.ankr.com/polygon"; + case "arbitrum": + return "rpc.ankr.com/arbitrum"; + } + return logger$5.throwArgumentError("unsupported network", "network", name); +} +class AnkrProvider extends StaticJsonRpcProvider { + constructor(_network = "homestead", apiKey) { + const network = Network$1.from(_network); + if (apiKey == null) { + apiKey = defaultApiKey$2; + } + const connection = AnkrProvider.getConnection(network, apiKey); + super(connection, network); + defineProperties(this, { apiKey }); + // Ankr does not support filterId, so we force polling + super._setOptions({ polling: true }); + } + _getProvider(chainId) { + try { + return new AnkrProvider(chainId, this.apiKey); + } + catch (error) { } + return super._getProvider(chainId); + } + static getConnection(network, apiKey) { + if (apiKey == null) { + apiKey = defaultApiKey$2; + } + const request = new FetchRequest(`https:/\/${getHost$3(network.name)}/${apiKey}`); + request.allowGzip = true; + const throttleRetry = async (request, response, attempt) => { + if (apiKey === defaultApiKey$2) { + showThrottleMessage("AnkrProvider"); + } + return true; + }; + return { request, throttleRetry }; + } + isCommunityResource() { + return (this.apiKey === defaultApiKey$2); + } +} + +const defaultApiKey$1 = "_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC"; +function getHost$2(name) { + switch (name) { + case "homestead": + return "eth-mainnet.alchemyapi.io"; + case "ropsten": + return "eth-ropsten.alchemyapi.io"; + case "rinkeby": + return "eth-rinkeby.alchemyapi.io"; + case "goerli": + return "eth-goerli.alchemyapi.io"; + case "kovan": + return "eth-kovan.alchemyapi.io"; + case "matic": + return "polygon-mainnet.g.alchemy.com"; + case "maticmum": + return "polygon-mumbai.g.alchemy.com"; + case "arbitrum": + return "arb-mainnet.g.alchemy.com"; + case "arbitrum-rinkeby": + return "arb-rinkeby.g.alchemy.com"; + case "optimism": + return "opt-mainnet.g.alchemy.com"; + case "optimism-kovan": + return "opt-kovan.g.alchemy.com"; + } + return logger$5.throwArgumentError("unsupported network", "network", name); +} +class AlchemyProvider extends StaticJsonRpcProvider { + constructor(_network = "homestead", apiKey) { + const network = Network$1.from(_network); + if (apiKey == null) { + apiKey = defaultApiKey$1; + } + super(AlchemyProvider.getConnection(network, apiKey), network); + defineProperties(this, { apiKey }); + } + _getProvider(chainId) { + try { + return new AlchemyProvider(chainId, this.apiKey); + } + catch (error) { } + return super._getProvider(chainId); + } + isCommunityResource() { + return (this.apiKey === defaultApiKey$1); + } + static getConnection(network, apiKey) { + if (apiKey == null) { + apiKey = defaultApiKey$1; + } + const request = new FetchRequest(`https:/\/${getHost$2(network.name)}/v2/${apiKey}`); + request.allowGzip = true; + const throttleRetry = async (request, response, attempt) => { + if (apiKey === defaultApiKey$1) { + showThrottleMessage("alchemy"); + } + return true; + }; + return { request, throttleRetry }; + } +} + +class CloudflareProvider extends StaticJsonRpcProvider { + constructor(_network = "homestead") { + const network = Network$1.from(_network); + if (network.name !== "homestead") { + return logger$5.throwArgumentError("unsupported network", "network", _network); + } + super("https:/\/cloudflare-eth.com/", network); + } +} + +const defaultApiKey = "9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB"; +const EtherscanPluginId = "org.ethers.plugins.etherscan"; +class EtherscanPlugin extends NetworkPlugin { + constructor(baseUrl, communityApiKey) { + super(EtherscanPluginId); + //if (communityApiKey == null) { communityApiKey = null; } + defineProperties(this, { baseUrl, communityApiKey }); + } + clone() { + return new EtherscanPlugin(this.baseUrl, this.communityApiKey); + } +} +class EtherscanProvider extends AbstractProvider { + constructor(_network, apiKey) { + super(); + const network = Network$1.from(_network); + if (apiKey == null) { + const plugin = network.getPlugin(EtherscanPluginId); + if (plugin) { + apiKey = plugin.communityApiKey; + } + else { + apiKey = defaultApiKey; + } + } + defineProperties(this, { apiKey, network }); + // Test that the network is supported by Etherscan + this.getBaseUrl(); + } + getBaseUrl() { + const plugin = this.network.getPlugin(EtherscanPluginId); + if (plugin) { + return plugin.baseUrl; + } + switch (this.network.name) { + case "homestead": + return "https:/\/api.etherscan.io"; + case "ropsten": + return "https:/\/api-ropsten.etherscan.io"; + case "rinkeby": + return "https:/\/api-rinkeby.etherscan.io"; + case "kovan": + return "https:/\/api-kovan.etherscan.io"; + case "goerli": + return "https:/\/api-goerli.etherscan.io"; + } + return logger$5.throwArgumentError("unsupported network", "network", this.network); + } + getUrl(module, params) { + const query = Object.keys(params).reduce((accum, key) => { + const value = params[key]; + if (value != null) { + accum += `&${key}=${value}`; + } + return accum; + }, ""); + const apiKey = ((this.apiKey) ? `&apikey=${this.apiKey}` : ""); + return `${this.getBaseUrl()}/api?module=${module}${query}${apiKey}`; + } + getPostUrl() { + return `${this.getBaseUrl()}/api`; + } + getPostData(module, params) { + params.module = module; + params.apikey = this.apiKey; + return params; + } + async detectNetwork() { + return this.network; + } + async fetch(module, params, post) { + const url = (post ? this.getPostUrl() : this.getUrl(module, params)); + const payload = (post ? this.getPostData(module, params) : null); + /* + this.emit("debug", { + action: "request", + request: url, + provider: this + }); + */ + const request = new FetchRequest(url); + const connection = { + request, + throttleSlotInterval: 1000, + processResponse: async (request, response) => { + const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)) : {}; + const throttle = ((typeof (result.result) === "string") ? result.result : "").toLowerCase().indexOf("rate limit") >= 0; + if (module === "proxy") { + // This JSON response indicates we are being throttled + if (result && result.status == 0 && result.message == "NOTOK" && throttle) { + response.throwThrottleError(result.result); + } + } + else { + if (throttle) { + response.throwThrottleError(result.result); + } + } + return response; + }, + }; + if (payload) { + request.setHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8"); + request.body = Object.keys(payload).map((k) => `${k}=${payload[k]}`).join("&"); + } + const response = await fetchData(connection); + if (!response.hasBody()) { + throw new Error(); + } + /* + this.emit("debug", { + action: "response", + request: url, + response: deepCopy(result), + provider: this + }); + */ + const result = JSON.parse(toUtf8String(response.body)); + if (module === "proxy") { + if (result.jsonrpc != "2.0") { + // @TODO: not any + const error = new Error("invalid response"); + error.result = JSON.stringify(result); + throw error; + } + if (result.error) { + // @TODO: not any + const error = new Error(result.error.message || "unknown error"); + if (result.error.code) { + error.code = result.error.code; + } + if (result.error.data) { + error.data = result.error.data; + } + throw error; + } + return result.result; + } + else { + // getLogs, getHistory have weird success responses + if (result.status == 0 && (result.message === "No records found" || result.message === "No transactions found")) { + return result.result; + } + if (result.status != 1 || result.message != "OK") { + const error = new Error("invalid response"); + error.result = JSON.stringify(result); + // if ((result.result || "").toLowerCase().indexOf("rate limit") >= 0) { + // error.throttleRetry = true; + // } + throw error; + } + return result.result; + } + } + // The transaction has already been sanitized by the calls in Provider + _getTransactionPostData(transaction) { + const result = {}; + for (let key in transaction) { + if (transaction[key] == null) { + continue; + } + let value = transaction[key]; + if (key === "type" && value === 0) { + continue; + } + // Quantity-types require no leading zero, unless 0 + if ({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true }[key]) { + value = quantity(hexlify(value)); + } + else if (key === "accessList") { + value = "[" + this.network.formatter.accessList(value).map((set) => { + return `{address:"${set.address}",storageKeys:["${set.storageKeys.join('","')}"]}`; + }).join(",") + "]"; + } + else { + value = hexlify(value); + } + result[key] = value; + } + return result; + } + _checkError(req, error, transaction) { + /* + let body = ""; + if (isError(error, Logger.Errors.SERVER_ERROR) && error.response && error.response.hasBody()) { + body = toUtf8String(error.response.body); + } + console.log(body); + + // Undo the "convenience" some nodes are attempting to prevent backwards + // incompatibility; maybe for v6 consider forwarding reverts as errors + if (method === "call" && body) { + + // Etherscan keeps changing their string + if (body.match(/reverted/i) || body.match(/VM execution error/i)) { + + // Etherscan prefixes the data like "Reverted 0x1234" + let data = e.data; + if (data) { data = "0x" + data.replace(/^.*0x/i, ""); } + if (!isHexString(data)) { data = "0x"; } + + logger.throwError("call exception", Logger.Errors.CALL_EXCEPTION, { + error, data + }); + } + } + + // Get the message from any nested error structure + let message = error.message; + if (isError(error, Logger.Errors.SERVER_ERROR)) { + if (error.error && typeof(error.error.message) === "string") { + message = error.error.message; + } else if (typeof(error.body) === "string") { + message = error.body; + } else if (typeof(error.responseText) === "string") { + message = error.responseText; + } + } + message = (message || "").toLowerCase(); + + // "Insufficient funds. The account you tried to send transaction from + // does not have enough funds. Required 21464000000000 and got: 0" + if (message.match(/insufficient funds/)) { + logger.throwError("insufficient funds for intrinsic transaction cost", Logger.Errors.INSUFFICIENT_FUNDS, { + error, transaction, info: { method } + }); + } + + // "Transaction with the same hash was already imported." + if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) { + logger.throwError("nonce has already been used", Logger.Errors.NONCE_EXPIRED, { + error, transaction, info: { method } + }); + } + + // "Transaction gas price is too low. There is another transaction with + // same nonce in the queue. Try increasing the gas price or incrementing the nonce." + if (message.match(/another transaction with same nonce/)) { + logger.throwError("replacement fee too low", Logger.Errors.REPLACEMENT_UNDERPRICED, { + error, transaction, info: { method } + }); + } + + if (message.match(/execution failed due to an exception|execution reverted/)) { + logger.throwError("cannot estimate gas; transaction may fail or may require manual gas limit", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { + error, transaction, info: { method } + }); + } + */ + throw error; + } + async _detectNetwork() { + return this.network; + } + async _perform(req) { + switch (req.method) { + case "chainId": + return this.network.chainId; + case "getBlockNumber": + return this.fetch("proxy", { action: "eth_blockNumber" }); + case "getGasPrice": + return this.fetch("proxy", { action: "eth_gasPrice" }); + case "getBalance": + // Returns base-10 result + return this.fetch("account", { + action: "balance", + address: req.address, + tag: req.blockTag + }); + case "getTransactionCount": + return this.fetch("proxy", { + action: "eth_getTransactionCount", + address: req.address, + tag: req.blockTag + }); + case "getCode": + return this.fetch("proxy", { + action: "eth_getCode", + address: req.address, + tag: req.blockTag + }); + case "getStorageAt": + return this.fetch("proxy", { + action: "eth_getStorageAt", + address: req.address, + position: req.position, + tag: req.blockTag + }); + case "sendTransaction": + return this.fetch("proxy", { + action: "eth_sendRawTransaction", + hex: req.signedTransaction + }, true).catch((error) => { + return this._checkError(req, error, req.signedTransaction); + }); + case "getBlock": + if ("blockTag" in req) { + return this.fetch("proxy", { + action: "eth_getBlockByNumber", + tag: req.blockTag, + boolean: (req.includeTransactions ? "true" : "false") + }); + } + return logger$5.throwError("getBlock by blockHash not supported by Etherscan", "UNSUPPORTED_OPERATION", { + operation: "getBlock(blockHash)" + }); + case "getTransaction": + return this.fetch("proxy", { + action: "eth_getTransactionByHash", + txhash: req.hash + }); + case "getTransactionReceipt": + return this.fetch("proxy", { + action: "eth_getTransactionReceipt", + txhash: req.hash + }); + case "call": { + if (req.blockTag !== "latest") { + throw new Error("EtherscanProvider does not support blockTag for call"); + } + const postData = this._getTransactionPostData(req.transaction); + postData.module = "proxy"; + postData.action = "eth_call"; + try { + return await this.fetch("proxy", postData, true); + } + catch (error) { + return this._checkError(req, error, req.transaction); + } + } + case "estimateGas": { + const postData = this._getTransactionPostData(req.transaction); + postData.module = "proxy"; + postData.action = "eth_estimateGas"; + try { + return await this.fetch("proxy", postData, true); + } + catch (error) { + return this._checkError(req, error, req.transaction); + } + } + } + return super._perform(req); + } + async getNetwork() { + return this.network; + } + async getEtherPrice() { + if (this.network.name !== "homestead") { + return 0.0; + } + return parseFloat((await this.fetch("stats", { action: "ethprice" })).ethusd); + } + isCommunityResource() { + const plugin = this.network.getPlugin(EtherscanPluginId); + if (plugin) { + return (plugin.communityApiKey === this.apiKey); + } + return (defaultApiKey === this.apiKey); + } +} +/* +(async function() { + const provider = new EtherscanProvider(); + console.log(provider); + console.log(await provider.getBlockNumber()); + / * + provider.on("block", (b) => { + console.log("BB", b); + }); + console.log(await provider.getTransactionReceipt("0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e")); + + provider.once("0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e", (tx) => { + console.log("TT", tx); + }); + * / + try { + console.log(await provider.getBlock(100)); + } catch (error) { + console.log(error); + } + + try { + console.log(await provider.getBlock(13821768)); + } catch (error) { + console.log(error); + } + +})(); +*/ + +const defaultProjectId = "84842078b09946638c03157f83405213"; +function getHost$1(name) { + switch (name) { + case "homestead": + return "mainnet.infura.io"; + case "ropsten": + return "ropsten.infura.io"; + case "rinkeby": + return "rinkeby.infura.io"; + case "kovan": + return "kovan.infura.io"; + case "goerli": + return "goerli.infura.io"; + case "matic": + return "polygon-mainnet.infura.io"; + case "maticmum": + return "polygon-mumbai.infura.io"; + case "optimism": + return "optimism-mainnet.infura.io"; + case "optimism-kovan": + return "optimism-kovan.infura.io"; + case "arbitrum": + return "arbitrum-mainnet.infura.io"; + case "arbitrum-rinkeby": + return "arbitrum-rinkeby.infura.io"; + } + return logger$5.throwArgumentError("unsupported network", "network", name); +} +class InfuraProvider extends StaticJsonRpcProvider { + constructor(_network = "homestead", projectId, projectSecret) { + const network = Network$1.from(_network); + if (projectId == null) { + projectId = defaultProjectId; + } + if (projectSecret == null) { + projectSecret = null; + } + const connection = InfuraProvider.getConnection(network, projectId, projectSecret); + super(connection, network); + defineProperties(this, { projectId, projectSecret }); + } + _getProvider(chainId) { + try { + return new InfuraProvider(chainId, this.projectId, this.projectSecret); + } + catch (error) { } + return super._getProvider(chainId); + } + static getConnection(network, projectId, projectSecret) { + if (projectId == null) { + projectId = defaultProjectId; + } + if (projectSecret == null) { + projectSecret = null; + } + const request = new FetchRequest(`https:/\/${getHost$1(network.name)}/v3/${projectId}`); + request.allowGzip = true; + if (projectSecret) { + request.setCredentials("", projectSecret); + } + const throttleRetry = async (request, response, attempt) => { + if (projectId === defaultProjectId) { + showThrottleMessage("InfuraProvider"); + } + return true; + }; + return { request, throttleRetry }; + } + isCommunityResource() { + return (this.projectId === defaultProjectId); + } +} + +// These are load-balancer-based application IDs +const defaultAppIds = { + homestead: "6004bcd10040261633ade990", + ropsten: "6004bd4d0040261633ade991", + rinkeby: "6004bda20040261633ade994", + goerli: "6004bd860040261633ade992", +}; +function getHost(name) { + switch (name) { + case "homestead": + return "eth-mainnet.gateway.pokt.network"; + case "ropsten": + return "eth-ropsten.gateway.pokt.network"; + case "rinkeby": + return "eth-rinkeby.gateway.pokt.network"; + case "goerli": + return "eth-goerli.gateway.pokt.network"; + } + return logger$5.throwArgumentError("unsupported network", "network", name); +} +function normalizeApiKey(network, _appId, applicationSecretKey, loadBalancer) { + loadBalancer = !!loadBalancer; + let community = false; + let applicationId = _appId; + if (applicationId == null) { + applicationId = defaultAppIds[network.name]; + if (applicationId == null) { + logger$5.throwArgumentError("network does not support default applicationId", "applicationId", _appId); + } + loadBalancer = true; + community = true; + } + else if (applicationId === defaultAppIds[network.name]) { + loadBalancer = true; + community = true; + } + if (applicationSecretKey == null) { + applicationSecretKey = null; + } + return { applicationId, applicationSecretKey, community, loadBalancer }; +} +class PocketProvider extends StaticJsonRpcProvider { + constructor(_network = "homestead", _appId, _secretKey, _loadBalancer) { + const network = Network$1.from(_network); + const { applicationId, applicationSecretKey, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer); + const connection = PocketProvider.getConnection(network, applicationId, applicationSecretKey, loadBalancer); + super(connection, network); + defineProperties(this, { applicationId, applicationSecretKey, loadBalancer }); + } + static getConnection(network, _appId, _secretKey, _loadBalancer) { + const { applicationId, applicationSecretKey, community, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer); + let url = `https:/\/${getHost(network.name)}/v1/`; + if (loadBalancer) { + url += "lb/"; + } + url += applicationId; + const request = new FetchRequest(url); + request.allowGzip = true; + if (applicationSecretKey) { + request.setCredentials("", applicationSecretKey); + } + const throttleRetry = async (request, response, attempt) => { + if (community) { + showThrottleMessage("PocketProvider"); + } + return true; + }; + return { request, throttleRetry }; + } + isCommunityResource() { + return (this.applicationId === defaultAppIds[this.network.name]); + } +} + +function shuffle(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + const tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + } +} + +var __classPrivateFieldSet$c = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$c = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _FallbackProvider_instances, _FallbackProvider_configs, _FallbackProvider_initialSyncPromise, _FallbackProvider_getNextConfig, _FallbackProvider_addRunner, _FallbackProvider_initialSync, _FallbackProvider_checkQuorum, _FallbackProvider_waitForQuorum; +//const BN_0 = BigInt("0"); +const BN_1 = BigInt("1"); +const BN_2 = BigInt("2"); +function stall$2(duration) { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} +function getTime() { return (new Date()).getTime(); } +const defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 }; +const defaultState = { + blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0, + outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0, + _network: null, _updateNumber: null, _totalTime: 0 +}; +async function waitForSync(config, blockNumber) { + while (config.blockNumber < 0 || config.blockNumber < blockNumber) { + if (!config._updateNumber) { + config._updateNumber = (async () => { + const blockNumber = await config.provider.getBlockNumber(); + if (blockNumber > config.blockNumber) { + config.blockNumber = blockNumber; + } + config._updateNumber = null; + })(); + } + await config._updateNumber; + config.outOfSync++; + } +} +// Normalizes a result to a string that can be used to compare against +// other results using normal string equality +function normalize(network, value, req) { + switch (req.method) { + case "chainId": + return logger$5.getBigInt(value).toString(); + case "getBlockNumber": + return logger$5.getNumber(value).toString(); + case "getGasPrice": + return logger$5.getBigInt(value).toString(); + case "getBalance": + return logger$5.getBigInt(value).toString(); + case "getTransactionCount": + return logger$5.getNumber(value).toString(); + case "getCode": + return hexlify(value); + case "getStorageAt": + return hexlify(value); + case "getBlock": + if (req.includeTransactions) { + return JSON.stringify(network.formatter.blockWithTransactions(value)); + } + return JSON.stringify(network.formatter.block(value)); + case "getTransaction": + return JSON.stringify(network.formatter.transactionResponse(value)); + case "getTransactionReceipt": + return JSON.stringify(network.formatter.receipt(value)); + case "call": + return hexlify(value); + case "estimateGas": + return logger$5.getBigInt(value).toString(); + case "getLogs": + return JSON.stringify(value.map((v) => network.formatter.log(v))); + } + return logger$5.throwError("unsupported method", "UNSUPPORTED_OPERATION", { + operation: `_perform(${JSON.stringify(req.method)})` + }); +} +// This strategy picks the highest wieght result, as long as the weight is +// equal to or greater than quorum +function checkQuorum(quorum, results) { + const tally = new Map(); + for (const { result, normal, weight } of results) { + const t = tally.get(normal) || { result, weight: 0 }; + t.weight += weight; + tally.set(normal, t); + } + let bestWeight = 0; + let bestResult = undefined; + for (const { weight, result } of tally.values()) { + if (weight >= quorum && weight > bestWeight) { + bestWeight = weight; + bestResult = result; + } + } + return bestResult; +} +/* +function getMean(results: Array): bigint { + const total = results.reduce((a, r) => (a + BigInt(r.result)), BN_0); + return total / BigInt(results.length); +} +*/ +function getMedian(results) { + // Get the sorted values + const values = results.map((r) => BigInt(r.result)); + values.sort((a, b) => ((a < b) ? -1 : (b > a) ? 1 : 0)); + const mid = values.length / 2; + // Odd-length; take the middle value + if (values.length % 2) { + return values[mid]; + } + // Even length; take the ceiling of the mean of the center two values + return (values[mid - 1] + values[mid] + BN_1) / BN_2; +} +class FallbackProvider extends AbstractProvider { + constructor(providers, network) { + super(network); + _FallbackProvider_instances.add(this); + _FallbackProvider_configs.set(this, void 0); + _FallbackProvider_initialSyncPromise.set(this, void 0); + __classPrivateFieldSet$c(this, _FallbackProvider_configs, providers.map((p) => { + if (p instanceof AbstractProvider) { + return Object.assign({ provider: p }, defaultConfig, defaultState); + } + else { + return Object.assign({}, defaultConfig, p, defaultState); + } + }), "f"); + __classPrivateFieldSet$c(this, _FallbackProvider_initialSyncPromise, null, "f"); + this.quorum = 2; //Math.ceil(providers.length / 2); + this.eventQuorum = 1; + this.eventWorkers = 1; + if (this.quorum > __classPrivateFieldGet$c(this, _FallbackProvider_configs, "f").reduce((a, c) => (a + c.weight), 0)) { + logger$5.throwArgumentError("quorum exceed provider wieght", "quorum", this.quorum); + } + } + async _detectNetwork() { + return Network$1.from(logger$5.getBigInt(await this._perform({ method: "chainId" }))).freeze(); + } + _getSubscriber(sub) { + throw new Error("@TODO"); + } + async _perform(req) { + await __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_initialSync).call(this); + // Bootstrap enough to meet quorum + const running = new Set(); + for (let i = 0; i < this.quorum; i++) { + __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_addRunner).call(this, running, req); + } + const result = __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_waitForQuorum).call(this, running, req); + for (const runner of running) { + runner.done = true; + } + return result; + } +} +_FallbackProvider_configs = new WeakMap(), _FallbackProvider_initialSyncPromise = new WeakMap(), _FallbackProvider_instances = new WeakSet(), _FallbackProvider_getNextConfig = function _FallbackProvider_getNextConfig(configs) { + // Shuffle the states, sorted by priority + const allConfigs = __classPrivateFieldGet$c(this, _FallbackProvider_configs, "f").slice(); + shuffle(allConfigs); + allConfigs.sort((a, b) => (b.priority - a.priority)); + for (const config of allConfigs) { + if (configs.indexOf(config) === -1) { + return config; + } + } + return null; +}, _FallbackProvider_addRunner = function _FallbackProvider_addRunner(running, req) { + const config = __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_getNextConfig).call(this, Array.from(running).map((r) => r.config)); + if (config == null) { + return null; + } + const result = {}; + const runner = { + config, result, didBump: false, done: false, + perform: null, staller: null + }; + const now = getTime(); + runner.perform = (async () => { + try { + config.requests++; + result.result = await config.provider._perform(req); + } + catch (error) { + config.errorResponses++; + result.error = error; + } + if (runner.done) { + config.lateResponses++; + } + const dt = (getTime() - now); + config._totalTime += dt; + config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt; + runner.perform = null; + })(); + runner.staller = (async () => { + await stall$2(config.stallTimeout); + runner.staller = null; + })(); + running.add(runner); + return runner; +}, _FallbackProvider_initialSync = +// Initializes the blockNumber and network for each runner and +// blocks until initialized +async function _FallbackProvider_initialSync() { + let initialSync = __classPrivateFieldGet$c(this, _FallbackProvider_initialSyncPromise, "f"); + if (!initialSync) { + const promises = []; + __classPrivateFieldGet$c(this, _FallbackProvider_configs, "f").forEach((config) => { + promises.push(waitForSync(config, 0)); + promises.push((async () => { + config._network = await config.provider.getNetwork(); + })()); + }); + __classPrivateFieldSet$c(this, _FallbackProvider_initialSyncPromise, initialSync = (async () => { + // Wait for all providers to have a block number and network + await Promise.all(promises); + // Check all the networks match + let chainId = null; + for (const config of __classPrivateFieldGet$c(this, _FallbackProvider_configs, "f")) { + const network = (config._network); + if (chainId == null) { + chainId = network.chainId; + } + else if (network.chainId !== chainId) { + logger$5.throwError("cannot mix providers on different networks", "UNSUPPORTED_OPERATION", { + operation: "new FallbackProvider" + }); + } + } + })(), "f"); + } + await initialSync; +}, _FallbackProvider_checkQuorum = async function _FallbackProvider_checkQuorum(running, req) { + // Get all the result objects + const results = []; + for (const runner of running) { + if ("result" in runner.result) { + const result = runner.result.result; + results.push({ + result, + normal: normalize((runner.config._network), result, req), + weight: runner.config.weight + }); + } + } + // Are there enough results to event meet quorum? + if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) { + return undefined; + } + switch (req.method) { + case "getBlockNumber": { + throw new Error("TODO"); + } + case "getGasPrice": + case "estimateGas": + return getMedian(results); + case "getBlock": + // Pending blocks are mempool dependant and already + // quite untrustworthy + if ("blockTag" in req && req.blockTag === "pending") { + return results[0].result; + } + return checkQuorum(this.quorum, results); + case "chainId": + case "getBalance": + case "getTransactionCount": + case "getCode": + case "getStorageAt": + case "getTransaction": + case "getTransactionReceipt": + case "getLogs": + return checkQuorum(this.quorum, results); + case "call": + // @TODO: Check errors + return checkQuorum(this.quorum, results); + case "sendTransaction": + throw new Error("TODO"); + } + return logger$5.throwError("unsupported method", "UNSUPPORTED_OPERATION", { + operation: `_perform(${JSON.stringify(req.method)})` + }); +}, _FallbackProvider_waitForQuorum = async function _FallbackProvider_waitForQuorum(running, req) { + if (running.size === 0) { + throw new Error("no runners?!"); + } + // Any promises that are interesting to watch for; an expired stall + // or a successful perform + const interesting = []; + //const results: Array = [ ]; + //const errors: Array = [ ]; + let newRunners = 0; + for (const runner of running) { + // @TODO: use runner.perfom != null + /* + if ("result" in runner.result) { + results.push(runner.result.result); + } else if ("error" in runner.result) { + errors.push(runner.result.error); + } +*/ + // No responses, yet; keep an eye on it + if (runner.perform) { + interesting.push(runner.perform); + } + // Still stalling... + if (runner.staller) { + interesting.push(runner.staller); + continue; + } + // This runner has already triggered another runner + if (runner.didBump) { + continue; + } + // Got a response (result or error) or stalled; kick off another runner + runner.didBump = true; + newRunners++; + } + // Check for quorum + /* + console.log({ results, errors } ); + if (results.length >= this.quorum) { + return results[0]; + } + + if (errors.length >= this.quorum) { + return errors[0]; + } + */ + const value = await __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_checkQuorum).call(this, running, req); + if (value !== undefined) { + if (value instanceof Error) { + throw value; + } + return value; + } + // Add any new runners, because a staller timed out or a result + // or error response came in. + for (let i = 0; i < newRunners; i++) { + __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_addRunner).call(this, running, req); + } + if (interesting.length === 0) { + throw new Error("quorum not met"); + // return logger.throwError("failed to meet quorum", "", { + // }); + } + // Wait for someone to either complete its perform or trigger a stall + await Promise.race(interesting); + return await __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_waitForQuorum).call(this, running, req); +}; + +function getGlobal() { + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof global !== 'undefined') { + return global; + } + throw new Error('unable to locate global object'); +} +const _WebSocket = getGlobal().WebSocket; + +/** + * SocketProvider + * + * Generic long-lived socket provider. + * + * Sub-classing notes + * - a sub-class MUST call the `_start()` method once connected + * - a sub-class MUST override the `_write(string)` method + * - a sub-class MUST call `_processMessage(string)` for each message + */ +var __classPrivateFieldSet$b = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$b = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _SocketSubscriber_provider, _SocketSubscriber_filter, _SocketSubscriber_filterId, _SocketSubscriber_paused, _SocketSubscriber_emitPromise, _SocketEventSubscriber_logFilter, _SocketEventSubscriber_formatter, _SocketProvider_callbacks, _SocketProvider_ready, _SocketProvider_subs, _SocketProvider_pending; +class SocketSubscriber { + constructor(provider, filter) { + _SocketSubscriber_provider.set(this, void 0); + _SocketSubscriber_filter.set(this, void 0); + _SocketSubscriber_filterId.set(this, void 0); + _SocketSubscriber_paused.set(this, void 0); + _SocketSubscriber_emitPromise.set(this, void 0); + __classPrivateFieldSet$b(this, _SocketSubscriber_provider, provider, "f"); + __classPrivateFieldSet$b(this, _SocketSubscriber_filter, JSON.stringify(filter), "f"); + __classPrivateFieldSet$b(this, _SocketSubscriber_filterId, null, "f"); + __classPrivateFieldSet$b(this, _SocketSubscriber_paused, null, "f"); + __classPrivateFieldSet$b(this, _SocketSubscriber_emitPromise, null, "f"); + } + get filter() { return JSON.parse(__classPrivateFieldGet$b(this, _SocketSubscriber_filter, "f")); } + start() { + __classPrivateFieldSet$b(this, _SocketSubscriber_filterId, __classPrivateFieldGet$b(this, _SocketSubscriber_provider, "f").send("eth_subscribe", this.filter).then((filterId) => { + __classPrivateFieldGet$b(this, _SocketSubscriber_provider, "f")._register(filterId, this); + return filterId; + }), "f"); + } + stop() { + (__classPrivateFieldGet$b(this, _SocketSubscriber_filterId, "f")).then((filterId) => { + __classPrivateFieldGet$b(this, _SocketSubscriber_provider, "f").send("eth_unsubscribe", [filterId]); + }); + __classPrivateFieldSet$b(this, _SocketSubscriber_filterId, null, "f"); + } + // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs + // and resume + pause(dropWhilePaused) { + if (!dropWhilePaused) { + logger$5.throwError("preserve logs while paused not supported by SocketSubscriber yet", "UNSUPPORTED_OPERATION", { + operation: "pause(false)" + }); + } + __classPrivateFieldSet$b(this, _SocketSubscriber_paused, !!dropWhilePaused, "f"); + } + resume() { + __classPrivateFieldSet$b(this, _SocketSubscriber_paused, null, "f"); + } + _handleMessage(message) { + if (__classPrivateFieldGet$b(this, _SocketSubscriber_filterId, "f") == null) { + return; + } + if (__classPrivateFieldGet$b(this, _SocketSubscriber_paused, "f") === null) { + let emitPromise = __classPrivateFieldGet$b(this, _SocketSubscriber_emitPromise, "f"); + if (emitPromise == null) { + emitPromise = this._emit(__classPrivateFieldGet$b(this, _SocketSubscriber_provider, "f"), message); + } + else { + emitPromise = emitPromise.then(async () => { + await this._emit(__classPrivateFieldGet$b(this, _SocketSubscriber_provider, "f"), message); + }); + } + __classPrivateFieldSet$b(this, _SocketSubscriber_emitPromise, emitPromise.then(() => { + if (__classPrivateFieldGet$b(this, _SocketSubscriber_emitPromise, "f") === emitPromise) { + __classPrivateFieldSet$b(this, _SocketSubscriber_emitPromise, null, "f"); + } + }), "f"); + } + } + async _emit(provider, message) { + throw new Error("sub-classes must implemente this; _emit"); + } +} +_SocketSubscriber_provider = new WeakMap(), _SocketSubscriber_filter = new WeakMap(), _SocketSubscriber_filterId = new WeakMap(), _SocketSubscriber_paused = new WeakMap(), _SocketSubscriber_emitPromise = new WeakMap(); +class SocketBlockSubscriber extends SocketSubscriber { + constructor(provider) { + super(provider, ["newHeads"]); + } + async _emit(provider, message) { + provider.emit("block", parseInt(message.number)); + } +} +class SocketPendingSubscriber extends SocketSubscriber { + constructor(provider) { + super(provider, ["newPendingTransactions"]); + } + async _emit(provider, message) { + provider.emit("pending", message); + } +} +class SocketEventSubscriber extends SocketSubscriber { + constructor(provider, filter) { + super(provider, ["logs", filter]); + _SocketEventSubscriber_logFilter.set(this, void 0); + _SocketEventSubscriber_formatter.set(this, void 0); + __classPrivateFieldSet$b(this, _SocketEventSubscriber_logFilter, JSON.stringify(filter), "f"); + __classPrivateFieldSet$b(this, _SocketEventSubscriber_formatter, provider.getNetwork().then((network) => network.formatter), "f"); + } + get logFilter() { return JSON.parse(__classPrivateFieldGet$b(this, _SocketEventSubscriber_logFilter, "f")); } + async _emit(provider, message) { + const formatter = await __classPrivateFieldGet$b(this, _SocketEventSubscriber_formatter, "f"); + provider.emit(__classPrivateFieldGet$b(this, _SocketEventSubscriber_logFilter, "f"), formatter.log(message, provider)); + } +} +_SocketEventSubscriber_logFilter = new WeakMap(), _SocketEventSubscriber_formatter = new WeakMap(); +class SocketProvider extends JsonRpcApiProvider { + constructor(network) { + super(network); + _SocketProvider_callbacks.set(this, void 0); + _SocketProvider_ready.set(this, void 0); + // Maps each filterId to its subscriber + _SocketProvider_subs.set(this, void 0); + // If any events come in before a subscriber has finished + // registering, queue them + _SocketProvider_pending.set(this, void 0); + __classPrivateFieldSet$b(this, _SocketProvider_callbacks, new Map(), "f"); + __classPrivateFieldSet$b(this, _SocketProvider_ready, false, "f"); + __classPrivateFieldSet$b(this, _SocketProvider_subs, new Map(), "f"); + __classPrivateFieldSet$b(this, _SocketProvider_pending, new Map(), "f"); + } + _getSubscriber(sub) { + switch (sub.type) { + case "close": + return new UnmanagedSubscriber("close"); + case "block": + return new SocketBlockSubscriber(this); + case "pending": + return new SocketPendingSubscriber(this); + case "event": + return new SocketEventSubscriber(this, sub.filter); + case "orphan": + // Handled auto-matically within AbstractProvider + // when the log.removed = true + if (sub.filter.orphan === "drop-log") { + return new UnmanagedSubscriber("drop-log"); + } + } + return super._getSubscriber(sub); + } + _register(filterId, subscriber) { + __classPrivateFieldGet$b(this, _SocketProvider_subs, "f").set(filterId, subscriber); + const pending = __classPrivateFieldGet$b(this, _SocketProvider_pending, "f").get(filterId); + if (pending) { + for (const message of pending) { + subscriber._handleMessage(message); + } + __classPrivateFieldGet$b(this, _SocketProvider_pending, "f").delete(filterId); + } + } + async send(method, params) { + const payload = this.prepareRequest(method, params); + const promise = new Promise((resolve, reject) => { + __classPrivateFieldGet$b(this, _SocketProvider_callbacks, "f").set(payload.id, { payload, resolve, reject }); + }); + if (__classPrivateFieldGet$b(this, _SocketProvider_ready, "f")) { + await this._write(JSON.stringify(payload)); + } + return await promise; + } + // Sub-classes must call this once they are connected + async _start() { + if (__classPrivateFieldGet$b(this, _SocketProvider_ready, "f")) { + return; + } + __classPrivateFieldSet$b(this, _SocketProvider_ready, true, "f"); + for (const { payload } of __classPrivateFieldGet$b(this, _SocketProvider_callbacks, "f").values()) { + await this._write(JSON.stringify(payload)); + } + } + // Sub-classes must call this for each message + async _processMessage(message) { + const result = JSON.parse(message); + if ("id" in result) { + const promise = __classPrivateFieldGet$b(this, _SocketProvider_callbacks, "f").get(result.id); + if (!promise) { + console.log("Weird... Response for not a thing we sent"); + return; + } + __classPrivateFieldGet$b(this, _SocketProvider_callbacks, "f").delete(result.id); + if ("error" in result) { + const { message, code, data } = result.error; + const error = logger$5.makeError(message || "unkonwn error", "SERVER_ERROR", { + request: `ws:${JSON.stringify(promise.payload)}`, + info: { code, data } + }); + promise.reject(error); + } + else { + promise.resolve(result.result); + } + } + else if (result.method === "eth_subscription") { + const filterId = result.params.subscription; + const subscriber = __classPrivateFieldGet$b(this, _SocketProvider_subs, "f").get(filterId); + if (subscriber) { + subscriber._handleMessage(result.params.result); + } + else { + let pending = __classPrivateFieldGet$b(this, _SocketProvider_pending, "f").get(filterId); + if (pending == null) { + pending = []; + __classPrivateFieldGet$b(this, _SocketProvider_pending, "f").set(filterId, pending); + } + pending.push(result.params.result); + } + } + } + async _write(message) { + throw new Error("sub-classes must override this"); + } +} +_SocketProvider_callbacks = new WeakMap(), _SocketProvider_ready = new WeakMap(), _SocketProvider_subs = new WeakMap(), _SocketProvider_pending = new WeakMap(); + +var __classPrivateFieldSet$a = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$a = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _WebSocketProvider_websocket; +class WebSocketProvider extends SocketProvider { + constructor(url, network) { + super(network); + _WebSocketProvider_websocket.set(this, void 0); + if (typeof (url) === "string") { + __classPrivateFieldSet$a(this, _WebSocketProvider_websocket, new _WebSocket(url), "f"); + } + else { + __classPrivateFieldSet$a(this, _WebSocketProvider_websocket, url, "f"); + } + this.websocket.onopen = () => { + this._start(); + }; + this.websocket.onmessage = (message) => { + this._processMessage(message.data); + }; + } + get websocket() { return __classPrivateFieldGet$a(this, _WebSocketProvider_websocket, "f"); } + async _write(message) { + this.websocket.send(message); + } +} +_WebSocketProvider_websocket = new WeakMap(); + +// See: https://chainlist.org +function injectCommonNetworks(Network) { + /// Register popular Ethereum networks + function registerEth(name, chainId, options) { + const func = function () { + const network = new Network(name, chainId); + // We use 0 to disable ENS + if (options.ensNetwork != null) { + network.attachPlugin(new EnsPlugin(null, options.ensNetwork)); + } + if (options.priorityFee) { + network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee)); + } + if (options.etherscan) { + const { url, apiKey } = options.etherscan; + network.attachPlugin(new EtherscanPlugin(url, apiKey)); + } + network.attachPlugin(new GasCostPlugin()); + return network; + }; + // Register the network by name and chain ID + Network.register(name, func); + Network.register(chainId, func); + if (options.altNames) { + options.altNames.forEach((name) => { + Network.register(name, func); + }); + } + } + registerEth("homestead", 1, { ensNetwork: 1, altNames: ["mainnet"] }); + registerEth("ropsten", 3, { ensNetwork: 3 }); + registerEth("rinkeby", 4, { ensNetwork: 4 }); + registerEth("goerli", 5, { ensNetwork: 5 }); + registerEth("kovan", 42, { ensNetwork: 42 }); + registerEth("classic", 61, {}); + registerEth("classicKotti", 6, {}); + registerEth("xdai", 100, { ensNetwork: 1 }); + // Polygon has a 35 gwei maxPriorityFee requirement + registerEth("matic", 137, { + ensNetwork: 1, + priorityFee: 35000000000, + etherscan: { + apiKey: "W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7", + url: "https:/\/api.polygonscan.com/" + } + }); + registerEth("maticMumbai", 80001, { + priorityFee: 35000000000, + etherscan: { + apiKey: "W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7", + url: "https:/\/api-testnet.polygonscan.com/" + } + }); + registerEth("bnb", 56, { + ensNetwork: 1, + etherscan: { + apiKey: "EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9", + url: "http:/\/api.bscscan.com" + } + }); + registerEth("bnbt", 97, { + etherscan: { + apiKey: "EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9", + url: "http:/\/api-testnet.bscscan.com" + } + }); + return Network; +} +const Network = injectCommonNetworks(Network$1); + +const IpcSocketProvider = undefined; + +var __classPrivateFieldSet$9 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$9 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _ContractTransactionReceipt_interface, _ContractTransactionResponse_interface; +class EventLog extends Log { + constructor(log, iface, fragment) { + super(log, log.provider); + const args = iface.decodeEventLog(fragment, log.data, log.topics); + defineProperties(this, { args, fragment, interface: iface }); + } + get eventName() { return this.fragment.name; } + get eventSignature() { return this.fragment.format(); } +} +class ContractTransactionReceipt extends TransactionReceipt { + constructor(iface, provider, tx) { + super(tx, provider); + _ContractTransactionReceipt_interface.set(this, void 0); + __classPrivateFieldSet$9(this, _ContractTransactionReceipt_interface, iface, "f"); + } + get logs() { + return super.logs.map((log) => { + const fragment = log.topics.length ? __classPrivateFieldGet$9(this, _ContractTransactionReceipt_interface, "f").getEvent(log.topics[0]) : null; + if (fragment) { + return new EventLog(log, __classPrivateFieldGet$9(this, _ContractTransactionReceipt_interface, "f"), fragment); + } + else { + return log; + } + }); + } +} +_ContractTransactionReceipt_interface = new WeakMap(); +class ContractTransactionResponse extends TransactionResponse { + constructor(iface, provider, tx) { + super(tx, provider); + _ContractTransactionResponse_interface.set(this, void 0); + __classPrivateFieldSet$9(this, _ContractTransactionResponse_interface, iface, "f"); + } + async wait(confirms) { + const receipt = await super.wait(); + if (receipt == null) { + return null; + } + return new ContractTransactionReceipt(__classPrivateFieldGet$9(this, _ContractTransactionResponse_interface, "f"), this.provider, receipt); + } +} +_ContractTransactionResponse_interface = new WeakMap(); +class ContractEventPayload extends EventPayload { + constructor(contract, listener, filter, fragment, _log) { + super(contract, listener, filter); + const log = new EventLog(_log, contract.interface, fragment); + const args = contract.interface.decodeEventLog(fragment, log.data, log.topics); + defineProperties(this, { args, fragment, log }); + } + get eventName() { + return this.fragment.name; + } + get eventSignature() { + return this.fragment.format(); + } + async getBlock() { + return await this.log.getBlock(); + } + async getTransaction() { + return await this.log.getTransaction(); + } + async getTransactionReceipt() { + return await this.log.getTransactionReceipt(); + } +} + +const version$3 = "@ethersproject/contract@6.0.0-beta.1"; + +const logger$2 = new Logger(version$3); + +var __classPrivateFieldSet$8 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$8 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _PreparedTopicFilter_filter; +function canEstimate(value) { + return (value && typeof (value.estimateGas) === "function"); +} +function canCall(value) { + return (value && typeof (value.call) === "function"); +} +function canSend(value) { + return (value && typeof (value.sendTransaction) === "function"); +} +function canResolve(value) { + return (value && typeof (value.resolveName) === "function"); +} +function canQuery(value) { + return (value && typeof (value.getLogs) === "function"); +} +function canSubscribe(value) { + return (value && typeof (value.on) === "function" && typeof (value.off) === "function"); +} +function concisify(items) { + items = Array.from((new Set(items)).values()); + items.sort(); + return items; +} +class PreparedTopicFilter { + constructor(contract, fragment, args) { + _PreparedTopicFilter_filter.set(this, void 0); + defineProperties(this, { fragment }); + if (fragment.inputs.length < args.length) { + throw new Error("too many arguments"); + } + // Recursively descend into args and resolve any addresses + const runner = getRunner(contract.runner, "resolveName"); + const resolver = canResolve(runner) ? runner : null; + __classPrivateFieldSet$8(this, _PreparedTopicFilter_filter, (async function () { + const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => { + return param.walkAsync(args[index], (type, value) => { + if (type === "address") { + return resolveAddress(value, resolver); + } + return value; + }); + })); + return contract.interface.encodeFilterTopics(fragment, resolvedArgs); + })(), "f"); + } + getTopicFilter() { + return __classPrivateFieldGet$8(this, _PreparedTopicFilter_filter, "f"); + } +} +_PreparedTopicFilter_filter = new WeakMap(); +// A = Arguments passed in as a tuple +// R = The result type of the call (i.e. if only one return type, +// the qualified type, otherwise Result) +// D = The type the default call will return (i.e. R for view/pure, +// TransactionResponse otherwise) +//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> { +function _WrappedMethodBase() { + return Function; +} +function getRunner(value, feature) { + if (value == null) { + return null; + } + if (typeof (value[feature]) === "function") { + return value; + } + if (value.provider && typeof (value.provider[feature]) === "function") { + return value.provider; + } + return null; +} +async function copyOverrides(arg) { + // Create a shallow copy (we'll deep-ify anything needed during normalizing) + const overrides = copyRequest$1(Typed.dereference(arg, "overrides")); + // Some sanity checking; these are what these methods adds + //if ((overrides).to) { + if (overrides.to) { + logger$2.throwArgumentError("cannot override to", "overrides.to", overrides.to); + } + else if (overrides.data) { + logger$2.throwArgumentError("cannot override data", "overrides.data", overrides.data); + } + // Resolve any from + if (overrides.from) { + overrides.from = await resolveAddress(overrides.from); + } + return overrides; +} +async function resolveArgs(_runner, inputs, args) { + // Recursively descend into args and resolve any addresses + const runner = getRunner(_runner, "resolveName"); + const resolver = canResolve(runner) ? runner : null; + return await Promise.all(inputs.map((param, index) => { + return param.walkAsync(args[index], (type, value) => { + if (type === "address") { + return resolveAddress(value, resolver); + } + return value; + }); + })); +} +class WrappedMethod extends _WrappedMethodBase() { + constructor(contract, key) { + super(); + defineProperties(this, { + name: contract.interface.getFunctionName(key), + _contract: contract, _key: key + }); + const proxy = new Proxy(this, { + // Perform the default operation for this fragment type + apply: async (target, thisArg, args) => { + const fragment = target.getFragment(...args); + if (fragment.constant) { + return await target.staticCall(...args); + } + return await target.send(...args); + }, + }); + return proxy; + } + // Only works on non-ambiguous keys (refined fragment is always non-ambiguous) + get fragment() { + return this._contract.interface.getFunction(this._key); + } + getFragment(...args) { + return this._contract.interface.getFunction(this._key, args); + } + async populateTransaction(...args) { + const fragment = this.getFragment(...args); + // If an overrides was passed in, copy it and normalize the values + let overrides = {}; + if (fragment.inputs.length + 1 === args.length) { + overrides = await copyOverrides(args.pop()); + } + if (fragment.inputs.length !== args.length) { + throw new Error("internal error: fragment inputs doesn't match arguments; should not happen"); + } + const resolvedArgs = await resolveArgs(this._contract.runner, fragment.inputs, args); + return Object.assign({}, overrides, await resolveProperties({ + to: this._contract.getAddress(), + data: this._contract.interface.encodeFunctionData(fragment, resolvedArgs) + })); + } + async staticCall(...args) { + const result = await this.staticCallResult(...args); + if (result.length === 1) { + return result[0]; + } + return result; + } + async send(...args) { + const runner = getRunner(this._contract.runner, "sendTransaction"); + if (!canSend(runner)) { + return logger$2.throwError("contract runner does not support sending transactions", "UNSUPPORTED_OPERATION", { + operation: "sendTransaction" + }); + } + const tx = await runner.sendTransaction(await this.populateTransaction(...args)); + const provider = getRunner(this._contract.runner, "getLogs"); + return new ContractTransactionResponse(this._contract.interface, provider, tx); + } + async estimateGas(...args) { + const runner = getRunner(this._contract.runner, "estimateGas"); + if (!canEstimate(runner)) { + return logger$2.throwError("contract runner does not support gas estimation", "UNSUPPORTED_OPERATION", { + operation: "estimateGas" + }); + } + return await runner.estimateGas(await this.populateTransaction(...args)); + } + async staticCallResult(...args) { + const runner = getRunner(this._contract.runner, "call"); + if (!canCall(runner)) { + return logger$2.throwError("contract runner does not support calling", "UNSUPPORTED_OPERATION", { + operation: "call" + }); + } + const fragment = this.getFragment(...args); + const tx = await this.populateTransaction(...args); + let result = "0x"; + try { + result = await runner.call(tx); + } + catch (error) { + if (isCallException(error)) { + throw this._contract.interface.makeError(fragment, error.data, tx); + } + throw error; + } + return this._contract.interface.decodeFunctionResult(fragment, result); + } +} +function _WrappedEventBase() { + return Function; +} +class WrappedEvent extends _WrappedEventBase() { + constructor(contract, key) { + super(); + defineProperties(this, { + name: contract.interface.getEventName(key), + _contract: contract, _key: key + }); + return new Proxy(this, { + // Perform the default operation for this fragment type + apply: async (target, thisArg, args) => { + return new PreparedTopicFilter(contract, target.getFragment(...args), args); + }, + }); + } + // Only works on non-ambiguous keys + get fragment() { + return this._contract.interface.getEvent(this._key); + } + getFragment(...args) { + return this._contract.interface.getEvent(this._key, args); + } +} +// The combination of TypeScrype, Private Fields and Proxies makes +// the world go boom; so we hide variables with some trickery keeping +// a symbol attached to each BaseContract which its sub-class (even +// via a Proxy) can reach and use to look up its internal values. +const internal = Symbol.for("_ethersInternal_contract"); +const internalValues = new WeakMap(); +function setInternal(contract, values) { + internalValues.set(contract[internal], values); +} +function getInternal(contract) { + return internalValues.get(contract[internal]); +} +function isDeferred(value) { + return (value && typeof (value) === "object" && ("getTopicFilter" in value) && + (typeof (value.getTopicFilter) === "function") && value.fragment); +} +async function getSubTag(contract, event) { + let fragment; + let topics; + if (Array.isArray(event)) { + // Topics; e.g. `[ "0x1234...89ab" ]` + fragment = contract.interface.getEvent(event[0]); + topics = event; + } + else if (typeof (event) === "string") { + // Event name (name or signature); `"Transfer"` + fragment = contract.interface.getEvent(event); + topics = [contract.interface.getEventTopic(fragment)]; + } + else if (isDeferred(event)) { + // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)` + fragment = event.fragment; + topics = await event.getTopicFilter(); + } + else if ("fragment" in event) { + // ContractEvent; e.g. `contract.filter.Transfer` + fragment = event.fragment; + topics = [contract.interface.getEventTopic(fragment)]; + } + else { + console.log(event); + throw new Error("TODO"); + } + // Normalize topics and sort TopicSets + topics = topics.map((t) => { + if (t == null) { + return null; + } + if (Array.isArray(t)) { + return concisify(t.map((t) => t.toLowerCase())); + } + return t.toLowerCase(); + }); + const tag = topics.map((t) => { + if (t == null) { + return "null"; + } + if (Array.isArray(t)) { + return t.join("|"); + } + return t; + }).join("&"); + return { fragment, tag, topics }; +} +async function hasSub(contract, event) { + const { subs } = getInternal(contract); + return subs.get((await getSubTag(contract, event)).tag) || null; +} +async function getSub(contract, event) { + // Make sure our runner can actually subscribe to events + const runner = getRunner(contract.runner, "on"); + const runnerOff = getRunner(contract.runner, "off"); + if (!runner || runner !== runnerOff || !canSubscribe(runner)) { + return logger$2.throwError("contract runner does not support subscribing", "UNSUPPORTED_OPERATION", { + operation: "on" + }); + } + const { fragment, tag, topics } = await getSubTag(contract, event); + const { addr, subs } = getInternal(contract); + let sub = subs.get(tag); + if (!sub) { + const address = (addr ? addr : contract); + const filter = { address, topics }; + const listener = (log) => { + const payload = new ContractEventPayload(contract, null, event, fragment, log); + emit(contract, event, payload.args, payload); + }; + let started = false; + const start = () => { + if (started) { + return; + } + runner.on(filter, listener); + started = true; + }; + const stop = () => { + if (!started) { + return; + } + runner.off(filter, listener); + started = false; + }; + sub = { tag, listeners: [], start, stop }; + subs.set(tag, sub); + } + return sub; +} +async function _emit(contract, event, args, payload) { + await lastEmit; + const sub = await hasSub(contract, event); + if (!sub) { + return false; + } + const count = sub.listeners.length; + sub.listeners = sub.listeners.filter(({ listener, once }) => { + const passArgs = args.slice(); + if (payload) { + passArgs.push(new ContractEventPayload(contract, (once ? null : listener), event, payload.fragment, payload.log)); + } + setTimeout(() => { listener.call(contract, ...passArgs); }, 0); + return !once; + }); + return (count > 0); +} +// We use this to ensure one emit resolves before firing the next to +// ensure correct ordering (note this cannot throw and just adds the +// notice to the event queu using setTimeout). +let lastEmit = Promise.resolve(); +async function emit(contract, event, args, payload) { + try { + await lastEmit; + } + catch (error) { } + const resultPromise = _emit(contract, event, args, payload); + lastEmit = resultPromise; + return await resultPromise; +} +const passProperties = ["then"]; +class BaseContract { + constructor(target, abi, runner = null, _deployTx) { + const iface = Interface.from(abi); + defineProperties(this, { target, runner, interface: iface }); + Object.defineProperty(this, internal, { value: {} }); + let addrPromise; + let addr = null; + let deployTx = null; + if (_deployTx) { + const provider = getRunner(runner, "getLogs"); + deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx); + } + let subs = new Map(); + // Resolve the target as the address + if (typeof (target) === "string") { + if (isHexString(target)) { + addr = target; + addrPromise = Promise.resolve(target); + } + else { + const resolver = getRunner(runner, "resolveName"); + if (!canResolve(resolver)) { + throw logger$2.makeError("contract runner does not support name resolution", "UNSUPPORTED_OPERATION", { + operation: "resolveName" + }); + } + addrPromise = resolver.resolveName(target).then((addr) => { + if (addr == null) { + throw new Error("TODO"); + } + getInternal(this).addr = addr; + return addr; + }); + } + } + else { + addrPromise = target.getAddress().then((addr) => { + if (addr == null) { + throw new Error("TODO"); + } + getInternal(this).addr = addr; + return addr; + }); + } + // Set our private values + setInternal(this, { addrPromise, addr, deployTx, subs }); + // Add the event filters + const filters = new Proxy({}, { + get: (target, _prop, receiver) => { + // Pass important checks (like `then` for Promise) through + if (passProperties.indexOf(_prop) >= 0) { + return Reflect.get(target, _prop, receiver); + } + const prop = String(_prop); + const result = this.getEvent(prop); + if (result) { + return result; + } + throw new Error(`unknown contract event: ${prop}`); + } + }); + defineProperties(this, { filters }); + // Return a Proxy that will respond to functions + return new Proxy(this, { + get: (target, _prop, receiver) => { + if (_prop in target || passProperties.indexOf(_prop) >= 0) { + return Reflect.get(target, _prop, receiver); + } + const prop = String(_prop); + const result = target.getFunction(prop); + if (result) { + return result; + } + throw new Error(`unknown contract method: ${prop}`); + } + }); + } + async getAddress() { return await getInternal(this).addrPromise; } + deploymentTransaction() { + return getInternal(this).deployTx; + } + getFunction(key) { + if (typeof (key) !== "string") { + key = key.format(); + } + return (new WrappedMethod(this, key)); + } + getEvent(key) { + if (typeof (key) !== "string") { + key = key.format(); + } + return (new WrappedEvent(this, key)); + } + async queryFilter(event, fromBlock = 0, toBlock = "latest") { + const { addr, addrPromise } = getInternal(this); + const address = (addr ? addr : (await addrPromise)); + const { fragment, topics } = await getSubTag(this, event); + const filter = { address, topics, fromBlock, toBlock }; + const runner = getRunner(this.runner, "getLogs"); + if (!canQuery(runner)) { + return logger$2.throwError("contract runner does not support querying", "UNSUPPORTED_OPERATION", { + operation: "getLogs" + }); + } + return (await runner.getLogs(filter)).map((log) => { + return new EventLog(log, this.interface, fragment); + }); + } + async on(event, listener) { + const sub = await getSub(this, event); + sub.listeners.push({ listener, once: false }); + sub.start(); + return this; + } + async once(event, listener) { + const sub = await getSub(this, event); + sub.listeners.push({ listener, once: true }); + sub.start(); + return this; + } + async emit(event, ...args) { + return await emit(this, event, args, null); + } + async listenerCount(event) { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { + return 0; + } + return sub.listeners.length; + } + const { subs } = getInternal(this); + let total = 0; + for (const { listeners } of subs.values()) { + total += listeners.length; + } + return total; + } + async listeners(event) { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { + return []; + } + return sub.listeners.map(({ listener }) => listener); + } + const { subs } = getInternal(this); + let result = []; + for (const { listeners } of subs.values()) { + result = result.concat(listeners.map(({ listener }) => listener)); + } + return result; + } + async off(event, listener) { + const sub = await hasSub(this, event); + if (!sub) { + return this; + } + if (listener) { + const index = sub.listeners.map(({ listener }) => listener).indexOf(listener); + if (index >= 0) { + sub.listeners.splice(index, 1); + } + } + if (listener == null || sub.listeners.length === 0) { + sub.stop(); + getInternal(this).subs.delete(sub.tag); + } + return this; + } + async removeAllListeners(event) { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { + return this; + } + sub.stop(); + getInternal(this).subs.delete(sub.tag); + } + else { + const { subs } = getInternal(this); + for (const { tag, stop } of subs.values()) { + stop(); + subs.delete(tag); + } + } + return this; + } + // Alias for "on" + async addListener(event, listener) { + return await this.on(event, listener); + } + // Alias for "off" + async removeListener(event, listener) { + return await this.off(event, listener); + } + static buildClass(abi) { + class CustomContract extends BaseContract { + constructor(address, runner = null) { + super(address, abi, runner); + } + } + return CustomContract; + } + ; + static from(target, abi, runner = null) { + const contract = new this(target, abi, runner); + return contract; + } +} +function _ContractBase() { + return BaseContract; +} +class Contract extends _ContractBase() { +} + +function computeAddress(key) { + const publicKey = SigningKey.computePublicKey(key, false); + return getAddress(keccak256("0x" + publicKey.substring(4)).substring(26)); +} + +const subsChrs = " !#$%&'()*+,-./<=>?@[]^_`{|}~"; +const Word = /^[a-z]*$/i; +function unfold(words, sep) { + let initial = 97; + return words.reduce((accum, word) => { + if (word === sep) { + initial++; + } + else if (word.match(Word)) { + accum.push(String.fromCharCode(initial) + word); + } + else { + initial = 97; + accum.push(word); + } + return accum; + }, []); +} +function decode(data, subs) { + // Replace all the substitutions with their expanded form + for (let i = subsChrs.length - 1; i >= 0; i--) { + data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2)); + } + // Get all tle clumps; each suffix, first-increment and second-increment + const clumps = []; + const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => { + if (semi) { + for (let i = parseInt(semi); i >= 0; i--) { + clumps.push(";"); + } + } + else { + clumps.push(item.toLowerCase()); + } + return ""; + }); + if (leftover) { + throw new Error(`leftovers: ${JSON.stringify(leftover)}`); + } + return unfold(unfold(clumps, ";"), ":"); +} +function decodeOwl(data) { + if (data[0] !== "0") { + throw TypeError("unsupported auwl data"); + } + return decode(data.substring(1 + 2 * subsChrs.length), data.substring(1, 1 + 2 * subsChrs.length)); +} + +const version$2 = "@ethersproject/wordlists@6.0.0-beta.1"; + +const logger$1 = new Logger(version$2); + +class Wordlist { + constructor(locale) { + defineProperties(this, { locale }); + } + // Subclasses may override this + split(mnemonic) { + return mnemonic.toLowerCase().split(/ +/g); + } + // Subclasses may override this + join(words) { + return words.join(" "); + } +} + +// Use the encode-latin.js script to create the necessary +// data files to be consumed by this class +var __classPrivateFieldSet$7 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$7 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _WordlistOwl_instances, _WordlistOwl_data, _WordlistOwl_checksum, _WordlistOwl_words, _WordlistOwl_loadWords; +class WordlistOwl extends Wordlist { + constructor(locale, data, checksum) { + super(locale); + _WordlistOwl_instances.add(this); + _WordlistOwl_data.set(this, void 0); + _WordlistOwl_checksum.set(this, void 0); + _WordlistOwl_words.set(this, void 0); + __classPrivateFieldSet$7(this, _WordlistOwl_data, data, "f"); + __classPrivateFieldSet$7(this, _WordlistOwl_checksum, checksum, "f"); + __classPrivateFieldSet$7(this, _WordlistOwl_words, null, "f"); + } + get _data() { return __classPrivateFieldGet$7(this, _WordlistOwl_data, "f"); } + _decodeWords() { + return decodeOwl(__classPrivateFieldGet$7(this, _WordlistOwl_data, "f")); + } + getWord(index) { + const words = __classPrivateFieldGet$7(this, _WordlistOwl_instances, "m", _WordlistOwl_loadWords).call(this); + if (index < 0 || index >= words.length) { + logger$1.throwArgumentError(`invalid word index: ${index}`, "index", index); + } + return words[index]; + } + getWordIndex(word) { + return __classPrivateFieldGet$7(this, _WordlistOwl_instances, "m", _WordlistOwl_loadWords).call(this).indexOf(word); + } +} +_WordlistOwl_data = new WeakMap(), _WordlistOwl_checksum = new WeakMap(), _WordlistOwl_words = new WeakMap(), _WordlistOwl_instances = new WeakSet(), _WordlistOwl_loadWords = function _WordlistOwl_loadWords() { + if (__classPrivateFieldGet$7(this, _WordlistOwl_words, "f") == null) { + const words = this._decodeWords(); + // Verify the computed list matches the official list + const checksum = id(words.join("\n") + "\n"); + /* c8 ignore start */ + if (checksum !== __classPrivateFieldGet$7(this, _WordlistOwl_checksum, "f")) { + throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`); + } + /* c8 ignore stop */ + __classPrivateFieldSet$7(this, _WordlistOwl_words, words, "f"); + } + return __classPrivateFieldGet$7(this, _WordlistOwl_words, "f"); +}; + +const words = "0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO"; +const checksum = "0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60"; +class LangEn extends WordlistOwl { + constructor() { super("en", words, checksum); } +} +const langEn = new LangEn(); + +const version$1 = "@ethersproject/wallet@6.0.0-beta.1"; + +const logger = new Logger(version$1); + +const wordlists = Object.freeze({ + en: langEn +}); + +const Base64 = ")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_"; +function decodeBits(width, data) { + const maxValue = (1 << width) - 1; + const result = []; + let accum = 0, bits = 0, flood = 0; + for (let i = 0; i < data.length; i++) { + // Accumulate 6 bits of data + accum = ((accum << 6) | Base64.indexOf(data[i])); + bits += 6; + // While we have enough for a word... + while (bits >= width) { + // ...read the word + const value = (accum >> (bits - width)); + accum &= (1 << (bits - width)) - 1; + bits -= width; + // A value of 0 indicates we exceeded maxValue, it + // floods over into the next value + if (value === 0) { + flood += maxValue; + } + else { + result.push(value + flood); + flood = 0; + } + } + } + return result; +} + +function decodeOwlA(data, accents) { + let words = decodeOwl(data).join(","); + // Inject the accents + accents.split(/,/g).forEach((accent) => { + const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/); + if (!match) { + throw new Error("internal error parsing accents"); + } + let posOffset = 0; + const positions = decodeBits(parseInt(match[3]), match[4]); + const charCode = parseInt(match[2]); + const regex = new RegExp(`([${match[1]}])`, "g"); + words = words.replace(regex, (all, letter) => { + const rem = --positions[posOffset]; + if (rem === 0) { + letter = String.fromCharCode(letter.charCodeAt(0), charCode); + posOffset++; + } + return letter; + }); + }); + return words.split(","); +} + +var __classPrivateFieldSet$6 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$6 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _WordlistOwlA_accent; +class WordlistOwlA extends WordlistOwl { + constructor(locale, data, accent, checksum) { + super(locale, data, checksum); + _WordlistOwlA_accent.set(this, void 0); + __classPrivateFieldSet$6(this, _WordlistOwlA_accent, accent, "f"); + } + get _accent() { return __classPrivateFieldGet$6(this, _WordlistOwlA_accent, "f"); } + _decodeWords() { + return decodeOwlA(this._data, this._accent); + } +} +_WordlistOwlA_accent = new WeakMap(); + +// Returns a byte with the MSB bits set +function getUpperMask(bits) { + return ((1 << bits) - 1) << (8 - bits) & 0xff; +} +// Returns a byte with the LSB bits set +function getLowerMask(bits) { + return ((1 << bits) - 1) & 0xff; +} +function mnemonicToEntropy(mnemonic, wordlist = langEn) { + logger.assertNormalize("NFKD"); + if (wordlist == null) { + wordlist = langEn; + } + const words = wordlist.split(mnemonic); + if ((words.length % 3) !== 0 || words.length < 12 || words.length > 24) { + logger.throwArgumentError("invalid mnemonic length", "mnemonic", "[ REDACTED ]"); + } + const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8))); + let offset = 0; + for (let i = 0; i < words.length; i++) { + let index = wordlist.getWordIndex(words[i].normalize("NFKD")); + if (index === -1) { + logger.throwArgumentError(`invalid mnemonic word at index ${i}`, "mnemonic", "[ REDACTED ]"); + } + for (let bit = 0; bit < 11; bit++) { + if (index & (1 << (10 - bit))) { + entropy[offset >> 3] |= (1 << (7 - (offset % 8))); + } + offset++; + } + } + const entropyBits = 32 * words.length / 3; + const checksumBits = words.length / 3; + const checksumMask = getUpperMask(checksumBits); + const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask; + if (checksum !== (entropy[entropy.length - 1] & checksumMask)) { + logger.throwArgumentError("invalid mnemonic checksum", "mnemonic", "[ REDACTED ]"); + } + return hexlify(entropy.slice(0, entropyBits / 8)); +} +function entropyToMnemonic(entropy, wordlist = langEn) { + if ((entropy.length % 4) || entropy.length < 16 || entropy.length > 32) { + logger.throwArgumentError("invalid entropy size", "entropy", "[ REDACTED ]"); + } + if (wordlist == null) { + wordlist = langEn; + } + const indices = [0]; + let remainingBits = 11; + for (let i = 0; i < entropy.length; i++) { + // Consume the whole byte (with still more to go) + if (remainingBits > 8) { + indices[indices.length - 1] <<= 8; + indices[indices.length - 1] |= entropy[i]; + remainingBits -= 8; + // This byte will complete an 11-bit index + } + else { + indices[indices.length - 1] <<= remainingBits; + indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits); + // Start the next word + indices.push(entropy[i] & getLowerMask(8 - remainingBits)); + remainingBits += 3; + } + } + // Compute the checksum bits + const checksumBits = entropy.length / 4; + const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits); + // Shift the checksum into the word indices + indices[indices.length - 1] <<= checksumBits; + indices[indices.length - 1] |= (checksum >> (8 - checksumBits)); + return wordlist.join(indices.map((index) => wordlist.getWord(index))); +} +const _guard$1 = {}; +class Mnemonic { + constructor(guard, entropy, phrase, password, wordlist) { + if (password == null) { + password = ""; + } + if (wordlist == null) { + wordlist = langEn; + } + logger.assertPrivate(guard, _guard$1, "Mnemonic"); + defineProperties(this, { phrase, password, wordlist, entropy }); + } + computeSeed() { + const salt = toUtf8Bytes("mnemonic" + this.password, UnicodeNormalizationForm.NFKD); + return pbkdf2(toUtf8Bytes(this.phrase, UnicodeNormalizationForm.NFKD), salt, 2048, 64, "sha512"); + } + static fromPhrase(phrase, password, wordlist) { + // Normalize the case and space; throws if invalid + const entropy = mnemonicToEntropy(phrase, wordlist); + phrase = entropyToMnemonic(logger.getBytes(entropy), wordlist); + return new Mnemonic(_guard$1, entropy, phrase, password, wordlist); + } + static fromEntropy(_entropy, password, wordlist) { + const entropy = logger.getBytes(_entropy, "entropy"); + const phrase = entropyToMnemonic(entropy, wordlist); + return new Mnemonic(_guard$1, hexlify(entropy), phrase, password, wordlist); + } + static entropyToPhrase(_entropy, wordlist) { + const entropy = logger.getBytes(_entropy, "entropy"); + return entropyToMnemonic(entropy, wordlist); + } + static phraseToEntropy(phrase, wordlist) { + return mnemonicToEntropy(phrase, wordlist); + } + static isValidMnemonic(phrase, wordlist) { + try { + mnemonicToEntropy(phrase, wordlist); + return true; + } + catch (error) { } + return false; + } +} + +var __classPrivateFieldSet$5 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$5 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _BaseWallet_signingKey; +class BaseWallet extends AbstractSigner { + constructor(privateKey, provider) { + super(provider); + _BaseWallet_signingKey.set(this, void 0); + __classPrivateFieldSet$5(this, _BaseWallet_signingKey, privateKey, "f"); + const address = computeAddress(this.signingKey.publicKey); + defineProperties(this, { address }); + } + // Store these in getters to reduce visibility in console.log + get signingKey() { return __classPrivateFieldGet$5(this, _BaseWallet_signingKey, "f"); } + get privateKey() { return this.signingKey.privateKey; } + async getAddress() { return this.address; } + connect(provider) { + return new BaseWallet(__classPrivateFieldGet$5(this, _BaseWallet_signingKey, "f"), provider); + } + async signTransaction(_tx) { + // Replace any Addressable or ENS name with an address + const tx = Object.assign({}, _tx, await resolveProperties({ + to: (_tx.to ? resolveAddress(_tx.to, this.provider) : undefined), + from: (_tx.from ? resolveAddress(_tx.from, this.provider) : undefined) + })); + if (tx.from != null) { + if (getAddress(tx.from) !== this.address) { + logger.throwArgumentError("transaction from address mismatch", "tx.from", _tx.from); + } + delete tx.from; + } + // Build the transaction + const btx = Transaction.from(tx); + btx.signature = this.signingKey.sign(btx.unsignedHash); + return btx.serialized; + } + async signMessage(message) { + return this.signingKey.sign(hashMessage(message)).serialized; + } + async signTypedData(domain, types, value) { + // Populate any ENS names + const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name) => { + if (this.provider == null) { + return logger.throwError("cannot resolve ENS names without a provider", "UNSUPPORTED_OPERATION", { + operation: "resolveName", + info: { name } + }); + } + const address = await this.provider.resolveName(name); + if (address == null) { + return logger.throwError("unconfigured ENS name", "UNCONFIGURED_NAME", { + value: name + }); + } + return address; + }); + return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized; + } +} +_BaseWallet_signingKey = new WeakMap(); + +var __classPrivateFieldGet$4 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var __classPrivateFieldSet$4 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var _a, _HDNodeWallet_fromSeed, _HDNodeWalletManager_root; +const defaultPath$1 = "m/44'/60'/0'/0/0"; +// "Bitcoin seed" +const MasterSecret = new Uint8Array([66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100]); +const HardenedBit = 0x80000000; +const N = BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"); +const Nibbles = "0123456789abcdef"; +function zpad(value, length) { + let result = ""; + while (value) { + result = Nibbles[value % 16] + result; + value = Math.trunc(value / 16); + } + while (result.length < length * 2) { + result = "0" + result; + } + return "0x" + result; +} +function encodeBase58Check(_value) { + const value = logger.getBytes(_value); + const check = dataSlice(sha256(sha256(value)), 0, 4); + const bytes = concat([value, check]); + return encodeBase58(bytes); +} +const _guard = {}; +function ser_I(index, chainCode, publicKey, privateKey) { + const data = new Uint8Array(37); + if (index & HardenedBit) { + if (privateKey == null) { + return logger.throwError("cannot derive child of neutered node", "UNSUPPORTED_OPERATION", { + operation: "deriveChild" + }); + } + // Data = 0x00 || ser_256(k_par) + data.set(arrayify(privateKey), 1); + } + else { + // Data = ser_p(point(k_par)) + data.set(arrayify(publicKey)); + } + // Data += ser_32(i) + for (let i = 24; i >= 0; i -= 8) { + data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); + } + const I = arrayify(computeHmac("sha512", chainCode, data)); + return { IL: I.slice(0, 32), IR: I.slice(32) }; +} +function derivePath(node, path) { + const components = path.split("/"); + if (components.length === 0 || (components[0] === "m" && node.depth !== 0)) { + throw new Error("invalid path - " + path); + } + if (components[0] === "m") { + components.shift(); + } + let result = node; + for (let i = 0; i < components.length; i++) { + const component = components[i]; + if (component.match(/^[0-9]+'$/)) { + const index = parseInt(component.substring(0, component.length - 1)); + if (index >= HardenedBit) { + throw new Error("invalid path index - " + component); + } + result = result.deriveChild(HardenedBit + index); + } + else if (component.match(/^[0-9]+$/)) { + const index = parseInt(component); + if (index >= HardenedBit) { + throw new Error("invalid path index - " + component); + } + result = result.deriveChild(index); + } + else { + throw new Error("invalid path component - " + component); + } + } + return result; +} +class HDNodeWallet extends BaseWallet { + constructor(guard, signingKey, parentFingerprint, chainCode, path, index, depth, mnemonic, provider) { + super(signingKey, provider); + logger.assertPrivate(guard, _guard, "HDNodeWallet"); + defineProperties(this, { publicKey: signingKey.compressedPublicKey }); + const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4); + defineProperties(this, { + parentFingerprint, fingerprint, + chainCode, path, index, depth + }); + defineProperties(this, { mnemonic }); + } + connect(provider) { + return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider); + } + get extendedKey() { + // We only support the mainnet values for now, but if anyone needs + // testnet values, let me know. I believe current sentiment is that + // we should always use mainnet, and use BIP-44 to derive the network + // - Mainnet: public=0x0488B21E, private=0x0488ADE4 + // - Testnet: public=0x043587CF, private=0x04358394 + if (this.depth >= 256) { + throw new Error("Depth too large!"); + } + return encodeBase58Check(concat([ + "0x0488ADE4", zpad(this.depth, 1), this.parentFingerprint, + zpad(this.index, 4), this.chainCode, + concat(["0x00", this.privateKey]) + ])); + } + hasPath() { return (this.path != null); } + neuter() { + return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.provider); + } + deriveChild(_index) { + const index = logger.getNumber(_index, "index"); + if (index > 0xffffffff) { + throw new Error("invalid index - " + String(index)); + } + // Base path + let path = this.path; + if (path) { + path += "/" + (index & ~HardenedBit); + if (index & HardenedBit) { + path += "'"; + } + } + const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey); + const ki = new SigningKey(toHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32)); + return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.mnemonic, this.provider); + } + derivePath(path) { + return derivePath(this, path); + } + static fromSeed(seed) { + return __classPrivateFieldGet$4(HDNodeWallet, _a, "m", _HDNodeWallet_fromSeed).call(HDNodeWallet, seed, null); + } + static fromPhrase(phrase, password = "", path = defaultPath$1, wordlist = langEn) { + if (!path) { + path = defaultPath$1; + } + const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist); + return __classPrivateFieldGet$4(HDNodeWallet, _a, "m", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path); + } + static fromMnemonic(mnemonic, path = defaultPath$1) { + if (!path) { + path = defaultPath$1; + } + return __classPrivateFieldGet$4(HDNodeWallet, _a, "m", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path); + } + static fromExtendedKey(extendedKey) { + const bytes = arrayify(decodeBase58(extendedKey)); // @TODO: redact + if (bytes.length !== 82 || encodeBase58Check(bytes.slice(0, 78)) !== extendedKey) { + logger.throwArgumentError("invalid extended key", "extendedKey", "[ REDACTED ]"); + } + const depth = bytes[4]; + const parentFingerprint = hexlify(bytes.slice(5, 9)); + const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16); + const chainCode = hexlify(bytes.slice(13, 45)); + const key = bytes.slice(45, 78); + switch (hexlify(bytes.slice(0, 4))) { + // Public Key + case "0x0488b21e": + case "0x043587cf": { + const publicKey = hexlify(key); + return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey, parentFingerprint, chainCode, null, index, depth, null); + } + // Private Key + case "0x0488ade4": + case "0x04358394 ": + if (key[0] !== 0) { + break; + } + return new HDNodeWallet(_guard, new SigningKey(key.slice(1)), parentFingerprint, chainCode, null, index, depth, null, null); + } + return logger.throwArgumentError("invalid extended key prefix", "extendedKey", "[ REDACTED ]"); + } + static createRandom(password = "", path = defaultPath$1, wordlist = langEn) { + if (!path) { + path = defaultPath$1; + } + const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist); + return __classPrivateFieldGet$4(HDNodeWallet, _a, "m", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path); + } +} +_a = HDNodeWallet, _HDNodeWallet_fromSeed = function _HDNodeWallet_fromSeed(_seed, mnemonic) { + const seed = logger.getBytes(_seed, "seed"); + if (seed.length < 16 || seed.length > 64) { + throw new Error("invalid seed"); + } + const I = arrayify(computeHmac("sha512", MasterSecret, seed)); + const signingKey = new SigningKey(hexlify(I.slice(0, 32))); + return new HDNodeWallet(_guard, signingKey, "0x00000000", hexlify(I.slice(32)), "m", 0, 0, mnemonic, null); +}; +class HDNodeVoidWallet extends VoidSigner { + constructor(guard, address, publicKey, parentFingerprint, chainCode, path, index, depth, provider) { + super(address, provider); + logger.assertPrivate(guard, _guard, "HDNodeVoidWallet"); + defineProperties(this, { publicKey }); + const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4); + defineProperties(this, { + publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth + }); + } + connect(provider) { + return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider); + } + get extendedKey() { + // We only support the mainnet values for now, but if anyone needs + // testnet values, let me know. I believe current sentiment is that + // we should always use mainnet, and use BIP-44 to derive the network + // - Mainnet: public=0x0488B21E, private=0x0488ADE4 + // - Testnet: public=0x043587CF, private=0x04358394 + if (this.depth >= 256) { + throw new Error("Depth too large!"); + } + return encodeBase58Check(concat([ + "0x0488B21E", + zpad(this.depth, 1), + this.parentFingerprint, + zpad(this.index, 4), + this.chainCode, + this.publicKey, + ])); + } + hasPath() { return (this.path != null); } + deriveChild(_index) { + const index = logger.getNumber(_index, "index"); + if (index > 0xffffffff) { + throw new Error("invalid index - " + String(index)); + } + // Base path + let path = this.path; + if (path) { + path += "/" + (index & ~HardenedBit); + if (index & HardenedBit) { + path += "'"; + } + } + const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null); + const Ki = SigningKey._addPoints(IL, this.publicKey, true); + const address = computeAddress(Ki); + return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.provider); + } + derivePath(path) { + return derivePath(this, path); + } +} +class HDNodeWalletManager { + constructor(phrase, password = "", path = "m/44'/60'/0'/0", locale = langEn) { + _HDNodeWalletManager_root.set(this, void 0); + __classPrivateFieldSet$4(this, _HDNodeWalletManager_root, HDNodeWallet.fromPhrase(phrase, password, path, locale), "f"); + } + getSigner(index = 0) { + return __classPrivateFieldGet$4(this, _HDNodeWalletManager_root, "f").deriveChild(index); + } +} +_HDNodeWalletManager_root = new WeakMap(); +function getAccountPath(_index) { + const index = logger.getNumber(_index, "index"); + if (index < 0 || index >= HardenedBit) { + logger.throwArgumentError("invalid account index", "index", index); + } + return `m/44'/60'/${index}'/0/0`; +} + +/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */ +var __classPrivateFieldSet$3 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$3 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _AES_key, _AES_Kd, _AES_Ke; +// Number of rounds by keysize +const numberOfRounds = { 16: 10, 24: 12, 32: 14 }; +// Round constant words +const rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91]; +// S-box and Inverse S-box (S is for Substitution) +const S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]; +const Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]; +// Transformations for encryption +const T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a]; +const T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616]; +const T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16]; +const T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c]; +// Transformations for decryption +const T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742]; +const T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857]; +const T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8]; +const T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0]; +// Transformations for decryption key expansion +const U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]; +const U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697]; +const U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46]; +const U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d]; +function convertToInt32(bytes) { + const result = []; + for (let i = 0; i < bytes.length; i += 4) { + result.push((bytes[i] << 24) | (bytes[i + 1] << 16) | (bytes[i + 2] << 8) | bytes[i + 3]); + } + return result; +} +class AES { + constructor(key) { + _AES_key.set(this, void 0); + _AES_Kd.set(this, void 0); + _AES_Ke.set(this, void 0); + if (!(this instanceof AES)) { + throw Error('AES must be instanitated with `new`'); + } + __classPrivateFieldSet$3(this, _AES_key, new Uint8Array(key), "f"); + const rounds = numberOfRounds[this.key.length]; + if (rounds == null) { + throw new TypeError('invalid key size (must be 16, 24 or 32 bytes)'); + } + // encryption round keys + __classPrivateFieldSet$3(this, _AES_Ke, [], "f"); + // decryption round keys + __classPrivateFieldSet$3(this, _AES_Kd, [], "f"); + for (let i = 0; i <= rounds; i++) { + __classPrivateFieldGet$3(this, _AES_Ke, "f").push([0, 0, 0, 0]); + __classPrivateFieldGet$3(this, _AES_Kd, "f").push([0, 0, 0, 0]); + } + const roundKeyCount = (rounds + 1) * 4; + const KC = this.key.length / 4; + // convert the key into ints + const tk = convertToInt32(this.key); + // copy values into round key arrays + let index; + for (let i = 0; i < KC; i++) { + index = i >> 2; + __classPrivateFieldGet$3(this, _AES_Ke, "f")[index][i % 4] = tk[i]; + __classPrivateFieldGet$3(this, _AES_Kd, "f")[rounds - index][i % 4] = tk[i]; + } + // key expansion (fips-197 section 5.2) + let rconpointer = 0; + let t = KC, tt; + while (t < roundKeyCount) { + tt = tk[KC - 1]; + tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^ + (S[(tt >> 8) & 0xFF] << 16) ^ + (S[tt & 0xFF] << 8) ^ + S[(tt >> 24) & 0xFF] ^ + (rcon[rconpointer] << 24)); + rconpointer += 1; + // key expansion (for non-256 bit) + if (KC != 8) { + for (let i = 1; i < KC; i++) { + tk[i] ^= tk[i - 1]; + } + // key expansion for 256-bit keys is "slightly different" (fips-197) + } + else { + for (let i = 1; i < (KC / 2); i++) { + tk[i] ^= tk[i - 1]; + } + tt = tk[(KC / 2) - 1]; + tk[KC / 2] ^= (S[tt & 0xFF] ^ + (S[(tt >> 8) & 0xFF] << 8) ^ + (S[(tt >> 16) & 0xFF] << 16) ^ + (S[(tt >> 24) & 0xFF] << 24)); + for (let i = (KC / 2) + 1; i < KC; i++) { + tk[i] ^= tk[i - 1]; + } + } + // copy values into round key arrays + let i = 0, r, c; + while (i < KC && t < roundKeyCount) { + r = t >> 2; + c = t % 4; + __classPrivateFieldGet$3(this, _AES_Ke, "f")[r][c] = tk[i]; + __classPrivateFieldGet$3(this, _AES_Kd, "f")[rounds - r][c] = tk[i++]; + t++; + } + } + // inverse-cipher-ify the decryption round key (fips-197 section 5.3) + for (let r = 1; r < rounds; r++) { + for (let c = 0; c < 4; c++) { + tt = __classPrivateFieldGet$3(this, _AES_Kd, "f")[r][c]; + __classPrivateFieldGet$3(this, _AES_Kd, "f")[r][c] = (U1[(tt >> 24) & 0xFF] ^ + U2[(tt >> 16) & 0xFF] ^ + U3[(tt >> 8) & 0xFF] ^ + U4[tt & 0xFF]); + } + } + } + get key() { return __classPrivateFieldGet$3(this, _AES_key, "f").slice(); } + encrypt(plaintext) { + if (plaintext.length != 16) { + throw new TypeError('invalid plaintext size (must be 16 bytes)'); + } + const rounds = __classPrivateFieldGet$3(this, _AES_Ke, "f").length - 1; + const a = [0, 0, 0, 0]; + // convert plaintext to (ints ^ key) + let t = convertToInt32(plaintext); + for (let i = 0; i < 4; i++) { + t[i] ^= __classPrivateFieldGet$3(this, _AES_Ke, "f")[0][i]; + } + // apply round transforms + for (let r = 1; r < rounds; r++) { + for (let i = 0; i < 4; i++) { + a[i] = (T1[(t[i] >> 24) & 0xff] ^ + T2[(t[(i + 1) % 4] >> 16) & 0xff] ^ + T3[(t[(i + 2) % 4] >> 8) & 0xff] ^ + T4[t[(i + 3) % 4] & 0xff] ^ + __classPrivateFieldGet$3(this, _AES_Ke, "f")[r][i]); + } + t = a.slice(); + } + // the last round is special + const result = new Uint8Array(16); + let tt = 0; + for (let i = 0; i < 4; i++) { + tt = __classPrivateFieldGet$3(this, _AES_Ke, "f")[rounds][i]; + result[4 * i] = (S[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; + result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; + result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; + result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff; + } + return result; + } + decrypt(ciphertext) { + if (ciphertext.length != 16) { + throw new TypeError('invalid ciphertext size (must be 16 bytes)'); + } + const rounds = __classPrivateFieldGet$3(this, _AES_Kd, "f").length - 1; + const a = [0, 0, 0, 0]; + // convert plaintext to (ints ^ key) + let t = convertToInt32(ciphertext); + for (let i = 0; i < 4; i++) { + t[i] ^= __classPrivateFieldGet$3(this, _AES_Kd, "f")[0][i]; + } + // apply round transforms + for (let r = 1; r < rounds; r++) { + for (let i = 0; i < 4; i++) { + a[i] = (T5[(t[i] >> 24) & 0xff] ^ + T6[(t[(i + 3) % 4] >> 16) & 0xff] ^ + T7[(t[(i + 2) % 4] >> 8) & 0xff] ^ + T8[t[(i + 1) % 4] & 0xff] ^ + __classPrivateFieldGet$3(this, _AES_Kd, "f")[r][i]); + } + t = a.slice(); + } + // the last round is special + const result = new Uint8Array(16); + let tt = 0; + for (let i = 0; i < 4; i++) { + tt = __classPrivateFieldGet$3(this, _AES_Kd, "f")[rounds][i]; + result[4 * i] = (Si[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; + result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; + result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; + result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff; + } + return result; + } +} +_AES_key = new WeakMap(), _AES_Kd = new WeakMap(), _AES_Ke = new WeakMap(); + +class ModeOfOperation { + constructor(name, key, cls) { + if (cls && !(this instanceof cls)) { + throw new Error(`${name} must be instantiated with "new"`); + } + Object.defineProperties(this, { + aes: { enumerable: true, value: new AES(key) }, + name: { enumerable: true, value: name } + }); + } +} + +// Cipher Block Chaining +var __classPrivateFieldSet$2 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$2 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _CBC_iv, _CBC_lastBlock; +class CBC extends ModeOfOperation { + constructor(key, iv) { + super("ECC", key, CBC); + _CBC_iv.set(this, void 0); + _CBC_lastBlock.set(this, void 0); + if (iv) { + if (iv.length % 16) { + throw new TypeError("invalid iv size (must be 16 bytes)"); + } + __classPrivateFieldSet$2(this, _CBC_iv, new Uint8Array(iv), "f"); + } + else { + __classPrivateFieldSet$2(this, _CBC_iv, new Uint8Array(16), "f"); + } + __classPrivateFieldSet$2(this, _CBC_lastBlock, this.iv, "f"); + } + get iv() { return new Uint8Array(__classPrivateFieldGet$2(this, _CBC_iv, "f")); } + encrypt(plaintext) { + if (plaintext.length % 16) { + throw new TypeError("invalid plaintext size (must be multiple of 16 bytes)"); + } + const ciphertext = new Uint8Array(plaintext.length); + for (let i = 0; i < plaintext.length; i += 16) { + for (let j = 0; j < 16; j++) { + __classPrivateFieldGet$2(this, _CBC_lastBlock, "f")[j] ^= plaintext[i + j]; + } + __classPrivateFieldSet$2(this, _CBC_lastBlock, this.aes.encrypt(__classPrivateFieldGet$2(this, _CBC_lastBlock, "f")), "f"); + ciphertext.set(__classPrivateFieldGet$2(this, _CBC_lastBlock, "f"), i); + } + return ciphertext; + } + decrypt(ciphertext) { + if (ciphertext.length % 16) { + throw new TypeError("invalid ciphertext size (must be multiple of 16 bytes)"); + } + const plaintext = new Uint8Array(ciphertext.length); + for (let i = 0; i < ciphertext.length; i += 16) { + const block = this.aes.decrypt(ciphertext.subarray(i, i + 16)); + for (let j = 0; j < 16; j++) { + plaintext[i + j] = block[j] ^ __classPrivateFieldGet$2(this, _CBC_lastBlock, "f")[j]; + __classPrivateFieldGet$2(this, _CBC_lastBlock, "f")[j] = ciphertext[i + j]; + } + } + return plaintext; + } +} +_CBC_iv = new WeakMap(), _CBC_lastBlock = new WeakMap(); + +// Cipher Feedback +(window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +(window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; + +// Counter Mode +var __classPrivateFieldSet$1 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$1 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _CTR_remaining, _CTR_remainingIndex, _CTR_counter; +class CTR extends ModeOfOperation { + constructor(key, initialValue) { + super("CTR", key, CTR); + // Remaining bytes for the one-time pad + _CTR_remaining.set(this, void 0); + _CTR_remainingIndex.set(this, void 0); + // The current counter + _CTR_counter.set(this, void 0); + __classPrivateFieldSet$1(this, _CTR_counter, new Uint8Array(16), "f"); + __classPrivateFieldGet$1(this, _CTR_counter, "f").fill(0); + __classPrivateFieldSet$1(this, _CTR_remaining, __classPrivateFieldGet$1(this, _CTR_counter, "f"), "f"); // This will be discarded immediately + __classPrivateFieldSet$1(this, _CTR_remainingIndex, 16, "f"); + if (initialValue == null) { + initialValue = 1; + } + if (typeof (initialValue) === "number") { + this.setCounterValue(initialValue); + } + else { + this.setCounterBytes(initialValue); + } + } + get counter() { return new Uint8Array(__classPrivateFieldGet$1(this, _CTR_counter, "f")); } + setCounterValue(value) { + if (!Number.isInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) { + throw new TypeError("invalid counter initial integer value"); + } + for (let index = 15; index >= 0; --index) { + __classPrivateFieldGet$1(this, _CTR_counter, "f")[index] = value % 256; + value = Math.floor(value / 256); + } + } + setCounterBytes(value) { + if (value.length !== 16) { + throw new TypeError("invalid counter initial Uint8Array value length"); + } + __classPrivateFieldGet$1(this, _CTR_counter, "f").set(value); + } + increment() { + for (let i = 15; i >= 0; i--) { + if (__classPrivateFieldGet$1(this, _CTR_counter, "f")[i] === 255) { + __classPrivateFieldGet$1(this, _CTR_counter, "f")[i] = 0; + } + else { + __classPrivateFieldGet$1(this, _CTR_counter, "f")[i]++; + break; + } + } + } + encrypt(plaintext) { + var _a, _b; + const crypttext = new Uint8Array(plaintext); + for (let i = 0; i < crypttext.length; i++) { + if (__classPrivateFieldGet$1(this, _CTR_remainingIndex, "f") === 16) { + __classPrivateFieldSet$1(this, _CTR_remaining, this.aes.encrypt(__classPrivateFieldGet$1(this, _CTR_counter, "f")), "f"); + __classPrivateFieldSet$1(this, _CTR_remainingIndex, 0, "f"); + this.increment(); + } + crypttext[i] ^= __classPrivateFieldGet$1(this, _CTR_remaining, "f")[__classPrivateFieldSet$1(this, _CTR_remainingIndex, (_b = __classPrivateFieldGet$1(this, _CTR_remainingIndex, "f"), _a = _b++, _b), "f"), _a]; + } + return crypttext; + } + decrypt(ciphertext) { + return this.encrypt(ciphertext); + } +} +_CTR_remaining = new WeakMap(), _CTR_remainingIndex = new WeakMap(), _CTR_counter = new WeakMap(); + +// Output Feedback +(window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +(window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; + +function pkcs7Strip(data) { + if (data.length < 16) { + throw new TypeError('PKCS#7 invalid length'); + } + const padder = data[data.length - 1]; + if (padder > 16) { + throw new TypeError('PKCS#7 padding byte out of range'); + } + const length = data.length - padder; + for (let i = 0; i < padder; i++) { + if (data[length + i] !== padder) { + throw new TypeError('PKCS#7 invalid padding byte'); + } + } + return new Uint8Array(data.subarray(0, length)); +} + +function looseArrayify(hexString) { + if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') { + hexString = '0x' + hexString; + } + return arrayify(hexString); +} +function getPassword(password) { + if (typeof (password) === 'string') { + return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC); + } + return arrayify(password); +} +function spelunk(object, _path) { + const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i); + if (match == null) { + return logger.throwArgumentError("invalid path", "path", _path); + } + const path = match[1]; + const type = match[3]; + const reqd = (match[4] === "!"); + let cur = object; + for (const comp of path.toLowerCase().split('.')) { + // Search for a child object with a case-insensitive matching key + if (Array.isArray(cur)) { + if (!comp.match(/^[0-9]+$/)) { + break; + } + cur = cur[parseInt(comp)]; + } + else if (typeof (cur) === "object") { + let found = null; + for (const key in cur) { + if (key.toLowerCase() === comp) { + found = cur[key]; + break; + } + } + cur = found; + } + else { + cur = null; + } + if (cur == null) { + break; + } + } + if (reqd && cur == null) { + logger.throwArgumentError("missing required value", "path", path); + } + if (type && cur != null) { + if (type === "int") { + if (typeof (cur) === "string" && cur.match(/^-?[0-9]+$/)) { + return parseInt(cur); + } + else if (Number.isSafeInteger(cur)) { + return cur; + } + } + if (type === "number") { + if (typeof (cur) === "string" && cur.match(/^-?[0-9.]*$/)) { + return parseFloat(cur); + } + } + if (type === "data") { + if (typeof (cur) === "string") { + return looseArrayify(cur); + } + } + if (type === "array" && Array.isArray(cur)) { + return cur; + } + if (type === typeof (cur)) { + return cur; + } + logger.throwArgumentError(`wrong type found for ${type} `, "path", path); + } + return cur; +} + +function isCrowdsaleJson(json) { + try { + const data = JSON.parse(json); + if (data.encseed) { + return true; + } + } + catch (error) { } + return false; +} +// See: https://github.com/ethereum/pyethsaletool +function decryptCrowdsaleJson(json, _password) { + const data = JSON.parse(json); + const password = getPassword(_password); + // Ethereum Address + const address = getAddress(spelunk(data, "ethaddr:string!")); + // Encrypted Seed + const encseed = looseArrayify(spelunk(data, "encseed:string!")); + if (!encseed || (encseed.length % 16) !== 0) { + logger.throwArgumentError("invalid encseed", "json", json); + } + const key = arrayify(pbkdf2(password, password, 2000, 32, "sha256")).slice(0, 16); + const iv = encseed.slice(0, 16); + const encryptedSeed = encseed.slice(16); + // Decrypt the seed + const aesCbc = new CBC(key, iv); + const seed = pkcs7Strip(arrayify(aesCbc.decrypt(encryptedSeed))); + // This wallet format is weird... Convert the binary encoded hex to a string. + let seedHex = ""; + for (let i = 0; i < seed.length; i++) { + seedHex += String.fromCharCode(seed[i]); + } + return { address, privateKey: id(seedHex) }; +} + +const defaultPath = "m/44'/60'/0'/0/0"; +function isKeystoreJson(json) { + try { + const data = JSON.parse(json); + const version = ((data.version != null) ? parseInt(data.version) : 0); + if (version === 3) { + return true; + } + } + catch (error) { } + return false; +} +function decrypt(data, key, ciphertext) { + const cipher = spelunk(data, "crypto.cipher:string"); + if (cipher === "aes-128-ctr") { + const iv = spelunk(data, "crypto.cipherparams.iv:data!"); + const aesCtr = new CTR(key, iv); + return hexlify(aesCtr.decrypt(ciphertext)); + } + return logger.throwError("unsupported cipher", "UNSUPPORTED_OPERATION", { + operation: "decrypt" + }); +} +function getAccount(data, _key) { + const key = logger.getBytes(_key); + const ciphertext = spelunk(data, "crypto.ciphertext:data!"); + const computedMAC = hexlify(keccak256(concat([key.slice(16, 32), ciphertext]))).substring(2); + if (computedMAC !== spelunk(data, "crypto.mac:string!").toLowerCase()) { + return logger.throwArgumentError("incorrect password", "password", "[ REDACTED ]"); + } + const privateKey = decrypt(data, key.slice(0, 16), ciphertext); + const address = computeAddress(privateKey); + if (data.address) { + let check = data.address.toLowerCase(); + if (check.substring(0, 2) !== "0x") { + check = "0x" + check; + } + if (getAddress(check) !== address) { + logger.throwArgumentError("keystore address/privateKey mismatch", "address", data.address); + } + } + const account = { address, privateKey }; + // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase + const version = spelunk(data, "x-ethers.version:string"); + if (version === "0.1") { + const mnemonicKey = key.slice(32, 64); + const mnemonicCiphertext = spelunk(data, "x-ethers.mnemonicCiphertext:data!"); + const mnemonicIv = spelunk(data, "x-ethers.mnemonicCounter:data!"); + const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv); + account.mnemonic = { + path: (spelunk(data, "x-ethers.path:string") || defaultPath), + locale: (spelunk(data, "x-ethers.locale:string") || "en"), + entropy: hexlify(arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext))) + }; + } + return account; +} +function getKdfParams(data) { + const kdf = spelunk(data, "crypto.kdf:string"); + if (kdf && typeof (kdf) === "string") { + const throwError = function (name, value) { + return logger.throwArgumentError("invalid key-derivation function parameters", name, value); + }; + if (kdf.toLowerCase() === "scrypt") { + const salt = spelunk(data, "crypto.kdfparams.salt:data!"); + const N = spelunk(data, "crypto.kdfparams.n:int!"); + const r = spelunk(data, "crypto.kdfparams.r:int!"); + const p = spelunk(data, "crypto.kdfparams.p:int!"); + // Check for all required parameters + if (!N || !r || !p) { + return throwError("kdf", kdf); + } + // Make sure N is a power of 2 + if ((N & (N - 1)) !== 0) { + return throwError("N", N); + } + const dkLen = spelunk(data, "crypto.kdfparams.dklen:int!"); + if (dkLen !== 32) { + return throwError("dklen", dkLen); + } + return { name: "scrypt", salt, N, r, p, dkLen: 64 }; + } + else if (kdf.toLowerCase() === "pbkdf2") { + const salt = spelunk(data, "crypto.kdfparams.salt:data!"); + const prf = spelunk(data, "crypto.kdfparams.prf:string!"); + const algorithm = prf.split("-").pop(); + if (algorithm !== "sha256" && algorithm !== "sha512") { + return throwError("prf", prf); + } + const count = spelunk(data, "crypto.kdfparams.c:int!"); + const dkLen = spelunk(data, "crypto.kdfparams.dklen:int!"); + if (dkLen !== 32) { + throwError("dklen", dkLen); + } + return { name: "pbkdf2", salt, count, dkLen, algorithm }; + } + } + return logger.throwArgumentError("unsupported key-derivation function", "kdf", kdf); +} +function decryptKeystoreJsonSync(json, _password) { + const data = JSON.parse(json); + const password = getPassword(_password); + const params = getKdfParams(data); + if (params.name === "pbkdf2") { + const { salt, count, dkLen, algorithm } = params; + const key = pbkdf2(password, salt, count, dkLen, algorithm); + return getAccount(data, key); + } + else if (params.name === "scrypt") { + const { salt, N, r, p, dkLen } = params; + const key = scryptSync(password, salt, N, r, p, dkLen); + return getAccount(data, key); + } + throw new Error("unreachable"); +} +function stall$1(duration) { + return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); }); +} +async function decryptKeystoreJson(json, _password, progress) { + const data = JSON.parse(json); + const password = getPassword(_password); + const params = getKdfParams(data); + if (params.name === "pbkdf2") { + if (progress) { + progress(0); + await stall$1(0); + } + const { salt, count, dkLen, algorithm } = params; + const key = pbkdf2(password, salt, count, dkLen, algorithm); + if (progress) { + progress(1); + await stall$1(0); + } + return getAccount(data, key); + } + else if (params.name === "scrypt") { + const { salt, N, r, p, dkLen } = params; + const key = await scrypt(password, salt, N, r, p, dkLen, progress); + return getAccount(data, key); + } + throw new Error("unreachable"); +} + +var __classPrivateFieldSet = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + 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"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + 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"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Wallet_mnemonic; +function tryWallet(value) { + try { + if (!value || !value.signingKey) { + return null; + } + const key = trySigningKey(value.signingKey); + if (key == null || computeAddress(key.publicKey) !== value.address) { + return null; + } + if (value.mnemonic) { + const wallet = HDNodeWallet.fromMnemonic(value.mnemonic); + if (wallet.privateKey !== key.privateKey) { + return null; + } + } + return value; + } + catch (e) { + console.log(e); + } + return null; +} +// Try using value as mnemonic to derive the defaultPath HDodeWallet +function tryMnemonic(value) { + try { + if (value == null || typeof (value.phrase) !== "string" || + typeof (value.password) !== "string" || + value.wordlist == null) { + return null; + } + return HDNodeWallet.fromPhrase(value.phrase, value.password, null, value.wordlist); + } + catch (error) { + console.log(error); + } + return null; +} +function trySigningKey(value) { + try { + if (!value || !isHexString(value.privateKey, 32)) { + return null; + } + const key = value.privateKey; + if (SigningKey.computePublicKey(key) !== value.publicKey) { + return null; + } + return new SigningKey(key); + } + catch (e) { + console.log(e); + } + return null; +} +function stall(duration) { + return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); }); +} +class Wallet extends BaseWallet { + constructor(key, provider) { + let signingKey = null; + let mnemonic = null; + // A normal private key + if (typeof (key) === "string") { + signingKey = new SigningKey(key); + } + // Try Wallet + if (signingKey == null) { + const wallet = tryWallet(key); + if (wallet) { + signingKey = wallet.signingKey; + mnemonic = wallet.mnemonic || null; + } + } + // Try Mnemonic, with the defaultPath wallet + if (signingKey == null) { + const wallet = tryMnemonic(key); + if (wallet) { + signingKey = wallet.signingKey; + mnemonic = wallet.mnemonic || null; + } + } + // A signing key + if (signingKey == null) { + signingKey = trySigningKey(key); + } + if (signingKey == null) { + logger.throwArgumentError("invalid key", "key", "[ REDACTED ]"); + } + super(signingKey, provider); + _Wallet_mnemonic.set(this, void 0); + __classPrivateFieldSet(this, _Wallet_mnemonic, mnemonic, "f"); + } + // Store this in a getter to reduce visibility in console.log + get mnemonic() { return __classPrivateFieldGet(this, _Wallet_mnemonic, "f"); } + connect(provider) { + return new Wallet(this, provider); + } + async encrypt(password, options, progressCallback) { + throw new Error("TODO"); + } + encryptSync(password, options) { + throw new Error("TODO"); + } + static async fromEncryptedJson(json, password, progress) { + let account = null; + if (isKeystoreJson(json)) { + account = await decryptKeystoreJson(json, password, progress); + } + else if (isCrowdsaleJson(json)) { + if (progress) { + progress(0); + await stall(0); + } + account = decryptCrowdsaleJson(json, password); + if (progress) { + progress(1); + await stall(0); + } + } + else { + return logger.throwArgumentError("invalid JSON wallet", "json", "[ REDACTED ]"); + } + const wallet = new Wallet(account.privateKey); + if (wallet.address !== account.address) { + logger.throwArgumentError("address/privateKey mismatch", "json", "[ REDACTED ]"); + } + // @TODO: mnemonic + return wallet; + } + static fromEncryptedJsonSync(json, password) { + let account = null; + if (isKeystoreJson(json)) { + account = decryptKeystoreJsonSync(json, password); + } + else if (isCrowdsaleJson(json)) { + account = decryptCrowdsaleJson(json, password); + } + else { + return logger.throwArgumentError("invalid JSON wallet", "json", "[ REDACTED ]"); + } + const wallet = new Wallet(account.privateKey); + if (wallet.address !== account.address) { + logger.throwArgumentError("address/privateKey mismatch", "json", "[ REDACTED ]"); + } + // @TODO: mnemonic + return wallet; + } + static createRandom(provider, password, wordlist) { + return new Wallet(Mnemonic.fromEntropy(randomBytes(16), password, wordlist), provider); + } + static fromMnemonic(mnemonic, provider) { + return new Wallet(mnemonic, provider); + } + static fromPhrase(phrase, provider, password = "", wordlist) { + return new Wallet(Mnemonic.fromPhrase(phrase, password, wordlist), provider); + } +} +_Wallet_mnemonic = new WeakMap(); + +const version = "ethers@6.0.0-beta.1"; + +var ethers = /*#__PURE__*/Object.freeze({ + __proto__: null, + Interface: Interface, + getAddress: getAddress, + getIcapAddress: getIcapAddress, + getCreateAddress: getCreateAddress, + getCreate2Address: getCreate2Address, + isAddressable: isAddressable, + isAddress: isAddress, + resolveAddress: resolveAddress, + arrayify: arrayify, + decodeBase64: decodeBase64, + encodeBase64: encodeBase64, + isHexString: isHexString, + isBytesLike: isBytesLike, + concat: concat, + dataLength: dataLength, + dataSlice: dataSlice, + stripZerosLeft: stripZerosLeft, + hexlify: hexlify, + quantity: quantity, + zeroPadLeft: zeroPadLeft, + zeroPadRight: zeroPadRight, + BaseContract: BaseContract, + Contract: Contract, + ContractEventPayload: ContractEventPayload, + ContractTransactionReceipt: ContractTransactionReceipt, + ContractTransactionResponse: ContractTransactionResponse, + EventLog: EventLog, + computeHmac: computeHmac, + keccak256: keccak256, + ripemd160: ripemd160, + sha256: sha256, + sha512: sha512, + pbkdf2: pbkdf2, + scrypt: scrypt, + scryptSync: scryptSync, + randomBytes: randomBytes, + lock: lock, + id: id, + isValidName: isValidName, + namehash: namehash, + dnsEncode: dnsEncode, + messagePrefix: messagePrefix, + hashMessage: hashMessage, + TypedDataEncoder: TypedDataEncoder, + FixedFormat: FixedFormat, + FixedNumber: FixedNumber, + formatFixed: formatFixed, + parseFixed: parseFixed, + fromTwos: fromTwos, + toTwos: toTwos, + mask: mask, + toArray: toArray, + toBigInt: toBigInt, + toHex: toHex, + toNumber: toNumber, + decodeBase58: decodeBase58, + encodeBase58: encodeBase58, + defineProperties: defineProperties, + resolveProperties: resolveProperties, + getStore: getStore, + setStore: setStore, + AbstractProvider: AbstractProvider, + UnmanagedSubscriber: UnmanagedSubscriber, + AbstractSigner: AbstractSigner, + VoidSigner: VoidSigner, + WrappedSigner: WrappedSigner, + showThrottleMessage: showThrottleMessage, + EnsResolver: EnsResolver, + Formatter: Formatter, + NetworkPlugin: NetworkPlugin, + GasCostPlugin: GasCostPlugin, + EnsPlugin: EnsPlugin, + MaxPriorityFeePlugin: MaxPriorityFeePlugin, + Network: Network, + Block: Block, + FeeData: FeeData, + Log: Log, + TransactionReceipt: TransactionReceipt, + TransactionResponse: TransactionResponse, + dummyProvider: dummyProvider, + FallbackProvider: FallbackProvider, + JsonRpcProvider: JsonRpcProvider, + JsonRpcSigner: JsonRpcSigner, + StaticJsonRpcProvider: StaticJsonRpcProvider, + AlchemyProvider: AlchemyProvider, + AnkrProvider: AnkrProvider, + CloudflareProvider: CloudflareProvider, + EtherscanProvider: EtherscanProvider, + InfuraProvider: InfuraProvider, + PocketProvider: PocketProvider, + IpcSocketProvider: IpcSocketProvider, + SocketProvider: SocketProvider, + WebSocketProvider: WebSocketProvider, + encodeRlp: encodeRlp, + decodeRlp: decodeRlp, + Signature: Signature$1, + SigningKey: SigningKey, + formatBytes32String: formatBytes32String, + parseBytes32String: parseBytes32String, + nameprep: nameprep, + _toEscapedUtf8String: _toEscapedUtf8String, + toUtf8Bytes: toUtf8Bytes, + toUtf8CodePoints: toUtf8CodePoints, + toUtf8String: toUtf8String, + get UnicodeNormalizationForm () { return UnicodeNormalizationForm; }, + Utf8ErrorFuncs: Utf8ErrorFuncs, + get Utf8ErrorReason () { return Utf8ErrorReason; }, + Transaction: Transaction, + computeAddress: computeAddress, + defaultPath: defaultPath$1, + getAccountPath: getAccountPath, + HDNodeWallet: HDNodeWallet, + HDNodeVoidWallet: HDNodeVoidWallet, + HDNodeWalletManager: HDNodeWalletManager, + Mnemonic: Mnemonic, + Wallet: Wallet, + fetchData: fetchData, + FetchRequest: FetchRequest, + FetchResponse: FetchResponse, + Wordlist: Wordlist, + WordlistOwl: WordlistOwl, + WordlistOwlA: WordlistOwlA, + wordlists: wordlists, + version: version +}); + +export { AbstractProvider, AbstractSigner, AlchemyProvider, AnkrProvider, BaseContract, Block, CloudflareProvider, Contract, ContractEventPayload, ContractTransactionReceipt, ContractTransactionResponse, EnsPlugin, EnsResolver, EtherscanProvider, EventLog, FallbackProvider, FeeData, FetchRequest, FetchResponse, FixedFormat, FixedNumber, Formatter, GasCostPlugin, HDNodeVoidWallet, HDNodeWallet, HDNodeWalletManager, InfuraProvider, Interface, IpcSocketProvider, JsonRpcProvider, JsonRpcSigner, Log, MaxPriorityFeePlugin, Mnemonic, Network, NetworkPlugin, PocketProvider, Signature$1 as Signature, SigningKey, SocketProvider, StaticJsonRpcProvider, Transaction, TransactionReceipt, TransactionResponse, TypedDataEncoder, UnicodeNormalizationForm, UnmanagedSubscriber, Utf8ErrorFuncs, Utf8ErrorReason, VoidSigner, Wallet, WebSocketProvider, Wordlist, WordlistOwl, WordlistOwlA, WrappedSigner, _toEscapedUtf8String, arrayify, computeAddress, computeHmac, concat, dataLength, dataSlice, decodeBase58, decodeBase64, decodeRlp, defaultPath$1 as defaultPath, defineProperties, dnsEncode, dummyProvider, encodeBase58, encodeBase64, encodeRlp, ethers, fetchData, formatBytes32String, formatFixed, fromTwos, getAccountPath, getAddress, getCreate2Address, getCreateAddress, getIcapAddress, getStore, hashMessage, hexlify, id, isAddress, isAddressable, isBytesLike, isHexString, isValidName, keccak256, lock, mask, messagePrefix, namehash, nameprep, parseBytes32String, parseFixed, pbkdf2, quantity, randomBytes, resolveAddress, resolveProperties, ripemd160, scrypt, scryptSync, setStore, sha256, sha512, showThrottleMessage, stripZerosLeft, toArray, toBigInt, toHex, toNumber, toTwos, toUtf8Bytes, toUtf8CodePoints, toUtf8String, version, wordlists, zeroPadLeft, zeroPadRight }; +//# sourceMappingURL=ethers.js.map diff --git a/packages/ethers/dist/ethers.js.map b/packages/ethers/dist/ethers.js.map new file mode 100644 index 000000000..fa0cab7f0 --- /dev/null +++ b/packages/ethers/dist/ethers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ethers.js","sources":["../../properties/lib/properties.js","../../properties/lib/events.js","../../properties/lib/storage.js","../../logger/lib/errors.js","../../logger/lib/_version.js","../../logger/lib/logger.js","../../abi/lib/_version.js","../../abi/lib/logger.js","../../abi/lib/fragments.js","../../math/lib/_version.js","../../math/lib/logger.js","../../math/lib/convert.js","../../math/lib/maths.js","../../math/lib/fixednumber.js","../../math/lib/base58.js","../../bytes/lib/check.js","../../bytes/lib/_version.js","../../bytes/lib/logger.js","../../bytes/lib/array.js","../../bytes/lib/base64.js","../../bytes/lib/hex.js","../../bytes/lib/data.js","../../bytes/lib/pad.js","../../abi/lib/coders/abstract-coder.js","../../../node_modules/@noble/hashes/esm/utils.js","../../../node_modules/@noble/hashes/esm/hmac.js","../../../node_modules/@noble/hashes/esm/pbkdf2.js","../../../node_modules/@noble/hashes/esm/_sha2.js","../../../node_modules/@noble/hashes/esm/sha256.js","../../../node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/@noble/hashes/esm/sha512.js","../../crypto/lib/_version.js","../../crypto/lib/logger.js","../../crypto/lib/crypto-browser.js","../../crypto/lib/hmac.js","../../../node_modules/@noble/hashes/esm/sha3.js","../../crypto/lib/keccak.js","../../../node_modules/@noble/hashes/esm/ripemd160.js","../../crypto/lib/ripemd160.js","../../crypto/lib/pbkdf2.js","../../crypto/lib/random.js","../../../node_modules/@noble/hashes/esm/scrypt.js","../../crypto/lib/scrypt.js","../../crypto/lib/sha2.js","../../crypto/lib/index.js","../../address/lib/_version.js","../../address/lib/logger.js","../../address/lib/address.js","../../rlp/lib/_version.js","../../rlp/lib/logger.js","../../rlp/lib/encode.js","../../rlp/lib/decode.js","../../address/lib/contract-address.js","../../address/lib/checks.js","../../abi/lib/typed.js","../../abi/lib/coders/address.js","../../abi/lib/coders/anonymous.js","../../abi/lib/coders/array.js","../../abi/lib/coders/boolean.js","../../abi/lib/coders/bytes.js","../../abi/lib/coders/fixed-bytes.js","../../abi/lib/coders/null.js","../../abi/lib/coders/number.js","../../strings/lib/_version.js","../../strings/lib/logger.js","../../strings/lib/utf8.js","../../strings/lib/bytes32.js","../../strings/lib/idna.js","../../abi/lib/coders/string.js","../../abi/lib/coders/tuple.js","../../abi/lib/abi-coder.js","../../hash/lib/id.js","../../hash/lib/_version.js","../../hash/lib/logger.js","../../hash/lib/namehash.js","../../hash/lib/message.js","../../hash/lib/typed-data.js","../../abi/lib/interface.js","../../web/lib/_version.js","../../web/lib/logger.js","../../web/lib/response.js","../../web/lib/get-url-browser.js","../../web/lib/request.js","../../web/lib/fetch-data.js","../../providers/lib/_version.js","../../providers/lib/logger.js","../../providers/lib/ens-resolver.js","../../signing-key/lib/_version.js","../../signing-key/lib/logger.js","../../signing-key/lib/signature.js","../../../node_modules/@noble/secp256k1/lib/esm/index.js","../../signing-key/lib/signing-key.js","../../transactions/lib/accesslist.js","../../transactions/lib/_version.js","../../transactions/lib/logger.js","../../transactions/lib/transaction.js","../../providers/lib/provider.js","../../providers/lib/formatter.js","../../providers/lib/plugins-network.js","../../providers/lib/network.js","../../providers/lib/subscriber-polling.js","../../providers/lib/abstract-provider.js","../../providers/lib/abstract-signer.js","../../providers/lib/community.js","../../providers/lib/subscriber-filterid.js","../../providers/lib/provider-jsonrpc.js","../../providers/lib/provider-ankr.js","../../providers/lib/provider-alchemy.js","../../providers/lib/provider-cloudflare.js","../../providers/lib/provider-etherscan.js","../../providers/lib/provider-infura.js","../../providers/lib/provider-pocket.js","../../providers/lib/shuffle.js","../../providers/lib/provider-fallback.js","../../providers/lib/ws-browser.js","../../providers/lib/provider-socket.js","../../providers/lib/provider-websocket.js","../../providers/lib/common-networks.js","../../providers/lib/provider-ipcsocket-browser.js","../../contract/lib/wrappers.js","../../contract/lib/_version.js","../../contract/lib/logger.js","../../contract/lib/contract.js","../../wallet/lib/address.js","../../wordlists/lib/decode-owl.js","../../wordlists/lib/_version.js","../../wordlists/lib/logger.js","../../wordlists/lib/wordlist.js","../../wordlists/lib/wordlist-owl.js","../../wordlists/lib/lang-en.js","../../wallet/lib/_version.js","../../wallet/lib/logger.js","../../wordlists/lib/wordlists-en.js","../../wordlists/lib/bit-reader.js","../../wordlists/lib/decode-owla.js","../../wordlists/lib/wordlist-owla.js","../../wallet/lib/mnemonic.js","../../wallet/lib/base-wallet.js","../../wallet/lib/hdwallet.js","../../../node_modules/aes-js/lib/aes.js","../../../node_modules/aes-js/lib/mode.js","../../../node_modules/aes-js/lib/mode-cbc.js","../../../node_modules/aes-js/lib/mode-cfb.js","../../../node_modules/aes-js/lib/mode-ctr.js","../../../node_modules/aes-js/lib/mode-ofb.js","../../../node_modules/aes-js/lib/padding.js","../../wallet/lib/utils.js","../../wallet/lib/json-crowdsale.js","../../wallet/lib/json-keystore.js","../../wallet/lib/wallet.js","../lib/_version.js"],"sourcesContent":["//import type { BigNumber, BigNumberish } from \"./big-number\";\n//import type { Bytes, BytesLike } from \"./bytes\";\n//import type { Signature, SignatureLike } from \"./signature\";\n/*\nexport type Loose = T extends BigNumber ? BigNumberish:\n T extends number ? BigNumberish:\n T extends Bytes ? BytesLike:\n T extends Signature ? SignatureLike:\n T;\nexport type LooseObject = { [P in keyof T]?: Loose; };\n*/\n//export type Deferrable = T | Promise;\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\n/*\nexport type Frozen = Readonly<{\n [ P in keyof T ]: T[P] extends Freezable ? Frozen: T[P];\n}>;\n\nexport interface Freezable {\n clone(): T;\n freeze(): Frozen;\n isFrozen(): boolean;\n}\n*/\n/*\nconst _data: WeakMap = new WeakMap();\n\nexport class Data implements Freezable {\n #props: {\n data: Uint8Array\n };\n\n [ index: number ]: number;\n\n constructor(lengthOrData: number | Uint8Array) {\n if (typeof(lengthOrData) === \"number\") {\n _data[this] = new Uint8Array(lengthOrData);\n } else {\n _data[this] = lengthOrData;\n }\n\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return Reflect.get(target, prop, receiver); }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n throw new Error(\"\");\n }\n return data[index];\n },\n\n set: (target, prop, value, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return false; }\n\n if (value < 0 || value > 255 || value % 1) { return false; }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n return false;\n }\n\n data[index] = value;\n\n return true;\n },\n });\n }\n\n toString(): string {\n return this.slice().toString();\n }\n\n slice(): Uint8Array {\n return _data.get(this).slice();\n }\n\n clone(): Data {\n return new Data(this.slice());\n }\n\n freeze(): Frozen {\n //Object.freeze(this.#props);\n return this;\n }\n\n isFrozen(): boolean {\n return Object.isFrozen(this.#props);\n }\n}\nconst d = new Data(4);\nconsole.log(d.toString());\nd[0] = 45;\nconsole.log(d.toString());\n*/\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\nexport function defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n/*\nexport type IsCancelled = () => Promise;\n\nexport function createPromise(resolve: (isCancelled: IsCancelled, (result: T) => void) => void, reject: (error: Error) => void, isCancelled: IsCancelled): CancellablePromise {\n let cancelled = false;\n\n const promise = new Promise((resolve, reject) => {\n \n });\n\n (>promise).cancel = function() {\n cancelled = true;\n };\n\n return (>promise);\n}\n*/\n/*\nexport class A implements Freezable {\n foo: number;\n constructor(foo: number) {\n this.foo = foo;\n }\n freeze(): Frozen {\n Object.freeze(this);\n return this;\n }\n clone(): A {\n return new A(this.foo);\n }\n}\n\nexport class B implements Freezable {\n a: A;\n constructor(a: A) {\n this.a = a;\n }\n freeze(): Frozen {\n this.a.freeze();\n Object.freeze(this);\n return this;\n }\n clone(): B {\n return new B(this.a);\n }\n}\n\nexport function test() {\n const a = new A(123);\n const b = new B(a);\n b.a = new A(234);\n const b2 = b.freeze();\n b2.a.foo = 123; // = a;\n}\n*/\nfunction checkType(value, type) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n throw new Error(\"invalid value for type\");\n}\nexport function defineProperties(target, values, types, defaults) {\n for (let key in values) {\n let value = values[key];\n const fallback = (defaults ? defaults[key] : undefined);\n if (fallback !== undefined) {\n value = fallback;\n }\n else {\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type);\n }\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","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 _EventPayload_listener;\nimport { defineProperties } from \"./properties.js\";\nexport class EventPayload {\n constructor(emitter, listener, filter) {\n _EventPayload_listener.set(this, void 0);\n __classPrivateFieldSet(this, _EventPayload_listener, listener, \"f\");\n defineProperties(this, { emitter, filter });\n }\n async removeListener() {\n if (__classPrivateFieldGet(this, _EventPayload_listener, \"f\") == null) {\n return;\n }\n await this.emitter.off(this.filter, __classPrivateFieldGet(this, _EventPayload_listener, \"f\"));\n }\n}\n_EventPayload_listener = new WeakMap();\n//# sourceMappingURL=events.js.map","export function getStore(store, key) {\n return store[key];\n}\nexport function setStore(store, key, value) {\n if (Object.isFrozen(store)) {\n throw new Error(\"frozen object is immuatable; cannot set \" + key);\n }\n store[key] = value;\n}\n//# sourceMappingURL=storage.js.map","//export type TransactionReceipt {\n//}\n/**\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, errors.CALL_EXCEPTION)) {\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/*\nexport function isContractCallException(error: any): error is ContractCallExceptionError {\n return isError(error, \"CALL_EXCEPTION\") && (error).method;\n}\n*/\n//# sourceMappingURL=errors.js.map","export const version = \"@ethersproject/logger@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","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 _Logger_instances, _Logger_assertIntRange, _Logger_getBytes, _Logger_log;\nimport { version } from \"./_version.js\";\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\n;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nlet _globalLogger = null;\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\nfunction defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true, writable: false, value,\n });\n}\n/*\nenum Censor {\n OFF = 0,\n ON = 1,\n PERMANENT = 2\n};\nlet _censor = Censor.OFF;\n*/\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n// The type of error to use for various error codes\nconst ErrorConstructors = {};\nErrorConstructors.INVALID_ARGUMENT = TypeError;\nErrorConstructors.NUMERIC_FAULT = RangeError;\nErrorConstructors.BUFFER_OVERRUN = RangeError;\nexport class Logger {\n constructor(version) {\n _Logger_instances.add(this);\n defineReadOnly(this, \"version\", version || \"_\");\n }\n makeError(message, code, info) {\n // Errors are being censored\n //if (_censor === Censor.ON || _censor === Censor.PERMANENT) {\n // return this.makeError(\"censored error\", code, { });\n //}\n {\n const details = [];\n if (info) {\n for (const key in info) {\n const value = (info[key]);\n try {\n details.push(key + \"=\" + JSON.stringify(value));\n }\n catch (error) {\n details.push(key + \"=[could not serialize object]\");\n }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${this.version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n const create = ErrorConstructors[code] || Error;\n const error = (new create(message));\n defineReadOnly(error, \"code\", code);\n if (info) {\n for (const key in info) {\n defineReadOnly(error, key, (info[key]));\n }\n }\n return error;\n }\n throwError(message, code, info) {\n throw this.makeError(message, code, info);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, \"INVALID_ARGUMENT\", {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, info) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code || \"UNKNOWN_ERROR\", info);\n }\n assertArgument(condition, message, name, value) {\n return this.assert(condition, message, \"INVALID_ARGUMENT\", {\n argument: name,\n value\n });\n }\n assertIntegerArgument(name, value, lower, upper) {\n let message = null;\n if (typeof (value) !== \"number\") {\n message = \"expected a number\";\n }\n else if (!Number.isInteger(value)) {\n message = \"invalid integer\";\n }\n else if ((lower != null && value < lower) || (upper != null && value > upper)) {\n message = \"value is out of range\";\n }\n if (message) {\n this.throwArgumentError(message, name, value);\n }\n }\n assertSafeUint53(value, message) {\n this.assertArgument((typeof (value) === \"number\"), \"invalid number\", \"value\", value);\n if (message == null) {\n message = \"value not safe\";\n }\n const operation = \"assertSafeInteger\";\n this.assert((value >= 0 && value < 0x1fffffffffffff), message, \"NUMERIC_FAULT\", {\n operation, fault: \"out-of-safe-range\", value\n });\n this.assert((value % 1) === 0, message, \"NUMERIC_FAULT\", {\n operation, fault: \"non-integer\", value\n });\n }\n assertNormalize(form) {\n if (_normalizeForms.indexOf(form) === -1) {\n this.throwError(\"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n }\n }\n assertPrivate(givenGuard, guard, className = \"\") {\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n this.throwError(`private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n }\n assertArgumentCount(count, expectedCount, message = \"\") {\n if (message) {\n message = \": \" + message;\n }\n this.assert((count >= expectedCount), \"missing arguemnt\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n this.assert((count >= expectedCount), \"too many arguemnts\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n }\n assertInt53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", -maxValue);\n }\n assertUint53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", 0);\n }\n assertInteger(value, operation = \"unknown\", min = 0, max = maxValue) {\n //this.#assertIntRange(\"Int53\", value, operation || \"unknown\", 0);\n }\n getBytes(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, false);\n }\n getBytesCopy(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, true);\n }\n getNumber(value, name) {\n switch (typeof (value)) {\n case \"bigint\":\n if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return Number(value);\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return value;\n case \"string\":\n try {\n return this.getNumber(BigInt(value), name);\n }\n catch (e) {\n this.throwArgumentError(`invalid numeric string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid numeric value\", name || \"value\", value);\n }\n getBigInt(value, name) {\n switch (typeof (value)) {\n case \"bigint\": return value;\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return BigInt(value);\n case \"string\":\n try {\n return BigInt(value);\n }\n catch (e) {\n this.throwArgumentError(`invalid BigNumberish string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid BigNumberish value\", name || \"value\", value);\n }\n debug(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.DEBUG, args);\n }\n info(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.INFO, args);\n }\n warn(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.WARNING, args);\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n}\n_Logger_instances = new WeakSet(), _Logger_assertIntRange = function _Logger_assertIntRange(name, value, operation, minValue) {\n if (typeof (value) !== \"number\" || isNaN(value)) {\n this.throwArgumentError(`invalid ${name}`, \"INVALID_ARGUMENT\", {\n name: \"value\", value\n });\n }\n let message = `invalid ${name} value`;\n let fault = null;\n if (isNaN(value)) {\n fault = \"not-a-number\";\n }\n else if (value < minValue || value > maxValue) {\n message = `unsafe ${name} value`;\n fault = \"overflow\";\n }\n else if (Math.floor(value) !== value) {\n fault = \"underflow\";\n }\n if (fault) {\n this.throwError(message, \"NUMERIC_FAULT\", {\n operation, fault, value\n });\n }\n}, _Logger_getBytes = function _Logger_getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n return this.throwArgumentError(\"invalid BytesLike value\", name || \"value\", value);\n}, _Logger_log = function _Logger_log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n};\n//static readonly Errors = ErrorCode;\nLogger.LogLevels = LogLevel;\n//const l = new Logger();\n//l.makeError(\"foo\", Logger.Errors.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", value: 3 });\n//l.makeError(\"foo\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { transaction: null });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\" });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", gii: \"5\" });\n//console.log(LogLevel);\n//# sourceMappingURL=logger.js.map","export const version = \"@ethersproject/abi@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _TokenString_instances, _TokenString_offset, _TokenString_tokens, _TokenString_subTokenString, _ParamType_instances, _ParamType_walkAsync;\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\n;\nexport var FormatType;\n(function (FormatType) {\n // Bare formatting, as is needed for computing a sighash of an event or function\n FormatType[\"sighash\"] = \"sighash\";\n // Human-Readable with Minimal spacing and without names (compact human-readable)\n FormatType[\"minimal\"] = \"minimal\";\n // Human-Readable with nice spacing, including all names\n FormatType[\"full\"] = \"full\";\n // JSON-format a la Solidity\n FormatType[\"json\"] = \"json\";\n})(FormatType || (FormatType = {}));\n;\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items) {\n const result = new Set();\n items.forEach((k) => result.add(k));\n return Object.freeze(result);\n}\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\nconst _kwTypes = \"constructor error event function struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\nconst _kwOther = \"tuple returns\";\n// All Keywords\nconst _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n// Single character tokens\nconst SimpleTokens = {\n \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n \",\": \"COMMA\", \"@\": \"AT\"\n};\n// Parser regexes to consume the next token\nconst regexWhitespace = new RegExp(\"^(\\\\s*)\");\nconst regexNumber = new RegExp(\"^([0-9]+)\");\nconst regexIdentifier = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\nconst regexType = new RegExp(\"^(address|bool|bytes(0-9*)|string|u?int([0-9]*))\");\nexport class TokenString {\n constructor(tokens) {\n _TokenString_instances.add(this);\n _TokenString_offset.set(this, void 0);\n _TokenString_tokens.set(this, void 0);\n __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\");\n __classPrivateFieldSet(this, _TokenString_tokens, tokens.slice(), \"f\");\n }\n get offset() { return __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n get length() { return __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length - __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n clone() { return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\")); }\n reset() { __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\"); }\n // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n popKeyword(allowed) {\n const top = this.peek();\n if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) {\n throw new Error(`expected keyword ${top.text}`);\n }\n return this.pop().text;\n }\n // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n popType(type) {\n if (this.peek().type !== type) {\n throw new Error(`expected ${type}; got ${JSON.stringify(this.peek())}`);\n }\n return this.pop().text;\n }\n // Pops and returns a \"(\" TOKENS \")\"\n popParen() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = __classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, top.match + 1);\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n popParams() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = [];\n while (__classPrivateFieldGet(this, _TokenString_offset, \"f\") < top.match - 1) {\n const link = this.peek().linkNext;\n result.push(__classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, link));\n __classPrivateFieldSet(this, _TokenString_offset, link, \"f\");\n }\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Returns the top Token, throwing if out of tokens\n peek() {\n if (__classPrivateFieldGet(this, _TokenString_offset, \"f\") >= __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length) {\n throw new Error(\"out-of-bounds\");\n }\n return __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[__classPrivateFieldGet(this, _TokenString_offset, \"f\")];\n }\n // Returns the next value, if it is a keyword in `allowed`\n peekKeyword(allowed) {\n const top = this.peekType(\"KEYWORD\");\n return (top != null && allowed.has(top)) ? top : null;\n }\n // Returns the value of the next token if it is `type`\n peekType(type) {\n if (this.length === 0) {\n return null;\n }\n const top = this.peek();\n return (top.type === type) ? top.text : null;\n }\n // Returns the next token; throws if out of tokens\n pop() {\n var _a;\n const result = this.peek();\n __classPrivateFieldSet(this, _TokenString_offset, (_a = __classPrivateFieldGet(this, _TokenString_offset, \"f\"), _a++, _a), \"f\");\n return result;\n }\n toString() {\n const tokens = [];\n for (let i = __classPrivateFieldGet(this, _TokenString_offset, \"f\"); i < __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length; i++) {\n const token = __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[i];\n tokens.push(`${token.type}:${token.text}`);\n }\n return ``;\n }\n}\n_TokenString_offset = new WeakMap(), _TokenString_tokens = new WeakMap(), _TokenString_instances = new WeakSet(), _TokenString_subTokenString = function _TokenString_subTokenString(from = 0, to = 0) {\n return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\").slice(from, to).map((t) => {\n return Object.freeze(Object.assign({}, t, {\n match: (t.match - from),\n linkBack: (t.linkBack - from),\n linkNext: (t.linkNext - from),\n }));\n return t;\n }));\n};\nexport function lex(text) {\n const tokens = [];\n const throwError = (message) => {\n const token = (offset < text.length) ? JSON.stringify(text[offset]) : \"$EOI\";\n throw new Error(`invalid token ${token} at ${offset}: ${message}`);\n };\n let brackets = [];\n let commas = [];\n let offset = 0;\n while (offset < text.length) {\n // Strip off any leading whitespace\n let cur = text.substring(offset);\n let match = cur.match(regexWhitespace);\n if (match) {\n offset += match[1].length;\n cur = text.substring(offset);\n }\n const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n tokens.push(token);\n let type = (SimpleTokens[cur[0]] || \"\");\n if (type) {\n token.type = type;\n token.text = cur[0];\n offset++;\n if (type === \"OPEN_PAREN\") {\n brackets.push(tokens.length - 1);\n commas.push(tokens.length - 1);\n }\n else if (type == \"CLOSE_PAREN\") {\n if (brackets.length === 0) {\n throwError(\"no matching open bracket\");\n }\n token.match = brackets.pop();\n (tokens[token.match]).match = tokens.length - 1;\n token.depth--;\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n }\n else if (type === \"COMMA\") {\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n commas.push(tokens.length - 1);\n }\n else if (type === \"OPEN_BRACKET\") {\n token.type = \"BRACKET\";\n }\n else if (type === \"CLOSE_BRACKET\") {\n // Remove the CLOSE_BRACKET\n let suffix = tokens.pop().text;\n if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n const value = tokens.pop().text;\n suffix = value + suffix;\n (tokens[tokens.length - 1]).value = logger.getNumber(value);\n }\n if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n throw new Error(\"missing opening bracket\");\n }\n (tokens[tokens.length - 1]).text += suffix;\n }\n continue;\n }\n match = cur.match(regexIdentifier);\n if (match) {\n token.text = match[1];\n offset += token.text.length;\n if (Keywords.has(token.text)) {\n token.type = \"KEYWORD\";\n continue;\n }\n if (token.text.match(regexType)) {\n token.type = \"TYPE\";\n continue;\n }\n token.type = \"ID\";\n continue;\n }\n match = cur.match(regexNumber);\n if (match) {\n token.text = match[1];\n token.type = \"NUMBER\";\n offset += token.text.length;\n continue;\n }\n throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`);\n }\n return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set, allowed) {\n let included = [];\n for (const key in allowed.keys()) {\n if (set.has(key)) {\n included.push(key);\n }\n }\n if (included.length > 1) {\n throw new Error(`conflicting types: ${included.join(\", \")}`);\n }\n}\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n// ...the name with an optional type, returning the name\nfunction consumeName(type, tokens) {\n if (tokens.peekKeyword(KwTypes)) {\n const keyword = tokens.pop().text;\n if (keyword !== type) {\n throw new Error(`expected ${type}, got ${keyword}`);\n }\n }\n return tokens.popType(\"ID\");\n}\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens, allowed) {\n const keywords = new Set();\n while (true) {\n const keyword = tokens.peekType(\"KEYWORD\");\n if (keyword == null || (allowed && !allowed.has(keyword))) {\n break;\n }\n tokens.pop();\n if (keywords.has(keyword)) {\n throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`);\n }\n keywords.add(keyword);\n }\n return Object.freeze(keywords);\n}\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens) {\n let modifiers = consumeKeywords(tokens, KwVisib);\n // Detect conflicting modifiers\n allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n // Process mutability states\n if (modifiers.has(\"view\")) {\n return \"view\";\n }\n if (modifiers.has(\"pure\")) {\n return \"pure\";\n }\n if (modifiers.has(\"payable\")) {\n return \"payable\";\n }\n if (modifiers.has(\"nonpayable\")) {\n return \"nonpayable\";\n }\n // Process legacy `constant` last\n if (modifiers.has(\"constant\")) {\n return \"view\";\n }\n return \"nonpayable\";\n}\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens, allowIndexed) {\n return tokens.popParams().map((t) => ParamType.fromTokens(t, allowIndexed));\n}\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens) {\n if (tokens.peekType(\"AT\")) {\n tokens.pop();\n if (tokens.peekType(\"NUMBER\")) {\n return logger.getBigInt(tokens.pop().text);\n }\n throw new Error(\"invalid gas\");\n }\n return null;\n}\nfunction consumeEoi(tokens) {\n if (tokens.length) {\n throw new Error(`unexpected tokens: ${tokens.toString()}`);\n }\n}\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nfunction verifyBasicType(type) {\n const match = type.match(regexType);\n if (!match) {\n return logger.throwArgumentError(\"invalid type\", \"type\", type);\n }\n if (type === \"uint\") {\n return \"uint256\";\n }\n if (type === \"int\") {\n return \"int256\";\n }\n if (match[2]) {\n // bytesXX\n const length = parseInt(match[2]);\n if (length === 0 || length > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"type\", type);\n }\n }\n else if (match[3]) {\n // intXX or uintXX\n const size = parseInt(match[3]);\n if (size === 0 || size > 256 || size % 8) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n }\n return type;\n}\n// Make the Fragment constructors effectively private\nconst _guard = {};\nconst internal = Symbol.for(\"_ethers_internal\");\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nexport class ParamType {\n constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) {\n _ParamType_instances.add(this);\n logger.assertPrivate(guard, _guard, \"ParamType\");\n Object.defineProperty(this, internal, { value: ParamTypeInternal });\n if (components) {\n components = Object.freeze(components.slice());\n }\n if (baseType === \"array\") {\n if (arrayLength == null || arrayChildren == null) {\n throw new Error(\"\");\n }\n }\n else if (arrayLength != null || arrayChildren != null) {\n throw new Error(\"\");\n }\n if (baseType === \"tuple\") {\n if (components == null) {\n throw new Error(\"\");\n }\n }\n else if (components != null) {\n throw new Error(\"\");\n }\n defineProperties(this, {\n name, type, baseType, indexed, components, arrayLength, arrayChildren\n });\n }\n // Format the parameter fragment\n // - sighash: \"(uint256,address)\"\n // - minimal: \"tuple(uint256,address) indexed\"\n // - full: \"tuple(uint256 foo, address bar) indexed baz\"\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n let result = {\n type: ((this.baseType === \"tuple\") ? \"tuple\" : this.type),\n name: (this.name || undefined)\n };\n if (typeof (this.indexed) === \"boolean\") {\n result.indexed = this.indexed;\n }\n if (this.isTuple()) {\n result.components = this.components.map((c) => JSON.parse(c.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.isArray()) {\n result += this.arrayChildren.format(format);\n result += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n }\n else {\n if (this.isTuple()) {\n if (format !== FormatType.sighash) {\n result += this.type;\n }\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== FormatType.sighash) {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === FormatType.full && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n static isArray(value) {\n return value && (value.baseType === \"array\");\n }\n isArray() {\n return (this.baseType === \"array\");\n }\n isTuple() {\n return (this.baseType === \"tuple\");\n }\n isIndexable() {\n return (this.indexed != null);\n }\n walk(value, process) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v) => (this.arrayChildren.walk(v, process)));\n }\n if (this.isTuple()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid tuple value\");\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v, i) => (this.components[i].walk(v, process)));\n }\n return process(this.type, value);\n }\n async walkAsync(value, process) {\n const promises = [];\n const result = [value];\n __classPrivateFieldGet(this, _ParamType_instances, \"m\", _ParamType_walkAsync).call(this, promises, value, process, (value) => {\n result[0] = value;\n });\n if (promises.length) {\n await Promise.all(promises);\n }\n return result[0];\n }\n static from(obj, allowIndexed) {\n if (ParamType.isParamType(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n return ParamType.fromTokens(lex(obj), allowIndexed);\n }\n if (obj instanceof TokenString) {\n return ParamType.fromTokens(obj, allowIndexed);\n }\n const name = obj.name;\n if (name && (typeof (name) !== \"string\" || !name.match(regexIdentifier))) {\n logger.throwArgumentError(\"invalid name\", \"obj.name\", name);\n }\n let indexed = obj.indexed;\n if (indexed != null) {\n if (!allowIndexed) {\n logger.throwArgumentError(\"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n }\n indexed = !!indexed;\n }\n let type = obj.type;\n let arrayMatch = type.match(regexArrayType);\n if (arrayMatch) {\n const arrayLength = arrayMatch[2];\n const arrayChildren = ParamType.from({\n type: arrayMatch[1],\n components: obj.components\n });\n return new ParamType(_guard, name, type, \"array\", indexed, null, arrayLength, arrayChildren);\n }\n if (type.substring(0, 5) === \"tuple(\" || type[0] === \"(\") {\n const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null;\n const tuple = new ParamType(_guard, name, type, \"tuple\", indexed, comps, null, null);\n // @TODO: use lexer to validate and normalize type\n return tuple;\n }\n type = verifyBasicType(obj.type);\n return new ParamType(_guard, name, type, type, indexed, null, null, null);\n }\n static fromObject(obj, allowIndexed) {\n throw new Error(\"@TODO\");\n }\n static fromTokens(tokens, allowIndexed) {\n let type = \"\", baseType = \"\";\n let comps = null;\n if (consumeKeywords(tokens, setify([\"tuple\"])).has(\"tuple\") || tokens.peekType(\"OPEN_PAREN\")) {\n // Tuple\n baseType = \"tuple\";\n comps = tokens.popParams().map((t) => ParamType.from(t));\n type = `tuple(${comps.map((c) => c.format()).join(\",\")})`;\n }\n else {\n // Normal\n type = verifyBasicType(tokens.popType(\"TYPE\"));\n baseType = type;\n }\n // Check for Array\n let arrayChildren = null;\n let arrayLength = null;\n while (tokens.length && tokens.peekType(\"BRACKET\")) {\n const bracket = tokens.pop(); //arrays[i];\n arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n arrayLength = bracket.value;\n type += bracket.text;\n baseType = \"array\";\n comps = null;\n }\n let indexed = null;\n const keywords = consumeKeywords(tokens, KwModifiers);\n if (keywords.has(\"indexed\")) {\n if (!allowIndexed) {\n throw new Error(\"\");\n }\n indexed = true;\n }\n const name = (tokens.peekType(\"ID\") ? tokens.pop().text : \"\");\n if (tokens.length) {\n throw new Error(\"leftover tokens\");\n }\n return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n }\n static isParamType(value) {\n return (value && value[internal] === ParamTypeInternal);\n }\n}\n_ParamType_instances = new WeakSet(), _ParamType_walkAsync = function _ParamType_walkAsync(promises, value, process, setValue) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const childType = this.arrayChildren;\n const result = value.slice();\n result.forEach((value, index) => {\n __classPrivateFieldGet(childType, _ParamType_instances, \"m\", _ParamType_walkAsync).call(childType, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n if (this.isTuple()) {\n const components = this.components;\n // Convert the object into an array\n let result;\n if (Array.isArray(value)) {\n result = value.slice();\n }\n else {\n if (value == null || typeof (value) !== \"object\") {\n throw new Error(\"invlaid tuple value\");\n }\n result = components.map((param) => {\n if (!param.name) {\n throw new Error(\"cannot use object value with unnamed components\");\n }\n if (!(param.name in value)) {\n throw new Error(`missing value for component ${param.name}`);\n }\n return value[param.name];\n });\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n result.forEach((value, index) => {\n var _a;\n __classPrivateFieldGet((_a = components[index]), _ParamType_instances, \"m\", _ParamType_walkAsync).call(_a, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n const result = process(this.type, value);\n if (result.then) {\n promises.push((async function () { setValue(await result); })());\n }\n else {\n setValue(result);\n }\n};\nexport var FragmentType;\n(function (FragmentType) {\n FragmentType[\"constructor\"] = \"constructor\";\n FragmentType[\"error\"] = \"error\";\n FragmentType[\"event\"] = \"event\";\n FragmentType[\"function\"] = \"function\";\n FragmentType[\"struct\"] = \"struct\";\n})(FragmentType || (FragmentType = {}));\n;\nexport class Fragment {\n constructor(guard, type, inputs) {\n logger.assertPrivate(guard, _guard, \"Fragment\");\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { type, inputs });\n }\n static from(obj) {\n if (typeof (obj) === \"string\") {\n return this.fromString(obj);\n }\n if (obj instanceof TokenString) {\n return this.fromTokens(obj);\n }\n if (typeof (obj) === \"object\") {\n return this.fromObject(obj);\n }\n throw new Error(`unsupported type: ${obj}`);\n }\n static fromObject(obj) {\n switch (obj.type) {\n case \"constructor\": return ConstructorFragment.fromObject(obj);\n case \"error\": return ErrorFragment.fromObject(obj);\n case \"event\": return EventFragment.fromObject(obj);\n case \"function\": return FunctionFragment.fromObject(obj);\n case \"struct\": return StructFragment.fromObject(obj);\n }\n throw new Error(\"not implemented yet\");\n }\n static fromString(text) {\n try {\n Fragment.from(JSON.parse(text));\n }\n catch (e) { }\n return Fragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const type = tokens.popKeyword(KwTypes);\n switch (type) {\n case \"constructor\": return ConstructorFragment.fromTokens(tokens);\n case \"error\": return ErrorFragment.fromTokens(tokens);\n case \"event\": return EventFragment.fromTokens(tokens);\n case \"function\": return FunctionFragment.fromTokens(tokens);\n case \"struct\": return StructFragment.fromTokens(tokens);\n }\n throw new Error(`unsupported type: ${type}`);\n }\n /*\n static fromTokens(tokens: TokenString): Fragment {\n const assertDone = () => {\n if (tokens.length) { throw new Error(`unexpected tokens: ${ tokens.toString() }`); }\n });\n\n const type = (tokens.length && tokens.peek().type === \"KEYWORD\") ? tokens.peek().text: \"unknown\";\n\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens, type === \"event\");\n\n switch (type) {\n case \"event\": case \"struct\":\n assertDone();\n }\n\n }\n */\n static isConstructor(value) {\n return (value && value.type === \"constructor\");\n }\n static isError(value) {\n return (value && value.type === \"error\");\n }\n static isEvent(value) {\n return (value && value.type === \"event\");\n }\n static isFunction(value) {\n return (value && value.type === \"function\");\n }\n static isStruct(value) {\n return (value && value.type === \"struct\");\n }\n}\nexport class NamedFragment extends Fragment {\n constructor(guard, type, name, inputs) {\n super(guard, type, inputs);\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { name });\n }\n}\nfunction joinParams(format, params) {\n return \"(\" + params.map((p) => p.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n}\nexport class ErrorFragment extends NamedFragment {\n constructor(guard, name, inputs) {\n super(guard, FragmentType.error, name, inputs);\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"error\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n return result.join(\" \");\n }\n static fromString(text) {\n return ErrorFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new ErrorFragment(_guard, name, inputs);\n }\n}\nexport class EventFragment extends NamedFragment {\n constructor(guard, name, inputs, anonymous) {\n super(guard, FragmentType.event, name, inputs);\n defineProperties(this, { anonymous });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"event\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash && this.anonymous) {\n result.push(\"anonymous\");\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return EventFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"event\", tokens);\n const inputs = consumeParams(tokens, true);\n const anonymous = !!consumeKeywords(tokens, setify([\"anonymous\"])).has(\"anonymous\");\n consumeEoi(tokens);\n return new EventFragment(_guard, name, inputs, anonymous);\n }\n}\nexport class ConstructorFragment extends Fragment {\n constructor(guard, type, inputs, payable, gas) {\n super(guard, type, inputs);\n defineProperties(this, { payable, gas });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.sighash) {\n logger.throwError(\"cannot format a constructor for sighash\", \"UNSUPPORTED_OPERATION\", {\n operation: \"format(sighash)\"\n });\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: (this.payable ? \"payable\" : \"undefined\"),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [`constructor${joinParams(format, this.inputs)}`];\n result.push((this.payable) ? \"payable\" : \"nonpayable\");\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return ConstructorFragment.fromTokens(lex(text));\n }\n static fromObject(obj) {\n throw new Error(\"TODO\");\n }\n static fromTokens(tokens) {\n consumeKeywords(tokens, setify([\"constructor\"]));\n const inputs = consumeParams(tokens);\n const payable = !!consumeKeywords(tokens, setify([\"payable\"])).has(\"payable\");\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new ConstructorFragment(_guard, FragmentType.constructor, inputs, payable, gas);\n }\n}\nexport class FunctionFragment extends NamedFragment {\n constructor(guard, name, stateMutability, inputs, outputs, gas) {\n super(guard, FragmentType.function, name, inputs);\n outputs = Object.freeze(outputs.slice());\n const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n const payable = (stateMutability === \"payable\");\n defineProperties(this, { constant, gas, outputs, payable, stateMutability });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"function\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash) {\n if (this.stateMutability !== \"nonpayable\") {\n result.push(this.stateMutability);\n }\n if (this.outputs && this.outputs.length) {\n result.push(\"returns\");\n result.push(joinParams(format, this.outputs));\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return FunctionFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"function\", tokens);\n const inputs = consumeParams(tokens);\n const mutability = consumeMutability(tokens);\n let outputs = [];\n if (consumeKeywords(tokens, setify([\"returns\"])).has(\"returns\")) {\n outputs = consumeParams(tokens);\n }\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n }\n}\nexport class StructFragment extends NamedFragment {\n format() {\n throw new Error(\"@TODO\");\n }\n static fromString(text) {\n return StructFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"struct\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new StructFragment(_guard, FragmentType.struct, name, inputs);\n }\n}\n//# sourceMappingURL=fragments.js.map","export const version = \"@ethersproject/math@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\nconst nibbles = \"0123456789abcdef\";\nconst BN_0 = BigInt(0);\n// Converts a value to a BigInt, including big endian data\nexport function toBigInt(_value) {\n if (_value instanceof Uint8Array) {\n let result = \"0x0\";\n for (const v of _value) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0x0f];\n }\n return BigInt(result);\n }\n return logger.getBigInt(_value, \"value\");\n}\nexport function toNumber(_value) {\n const value = toBigInt(_value);\n if (value < -maxValue || value > maxValue) {\n logger.throwArgumentError(\"overflow\", \"value\", _value);\n }\n return Number(value);\n}\n// Converts value to hex, optionally padding on the left to width bytes\nexport function toHex(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n let result = value.toString(16);\n if (_width == null) {\n // Ensure the value is of even length\n if (result.length % 2) {\n result = \"0\" + result;\n }\n }\n else {\n const width = logger.getNumber(_width, \"width\");\n if (width * 2 < result.length) {\n throw new Error(`value ${value} exceeds width ${width}`);\n }\n // Pad the value to the required width\n while (result.length < (width * 2)) {\n result = \"0\" + result;\n }\n }\n return \"0x\" + result;\n}\nexport function toArray(_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n if (value === BN_0) {\n return new Uint8Array([]);\n }\n let hex = value.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < result.length; i++) {\n const offset = i * 2;\n result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n }\n return result;\n}\n//# sourceMappingURL=convert.js.map","import { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n// Convert a value from a twos-compliment value\nexport function fromTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n // Top bit set; treat as a negative value\n if (value >> (width - BN_1)) {\n const mask = (BN_1 << width) - BN_1;\n return -(((~value) & mask) + BN_1);\n }\n return value;\n}\n// Convert value to a twos-compliment value\nexport function toTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n if (value < BN_0) {\n const mask = (BN_1 << width) - BN_1;\n return ((~(-value)) & mask) + BN_1;\n }\n return value;\n}\nexport function mask(_value, _bits) {\n const value = logger.getBigInt(_value, \"value\");\n const bits = logger.getBigInt(_bits, \"bits\");\n return value & ((BN_1 << bits) - BN_1);\n}\n//# sourceMappingURL=maths.js.map","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 _FixedNumber_instances, _FixedNumber_value, _FixedNumber_checkFormat;\nimport { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nimport { fromTwos, toTwos } from \"./maths.js\";\nconst _constructorGuard = {};\n//const Zero = BigInt(0);\nconst NegativeOne = BigInt(-1);\nfunction throwFault(message, fault, operation, value) {\n const params = { fault: fault, operation: operation };\n if (value !== undefined) {\n params.value = value;\n }\n return logger.throwError(message, \"NUMERIC_FAULT\", params);\n}\n// Constant to pull zeros from for multipliers\nlet zeros = \"0\";\nwhile (zeros.length < 256) {\n zeros += zeros;\n}\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getMultiplier(decimals) {\n if (typeof (decimals) !== \"number\" || decimals < 0 || decimals > 256 || decimals % 1) {\n logger.throwArgumentError(\"invalid decimal length\", \"decimals\", decimals);\n }\n return BigInt(\"1\" + zeros.substring(0, decimals));\n}\nexport function formatFixed(_value, _decimals = 0) {\n let value = logger.getBigInt(_value, \"value\");\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n const multiplierStr = String(multiplier);\n const negative = (value < 0);\n if (negative) {\n value *= NegativeOne;\n }\n let fraction = String(value % multiplier);\n // Make sure there are enough place-holders\n while (fraction.length < multiplierStr.length - 1) {\n fraction = \"0\" + fraction;\n }\n // Strip training 0\n while (fraction.length > 1 && fraction.substring(fraction.length - 1) === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n let result = String(value / multiplier);\n if (multiplierStr.length !== 1) {\n result += \".\" + fraction;\n }\n if (negative) {\n result = \"-\" + result;\n }\n return result;\n}\nexport function parseFixed(value, _decimals = 0) {\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n if (typeof (value) !== \"string\" || !value.match(/^-?[0-9.]+$/)) {\n logger.throwArgumentError(\"invalid decimal value\", \"value\", value);\n }\n // Is it negative?\n const negative = (value.substring(0, 1) === \"-\");\n if (negative) {\n value = value.substring(1);\n }\n if (value === \".\") {\n logger.throwArgumentError(\"missing value\", \"value\", value);\n }\n // Split it into a whole and fractional part\n const comps = value.split(\".\");\n if (comps.length > 2) {\n logger.throwArgumentError(\"too many decimal points\", \"value\", value);\n }\n let whole = (comps[0] || \"0\"), fraction = (comps[1] || \"0\");\n // Trim trialing zeros\n while (fraction[fraction.length - 1] === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n // Check the fraction doesn't exceed our decimals size\n if (fraction.length > String(multiplier).length - 1) {\n throwFault(\"fractional component exceeds decimals\", \"underflow\", \"parseFixed\");\n }\n // If decimals is 0, we have an empty string for fraction\n if (fraction === \"\") {\n fraction = \"0\";\n }\n // Fully pad the string with zeros to get to wei\n while (fraction.length < String(multiplier).length - 1) {\n fraction += \"0\";\n }\n const wholeValue = BigInt(whole);\n const fractionValue = BigInt(fraction);\n let wei = (wholeValue * multiplier) + fractionValue;\n if (negative) {\n wei *= NegativeOne;\n }\n return wei;\n}\nexport class FixedFormat {\n constructor(constructorGuard, signed, width, decimals) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedFormat constructor; use FixedFormat.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.signed = signed;\n this.width = width;\n this.decimals = decimals;\n this.name = (signed ? \"\" : \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n this._multiplier = getMultiplier(decimals);\n Object.freeze(this);\n }\n static from(value) {\n if (value instanceof FixedFormat) {\n return value;\n }\n if (typeof (value) === \"number\") {\n value = `fixed128x${value}`;\n }\n let signed = true;\n let width = 128;\n let decimals = 18;\n if (typeof (value) === \"string\") {\n if (value === \"fixed\") {\n // defaults...\n }\n else if (value === \"ufixed\") {\n signed = false;\n }\n else {\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n if (!match) {\n return logger.throwArgumentError(\"invalid fixed format\", \"format\", value);\n }\n signed = (match[1] !== \"u\");\n width = parseInt(match[2]);\n decimals = parseInt(match[3]);\n }\n }\n else if (value) {\n const check = (key, type, defaultValue) => {\n if (value[key] == null) {\n return defaultValue;\n }\n if (typeof (value[key]) !== type) {\n logger.throwArgumentError(\"invalid fixed format (\" + key + \" not \" + type + \")\", \"format.\" + key, value[key]);\n }\n return value[key];\n };\n signed = check(\"signed\", \"boolean\", signed);\n width = check(\"width\", \"number\", width);\n decimals = check(\"decimals\", \"number\", decimals);\n }\n if (width % 8) {\n logger.throwArgumentError(\"invalid fixed format width (not byte aligned)\", \"format.width\", width);\n }\n if (decimals > 80) {\n logger.throwArgumentError(\"invalid fixed format (decimals too large)\", \"format.decimals\", decimals);\n }\n return new FixedFormat(_constructorGuard, signed, width, decimals);\n }\n}\nexport class FixedNumber {\n constructor(constructorGuard, hex, value, format) {\n _FixedNumber_instances.add(this);\n //#hex: string;\n _FixedNumber_value.set(this, void 0);\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedNumber constructor; use FixedNumber.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.format = FixedFormat.from(format);\n //this.#hex = hex;\n __classPrivateFieldSet(this, _FixedNumber_value, value, \"f\");\n this._isFixedNumber = true;\n Object.freeze(this);\n }\n addUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a + b, this.format.decimals, this.format);\n }\n subUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a - b, this.format.decimals, this.format);\n }\n mulUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * b) / this.format._multiplier, this.format.decimals, this.format);\n }\n divUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * this.format._multiplier) / b, this.format.decimals, this.format);\n }\n floor() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (this.isNegative() && hasFraction) {\n result = result.subUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n ceiling() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (!this.isNegative() && hasFraction) {\n result = result.addUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n // @TODO: Support other rounding algorithms\n round(decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n // If we are already in range, we're done\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n if (decimals < 0 || decimals > 80 || (decimals % 1)) {\n logger.throwArgumentError(\"invalid decimal count\", \"decimals\", decimals);\n }\n if (comps[1].length <= decimals) {\n return this;\n }\n const factor = FixedNumber.from(\"1\" + zeros.substring(0, decimals), this.format);\n const bump = BUMP.toFormat(this.format);\n return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor);\n }\n isZero() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0.0\" || __classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0\");\n }\n isNegative() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\")[0] === \"-\");\n }\n toString() { return __classPrivateFieldGet(this, _FixedNumber_value, \"f\"); }\n toHexString(_width) {\n throw new Error(\"TODO\");\n /*\n return toHex();\n if (width == null) { return this.#hex; }\n\n const width = logger.getNumeric(_width);\n if (width % 8) { logger.throwArgumentError(\"invalid byte width\", \"width\", width); }\n\n const hex = BigNumber.from(this.#hex).fromTwos(this.format.width).toTwos(width).toHexString();\n return zeroPadLeft(hex, width / 8);\n */\n }\n toUnsafeFloat() { return parseFloat(this.toString()); }\n toFormat(format) {\n return FixedNumber.fromString(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), format);\n }\n static fromValue(value, decimals = 0, format = \"fixed\") {\n return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\n }\n static fromString(value, format = \"fixed\") {\n const fixedFormat = FixedFormat.from(format);\n const numeric = parseFixed(value, fixedFormat.decimals);\n if (!fixedFormat.signed && numeric < 0) {\n throwFault(\"unsigned value cannot be negative\", \"overflow\", \"value\", value);\n }\n const hex = (function () {\n if (fixedFormat.signed) {\n return toHex(toTwos(numeric, fixedFormat.width));\n }\n return toHex(numeric, fixedFormat.width / 8);\n })();\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static fromBytes(_value, format = \"fixed\") {\n const value = logger.getBytes(_value, \"value\");\n const fixedFormat = FixedFormat.from(format);\n if (value.length > fixedFormat.width / 8) {\n throw new Error(\"overflow\");\n }\n let numeric = toBigInt(value);\n if (fixedFormat.signed) {\n numeric = fromTwos(numeric, fixedFormat.width);\n }\n const hex = toHex(toTwos(numeric, (fixedFormat.signed ? 0 : 1) + fixedFormat.width));\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static from(value, format) {\n if (typeof (value) === \"string\") {\n return FixedNumber.fromString(value, format);\n }\n if (value instanceof Uint8Array) {\n return FixedNumber.fromBytes(value, format);\n }\n try {\n return FixedNumber.fromValue(value, 0, format);\n }\n catch (error) {\n // Allow NUMERIC_FAULT to bubble up\n if (error.code !== \"INVALID_ARGUMENT\") {\n throw error;\n }\n }\n return logger.throwArgumentError(\"invalid FixedNumber value\", \"value\", value);\n }\n static isFixedNumber(value) {\n return !!(value && value._isFixedNumber);\n }\n}\n_FixedNumber_value = new WeakMap(), _FixedNumber_instances = new WeakSet(), _FixedNumber_checkFormat = function _FixedNumber_checkFormat(other) {\n if (this.format.name !== other.format.name) {\n logger.throwArgumentError(\"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n }\n};\nconst ONE = FixedNumber.from(1);\nconst BUMP = FixedNumber.from(\"0.5\");\n//# sourceMappingURL=fixednumber.js.map","import { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nconst Alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nlet Lookup = null;\nfunction getAlpha(letter) {\n if (Lookup == null) {\n Lookup = {};\n for (let i = 0; i < Alphabet.length; i++) {\n Lookup[Alphabet[i]] = BigInt(i);\n }\n }\n const result = Lookup[letter];\n if (result == null) {\n logger.throwArgumentError(`invalid base58 value`, \"letter\", letter);\n }\n return result;\n}\nconst BN_0 = BigInt(0);\nconst BN_58 = BigInt(58);\nexport function encodeBase58(_value) {\n let value = toBigInt(logger.getBytes(_value));\n let result = \"\";\n while (value) {\n result = Alphabet[Number(value % BN_58)] + result;\n value /= BN_58;\n }\n return result;\n}\nexport function decodeBase58(value) {\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result *= BN_58;\n result += getAlpha(value[i]);\n }\n return toHex(result);\n}\n//# sourceMappingURL=base58.js.map","export function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/*\nfunction _isByte(value: number): boolean {\n return (typeof(value) === \"number\" && value >= 0 && value < 256 && Math.floor(value) === value);\n}\nexport function isBytes(value: any): value is Bytes {\n if (value == null) { return false; }\n\n if (value instanceof Uint8Array) { return true; }\n if (typeof(value) === \"string\") { return false; }\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n if (!_isByte(value[i])) { return false; }\n }\n return true;\n }\n\n return false;\n}\n*/\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\n//# sourceMappingURL=check.js.map","export const version = \"@ethersproject/bytes@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { isBytesLike } from \"./check.js\";\nimport { logger } from \"./logger.js\";\nlet BN_8 = null;\nlet BN_255 = null;\ntry {\n BN_8 = BigInt(\"8\");\n BN_255 = BigInt(\"255\");\n}\ncatch (error) {\n console.log(\"Unsupported bigint\", error);\n}\nfunction isHexable(value) {\n return (value && typeof (value.toHexString) === \"function\");\n}\nexport function arrayify(data) {\n if (data == null) {\n logger.throwArgumentError(\"cannot arrayify nullish\", \"data\", data);\n }\n if (typeof (data) === \"number\") {\n logger.assertUint53(data);\n const result = [];\n while (data) {\n result.unshift(data & 0xff);\n data = parseInt(String(data / 256));\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (BN_8 && typeof (data) === \"bigint\") {\n const result = [];\n while (data) {\n result.unshift(Number(data & BN_255));\n data >>= BN_8;\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (isHexable(data)) {\n return arrayify(data.toHexString());\n }\n if (typeof (data) === \"string\") {\n let hex = data;\n //if (options.allowMissingPrefix && hex.substring(0, 2) !== \"0x\") {\n // hex = \"0x\" + hex;\n //}\n if (!hex.match(/^0x[0-9a-f]*$/i)) {\n throw new RangeError(`invalid hex data string (${JSON.stringify(data)})`);\n }\n const result = [];\n for (let i = 2; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n return new Uint8Array(result);\n }\n if (data instanceof Uint8Array) {\n return new Uint8Array(data);\n }\n throw new TypeError(`cannot arrayify ${JSON.stringify(data)}`);\n}\nexport function _noCopyArrayify(data) {\n if (!isBytesLike(data)) {\n logger.throwArgumentError(\"invalid BytesLike value\", \"data\", data);\n } // @TODO: ArgumentE>\n if (data instanceof Uint8Array) {\n return data;\n }\n return arrayify(data);\n}\n//# sourceMappingURL=array.js.map","import { logger } from \"./logger.js\";\nexport function decodeBase64(textData) {\n return new Uint8Array(Buffer.from(textData, \"base64\"));\n}\n;\nexport function encodeBase64(data) {\n return Buffer.from(logger.getBytes(data, \"data\")).toString(\"base64\");\n}\n//# sourceMappingURL=base64.js.map","import { arrayify, _noCopyArrayify } from \"./array.js\";\nconst HexCharacters = \"0123456789abcdef\";\nexport function hexlify(data) {\n const bytes = _noCopyArrayify(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\nexport function quantity(value) {\n let result = hexlify(arrayify(value)).substring(2);\n while (result.substring(0, 1) === \"0\") {\n result = result.substring(1);\n }\n if (result === \"\") {\n result = \"0\";\n }\n return \"0x\" + result;\n}\n//# sourceMappingURL=hex.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { isHexString } from \"./check.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return _noCopyArrayify(data).length;\n}\nexport function dataSlice(data, start, end) {\n const bytes = _noCopyArrayify(data);\n if (end != null && end > bytes.length) {\n logger.throwError(\"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.substring(0, 2) == \"00\") {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\n//# sourceMappingURL=data.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nfunction zeroPad(data, length, left) {\n const bytes = _noCopyArrayify(data);\n if (length < bytes.length) {\n logger.throwError(\"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n }\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\nexport function zeroPadLeft(data, length) {\n return zeroPad(data, length, true);\n}\nexport function zeroPadRight(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=pad.js.map","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 _Result_instances, _Result_indices, _Result_throwError, _Writer_instances, _Writer_data, _Writer_dataLength, _Writer_writeData, _Reader_instances, _Reader_data, _Reader_offset, _Reader_coerceFunc, _Reader_peekBytes;\nimport { toArray, toBigInt, toNumber } from \"@ethersproject/math\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nexport const WordSize = 32;\nconst Padding = new Uint8Array(WordSize);\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [\"then\"];\nconst _guard = {};\nexport class Result extends Array {\n constructor(guard, items, keys) {\n logger.assertPrivate(guard, _guard, \"Result\");\n super(...items);\n _Result_instances.add(this);\n _Result_indices.set(this, void 0);\n // Name lookup table\n __classPrivateFieldSet(this, _Result_indices, new Map(), \"f\");\n if (keys) {\n keys.forEach((key, index) => {\n if (key == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _Result_indices, \"f\").has(key)) {\n (__classPrivateFieldGet(this, _Result_indices, \"f\").get(key)).push(index);\n }\n else {\n __classPrivateFieldGet(this, _Result_indices, \"f\").set(key, [index]);\n }\n });\n }\n Object.freeze(this);\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n if (typeof (prop) === \"string\") {\n if (prop.match(/^[0-9]+$/)) {\n const index = logger.getNumber(prop, \"%index\");\n if (index < 0 || index >= this.length) {\n throw new RangeError(\"out of result range\");\n }\n const item = target[index];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `index ${index}`, item);\n }\n return item;\n }\n // Pass important checks (like `then` for Promise) through\n if (prop in target || passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n // Something that could be a result keyword value\n if (!(prop in target)) {\n return target.getValue(prop);\n }\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n }\n slice(start, end) {\n if (start == null) {\n start = 0;\n }\n if (end == null) {\n end = this.length;\n }\n const result = [];\n for (let i = start; i < end; i++) {\n let value;\n try {\n value = this[i];\n }\n catch (error) {\n value = error.error;\n }\n result.push(value);\n }\n return result;\n }\n getValue(name) {\n const index = __classPrivateFieldGet(this, _Result_indices, \"f\").get(name);\n if (index != null && index.length === 1) {\n const item = this[index[0]];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `property ${JSON.stringify(name)}`, item);\n }\n return item;\n }\n throw new Error(`no named parameter: ${JSON.stringify(name)}`);\n }\n static fromItems(items, keys) {\n return new Result(_guard, items, keys);\n }\n}\n_Result_indices = new WeakMap(), _Result_instances = new WeakSet(), _Result_throwError = function _Result_throwError(name, error) {\n const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`);\n wrapped.error = error;\n throw wrapped;\n};\nexport function checkResultErrors(result) {\n // Find the first error (if any)\n const errors = [];\n const checkErrors = function (path, object) {\n if (!Array.isArray(object)) {\n return;\n }\n for (let key in object) {\n const childPath = path.slice();\n childPath.push(key);\n try {\n checkErrors(childPath, object[key]);\n }\n catch (error) {\n errors.push({ path: childPath, error: error });\n }\n }\n };\n checkErrors([], result);\n return errors;\n}\nfunction getValue(value) {\n let bytes = toArray(value);\n if (bytes.length > WordSize) {\n logger.throwError(\"value out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes,\n length: WordSize,\n offset: bytes.length\n });\n }\n if (bytes.length % WordSize) {\n bytes = arrayify(concat([Padding.slice(bytes.length % WordSize), bytes]));\n }\n return bytes;\n}\nexport class Coder {\n constructor(name, type, localName, dynamic) {\n defineProperties(this, { name, type, localName, dynamic }, {\n name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n });\n }\n _throwError(message, value) {\n return logger.throwArgumentError(message, this.localName, value);\n }\n}\nexport class Writer {\n constructor() {\n _Writer_instances.add(this);\n // An array of WordSize lengthed objects to concatenation\n _Writer_data.set(this, void 0);\n _Writer_dataLength.set(this, void 0);\n __classPrivateFieldSet(this, _Writer_data, [], \"f\");\n __classPrivateFieldSet(this, _Writer_dataLength, 0, \"f\");\n }\n get data() {\n return concat(__classPrivateFieldGet(this, _Writer_data, \"f\"));\n }\n get length() { return __classPrivateFieldGet(this, _Writer_dataLength, \"f\"); }\n appendWriter(writer) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, arrayify(writer.data));\n }\n // Arrayish item; pad on the right to *nearest* WordSize\n writeBytes(value) {\n let bytes = arrayify(value);\n const paddingOffset = bytes.length % WordSize;\n if (paddingOffset) {\n bytes = arrayify(concat([bytes, Padding.slice(paddingOffset)]));\n }\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, bytes);\n }\n // Numeric item; pad on the left *to* WordSize\n writeValue(value) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, getValue(value));\n }\n // Inserts a numeric place-holder, returning a callback that can\n // be used to asjust the value later\n writeUpdatableValue() {\n const offset = __classPrivateFieldGet(this, _Writer_data, \"f\").length;\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(Padding);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + WordSize, \"f\");\n return (value) => {\n __classPrivateFieldGet(this, _Writer_data, \"f\")[offset] = getValue(value);\n };\n }\n}\n_Writer_data = new WeakMap(), _Writer_dataLength = new WeakMap(), _Writer_instances = new WeakSet(), _Writer_writeData = function _Writer_writeData(data) {\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(data);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + data.length, \"f\");\n return data.length;\n};\nexport class Reader {\n constructor(data, coerceFunc, allowLoose) {\n _Reader_instances.add(this);\n _Reader_data.set(this, void 0);\n _Reader_offset.set(this, void 0);\n _Reader_coerceFunc.set(this, void 0);\n defineProperties(this, { allowLoose: !!allowLoose });\n __classPrivateFieldSet(this, _Reader_data, arrayify(data), \"f\");\n __classPrivateFieldSet(this, _Reader_coerceFunc, coerceFunc || Reader.coerce, \"f\");\n __classPrivateFieldSet(this, _Reader_offset, 0, \"f\");\n }\n get data() { return hexlify(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n get dataLength() { return __classPrivateFieldGet(this, _Reader_data, \"f\").length; }\n get consumed() { return __classPrivateFieldGet(this, _Reader_offset, \"f\"); }\n get bytes() { return new Uint8Array(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n // The default Coerce function\n static coerce(type, value) {\n let match = type.match(\"^u?int([0-9]+)$\");\n if (match && parseInt(match[1]) <= 48) {\n value = value.toNumber();\n }\n return value;\n }\n coerce(type, value) {\n return __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\").call(this, type, value);\n }\n // Create a sub-reader with the same underlying data, but offset\n subReader(offset) {\n return new Reader(__classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\") + offset), __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\"), this.allowLoose);\n }\n // Read bytes\n readBytes(length, loose) {\n let bytes = __classPrivateFieldGet(this, _Reader_instances, \"m\", _Reader_peekBytes).call(this, 0, length, !!loose);\n __classPrivateFieldSet(this, _Reader_offset, __classPrivateFieldGet(this, _Reader_offset, \"f\") + bytes.length, \"f\");\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n // Read a numeric values\n readValue() {\n return toBigInt(this.readBytes(WordSize));\n }\n readIndex() {\n return toNumber(this.readBytes(WordSize));\n }\n}\n_Reader_data = new WeakMap(), _Reader_offset = new WeakMap(), _Reader_coerceFunc = new WeakMap(), _Reader_instances = new WeakSet(), _Reader_peekBytes = function _Reader_peekBytes(offset, length, loose) {\n let alignedLength = Math.ceil(length / WordSize) * WordSize;\n if (__classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength > __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n if (this.allowLoose && loose && __classPrivateFieldGet(this, _Reader_offset, \"f\") + length <= __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n alignedLength = length;\n }\n else {\n logger.throwError(\"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: arrayify(__classPrivateFieldGet(this, _Reader_data, \"f\")),\n length: __classPrivateFieldGet(this, _Reader_data, \"f\").length,\n offset: __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength\n });\n }\n }\n return __classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\"), __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength);\n};\n//# sourceMappingURL=abstract-coder.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// The import here is via the package name. This is to ensure\n// that exports mapping/resolution does fall into place.\nimport { crypto } from '@noble/hashes/crypto';\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// There is almost no big endian hardware, but js typed arrays uses platform specific endianess.\n// So, just to be sure not to corrupt anything.\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xde, 0xad, 0xbe, 0xef]))\n */\nexport function bytesToHex(uint8a) {\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('deadbeef')\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 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))\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// Currently avoid insertion of polyfills with packers (browserify/webpack/etc)\n// But setTimeout is pretty slow, maybe worth to investigate howto do minimal polyfill here\nexport const nextTick = (() => {\n const nodeRequire = typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n try {\n if (nodeRequire) {\n const { setImmediate } = nodeRequire('timers');\n return () => new Promise((resolve) => setImmediate(resolve));\n }\n }\n catch (e) { }\n return () => new Promise((resolve) => setTimeout(resolve, 0));\n})();\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\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)\n continue;\n await nextTick();\n ts += diff;\n }\n}\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string') {\n throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`);\n }\n return new TextEncoder().encode(str);\n}\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!(data instanceof Uint8Array))\n throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`);\n return data;\n}\n/**\n * Concats Uint8Array-s into one; like `Buffer.concat([buf1, buf2])`\n * @example concatBytes(buf1, buf2)\n */\nexport function concatBytes(...arrays) {\n if (!arrays.every((a) => a instanceof Uint8Array))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nexport function assertNumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nexport function assertBool(b) {\n if (typeof b !== 'boolean') {\n throw new Error(`Expected boolean, not ${b}`);\n }\n}\nexport function assertBytes(bytes, ...lengths) {\n if (bytes instanceof Uint8Array && (!lengths.length || lengths.includes(bytes.length))) {\n return;\n }\n throw new TypeError(`Expected ${lengths} bytes, not ${typeof bytes} with length=${bytes.length}`);\n}\nexport function assertHash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n assertNumber(hash.outputLen);\n assertNumber(hash.blockLen);\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\nexport function checkOpts(def, _opts) {\n if (_opts !== undefined && (typeof _opts !== 'object' || !isPlainObject(_opts)))\n throw new TypeError('Options should be object or undefined');\n const opts = Object.assign(def, _opts);\n return opts;\n}\nexport function wrapConstructor(hashConstructor) {\n const hashC = (message) => hashConstructor().update(toBytes(message)).digest();\n const tmp = hashConstructor();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashConstructor();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n return new Uint8Array(crypto.node.randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n}\n","import { assertHash, Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nclass HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n assertHash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (!(this.iHash instanceof Hash))\n throw new TypeError('Expected instance of class which extends utils.Hash');\n const blockLen = (this.blockLen = this.iHash.blockLen);\n this.outputLen = this.iHash.outputLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > this.iHash.blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n 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();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n pad.fill(0);\n }\n update(buf) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length !== this.outputLen)\n throw new Error('HMAC: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\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) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\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 * 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, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n","import { hmac } from './hmac.js';\n// prettier-ignore\nimport { createView, toBytes, assertNumber, assertHash, checkOpts, asyncLoop } from './utils.js';\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash, _password, _salt, _opts) {\n assertHash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n assertNumber(c);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n if (c < 1)\n throw new Error('PBKDF2: iterations (c) should be >= 1');\n const password = toBytes(_password);\n const salt = toBytes(_salt);\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\nfunction pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW)\n prfW.destroy();\n u.fill(0);\n return DK;\n}\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n */\nexport function pbkdf2(hash, password, salt, opts) {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\nexport async function pbkdf2Async(hash, password, salt, opts) {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, (i) => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n","import { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n 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// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n const { view, buffer, blockLen, finished } = this;\n if (finished)\n throw new Error('digest() was already called');\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)\n 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) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length < this.outputLen)\n throw new Error('_Sha2: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\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++)\n 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 64bit of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n this.get().forEach((v, i) => oview.setUint32(4 * i, v, 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) {\n to || (to = new this.constructor());\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)\n to.buffer.set(buffer);\n return to;\n }\n}\n","import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\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// 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// 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 {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = IV[7] | 0;\n }\n get() {\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 set(A, B, C, D, E, F, G, H) {\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 process(view, offset) {\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)\n 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 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/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\n","const U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\nexport function fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nexport function split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nexport const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nexport const shrSH = (h, l, s) => h >>> s;\nexport const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nexport const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexport const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexport const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nexport const rotr32H = (h, l) => l;\nexport const rotr32L = (h, l) => h;\n// Left rotate for Shift in [1, 32)\nexport const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexport const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexport const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nexport function add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nexport const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexport const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexport const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexport const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexport const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexport const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n","import { SHA2 } from './_sha2.js';\nimport * as u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n)));\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = new Uint32Array(80);\nconst SHA512_W_L = new Uint32Array(80);\nexport class SHA512 extends SHA2 {\n constructor() {\n super(128, 64, 16, false);\n // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n // Also looks cleaner and easier to verify with spec.\n // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x6a09e667 | 0;\n this.Al = 0xf3bcc908 | 0;\n this.Bh = 0xbb67ae85 | 0;\n this.Bl = 0x84caa73b | 0;\n this.Ch = 0x3c6ef372 | 0;\n this.Cl = 0xfe94f82b | 0;\n this.Dh = 0xa54ff53a | 0;\n this.Dl = 0x5f1d36f1 | 0;\n this.Eh = 0x510e527f | 0;\n this.El = 0xade682d1 | 0;\n this.Fh = 0x9b05688c | 0;\n this.Fl = 0x2b3e6c1f | 0;\n this.Gh = 0x1f83d9ab | 0;\n this.Gl = 0xfb41bd6b | 0;\n this.Hh = 0x5be0cd19 | 0;\n this.Hl = 0x137e2179 | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n SHA512_W_H.fill(0);\n SHA512_W_L.fill(0);\n }\n destroy() {\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nclass SHA512_256 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x22312194 | 0;\n this.Al = 0xfc2bf72c | 0;\n this.Bh = 0x9f555fa3 | 0;\n this.Bl = 0xc84c64c2 | 0;\n this.Ch = 0x2393b86b | 0;\n this.Cl = 0x6f53b151 | 0;\n this.Dh = 0x96387719 | 0;\n this.Dl = 0x5940eabd | 0;\n this.Eh = 0x96283ee2 | 0;\n this.El = 0xa88effe3 | 0;\n this.Fh = 0xbe5e1e25 | 0;\n this.Fl = 0x53863992 | 0;\n this.Gh = 0x2b0199fc | 0;\n this.Gl = 0x2c85b8aa | 0;\n this.Hh = 0x0eb72ddc | 0;\n this.Hl = 0x81c52ca2 | 0;\n this.outputLen = 32;\n }\n}\nclass SHA384 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0xcbbb9d5d | 0;\n this.Al = 0xc1059ed8 | 0;\n this.Bh = 0x629a292a | 0;\n this.Bl = 0x367cd507 | 0;\n this.Ch = 0x9159015a | 0;\n this.Cl = 0x3070dd17 | 0;\n this.Dh = 0x152fecd8 | 0;\n this.Dl = 0xf70e5939 | 0;\n this.Eh = 0x67332667 | 0;\n this.El = 0xffc00b31 | 0;\n this.Fh = 0x8eb44a87 | 0;\n this.Fl = 0x68581511 | 0;\n this.Gh = 0xdb0c2e0d | 0;\n this.Gl = 0x64f98fa7 | 0;\n this.Hh = 0x47b5481d | 0;\n this.Hl = 0xbefa4fa4 | 0;\n this.outputLen = 48;\n }\n}\nexport const sha512 = wrapConstructor(() => new SHA512());\nexport const sha512_256 = wrapConstructor(() => new SHA512_256());\nexport const sha384 = wrapConstructor(() => new SHA384());\n","export const version = \"@ethersproject/crypto@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","/* Browser Crypto Shims */\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { pbkdf2 } from \"@noble/hashes/pbkdf2\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { sha512 } from \"@noble/hashes/sha512\";\nimport { logger } from \"./logger.js\";\nfunction getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst anyGlobal = getGlobal();\nlet crypto = anyGlobal.crypto || anyGlobal.msCrypto;\nexport function createHash(algo) {\n switch (algo) {\n case \"sha256\": return sha256.create();\n case \"sha512\": return sha512.create();\n }\n return logger.throwArgumentError(\"invalid hashing algorithm name\", \"algorithm\", algo);\n}\nexport function createHmac(_algo, key) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid hmac algorithm\", \"algorithm\", _algo);\n }\n return hmac.create(algo, key);\n}\nexport function pbkdf2Sync(password, salt, iterations, keylen, _algo) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid pbkdf2 algorithm\", \"algorithm\", _algo);\n }\n return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen });\n}\nexport function randomBytes(length) {\n if (crypto == null) {\n return logger.throwError(\"platform does not support secure random numbers\", \"UNSUPPORTED_OPERATION\", {\n operation: \"randomBytes\"\n });\n }\n if (length <= 0 || length > 1024 || (length % 1) || length != length) {\n logger.throwArgumentError(\"invalid length\", \"length\", length);\n }\n const result = new Uint8Array(length);\n crypto.getRandomValues(result);\n return result;\n}\n//# sourceMappingURL=crypto-browser.js.map","import { createHmac } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _computeHmac = function (algorithm, key, data) {\n return \"0x\" + createHmac(algorithm, key).update(data).digest(\"hex\");\n};\nlet __computeHmac = _computeHmac;\nexport function computeHmac(algorithm, _key, _data) {\n const key = logger.getBytes(_key, \"key\");\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__computeHmac(algorithm, key, data));\n}\ncomputeHmac._ = _computeHmac;\ncomputeHmac.lock = function () { locked = true; };\ncomputeHmac.register = function (func) {\n if (locked) {\n throw new Error(\"computeHmac is locked\");\n }\n __computeHmac = func;\n};\nObject.freeze(computeHmac);\n//# sourceMappingURL=hmac.js.map","import * as u64 from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapConstructorWithOpts, assertNumber, } from './utils.js';\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = u64.split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => s > 32 ? u64.rotlBH(h, l, s) : u64.rotlSH(h, l, s);\nconst rotlL = (h, l, s) => s > 32 ? u64.rotlBL(h, l, s) : u64.rotlSL(h, l, s);\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n assertNumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (this.finished)\n throw new Error('digest() was already called');\n const { blockLen, state } = 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 for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array))\n throw new Error('Keccak: invalid output buffer');\n this.finish();\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= this.blockLen)\n this.keccak();\n const take = Math.min(this.blockLen - this.posOut, len - pos);\n out.set(this.state.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n assertNumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n if (out.length < this.outputLen)\n throw new Error('Keccak: invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finish();\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = gen(0x06, 136, 256 / 8);\nexport const sha3_384 = gen(0x06, 104, 384 / 8);\nexport const sha3_512 = gen(0x06, 72, 512 / 8);\nexport const keccak_224 = gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = gen(0x01, 136, 256 / 8);\nexport const keccak_384 = gen(0x01, 104, 384 / 8);\nexport const keccak_512 = gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen !== undefined ? opts.dkLen : outputLen, true));\nexport const shake128 = genShake(0x1f, 168, 128 / 8);\nexport const shake256 = genShake(0x1f, 136, 256 / 8);\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\nexport function keccak256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","import { SHA2 } from './_sha2.js';\nimport { wrapConstructor } from './utils.js';\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\nconst Rho = new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]);\nconst Id = Uint8Array.from({ length: 16 }, (_, i) => i);\nconst Pi = Id.map((i) => (9 * i + 5) % 16);\nlet idxL = [Id];\nlet idxR = [Pi];\nfor (let i = 0; i < 4; i++)\n for (let j of [idxL, idxR])\n j.push(j[i].map((k) => Rho[k]));\nconst shifts = [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => new Uint8Array(i));\nconst shiftsL = idxL.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst shiftsR = idxR.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst Kl = new Uint32Array([0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]);\nconst Kr = new Uint32Array([0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]);\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word, shift) => (word << shift) | (word >>> (32 - shift));\n// It's called f() in spec.\nfunction f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n else if (group === 1)\n return (x & y) | (~x & z);\n else if (group === 2)\n return (x | ~y) ^ z;\n else if (group === 3)\n return (x & z) | (y & ~z);\n else\n return x ^ (y | ~z);\n}\n// Temporary buffer, not used to store anything between runs\nconst BUF = new Uint32Array(16);\nexport class RIPEMD160 extends SHA2 {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = (rotl(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = (rotl(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n BUF.fill(0);\n }\n destroy() {\n this.destroyed = true;\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0);\n }\n}\n/**\n * RIPEMD-160 - a hash function from 1990s.\n * @param message - msg that would be hashed\n */\nexport const ripemd160 = wrapConstructor(() => new RIPEMD160());\n","import { ripemd160 as noble_ripemd160 } from \"@noble/hashes/ripemd160\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _ripemd160 = function (data) {\n return noble_ripemd160(data);\n};\nlet __ripemd160 = _ripemd160;\nexport function ripemd160(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__ripemd160(data));\n}\nripemd160._ = _ripemd160;\nripemd160.lock = function () { locked = true; };\nripemd160.register = function (func) {\n if (locked) {\n throw new TypeError(\"ripemd160 is locked\");\n }\n __ripemd160 = func;\n};\nObject.freeze(ripemd160);\n//# sourceMappingURL=ripemd160.js.map","import { pbkdf2Sync } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _pbkdf2 = function (password, salt, iterations, keylen, algo) {\n return pbkdf2Sync(password, salt, iterations, keylen, algo);\n};\nlet __pbkdf2 = _pbkdf2;\nexport function pbkdf2(_password, _salt, iterations, keylen, algo) {\n const password = logger.getBytes(_password, \"password\");\n const salt = logger.getBytes(_salt, \"salt\");\n return hexlify(__pbkdf2(password, salt, iterations, keylen, algo));\n}\npbkdf2._ = _pbkdf2;\npbkdf2.lock = function () { locked = true; };\npbkdf2.register = function (func) {\n if (locked) {\n throw new Error(\"pbkdf2 is locked\");\n }\n __pbkdf2 = func;\n};\nObject.freeze(pbkdf2);\n//# sourceMappingURL=pbkdf2.js.map","import { randomBytes as crypto_random } from \"crypto\"; /*-browser*/\nlet locked = false;\nconst _randomBytes = function (length) {\n return new Uint8Array(crypto_random(length));\n};\nlet __randomBytes = _randomBytes;\nexport function randomBytes(length) {\n return __randomBytes(length);\n}\nrandomBytes._ = _randomBytes;\nrandomBytes.lock = function () { locked = true; };\nrandomBytes.register = function (func) {\n if (locked) {\n throw new Error(\"random is locked\");\n }\n __randomBytes = func;\n};\nObject.freeze(randomBytes);\n//# sourceMappingURL=random.js.map","import { sha256 } from './sha256.js';\nimport { pbkdf2 } from './pbkdf2.js';\nimport { assertNumber, asyncLoop, checkOpts, u32 } from './utils.js';\n// RFC 7914 Scrypt KDF\n// Left rotate for uint32\nconst rotl = (a, b) => (a << b) | (a >>> (32 - b));\n// The main Scrypt loop: uses Salsa extensively.\n// Six versions of the function were tried, this is the fastest one.\n// prettier-ignore\nfunction XorAndSalsa(prev, pi, input, ii, out, oi) {\n // Based on https://cr.yp.to/salsa20.html\n // Xor blocks\n let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];\n let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];\n let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];\n let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];\n let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];\n let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];\n let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];\n let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];\n // Save state to temporary variables (salsa)\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n // Main loop (salsa)\n for (let i = 0; i < 8; i += 2) {\n x04 ^= rotl(x00 + x12 | 0, 7);\n x08 ^= rotl(x04 + x00 | 0, 9);\n x12 ^= rotl(x08 + x04 | 0, 13);\n x00 ^= rotl(x12 + x08 | 0, 18);\n x09 ^= rotl(x05 + x01 | 0, 7);\n x13 ^= rotl(x09 + x05 | 0, 9);\n x01 ^= rotl(x13 + x09 | 0, 13);\n x05 ^= rotl(x01 + x13 | 0, 18);\n x14 ^= rotl(x10 + x06 | 0, 7);\n x02 ^= rotl(x14 + x10 | 0, 9);\n x06 ^= rotl(x02 + x14 | 0, 13);\n x10 ^= rotl(x06 + x02 | 0, 18);\n x03 ^= rotl(x15 + x11 | 0, 7);\n x07 ^= rotl(x03 + x15 | 0, 9);\n x11 ^= rotl(x07 + x03 | 0, 13);\n x15 ^= rotl(x11 + x07 | 0, 18);\n x01 ^= rotl(x00 + x03 | 0, 7);\n x02 ^= rotl(x01 + x00 | 0, 9);\n x03 ^= rotl(x02 + x01 | 0, 13);\n x00 ^= rotl(x03 + x02 | 0, 18);\n x06 ^= rotl(x05 + x04 | 0, 7);\n x07 ^= rotl(x06 + x05 | 0, 9);\n x04 ^= rotl(x07 + x06 | 0, 13);\n x05 ^= rotl(x04 + x07 | 0, 18);\n x11 ^= rotl(x10 + x09 | 0, 7);\n x08 ^= rotl(x11 + x10 | 0, 9);\n x09 ^= rotl(x08 + x11 | 0, 13);\n x10 ^= rotl(x09 + x08 | 0, 18);\n x12 ^= rotl(x15 + x14 | 0, 7);\n x13 ^= rotl(x12 + x15 | 0, 9);\n x14 ^= rotl(x13 + x12 | 0, 13);\n x15 ^= rotl(x14 + x13 | 0, 18);\n }\n // Write output (salsa)\n out[oi++] = (y00 + x00) | 0;\n out[oi++] = (y01 + x01) | 0;\n out[oi++] = (y02 + x02) | 0;\n out[oi++] = (y03 + x03) | 0;\n out[oi++] = (y04 + x04) | 0;\n out[oi++] = (y05 + x05) | 0;\n out[oi++] = (y06 + x06) | 0;\n out[oi++] = (y07 + x07) | 0;\n out[oi++] = (y08 + x08) | 0;\n out[oi++] = (y09 + x09) | 0;\n out[oi++] = (y10 + x10) | 0;\n out[oi++] = (y11 + x11) | 0;\n out[oi++] = (y12 + x12) | 0;\n out[oi++] = (y13 + x13) | 0;\n out[oi++] = (y14 + x14) | 0;\n out[oi++] = (y15 + x15) | 0;\n}\nfunction BlockMix(input, ii, out, oi, r) {\n // The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)\n let head = oi + 0;\n let tail = oi + 16 * r;\n for (let i = 0; i < 16; i++)\n out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; // X ← B[2r−1]\n for (let i = 0; i < r; i++, head += 16, ii += 16) {\n // We write odd & even Yi at same time. Even: 0bXXXXX0 Odd: 0bXXXXX1\n XorAndSalsa(out, tail, input, ii, out, head); // head[i] = Salsa(blockIn[2*i] ^ tail[i-1])\n if (i > 0)\n tail += 16; // First iteration overwrites tmp value in tail\n XorAndSalsa(out, head, input, (ii += 16), out, tail); // tail[i] = Salsa(blockIn[2*i+1] ^ head[i])\n }\n}\n// Common prologue and epilogue for sync/async functions\nfunction scryptInit(password, salt, _opts) {\n // Maxmem - 1GB+1KB by default\n const opts = checkOpts({\n dkLen: 32,\n asyncTick: 10,\n maxmem: 1024 ** 3 + 1024,\n }, _opts);\n const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts;\n assertNumber(N);\n assertNumber(r);\n assertNumber(p);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n assertNumber(maxmem);\n if (onProgress !== undefined && typeof onProgress !== 'function')\n throw new Error('progressCb should be function');\n const blockSize = 128 * r;\n const blockSize32 = blockSize / 4;\n if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) {\n // NOTE: we limit N to be less than 2**32 because of 32 bit variant of Integrify function\n // There is no JS engines that allows alocate more than 4GB per single Uint8Array for now, but can change in future.\n throw new Error('Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32');\n }\n if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) {\n throw new Error('Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)');\n }\n if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) {\n throw new Error('Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32');\n }\n const memUsed = blockSize * (N + p);\n if (memUsed > maxmem) {\n throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`);\n }\n // [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)\n // Since it has only one iteration there is no reason to use async variant\n const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });\n const B32 = u32(B);\n // Re-used between parallel iterations. Array(iterations) of B\n const V = u32(new Uint8Array(blockSize * N));\n const tmp = u32(new Uint8Array(blockSize));\n let blockMixCb = () => { };\n if (onProgress) {\n const totalBlockMix = 2 * N * p;\n // Invoke callback if progress changes from 10.01 to 10.02\n // Allows to draw smooth progress bar on up to 8K screen\n const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1);\n let blockMixCnt = 0;\n blockMixCb = () => {\n blockMixCnt++;\n if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))\n onProgress(blockMixCnt / totalBlockMix);\n };\n }\n return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };\n}\nfunction scryptOutput(password, dkLen, B, V, tmp) {\n const res = pbkdf2(sha256, password, B, { c: 1, dkLen });\n B.fill(0);\n V.fill(0);\n tmp.fill(0);\n return res;\n}\n/**\n * Scrypt KDF from RFC 7914.\n * @param password - pass\n * @param salt - salt\n * @param opts - parameters\n * - `N` is cpu/mem work factor (power of 2 e.g. 2**18)\n * - `r` is block size (8 is common), fine-tunes sequential memory read size and performance\n * - `p` is parallelization factor (1 is common)\n * - `dkLen` is output key length in bytes e.g. 32.\n * - `asyncTick` - (default: 10) max time in ms for which async function can block execution\n * - `maxmem` - (default: `1024 ** 3 + 1024` aka 1GB+1KB). A limit that the app could use for scrypt\n * - `onProgress` - callback function that would be executed for progress report\n * @returns Derived key\n */\nexport function scrypt(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n for (let i = 0, pos = 0; i < N - 1; i++) {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n }\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n for (let i = 0; i < N; i++) {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n }\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n/**\n * Scrypt KDF from RFC 7914.\n */\nexport async function scryptAsync(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n let pos = 0;\n await asyncLoop(N - 1, asyncTick, (i) => {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n });\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n await asyncLoop(N, asyncTick, (i) => {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n });\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n","import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from \"@noble/hashes/scrypt\";\nimport { hexlify as H } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet lockedSync = false, lockedAsync = false;\nconst _scryptAsync = async function (passwd, salt, N, r, p, dkLen, onProgress) {\n return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress });\n};\nconst _scryptSync = function (passwd, salt, N, r, p, dkLen) {\n return _nobleSync(passwd, salt, { N, r, p, dkLen });\n};\nlet __scryptAsync = _scryptAsync;\nlet __scryptSync = _scryptSync;\nexport async function scrypt(_passwd, _salt, N, r, p, dkLen, progress) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress));\n}\nscrypt._ = _scryptAsync;\nscrypt.lock = function () { lockedAsync = true; };\nscrypt.register = function (func) {\n if (lockedAsync) {\n throw new Error(\"scrypt is locked\");\n }\n __scryptAsync = func;\n};\nObject.freeze(scrypt);\nexport function scryptSync(_passwd, _salt, N, r, p, dkLen) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(__scryptSync(passwd, salt, N, r, p, dkLen));\n}\nscryptSync._ = _scryptSync;\nscryptSync.lock = function () { lockedSync = true; };\nscryptSync.register = function (func) {\n if (lockedSync) {\n throw new Error(\"scryptSync is locked\");\n }\n __scryptSync = func;\n};\nObject.freeze(scryptSync);\n//# sourceMappingURL=scrypt.js.map","import { createHash } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nconst _sha256 = function (data) {\n return createHash(\"sha256\").update(data).digest();\n};\nconst _sha512 = function (data) {\n return createHash(\"sha512\").update(data).digest();\n};\nlet __sha256 = _sha256;\nlet __sha512 = _sha512;\nlet locked256 = false, locked512 = false;\nexport function sha256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha256(data));\n}\nsha256._ = _sha256;\nsha256.lock = function () { locked256 = true; };\nsha256.register = function (func) {\n if (locked256) {\n throw new Error(\"sha256 is locked\");\n }\n __sha256 = func;\n};\nObject.freeze(sha256);\nexport function sha512(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha512(data));\n}\nsha512._ = _sha512;\nsha512.lock = function () { locked512 = true; };\nsha512.register = function (func) {\n if (locked512) {\n throw new Error(\"sha512 is locked\");\n }\n __sha512 = func;\n};\nObject.freeze(sha256);\n//# sourceMappingURL=sha2.js.map","// We import all these so we can export lock()\nimport { computeHmac } from \"./hmac.js\";\nimport { keccak256 } from \"./keccak.js\";\nimport { ripemd160 } from \"./ripemd160.js\";\nimport { pbkdf2 } from \"./pbkdf2.js\";\nimport { randomBytes } from \"./random.js\";\nimport { scrypt, scryptSync } from \"./scrypt.js\";\nimport { sha256, sha512 } from \"./sha2.js\";\nexport { computeHmac, randomBytes, keccak256, ripemd160, sha256, sha512, pbkdf2, scrypt, scryptSync };\nexport function lock() {\n computeHmac.lock();\n keccak256.lock();\n pbkdf2.lock();\n randomBytes.lock();\n ripemd160.lock();\n scrypt.lock();\n scryptSync.lock();\n sha256.lock();\n sha512.lock();\n}\n//# sourceMappingURL=index.js.map","export const version = \"@ethersproject/address@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { arrayify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\nfunction getChecksumAddress(address) {\n // if (!isHexString(address, 20)) {\n // logger.throwArgumentError(\"invalid address\", \"address\", address);\n // }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = arrayify(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nconst Base36 = (function () {\n ;\n const result = {};\n for (let i = 0; i < 36; i++) {\n const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n result[key] = BigInt(i);\n }\n return result;\n})();\nfunction fromBase36(value) {\n value = value.toLowerCase();\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result = result * BN_36 + Base36[value[i]];\n }\n return result;\n}\nexport function getAddress(address) {\n if (typeof (address) !== \"string\") {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (address.substring(0, 2) !== \"0x\") {\n address = \"0x\" + address;\n }\n const result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n logger.throwArgumentError(\"bad address checksum\", \"address\", address);\n }\n return result;\n }\n // Maybe ICAP? (we only support direct mode)\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n logger.throwArgumentError(\"bad icap checksum\", \"address\", address);\n }\n let result = fromBase36(address.substring(4)).toString(16);\n while (result.length < 40) {\n result = \"0\" + result;\n }\n return getChecksumAddress(\"0x\" + result);\n }\n return logger.throwArgumentError(\"invalid address\", \"address\", address);\n}\nexport function getIcapAddress(address) {\n //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n//# sourceMappingURL=address.js.map","export const version = \"@ethersproject/rlp@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { logger } from \"./logger.js\";\nfunction arrayifyInteger(value) {\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\nfunction _encode(object) {\n if (Array.isArray(object)) {\n let payload = [];\n object.forEach(function (child) {\n payload = payload.concat(_encode(child));\n });\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length);\n return payload;\n }\n const length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n return length.concat(payload);\n }\n const data = Array.prototype.slice.call(logger.getBytes(object, \"object\"));\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n }\n else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n const length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n return length.concat(data);\n}\nconst nibbles = \"0123456789abcdef\";\nexport function encodeRlp(object) {\n let result = \"0x\";\n for (const v of _encode(object)) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0xf];\n }\n return result;\n}\n//# sourceMappingURL=encode.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction hexlifyByte(value) {\n let result = value.toString(16);\n while (result.length < 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction unarrayifyInteger(data, offset, length) {\n let result = 0;\n for (let i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\nfunction _decodeChildren(data, offset, childOffset, length) {\n const result = [];\n while (childOffset < offset + 1 + length) {\n const decoded = _decode(data, childOffset);\n result.push(decoded.result);\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n logger.throwError(\"child data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length, offset\n });\n }\n }\n return { consumed: (1 + length), result: result };\n}\n// returns { consumed: number, result: Object }\nfunction _decode(data, offset) {\n if (data.length === 0) {\n logger.throwError(\"data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: 0, offset: 1\n });\n }\n const checkOffset = (offset) => {\n if (offset > data.length) {\n logger.throwError(\"data short segment too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: data.length, offset\n });\n }\n };\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n const lengthLength = data[offset] - 0xf7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n }\n else if (data[offset] >= 0xc0) {\n const length = data[offset] - 0xc0;\n checkOffset(offset + 1 + length);\n return _decodeChildren(data, offset, offset + 1, length);\n }\n else if (data[offset] >= 0xb8) {\n const lengthLength = data[offset] - 0xb7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result };\n }\n else if (data[offset] >= 0x80) {\n const length = data[offset] - 0x80;\n checkOffset(offset + 1 + length);\n const result = hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result };\n }\n return { consumed: 1, result: hexlifyByte(data[offset]) };\n}\nexport function decodeRlp(_data) {\n const data = logger.getBytes(_data, \"data\");\n const decoded = _decode(data, 0);\n if (decoded.consumed !== data.length) {\n logger.throwArgumentError(\"unexpected junk after rlp payload\", \"data\", _data);\n }\n return decoded.result;\n}\n//# sourceMappingURL=decode.js.map","import { concat, dataSlice } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nexport function getCreateAddress(tx) {\n const from = getAddress(tx.from);\n const nonce = logger.getBigInt(tx.nonce, \"tx.nonce\");\n let nonceHex = nonce.toString(16);\n if (nonceHex === \"0\") {\n nonceHex = \"0x\";\n }\n else if (nonceHex.length % 2) {\n nonceHex = \"0x0\" + nonceHex;\n }\n else {\n nonceHex = \"0x\" + nonceHex;\n }\n return getAddress(dataSlice(keccak256(encodeRlp([from, nonceHex])), 12));\n}\nexport function getCreate2Address(_from, _salt, _initCodeHash) {\n const from = getAddress(_from);\n const salt = logger.getBytes(_salt, \"salt\");\n const initCodeHash = logger.getBytes(_initCodeHash, \"initCodeHash\");\n if (salt.length !== 32) {\n logger.throwArgumentError(\"salt must be 32 bytes\", \"salt\", _salt);\n }\n if (initCodeHash.length !== 32) {\n logger.throwArgumentError(\"initCodeHash must be 32 bytes\", \"initCodeHash\", _initCodeHash);\n }\n return getAddress(dataSlice(keccak256(concat([\"0xff\", from, salt, initCodeHash])), 12));\n}\n//# sourceMappingURL=contract-address.js.map","import { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport function isAddressable(value) {\n return (value && typeof (value.getAddress) === \"function\");\n}\nexport function isAddress(value) {\n try {\n getAddress(value);\n return true;\n }\n catch (error) { }\n return false;\n}\n// Resolves an Ethereum address, ENS name or Addressable object,\n// throwing if the result is null; an explicit null returns null\n//export async function resolveAddress(target?: null, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: null | undefined | string | Addressable, resolver?: null | NameResolver) {\nexport async function resolveAddress(target, resolver) {\n //if (target == null) { return null; }\n if (typeof (target) === \"string\") {\n if (target.match(/^0x[0-9a-f]{40}$/i)) {\n return getAddress(target);\n }\n if (resolver == null) {\n return logger.throwError(\"ENS resolution requires a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n });\n }\n const result = await resolver.resolveName(target);\n if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n return logger.throwError(\"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n }\n return getAddress(result);\n }\n else if (isAddressable(target)) {\n const result = await target.getAddress();\n if (result == null) {\n logger.throwArgumentError(\"addressable resolved to null\", \"target\", target);\n }\n return getAddress(result);\n }\n return logger.throwArgumentError(\"unsupported addressable value\", \"target\", target);\n}\n//# sourceMappingURL=checks.js.map","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 _Typed_options;\nimport { defineProperties } from \"@ethersproject/properties\";\nconst _gaurd = {};\nfunction n(value, width) {\n let signed = false;\n if (width < 0) {\n signed = true;\n width *= -1;\n }\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `${signed ? \"\" : \"u\"}int${width}`, value, { signed, width });\n}\nfunction b(value, size) {\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `bytes${(size) ? size : \"\"}`, value, { size });\n}\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\nexport class Typed {\n constructor(gaurd, type, value, options = null) {\n _Typed_options.set(this, void 0);\n if (gaurd !== _gaurd) {\n throw new Error(\"private constructor\");\n }\n defineProperties(this, { _typedSymbol, type, value });\n __classPrivateFieldSet(this, _Typed_options, options, \"f\");\n // Check the value is valid\n this.format();\n }\n format() {\n if (this.type === \"array\") {\n throw new Error(\"\");\n }\n else if (this.type === \"dynamicArray\") {\n throw new Error(\"\");\n }\n else if (this.type === \"tuple\") {\n return `tuple(${this.value.map((v) => v.format()).join(\",\")})`;\n }\n return this.type;\n }\n defaultValue() {\n return 0;\n }\n minValue() {\n return 0;\n }\n maxValue() {\n return 0;\n }\n isBigInt() {\n return !!(this.type.match(/^u?int[0-9]+$/));\n }\n isData() {\n return (this.type.substring(0, 5) === \"bytes\");\n }\n isString() {\n return (this.type === \"string\");\n }\n get tupleName() {\n if (this.type !== \"tuple\") {\n throw TypeError(\"not a tuple\");\n }\n return __classPrivateFieldGet(this, _Typed_options, \"f\");\n }\n // Returns the length of this type as an array\n // - `null` indicates the length is unforced, it could be dynamic\n // - `-1` indicates the length is dynamic\n // - any other value indicates it is a static array and is its length\n get arrayLength() {\n if (this.type !== \"array\") {\n throw TypeError(\"not an array\");\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === true) {\n return -1;\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === false) {\n return (this.value).length;\n }\n return null;\n }\n static from(type, value) {\n return new Typed(_gaurd, type, value);\n }\n static uint8(v) { return n(v, 8); }\n static uint16(v) { return n(v, 16); }\n static uint24(v) { return n(v, 24); }\n static uint32(v) { return n(v, 32); }\n static uint40(v) { return n(v, 40); }\n static uint48(v) { return n(v, 46); }\n static uint56(v) { return n(v, 56); }\n static uint64(v) { return n(v, 64); }\n static uint72(v) { return n(v, 72); }\n static uint80(v) { return n(v, 80); }\n static uint88(v) { return n(v, 88); }\n static uint96(v) { return n(v, 96); }\n static uint104(v) { return n(v, 104); }\n static uint112(v) { return n(v, 112); }\n static uint120(v) { return n(v, 120); }\n static uint128(v) { return n(v, 128); }\n static uint136(v) { return n(v, 136); }\n static uint144(v) { return n(v, 144); }\n static uint152(v) { return n(v, 152); }\n static uint160(v) { return n(v, 160); }\n static uint168(v) { return n(v, 168); }\n static uint176(v) { return n(v, 176); }\n static uint184(v) { return n(v, 184); }\n static uint192(v) { return n(v, 192); }\n static uint200(v) { return n(v, 200); }\n static uint208(v) { return n(v, 208); }\n static uint216(v) { return n(v, 216); }\n static uint224(v) { return n(v, 224); }\n static uint232(v) { return n(v, 232); }\n static uint240(v) { return n(v, 240); }\n static uint248(v) { return n(v, 248); }\n static uint256(v) { return n(v, 256); }\n static uint(v) { return n(v, 256); }\n static int8(v) { return n(v, -8); }\n static int16(v) { return n(v, -16); }\n static int24(v) { return n(v, -24); }\n static int32(v) { return n(v, -32); }\n static int40(v) { return n(v, -40); }\n static int48(v) { return n(v, -46); }\n static int56(v) { return n(v, -56); }\n static int64(v) { return n(v, -64); }\n static int72(v) { return n(v, -72); }\n static int80(v) { return n(v, -80); }\n static int88(v) { return n(v, -88); }\n static int96(v) { return n(v, -96); }\n static int104(v) { return n(v, -104); }\n static int112(v) { return n(v, -112); }\n static int120(v) { return n(v, -120); }\n static int128(v) { return n(v, -128); }\n static int136(v) { return n(v, -136); }\n static int144(v) { return n(v, -144); }\n static int152(v) { return n(v, -152); }\n static int160(v) { return n(v, -160); }\n static int168(v) { return n(v, -168); }\n static int176(v) { return n(v, -176); }\n static int184(v) { return n(v, -184); }\n static int192(v) { return n(v, -192); }\n static int200(v) { return n(v, -200); }\n static int208(v) { return n(v, -208); }\n static int216(v) { return n(v, -216); }\n static int224(v) { return n(v, -224); }\n static int232(v) { return n(v, -232); }\n static int240(v) { return n(v, -240); }\n static int248(v) { return n(v, -248); }\n static int256(v) { return n(v, -256); }\n static int(v) { return n(v, -256); }\n static bytes(v) { return b(v); }\n static bytes1(v) { return b(v, 1); }\n static bytes2(v) { return b(v, 2); }\n static bytes3(v) { return b(v, 3); }\n static bytes4(v) { return b(v, 4); }\n static bytes5(v) { return b(v, 5); }\n static bytes6(v) { return b(v, 6); }\n static bytes7(v) { return b(v, 7); }\n static bytes8(v) { return b(v, 8); }\n static bytes9(v) { return b(v, 9); }\n static bytes10(v) { return b(v, 10); }\n static bytes11(v) { return b(v, 11); }\n static bytes12(v) { return b(v, 12); }\n static bytes13(v) { return b(v, 13); }\n static bytes14(v) { return b(v, 14); }\n static bytes15(v) { return b(v, 15); }\n static bytes16(v) { return b(v, 16); }\n static bytes17(v) { return b(v, 17); }\n static bytes18(v) { return b(v, 18); }\n static bytes19(v) { return b(v, 19); }\n static bytes20(v) { return b(v, 20); }\n static bytes21(v) { return b(v, 21); }\n static bytes22(v) { return b(v, 22); }\n static bytes23(v) { return b(v, 23); }\n static bytes24(v) { return b(v, 24); }\n static bytes25(v) { return b(v, 25); }\n static bytes26(v) { return b(v, 26); }\n static bytes27(v) { return b(v, 27); }\n static bytes28(v) { return b(v, 28); }\n static bytes29(v) { return b(v, 29); }\n static bytes30(v) { return b(v, 30); }\n static bytes31(v) { return b(v, 31); }\n static bytes32(v) { return b(v, 32); }\n static address(v) { return new Typed(_gaurd, \"address\", v); }\n static bool(v) { return new Typed(_gaurd, \"bool\", !!v); }\n static string(v) { return new Typed(_gaurd, \"string\", v); }\n static array(v, dynamic) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"array\", v, dynamic);\n }\n static tuple(v, name) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"tuple\", v, name);\n }\n static overrides(v) {\n return new Typed(_gaurd, \"overrides\", Object.assign({}, v));\n }\n static isTyped(value) {\n return (value && value._typedSymbol === _typedSymbol);\n }\n static dereference(value, type) {\n if (Typed.isTyped(value)) {\n if (value.type !== type) {\n throw new Error(`invalid type: expecetd ${type}, got ${value.type}`);\n }\n return value.value;\n }\n return value;\n }\n}\n_Typed_options = new WeakMap();\n//# sourceMappingURL=typed.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class AddressCoder extends Coder {\n constructor(localName) {\n super(\"address\", \"address\", localName, false);\n }\n defaultValue() {\n return \"0x0000000000000000000000000000000000000000\";\n }\n encode(writer, _value) {\n let value = Typed.dereference(_value, \"string\");\n try {\n value = getAddress(value);\n }\n catch (error) {\n return this._throwError(error.message, _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n return getAddress(toHex(reader.readValue(), 20));\n }\n}\n//# sourceMappingURL=address.js.map","import { Coder } from \"./abstract-coder.js\";\n// Clones the functionality of an existing Coder, but without a localName\nexport class AnonymousCoder extends Coder {\n constructor(coder) {\n super(coder.name, coder.type, \"_\", coder.dynamic);\n this.coder = coder;\n }\n defaultValue() {\n return this.coder.defaultValue();\n }\n encode(writer, value) {\n return this.coder.encode(writer, value);\n }\n decode(reader) {\n return this.coder.decode(reader);\n }\n}\n//# sourceMappingURL=anonymous.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { isError } from \"@ethersproject/logger\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\nexport function pack(writer, coders, values) {\n let arrayValues = [];\n if (Array.isArray(values)) {\n arrayValues = values;\n }\n else if (values && typeof (values) === \"object\") {\n let unique = {};\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n if (!name) {\n logger.throwError(\"cannot encode object for signature with missing names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n if (unique[name]) {\n logger.throwError(\"cannot encode object for signature with duplicate names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n unique[name] = true;\n return values[name];\n });\n }\n else {\n logger.throwArgumentError(\"invalid tuple value\", \"tuple\", values);\n }\n if (coders.length !== arrayValues.length) {\n logger.throwArgumentError(\"types/value length mismatch\", \"tuple\", values);\n }\n let staticWriter = new Writer();\n let dynamicWriter = new Writer();\n let updateFuncs = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n }\n else {\n coder.encode(staticWriter, value);\n }\n });\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\nexport function unpack(reader, coders) {\n let values = [];\n let keys = [];\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n coders.forEach((coder) => {\n let value = null;\n if (coder.dynamic) {\n let offset = reader.readIndex();\n let offsetReader = baseReader.subReader(offset);\n try {\n value = coder.decode(offsetReader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n else {\n try {\n value = coder.decode(reader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n if (value == undefined) {\n throw new Error(\"investigate\");\n }\n values.push(value);\n keys.push(coder.localName || null);\n });\n return Result.fromItems(values, keys);\n}\nexport class ArrayCoder extends Coder {\n constructor(coder, length, localName) {\n const type = (coder.type + \"[\" + (length >= 0 ? length : \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n defineProperties(this, { coder, length });\n }\n defaultValue() {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n const result = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"array\");\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n let count = this.length;\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n logger.assertArgumentCount(value.length, count, \"coder array\" + (this.localName ? (\" \" + this.localName) : \"\"));\n let coders = [];\n for (let i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return pack(writer, coders, value);\n }\n decode(reader) {\n let count = this.length;\n if (count === -1) {\n count = reader.readIndex();\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n if (count * WordSize > reader.dataLength) {\n logger.throwError(\"insufficient data length\", \"BUFFER_OVERRUN\", {\n buffer: reader.bytes,\n offset: count * WordSize,\n length: reader.dataLength\n });\n }\n }\n let coders = [];\n for (let i = 0; i < count; i++) {\n coders.push(new AnonymousCoder(this.coder));\n }\n return reader.coerce(this.name, unpack(reader, coders));\n }\n}\n//# sourceMappingURL=array.js.map","import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class BooleanCoder extends Coder {\n constructor(localName) {\n super(\"bool\", \"bool\", localName, false);\n }\n defaultValue() {\n return false;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"bool\");\n return writer.writeValue(value ? 1 : 0);\n }\n decode(reader) {\n return reader.coerce(this.type, !reader.readValue());\n }\n}\n//# sourceMappingURL=boolean.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class DynamicBytesCoder extends Coder {\n constructor(type, localName) {\n super(type, type, localName, true);\n }\n defaultValue() {\n return \"0x\";\n }\n encode(writer, value) {\n value = arrayify(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n decode(reader) {\n return reader.readBytes(reader.readIndex(), true);\n }\n}\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"bytes\", localName);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(super.decode(reader)));\n }\n}\n//# sourceMappingURL=bytes.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class FixedBytesCoder extends Coder {\n constructor(size, localName) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n defineProperties(this, { size }, { size: \"number\" });\n }\n defaultValue() {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n encode(writer, _value) {\n let data = arrayify(Typed.dereference(_value, this.type));\n if (data.length !== this.size) {\n this._throwError(\"incorrect data length\", _value);\n }\n return writer.writeBytes(data);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));\n }\n}\n//# sourceMappingURL=fixed-bytes.js.map","import { Coder } from \"./abstract-coder.js\";\nconst Empty = new Uint8Array([]);\nexport class NullCoder extends Coder {\n constructor(localName) {\n super(\"null\", \"\", localName, false);\n }\n defaultValue() {\n return null;\n }\n encode(writer, value) {\n if (value != null) {\n this._throwError(\"not null\", value);\n }\n return writer.writeBytes(Empty);\n }\n decode(reader) {\n reader.readBytes(0);\n return reader.coerce(this.name, null);\n }\n}\n//# sourceMappingURL=null.js.map","import { fromTwos, mask, toTwos } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\nexport class NumberCoder extends Coder {\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n defineProperties(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n }\n defaultValue() {\n return 0;\n }\n encode(writer, _value) {\n let value = logger.getBigInt(Typed.dereference(_value, this.type));\n // Check bounds are safe for encoding\n let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n if (this.signed) {\n let bounds = mask(maxUintValue, (this.size * 8) - 1);\n if (value > bounds || value < -(bounds + BN_1)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n }\n else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n value = mask(toTwos(value, this.size * 8), this.size * 8);\n if (this.signed) {\n value = toTwos(fromTwos(value, this.size * 8), 8 * WordSize);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n let value = mask(reader.readValue(), this.size * 8);\n if (this.signed) {\n value = fromTwos(value, this.size * 8);\n }\n return reader.coerce(this.name, value);\n }\n}\n//# sourceMappingURL=number.js.map","export const version = \"@ethersproject/strings@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push((badCodepoint != null) ? badCodepoint : -1);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n const bytes = logger.getBytes(_bytes, \"bytes\");\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.assertNormalize(form);\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return new Uint8Array(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","import { zeroPadRight } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8.js\";\nexport function formatBytes32String(text) {\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error(\"bytes32 string must be less than 32 bytes\");\n }\n // Zero-pad (implicitly null-terminates)\n return zeroPadRight(bytes, 32);\n}\nexport function parseBytes32String(_bytes) {\n const data = logger.getBytes(_bytes, \"bytes\");\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error(\"invalid bytes32 - not 32 bytes long\");\n }\n if (data[31] !== 0) {\n throw new Error(\"invalid bytes32 string - no null terminator\");\n }\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n//# sourceMappingURL=bytes32.js.map","import { logger } from \"./logger.js\";\nimport { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from \"./utf8.js\";\nfunction bytes2(data) {\n if ((data.length % 4) !== 0) {\n throw new Error(\"should not happen; bad data\");\n }\n let result = [];\n for (let i = 0; i < data.length; i += 4) {\n result.push(parseInt(data.substring(i, i + 4), 16));\n }\n return result;\n}\nfunction createTable(data, _func) {\n const func = _func || function (value) { return [parseInt(value, 16)]; };\n let lo = 0;\n let result = {};\n data.split(\",\").forEach((pair) => {\n let comps = pair.split(\":\");\n lo += parseInt(comps[0], 16);\n result[lo] = func(comps[1]);\n });\n return result;\n}\nfunction createRangeTable(data) {\n let hi = 0;\n return data.split(\",\").map((v) => {\n let comps = v.split(\"-\");\n if (comps.length === 1) {\n comps[1] = \"0\";\n }\n else if (comps[1] === \"\") {\n comps[1] = \"1\";\n }\n let lo = hi + parseInt(comps[0], 16);\n hi = parseInt(comps[1], 16);\n return { l: lo, h: hi };\n });\n}\nfunction matchMap(value, ranges) {\n let lo = 0;\n for (let i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n lo += range.l;\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n if (range.e && range.e.indexOf(value - lo) !== -1) {\n continue;\n }\n return range;\n }\n }\n return null;\n}\nconst Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n// @TODO: Make this relative...\nconst Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map((v) => parseInt(v, 16));\nconst Table_B_2_ranges = [\n { h: 25, s: 32, l: 65 },\n { h: 30, s: 32, e: [23], l: 127 },\n { h: 54, s: 1, e: [48], l: 64, d: 2 },\n { h: 14, s: 1, l: 57, d: 2 },\n { h: 44, s: 1, l: 17, d: 2 },\n { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\n { h: 16, s: 1, l: 68, d: 2 },\n { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\n { h: 26, s: 32, e: [17], l: 435 },\n { h: 22, s: 1, l: 71, d: 2 },\n { h: 15, s: 80, l: 40 },\n { h: 31, s: 32, l: 16 },\n { h: 32, s: 1, l: 80, d: 2 },\n { h: 52, s: 1, l: 42, d: 2 },\n { h: 12, s: 1, l: 55, d: 2 },\n { h: 40, s: 1, e: [38], l: 15, d: 2 },\n { h: 14, s: 1, l: 48, d: 2 },\n { h: 37, s: 48, l: 49 },\n { h: 148, s: 1, l: 6351, d: 2 },\n { h: 88, s: 1, l: 160, d: 2 },\n { h: 15, s: 16, l: 704 },\n { h: 25, s: 26, l: 854 },\n { h: 25, s: 32, l: 55915 },\n { h: 37, s: 40, l: 1247 },\n { h: 25, s: -119711, l: 53248 },\n { h: 25, s: -119763, l: 52 },\n { h: 25, s: -119815, l: 52 },\n { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\n { h: 25, s: -119919, l: 52 },\n { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\n { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\n { h: 25, s: -120075, l: 52 },\n { h: 25, s: -120127, l: 52 },\n { h: 25, s: -120179, l: 52 },\n { h: 25, s: -120231, l: 52 },\n { h: 25, s: -120283, l: 52 },\n { h: 25, s: -120335, l: 52 },\n { h: 24, s: -119543, e: [17], l: 56 },\n { h: 24, s: -119601, e: [17], l: 58 },\n { h: 24, s: -119659, e: [17], l: 58 },\n { h: 24, s: -119717, e: [17], l: 58 },\n { h: 24, s: -119775, e: [17], l: 58 }\n];\nconst Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nconst Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nconst Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\nconst Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\nfunction flatten(values) {\n return values.reduce((accum, value) => {\n value.forEach((value) => { accum.push(value); });\n return accum;\n }, []);\n}\nexport function _nameprepTableA1(codepoint) {\n return !!matchMap(codepoint, Table_A_1_ranges);\n}\nexport function _nameprepTableB2(codepoint) {\n const range = matchMap(codepoint, Table_B_2_ranges);\n if (range) {\n if (range.s == null) {\n throw new Error(\"should not happenl bad range\");\n }\n return [codepoint + range.s];\n }\n const codes = Table_B_2_lut_abs[codepoint];\n if (codes) {\n return codes;\n }\n const shift = Table_B_2_lut_rel[codepoint];\n if (shift) {\n return [codepoint + shift[0]];\n }\n const complex = Table_B_2_complex[codepoint];\n if (complex) {\n return complex;\n }\n return null;\n}\nexport function _nameprepTableC(codepoint) {\n return !!matchMap(codepoint, Table_C_ranges);\n}\nexport function nameprep(value) {\n // This allows platforms with incomplete normalize to bypass\n // it for very basic names which the built-in toLowerCase\n // will certainly handle correctly\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\n return value.toLowerCase();\n }\n // Get the code points (keeping the current normalization)\n let codes = toUtf8CodePoints(value);\n codes = flatten(codes.map((code) => {\n // Substitute Table B.1 (Maps to Nothing)\n if (Table_B_1_flags.indexOf(code) >= 0) {\n return [];\n }\n if (code >= 0xfe00 && code <= 0xfe0f) {\n return [];\n }\n // Substitute Table B.2 (Case Folding)\n let codesTableB2 = _nameprepTableB2(code);\n if (codesTableB2) {\n return codesTableB2;\n }\n // No Substitution\n return [code];\n }));\n // Normalize using form KC\n codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC);\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n codes.forEach((code) => {\n if (_nameprepTableC(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_PROHIBITED\", \"value\", value);\n }\n });\n // Prohibit Unassigned Code Points (Table A.1)\n codes.forEach((code) => {\n if (_nameprepTableA1(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_UNASSIGNED\", \"value\", value);\n }\n });\n // IDNA extras\n let name = _toUtf8String(codes);\n // IDNA: 4.2.3.1\n if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n logger.throwArgumentError(\"invalid hyphen\", \"value\", value);\n }\n // IDNA: 4.2.4\n if (name.length > 63) {\n logger.throwArgumentError(\"too long\", \"value\", value);\n }\n return name;\n}\n//# sourceMappingURL=idna.js.map","import { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, _value) {\n return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nimport { pack, unpack } from \"./array.js\";\nexport class TupleCoder extends Coder {\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n defineProperties(this, { coders: Object.freeze(coders.slice()) });\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"tuple\");\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return reader.coerce(this.name, unpack(reader, this.coders));\n }\n}\n//# sourceMappingURL=tuple.js.map","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 _AbiCoder_instances, _AbiCoder_getCoder;\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n//import { arrayify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nimport { Reader, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nexport class AbiCoder {\n constructor(coerceFunc) {\n _AbiCoder_instances.add(this);\n defineProperties(this, { coerceFunc }, {}, { coerceFunc: null });\n }\n getDefaultValue(types) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n encode(types, values) {\n logger.assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n const writer = new Writer();\n coder.encode(writer, values);\n return writer.data;\n }\n decode(types, data, loose) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(new Reader(data, this.coerceFunc, loose));\n }\n}\n_AbiCoder_instances = new WeakSet(), _AbiCoder_getCoder = function _AbiCoder_getCoder(param) {\n if (param.isArray()) {\n return new ArrayCoder(__classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, param.arrayChildren), param.arrayLength, param.name);\n }\n if (param.isTuple()) {\n return new TupleCoder(param.components.map((c) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, c)), param.name);\n }\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n logger.throwArgumentError(\"invalid \" + match[1] + \" bit length\", \"param\", param);\n }\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"param\", param);\n }\n return new FixedBytesCoder(size, param.name);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", param.type);\n};\nexport const defaultAbiCoder = new AbiCoder();\n//# sourceMappingURL=abi-coder.js.map","import { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport function id(value) {\n return keccak256(toUtf8Bytes(value));\n}\n//# sourceMappingURL=id.js.map","export const version = \"@ethersproject/hash@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { nameprep, toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\nconst Partition = new RegExp(\"^((.*)\\\\.)?([^.]+)$\");\nexport function isValidName(name) {\n try {\n const comps = name.split(\".\");\n for (let i = 0; i < comps.length; i++) {\n if (nameprep(comps[i]).length === 0) {\n throw new Error(\"empty\");\n }\n }\n return true;\n }\n catch (error) { }\n return false;\n}\nexport function namehash(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name; not a string\", \"name\", name);\n }\n let current = name;\n let result = Zeros;\n while (current.length) {\n const partition = current.match(Partition);\n if (partition == null || partition[2] === \"\") {\n return logger.throwArgumentError(\"invalid ENS name; missing component\", \"name\", name);\n }\n const label = toUtf8Bytes(nameprep(partition[3]));\n result = keccak256(concat([result, keccak256(label)]));\n current = partition[2] || \"\";\n }\n return hexlify(result);\n}\nexport function dnsEncode(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid DNS name; not a string\", \"name\", name);\n }\n if (name === \"\") {\n return \"0x00\";\n }\n // @TODO: should we enforce the 255 octet limit?\n return concat(name.split(\".\").map((comp) => {\n if (comp === \"\") {\n logger.throwArgumentError(\"invalid DNS name; missing component\", \"name\", name);\n }\n // We jam in an _ prefix to fill in with the length later\n // Note: Nameprep throws if the component is over 63 bytes\n const bytes = toUtf8Bytes(\"_\" + nameprep(comp));\n bytes[0] = bytes.length - 1;\n return bytes;\n })) + \"00\";\n}\n//# sourceMappingURL=namehash.js.map","import { concat } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport const messagePrefix = \"\\x19Ethereum Signed Message:\\n\";\nexport function hashMessage(message) {\n if (typeof (message) === \"string\") {\n message = toUtf8Bytes(message);\n }\n return keccak256(concat([\n toUtf8Bytes(messagePrefix),\n toUtf8Bytes(String(message.length)),\n message\n ]));\n}\n//# sourceMappingURL=message.js.map","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 _TypedDataEncoder_instances, _TypedDataEncoder_types, _TypedDataEncoder_fullTypes, _TypedDataEncoder_encoderCache, _TypedDataEncoder_getEncoder;\n//import { TypedDataDomain, TypedDataField } from \"@ethersproject/providerabstract-signer\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { mask, toHex, toTwos } from \"@ethersproject/math\";\nimport { id } from \"./id.js\";\nimport { logger } from \"./logger.js\";\nconst padding = new Uint8Array(32);\npadding.fill(0);\nconst BN__1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n;\n;\nfunction hexPadRight(value) {\n const bytes = arrayify(value);\n const padOffset = bytes.length % 32;\n if (padOffset) {\n return concat([bytes, padding.slice(padOffset)]);\n }\n return hexlify(bytes);\n}\nconst hexTrue = toHex(BN_1, 32);\nconst hexFalse = toHex(BN_0, 32);\nconst domainFieldTypes = {\n name: \"string\",\n version: \"string\",\n chainId: \"uint256\",\n verifyingContract: \"address\",\n salt: \"bytes32\"\n};\nconst domainFieldNames = [\n \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\nfunction checkString(key) {\n return function (value) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);\n }\n return value;\n };\n}\nconst domainChecks = {\n name: checkString(\"name\"),\n version: checkString(\"version\"),\n chainId: function (value) {\n return logger.getBigInt(value, \"domain.chainId\");\n },\n verifyingContract: function (value) {\n try {\n return getAddress(value).toLowerCase();\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n },\n salt: function (value) {\n const bytes = logger.getBytes(value, \"domain.salt\");\n if (bytes.length !== 32) {\n logger.throwArgumentError(`invalid domain value \"salt\"`, \"domain.salt\", value);\n }\n return hexlify(bytes);\n }\n};\nfunction getBaseEncoder(type) {\n // intXX and uintXX\n {\n const match = type.match(/^(u?)int(\\d*)$/);\n if (match) {\n const signed = (match[1] === \"\");\n const width = parseInt(match[2] || \"256\");\n if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n const boundsUpper = mask(BN_MAX_UINT256, signed ? (width - 1) : width);\n const boundsLower = signed ? ((boundsUpper + BN_1) * BN__1) : BN_0;\n return function (_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < boundsLower || value > boundsUpper) {\n logger.throwArgumentError(`value out-of-bounds for ${type}`, \"value\", value);\n }\n return toHex(toTwos(value, 256), 32);\n };\n }\n }\n // bytesXX\n {\n const match = type.match(/^bytes(\\d+)$/);\n if (match) {\n const width = parseInt(match[1]);\n if (width === 0 || width > 32 || match[1] !== String(width)) {\n logger.throwArgumentError(\"invalid bytes width\", \"type\", type);\n }\n return function (value) {\n const bytes = arrayify(value);\n if (bytes.length !== width) {\n logger.throwArgumentError(`invalid length for ${type}`, \"value\", value);\n }\n return hexPadRight(value);\n };\n }\n }\n switch (type) {\n case \"address\": return function (value) {\n return zeroPadLeft(getAddress(value), 32);\n };\n case \"bool\": return function (value) {\n return ((!value) ? hexFalse : hexTrue);\n };\n case \"bytes\": return function (value) {\n return keccak256(value);\n };\n case \"string\": return function (value) {\n return id(value);\n };\n }\n return null;\n}\nfunction encodeType(name, fields) {\n return `${name}(${fields.map(({ name, type }) => (type + \" \" + name)).join(\",\")})`;\n}\nexport class TypedDataEncoder {\n constructor(types) {\n _TypedDataEncoder_instances.add(this);\n _TypedDataEncoder_types.set(this, void 0);\n _TypedDataEncoder_fullTypes.set(this, void 0);\n _TypedDataEncoder_encoderCache.set(this, void 0);\n __classPrivateFieldSet(this, _TypedDataEncoder_types, JSON.stringify(types), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_fullTypes, new Map(), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_encoderCache, new Map(), \"f\");\n // Link struct types to their direct child structs\n const links = new Map();\n // Link structs to structs which contain them as a child\n const parents = new Map();\n // Link all subtypes within a given struct\n const subtypes = new Map();\n Object.keys(types).forEach((type) => {\n links.set(type, new Set());\n parents.set(type, []);\n subtypes.set(type, new Set());\n });\n for (const name in types) {\n const uniqueNames = new Set();\n for (const field of types[name]) {\n // Check each field has a unique name\n if (uniqueNames.has(field.name)) {\n logger.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, \"types\", types);\n }\n uniqueNames.add(field.name);\n // Get the base type (drop any array specifiers)\n const baseType = (field.type.match(/^([^\\x5b]*)(\\x5b|$)/))[1] || null;\n if (baseType === name) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Is this a base encoding type?\n const encoder = getBaseEncoder(baseType);\n if (encoder) {\n continue;\n }\n if (!parents.has(baseType)) {\n logger.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Add linkage\n parents.get(baseType).push(name);\n links.get(name).add(baseType);\n }\n }\n // Deduce the primary type\n const primaryTypes = Array.from(parents.keys()).filter((n) => (parents.get(n).length === 0));\n if (primaryTypes.length === 0) {\n logger.throwArgumentError(\"missing primary type\", \"types\", types);\n }\n else if (primaryTypes.length > 1) {\n logger.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(\", \")}`, \"types\", types);\n }\n defineProperties(this, { primaryType: primaryTypes[0] });\n // Check for circular type references\n function checkCircular(type, found) {\n if (found.has(type)) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, \"types\", types);\n }\n found.add(type);\n for (const child of links.get(type)) {\n if (!parents.has(child)) {\n continue;\n }\n // Recursively check children\n checkCircular(child, found);\n // Mark all ancestors as having this decendant\n for (const subtype of found) {\n subtypes.get(subtype).add(child);\n }\n }\n found.delete(type);\n }\n checkCircular(this.primaryType, new Set());\n // Compute each fully describe type\n for (const [name, set] of subtypes) {\n const st = Array.from(set);\n st.sort();\n __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\"));\n }\n }\n get types() {\n return JSON.parse(__classPrivateFieldGet(this, _TypedDataEncoder_types, \"f\"));\n }\n getEncoder(type) {\n let encoder = __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").get(type);\n if (!encoder) {\n encoder = __classPrivateFieldGet(this, _TypedDataEncoder_instances, \"m\", _TypedDataEncoder_getEncoder).call(this, type);\n __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").set(type, encoder);\n }\n return encoder;\n }\n encodeType(name) {\n const result = __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(name);\n if (!result) {\n return logger.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, \"name\", name);\n }\n return result;\n }\n encodeData(type, value) {\n return this.getEncoder(type)(value);\n }\n hashStruct(name, value) {\n return keccak256(this.encodeData(name, value));\n }\n encode(value) {\n return this.encodeData(this.primaryType, value);\n }\n hash(value) {\n return this.hashStruct(this.primaryType, value);\n }\n _visit(type, value, callback) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return callback(type, value);\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const length = parseInt(match[3]);\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n return value.map((v) => this._visit(subtype, v, callback));\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n return fields.reduce((accum, { name, type }) => {\n accum[name] = this._visit(type, value[name], callback);\n return accum;\n }, {});\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n }\n visit(value, callback) {\n return this._visit(this.primaryType, value, callback);\n }\n static from(types) {\n return new TypedDataEncoder(types);\n }\n static getPrimaryType(types) {\n return TypedDataEncoder.from(types).primaryType;\n }\n static hashStruct(name, types, value) {\n return TypedDataEncoder.from(types).hashStruct(name, value);\n }\n static hashDomain(domain) {\n const domainFields = [];\n for (const name in domain) {\n const type = domainFieldTypes[name];\n if (!type) {\n logger.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, \"domain\", domain);\n }\n domainFields.push({ name, type });\n }\n domainFields.sort((a, b) => {\n return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n });\n return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n }\n static encode(domain, types, value) {\n return concat([\n \"0x1901\",\n TypedDataEncoder.hashDomain(domain),\n TypedDataEncoder.from(types).hash(value)\n ]);\n }\n static hash(domain, types, value) {\n return keccak256(TypedDataEncoder.encode(domain, types, value));\n }\n // Replaces all address types with ENS names with their looked up address\n static async resolveNames(domain, types, value, resolveName) {\n // Make a copy to isolate it from the object passed in\n domain = Object.assign({}, domain);\n // Look up all ENS names\n const ensCache = {};\n // Do we need to look up the domain's verifyingContract?\n if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n ensCache[domain.verifyingContract] = \"0x\";\n }\n // We are going to use the encoder to visit all the base values\n const encoder = TypedDataEncoder.from(types);\n // Get a list of all the addresses\n encoder.visit(value, (type, value) => {\n if (type === \"address\" && !isHexString(value, 20)) {\n ensCache[value] = \"0x\";\n }\n return value;\n });\n // Lookup each name\n for (const name in ensCache) {\n ensCache[name] = await resolveName(name);\n }\n // Replace the domain verifyingContract if needed\n if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n domain.verifyingContract = ensCache[domain.verifyingContract];\n }\n // Replace all ENS names with their address\n value = encoder.visit(value, (type, value) => {\n if (type === \"address\" && ensCache[value]) {\n return ensCache[value];\n }\n return value;\n });\n return { domain, value };\n }\n static getPayload(domain, types, value) {\n // Validate the domain fields\n TypedDataEncoder.hashDomain(domain);\n // Derive the EIP712Domain Struct reference type\n const domainValues = {};\n const domainTypes = [];\n domainFieldNames.forEach((name) => {\n const value = domain[name];\n if (value == null) {\n return;\n }\n domainValues[name] = domainChecks[name](value);\n domainTypes.push({ name, type: domainFieldTypes[name] });\n });\n const encoder = TypedDataEncoder.from(types);\n const typesWithDomain = Object.assign({}, types);\n if (typesWithDomain.EIP712Domain) {\n logger.throwArgumentError(\"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n }\n else {\n typesWithDomain.EIP712Domain = domainTypes;\n }\n // Validate the data structures and types\n encoder.encode(value);\n return {\n types: typesWithDomain,\n domain: domainValues,\n primaryType: encoder.primaryType,\n message: encoder.visit(value, (type, value) => {\n // bytes\n if (type.match(/^bytes(\\d*)/)) {\n return hexlify(logger.getBytes(value));\n }\n // uint or int\n if (type.match(/^u?int/)) {\n return logger.getBigInt(value).toString();\n }\n switch (type) {\n case \"address\":\n return value.toLowerCase();\n case \"bool\":\n return !!value;\n case \"string\":\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid string`, \"value\", value);\n }\n return value;\n }\n return logger.throwArgumentError(\"unsupported type\", \"type\", type);\n })\n };\n }\n}\n_TypedDataEncoder_types = new WeakMap(), _TypedDataEncoder_fullTypes = new WeakMap(), _TypedDataEncoder_encoderCache = new WeakMap(), _TypedDataEncoder_instances = new WeakSet(), _TypedDataEncoder_getEncoder = function _TypedDataEncoder_getEncoder(type) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return encoder;\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const subEncoder = this.getEncoder(subtype);\n const length = parseInt(match[3]);\n return (value) => {\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n let result = value.map(subEncoder);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(subtype)) {\n result = result.map(keccak256);\n }\n return keccak256(concat(result));\n };\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n const encodedType = id(__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(type));\n return (value) => {\n const values = fields.map(({ name, type }) => {\n const result = this.getEncoder(type)(value[name]);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(type)) {\n return keccak256(result);\n }\n return result;\n });\n values.unshift(encodedType);\n return concat(values);\n };\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n};\n//# sourceMappingURL=typed-data.js.map","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 _Interface_instances, _Interface_errors, _Interface_events, _Interface_functions, _Interface_abiCoder, _Interface_getFunction, _Interface_getEvent;\nimport { arrayify, concat, dataSlice, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { defaultAbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport { ConstructorFragment, ErrorFragment, EventFragment, FormatType, Fragment, FunctionFragment, ParamType } from \"./fragments.js\";\nimport { logger } from \"./logger.js\";\nimport { Typed } from \"./typed.js\";\nexport { checkResultErrors, Result };\nexport class LogDescription {\n constructor(fragment, topic, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, signature, topic, args\n });\n }\n}\nexport class TransactionDescription {\n constructor(fragment, selector, args, value) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector, value\n });\n }\n}\nexport class ErrorDescription {\n constructor(fragment, selector, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector\n });\n }\n}\nexport class Indexed {\n constructor(hash) {\n defineProperties(this, { hash, _isIndexed: true });\n }\n static isIndexed(value) {\n return !!(value && value._isIndexed);\n }\n}\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons = {\n \"0\": \"generic panic\",\n \"1\": \"assert(false)\",\n \"17\": \"arithmetic overflow\",\n \"18\": \"division or modulo by zero\",\n \"33\": \"enum overflow\",\n \"34\": \"invalid encoded storage byte array accessed\",\n \"49\": \"out-of-bounds array access; popping on an empty array\",\n \"50\": \"out-of-bounds access of an array or bytesN\",\n \"65\": \"out of memory\",\n \"81\": \"uninitialized function\",\n};\nconst BuiltinErrors = {\n \"0x08c379a0\": {\n signature: \"Error(string)\",\n name: \"Error\",\n inputs: [\"string\"],\n reason: (message) => {\n return `reverted with reason string ${JSON.stringify(message)}`;\n }\n },\n \"0x4e487b71\": {\n signature: \"Panic(uint256)\",\n name: \"Panic\",\n inputs: [\"uint256\"],\n reason: (code) => {\n let reason = \"unknown panic code\";\n if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n reason = PanicReasons[code.toString()];\n }\n return `reverted with panic code 0x${code.toString(16)} (${reason})`;\n }\n }\n};\nexport class Interface {\n constructor(fragments) {\n _Interface_instances.add(this);\n _Interface_errors.set(this, void 0);\n _Interface_events.set(this, void 0);\n _Interface_functions.set(this, void 0);\n // #structs: Map;\n _Interface_abiCoder.set(this, void 0);\n let abi = [];\n if (typeof (fragments) === \"string\") {\n abi = JSON.parse(fragments);\n }\n else {\n abi = fragments;\n }\n __classPrivateFieldSet(this, _Interface_functions, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_errors, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_events, new Map(), \"f\");\n // this.#structs = new Map();\n defineProperties(this, {\n fragments: Object.freeze(abi.map((f) => Fragment.from(f)).filter((f) => (f != null))),\n });\n __classPrivateFieldSet(this, _Interface_abiCoder, this.getAbiCoder(), \"f\");\n // Add all fragments by their signature\n this.fragments.forEach((fragment) => {\n let bucket;\n switch (fragment.type) {\n case \"constructor\":\n if (this.deploy) {\n logger.warn(\"duplicate definition - constructor\");\n return;\n }\n //checkNames(fragment, \"input\", fragment.inputs);\n defineProperties(this, { deploy: fragment });\n return;\n case \"function\":\n //checkNames(fragment, \"input\", fragment.inputs);\n //checkNames(fragment, \"output\", (fragment).outputs);\n bucket = __classPrivateFieldGet(this, _Interface_functions, \"f\");\n break;\n case \"event\":\n //checkNames(fragment, \"input\", fragment.inputs);\n bucket = __classPrivateFieldGet(this, _Interface_events, \"f\");\n break;\n case \"error\":\n bucket = __classPrivateFieldGet(this, _Interface_errors, \"f\");\n break;\n default:\n return;\n }\n const signature = fragment.format();\n if (bucket.has(signature)) {\n logger.warn(\"duplicate definition - \" + signature);\n return;\n }\n bucket.set(signature, fragment);\n });\n // If we do not have a constructor add a default\n if (!this.deploy) {\n defineProperties(this, {\n deploy: ConstructorFragment.fromString(\"constructor()\")\n });\n }\n }\n // @TODO: multi sig?\n format(format) {\n if (!format) {\n format = FormatType.full;\n }\n if (format === FormatType.sighash) {\n logger.throwArgumentError(\"interface does not support formatting sighash\", \"format\", format);\n }\n const abi = this.fragments.map((f) => f.format(format));\n // We need to re-bundle the JSON fragments a bit\n if (format === FormatType.json) {\n return JSON.stringify(abi.map((j) => JSON.parse(j)));\n }\n return abi;\n }\n getAbiCoder() {\n return defaultAbiCoder;\n }\n getFunctionName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, null, false)).name;\n }\n getFunction(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, values || null, true);\n }\n getEventName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, null, false)).name;\n }\n getEvent(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, values || null, true);\n }\n // Find a function definition by any means necessary (unless it is ambiguous)\n getError(key, values) {\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_errors, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching error\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_errors, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching error\", \"name\", key);\n }\n else if (matching.length > 1) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching errors\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_errors, \"f\").get(ErrorFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching error\", \"signature\", key);\n }\n // Get the 4-byte selector used by Solidity to identify a function\n getSelector(fragment) {\n /*\n if (typeof(fragment) === \"string\") {\n const matches: Array = [ ];\n\n try { matches.push(this.getFunction(fragment)); } catch (error) { }\n try { matches.push(this.getError(fragment)); } catch (_) { }\n\n if (matches.length === 0) {\n logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n } else if (matches.length > 1) {\n logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n }\n\n fragment = matches[0];\n }\n */\n return dataSlice(id(fragment.format()), 0, 4);\n }\n // Get the 32-byte topic hash used by Solidity to identify an event\n getEventTopic(fragment) {\n //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n return id(fragment.format());\n }\n _decodeParams(params, data) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(params, data);\n }\n _encodeParams(params, values) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(params, values);\n }\n encodeDeploy(values) {\n return this._encodeParams(this.deploy.inputs, values || []);\n }\n decodeErrorResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match error ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n encodeErrorResult(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the data for a function call (e.g. tx.data)\n decodeFunctionData(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match function ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n // Encode the data for a function call (e.g. tx.data)\n encodeFunctionData(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the result from a function call (e.g. from eth_call)\n decodeFunctionResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n let message = \"invalid length for result data\";\n const bytes = arrayify(data);\n if ((bytes.length % 32) === 0) {\n try {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.outputs, bytes);\n }\n catch (error) {\n message = \"could not decode result data\";\n }\n }\n // Call returned data with no error, but the data is junk\n return logger.throwError(message, \"BAD_DATA\", {\n value: hexlify(bytes),\n info: { method: fragment.name, signature: fragment.format() }\n });\n }\n makeError(fragment, _data, tx) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n const data = logger.getBytes(_data);\n let args = undefined;\n if (tx) {\n try {\n args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, tx.data || \"0x\");\n }\n catch (error) {\n console.log(error);\n }\n }\n let errorArgs = undefined;\n let errorName = undefined;\n let errorSignature = undefined;\n let reason = \"unknown reason\";\n if (data.length === 0) {\n reason = \"missing error reason\";\n }\n else if ((data.length % 32) === 4) {\n const selector = hexlify(data.slice(0, 4));\n const builtin = BuiltinErrors[selector];\n if (builtin) {\n try {\n errorName = builtin.name;\n errorSignature = builtin.signature;\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(builtin.inputs, data.slice(4));\n reason = builtin.reason(...errorArgs);\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n else {\n reason = \"unknown custom error\";\n try {\n const error = this.getError(selector);\n errorName = error.name;\n errorSignature = error.format();\n reason = `custom error: ${errorSignature}`;\n try {\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(error.inputs, data.slice(4));\n }\n catch (error) {\n reason = `custom error: ${errorSignature} (coult not decode error data)`;\n }\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n }\n return logger.makeError(\"call revert exception\", \"CALL_EXCEPTION\", {\n data: hexlify(data), transaction: null,\n method: fragment.name, signature: fragment.format(), args,\n errorArgs, errorName, errorSignature, reason\n });\n }\n // Encode the result for a function call (e.g. for eth_call)\n encodeFunctionResult(functionFragment, values) {\n if (typeof (functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n return hexlify(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(functionFragment.outputs, values || []));\n }\n /*\n spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> {\n const promises: Array> = [ ];\n const process = function(type: ParamType, value: any): any {\n if (type.baseType === \"array\") {\n return descend(type.child\n }\n if (type. === \"address\") {\n }\n };\n \n const descend = function (inputs: Array, values: ReadonlyArray) {\n if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n \n };\n \n const result: Array = [ ];\n values.forEach((value, index) => {\n if (value == null) {\n topics.push(null);\n } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n } else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n } else {\n topics.push(encodeTopic(param, value));\n }\n });\n }\n */\n // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n encodeFilterTopics(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (values.length > eventFragment.inputs.length) {\n logger.throwError(\"too many arguments for \" + eventFragment.format(), \"UNEXPECTED_ARGUMENT\", {\n count: values.length,\n expectedCount: eventFragment.inputs.length\n });\n }\n const topics = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n const encodeTopic = (param, value) => {\n if (param.type === \"string\") {\n return id(value);\n }\n else if (param.type === \"bytes\") {\n return keccak256(hexlify(value));\n }\n // Check addresses are valid\n if (param.type === \"address\") {\n __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([\"address\"], [value]);\n }\n return zeroPadLeft(hexlify(value), 32);\n //@TOOD should probably be return toHex(value, 32)\n };\n values.forEach((value, index) => {\n const param = eventFragment.inputs[index];\n if (!param.indexed) {\n if (value != null) {\n logger.throwArgumentError(\"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n }\n return;\n }\n if (value == null) {\n topics.push(null);\n }\n else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n }\n else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n }\n else {\n topics.push(encodeTopic(param, value));\n }\n });\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n return topics;\n }\n encodeEventLog(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n const topics = [];\n const dataTypes = [];\n const dataValues = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n if (values.length !== eventFragment.inputs.length) {\n logger.throwArgumentError(\"event arguments/values mismatch\", \"values\", values);\n }\n eventFragment.inputs.forEach((param, index) => {\n const value = values[index];\n if (param.indexed) {\n if (param.type === \"string\") {\n topics.push(id(value));\n }\n else if (param.type === \"bytes\") {\n topics.push(keccak256(value));\n }\n else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n // @TODO\n throw new Error(\"not implemented\");\n }\n else {\n topics.push(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([param.type], [value]));\n }\n }\n else {\n dataTypes.push(param);\n dataValues.push(value);\n }\n });\n return {\n data: __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(dataTypes, dataValues),\n topics: topics\n };\n }\n // Decode a filter for the event and the search criteria\n decodeEventLog(eventFragment, data, topics) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (topics != null && !eventFragment.anonymous) {\n const eventTopic = this.getEventTopic(eventFragment);\n if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== eventTopic) {\n logger.throwArgumentError(\"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n }\n topics = topics.slice(1);\n }\n const indexed = [];\n const nonIndexed = [];\n const dynamic = [];\n eventFragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n indexed.push(ParamType.fromObject({ type: \"bytes32\", name: param.name }));\n dynamic.push(true);\n }\n else {\n indexed.push(param);\n dynamic.push(false);\n }\n }\n else {\n nonIndexed.push(param);\n dynamic.push(false);\n }\n });\n const resultIndexed = (topics != null) ? __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(indexed, concat(topics)) : null;\n const resultNonIndexed = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(nonIndexed, data, true);\n //const result: (Array & { [ key: string ]: any }) = [ ];\n const values = [];\n const keys = [];\n let nonIndexedIndex = 0, indexedIndex = 0;\n eventFragment.inputs.forEach((param, index) => {\n let value = null;\n if (param.indexed) {\n if (resultIndexed == null) {\n value = new Indexed(null);\n }\n else if (dynamic[index]) {\n value = new Indexed(resultIndexed[indexedIndex++]);\n }\n else {\n try {\n value = resultIndexed[indexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n }\n else {\n try {\n value = resultNonIndexed[nonIndexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n values.push(value);\n keys.push(param.name || null);\n });\n return Result.fromItems(values, keys);\n }\n // Given a transaction, find the matching function fragment (if any) and\n // determine all its properties and call parameters\n parseTransaction(tx) {\n const data = logger.getBytes(tx.data, \"tx.data\");\n const value = logger.getBigInt((tx.value != null) ? tx.value : 0, \"tx.value\");\n const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, data.slice(4));\n return new TransactionDescription(fragment, this.getSelector(fragment), args, value);\n }\n // @TODO\n //parseCallResult(data: BytesLike): ??\n // Given an event log, find the matching event fragment (if any) and\n // determine all its properties and values\n parseLog(log) {\n const fragment = this.getEvent(log.topics[0]);\n if (!fragment || fragment.anonymous) {\n return null;\n }\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n // Probably not, because just because it is the only event in the ABI does\n // not mean we have the full ABI; maybe just a fragment?\n return new LogDescription(fragment, this.getEventTopic(fragment), this.decodeEventLog(fragment, log.data, log.topics));\n }\n parseError(data) {\n const hexData = hexlify(data);\n const fragment = this.getError(dataSlice(hexData, 0, 4));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, dataSlice(hexData, 4));\n return new ErrorDescription(fragment, this.getSelector(fragment), args);\n }\n static from(value) {\n // Already an Interface, which is immutable\n if (value instanceof Interface) {\n return value;\n }\n // JSON\n if (typeof (value) === \"string\") {\n return new Interface(JSON.parse(value));\n }\n // Maybe an interface from an older version, or from a symlinked copy\n if (typeof (value.format) === \"function\") {\n return new Interface(value.format(FormatType.json));\n }\n // Array of fragments\n return new Interface(value);\n }\n}\n_Interface_errors = new WeakMap(), _Interface_events = new WeakMap(), _Interface_functions = new WeakMap(), _Interface_abiCoder = new WeakMap(), _Interface_instances = new WeakSet(), _Interface_getFunction = function _Interface_getFunction(key, values, forceUnique) {\n // Selector\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_functions, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching function\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_functions, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n const lastValue = (values.length > 0) ? values[values.length - 1] : null;\n let valueLength = values.length;\n let allowOptions = true;\n if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n allowOptions = false;\n valueLength--;\n }\n // Remove all matches that don't have a compatible length. The args\n // may contain an overrides, so the match may have n or n - 1 parameters\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs.length;\n if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // We are past the inputs\n if (j >= inputs.length) {\n if (values[j].type === \"overrides\") {\n continue;\n }\n matching.splice(i, 1);\n break;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n // We found a single matching signature with an overrides, but the\n // last value is something that cannot possibly be an options\n if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n const lastArg = values[values.length - 1];\n if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== \"object\") {\n matching.splice(0, 1);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching function\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n logger.throwArgumentError(`multiple matching functions (i.e. ${matchStr})`, \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_functions, \"f\").get(FunctionFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching function\", \"signature\", key);\n}, _Interface_getEvent = function _Interface_getEvent(key, values, forceUnique) {\n // EventTopic\n if (isHexString(key)) {\n const eventTopic = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_events, \"f\").values()) {\n if (eventTopic === this.getEventTopic(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching event\", \"eventTopic\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_events, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n // Remove all matches that don't have a compatible length.\n for (let i = matching.length - 1; i >= 0; i--) {\n if (matching[i].inputs.length < values.length) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching event\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching events\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_events, \"f\").get(EventFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching event\", \"signature\", key);\n};\n//# sourceMappingURL=interface.js.map","export const version = \"@ethersproject/web@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _FetchResponse_props, _FetchResponse_error;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties, getStore } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\n;\nexport class FetchResponse {\n constructor(statusCode, statusMessage, headers, body, request) {\n _FetchResponse_props.set(this, void 0);\n _FetchResponse_error.set(this, void 0);\n __classPrivateFieldSet(this, _FetchResponse_props, {\n statusCode,\n statusMessage,\n headers: Object.freeze(Object.assign({}, Object.keys(headers).reduce((accum, k) => {\n accum[k.toLowerCase()] = headers[k];\n return accum;\n }, {}))),\n body: ((body == null) ? null : new Uint8Array(body)),\n request: (request || null),\n }, \"f\");\n __classPrivateFieldSet(this, _FetchResponse_error, { message: \"\" }, \"f\");\n }\n toString() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return ``;\n }\n get statusCode() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusCode\"); }\n get statusMessage() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusMessage\"); }\n get headers() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"headers\"); }\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? null : new Uint8Array(body);\n }\n get bodyText() {\n try {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? \"\" : toUtf8String(body);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid UTF-8 data\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyText\", info: { response: this }\n });\n }\n }\n get bodyJson() {\n try {\n return JSON.parse(this.bodyText);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid JSON\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyJson\", info: { response: this }\n });\n }\n }\n [(_FetchResponse_props = new WeakMap(), _FetchResponse_error = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n makeServerError(message, error) {\n let statusMessage;\n if (!message) {\n message = `${this.statusCode} ${this.statusMessage}`;\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${message})`;\n }\n else {\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${this.statusCode} ${this.statusMessage}; ${message})`;\n }\n const response = new FetchResponse(599, statusMessage, this.headers, this.body, getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\") || undefined);\n __classPrivateFieldSet(response, _FetchResponse_error, { message, error }, \"f\");\n return response;\n }\n throwThrottleError(message, stall) {\n if (stall == null) {\n stall = 1000;\n }\n if (typeof (stall) !== \"number\" || !Number.isInteger(stall) || stall < 0) {\n logger.throwArgumentError(\"invalid stall timeout\", \"stall\", stall);\n }\n const error = new Error(message || \"throttling requests\");\n defineProperties(error, { stall, throttle: true });\n throw error;\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n hasBody() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body != null);\n }\n get request() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\"); }\n ok() {\n return (__classPrivateFieldGet(this, _FetchResponse_error, \"f\").message === \"\" && this.statusCode >= 200 && this.statusCode < 300);\n }\n assertOk() {\n if (this.ok()) {\n return;\n }\n let { message, error } = __classPrivateFieldGet(this, _FetchResponse_error, \"f\");\n if (message === \"\") {\n message = `server response ${this.statusCode} ${this.statusMessage}`;\n }\n logger.throwError(message, \"SERVER_ERROR\", {\n request: (this.request || \"unknown request\"), response: this, error\n });\n }\n}\n//# sourceMappingURL=response.js.map","import { logger } from \"./logger.js\";\nimport { FetchResponse } from \"./response.js\";\nexport async function getUrl(req, timeout) {\n const protocol = req.url.split(\":\")[0].toLowerCase();\n if (protocol !== \"http\" && protocol !== \"https\") {\n logger.throwError(`unsupported protocol ${protocol}`, \"UNSUPPORTED_OPERATION\", {\n info: { protocol },\n operation: \"request\"\n });\n }\n if (req.credentials && !req.allowInsecureAuthentication) {\n logger.throwError(\"insecure authorized connections unsupported\", \"UNSUPPORTED_OPERATION\", {\n operation: \"request\"\n });\n }\n const init = {\n method: req.method,\n headers: new Headers(Array.from(req)),\n body: req.body || undefined,\n };\n const resp = await fetch(req.url, init);\n const headers = {};\n resp.headers.forEach((value, key) => {\n headers[key.toLowerCase()] = value;\n });\n const body = new Uint8Array(await resp.arrayBuffer());\n return new FetchResponse(resp.status, resp.statusText, headers, body, req);\n}\n//# sourceMappingURL=get-url-browser.js.map","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 _FetchRequest_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nfunction check(value, type, name) {\n if (typeof (value) !== type) {\n throw new Error(`invalid ${name}`);\n }\n return value;\n}\nexport class FetchRequest {\n constructor(url) {\n _FetchRequest_props.set(this, void 0);\n __classPrivateFieldSet(this, _FetchRequest_props, {\n allowInsecure: false,\n gzip: false,\n headers: {},\n method: \"\",\n timeout: 300,\n url: check(url, \"string\", \"url\")\n }, \"f\");\n }\n // URL\n get url() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\"); }\n set url(url) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\", check(url, \"string\", \"url\"));\n }\n // Body\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body == null) {\n return null;\n }\n if (this.isFrozen()) {\n return new Uint8Array(body);\n }\n return body;\n }\n set body(body) {\n if (body == null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", undefined);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", undefined);\n }\n else if (typeof (body) === \"string\") {\n // @TODO: utf8-check\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(body));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"text/plain\");\n }\n else if (body instanceof Uint8Array) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", body);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/octet-stream\");\n }\n else if (typeof (body) === \"object\") {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(JSON.stringify(body)));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/json\");\n }\n else {\n throw new Error(\"invalid body\");\n }\n }\n hasBody() {\n return (getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\") != null);\n }\n // Method (default: GET with no body, POST with a body)\n get method() {\n const method = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\");\n if (method) {\n return method.toUpperCase();\n }\n if (this.body) {\n return \"POST\";\n }\n return \"GET\";\n }\n set method(method) {\n if (method == null) {\n method = \"\";\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\", check(method, \"string\", \"method\"));\n }\n // Headers (automatically fills content-type if not explicitly set)\n get headers() {\n const headers = Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\"));\n const bodyType = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\");\n if (this.credentials) { /* TODO */ }\n ;\n if (this.allowGzip) {\n headers[\"accept-encoding\"] = \"gzip\";\n }\n if (headers[\"content-type\"] == null && bodyType) {\n headers[\"content-type\"] = bodyType;\n }\n if (this.body) {\n headers[\"content-length\"] = String(this.body.length);\n }\n return Object.freeze(headers);\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n setHeader(key, value) {\n const headers = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\");\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", headers);\n headers[check(key, \"string\", \"key\").toLowerCase()] = String(value);\n }\n clearHeaders() {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", {});\n }\n [(_FetchRequest_props = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n // Configure an Authorization header\n get credentials() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\") || null;\n }\n setCredentials(username, password) {\n if (username.match(/:/)) {\n logger.throwArgumentError(\"invalid basic authentication username\", \"username\", \"[REDACTED]\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\", `${username}:${password}`);\n // @TODO:\n //const auth = username + \":\" + password;\n //this.setHeader(\"authorization\", \"Basic \" + base64Encode(toUtf8Bytes(auth)))\n //this.setHeader(\"authorization\", \"Basic TODO:\" + auth);\n }\n // Configure the request to allow gzipped responses\n get allowGzip() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\");\n }\n set allowGzip(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\", !!value);\n }\n // Allow credentials to be sent over an insecure (non-HTTPS) channel\n get allowInsecureAuthentication() {\n return !!getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\");\n }\n set allowInsecureAuthentication(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\", check(value, \"boolean\", \"allowInsecureAuthentication\"));\n }\n // Timeout (seconds)\n get timeout() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\"); }\n set timeout(timeout) {\n timeout = check(timeout, \"number\", \"timeout\");\n if (timeout <= 0) {\n throw new Error(\"invalid timerout\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\", timeout);\n }\n redirect(location) {\n // Redirection; for now we only support absolute locataions\n const current = this.url.split(\":\")[0].toLowerCase();\n const target = location.split(\":\")[0].toLowerCase();\n if (this.method !== \"GET\" || (current === \"https\" && target === \"http\") ||\n !location.match(/^https?:$/)) {\n return logger.throwError(`unsupported redirect`, \"UNSUPPORTED_OPERATION\", {\n operation: `redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(location)})`\n });\n }\n // Create a copy of this request, with a new URL\n const req = new FetchRequest(location);\n req.method = \"GET\";\n req.allowGzip = this.allowGzip;\n req.timeout = this.timeout;\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"body\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\"));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Do not forward credentials unless on the same domain; only absolute\n //req.allowInsecure = false;\n // paths are currently supported; may want a way to specify to forward?\n //setStore(req.#props, \"creds\", getStore(this.#pros, \"creds\"));\n return req;\n }\n clone() {\n const clone = new FetchRequest(this.url);\n // Preserve \"default method\" (i.e. null)\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"method\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\"));\n // Preserve \"default body\" with type, copying the Uint8Array is present\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"body\", (body == null) ? undefined : new Uint8Array(body));\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Preserve \"default headers\"\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n // Credentials is readonly, so we copy internally\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"creds\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\"));\n if (this.allowGzip) {\n clone.allowGzip = true;\n }\n clone.timeout = this.timeout;\n if (this.allowInsecureAuthentication) {\n clone.allowInsecureAuthentication = true;\n }\n return clone;\n }\n freeze() {\n // Copy the body so any changes to previous access do not modify it\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body != null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", new Uint8Array(body));\n }\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\").headers);\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n }\n}\n//# sourceMappingURL=request.js.map","import { decodeBase64 } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { getUrl } from \"./get-url.js\"; /*-browser*/\nimport { logger } from \"./logger.js\";\nimport { FetchRequest } from \"./request.js\";\nimport { FetchResponse } from \"./response.js\";\nasync function delay(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\n// @TODO: Add option for global preflightRequest?\nfunction getTime() { return (new Date()).getTime(); }\nfunction unpercent(value) {\n value = value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => {\n return String.fromCharCode(parseInt(code, 16));\n });\n return toUtf8Bytes(value);\n}\nlet lockGateways = false;\nlet ipfsGateway = \"https:/\\/gateway.ipfs.io/\";\nlet arGateway = \"https:/\\/gateway.ar.io/\";\nexport async function fetchData(connection) {\n const conn = (typeof (connection) === \"string\") ? {\n request: new FetchRequest(connection)\n } : (connection instanceof FetchRequest) ? {\n request: connection\n } : Object.assign({}, connection);\n if (conn.request == null) {\n return logger.throwArgumentError(\"missing request\", \"connection\", connection);\n }\n let req = conn.request.clone().freeze();\n switch (conn.request.url.split(\":\")[0]) {\n case \"data\": {\n const match = req.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i);\n if (match) {\n try {\n const headers = {\n \"content-type\": (match[1] ? match[1] : \"text/plain\")\n };\n const body = (match[2] ? decodeBase64(match[3]) : unpercent(match[3]));\n return new FetchResponse(200, \"OK\", headers, body, req.clone());\n }\n catch (error) {\n return new FetchResponse(400, \"BAD REQUEST (invalid base64 encoded data)\", {}, null, req.clone());\n }\n }\n return new FetchResponse(500, \"INTERNAL SERVER ERROR (unsupported dara URI)\", {}, null, req.clone());\n }\n case \"ipfs\":\n case \"ipns\":\n case \"ar\":\n throw new Error(\"not implemented yet\");\n console.log(\"FF\", arGateway, ipfsGateway);\n case \"http\":\n case \"https\":\n break;\n default:\n throw new Error(\"unsupported scheme\");\n }\n const attempts = (conn.throttleLimit != null) ? conn.throttleLimit : 12;\n if (!Number.isInteger(attempts) || attempts < 1) {\n return logger.throwArgumentError(\"invalid throttleLimit\", \"connection\", connection);\n }\n const slotInterval = (conn.throttleSlotInterval != null) ? conn.throttleSlotInterval : 100;\n //logger.assertInteger(slotInterval, \"connection.throttleSlotInterval\", connection.throttleSlotInterval);\n if (!Number.isInteger(slotInterval) || attempts < 0) {\n return logger.throwArgumentError(\"invalid throttleSlotInterval\", \"connection\", connection);\n }\n const retryFunc = (conn.throttleRetry != null) ? conn.throttleRetry : null;\n if (retryFunc && typeof (retryFunc) !== \"function\") {\n return logger.throwArgumentError(\"invalid throttleRetry callback\", \"connection\", connection);\n }\n const preflightRequest = conn.preflightRequest || null;\n if (preflightRequest && typeof (preflightRequest) !== \"function\") {\n return logger.throwArgumentError(\"invalid preflightRequest callback\", \"connection\", connection);\n }\n const processResponse = conn.processResponse || null;\n if (processResponse && typeof (processResponse) !== \"function\") {\n return logger.throwArgumentError(\"invalid processResponse callback\", \"connection\", connection);\n }\n // Start time of this fetch (for timeouts)\n const t0 = getTime();\n let response = null;\n for (let a = 0; a < attempts; a++) {\n let request = req.clone();\n if (preflightRequest) {\n request = (await preflightRequest(request.freeze())).clone();\n }\n const remainingTime = getTime() - t0;\n if (remainingTime < 0) {\n return logger.throwError(\"timeout\", \"TIMEOUT\", { operation: \"request\", request });\n }\n response = await getUrl(request, remainingTime);\n // Retry logic (server forced)\n if (a < attempts) {\n if (response.statusCode === 301 || response.statusCode === 302) {\n // Try following the redirect; the request will through if the\n // type of redirect is not supported\n try {\n req = request.redirect(response.headers.location || \"\");\n continue;\n }\n catch (error) { }\n ;\n // Things won't get any better on another attempt; abort\n return response;\n }\n else if (response.statusCode === 429) {\n if (retryFunc == null || (await retryFunc(request.freeze(), response, a))) {\n const retryAfter = response.headers[\"retry-after\"];\n if (typeof (retryAfter) === \"string\" && retryAfter.match(/^[1-9][0-9]*$/)) {\n await delay(parseInt(retryAfter));\n }\n else {\n await delay(slotInterval * Math.trunc(Math.random() * Math.pow(2, a)));\n }\n continue;\n }\n }\n }\n // Optional post-processing response; also allows trapping\n // HTTP status errors and doing \"something different\",\n // including any further throttling.\n if (processResponse) {\n try {\n return await processResponse(request, response);\n }\n catch (error) {\n // response.throwThrottleError\n if (error.throttle && typeof (error.stall) === \"number\") {\n if (a < attempts) {\n await delay(error.stall);\n continue;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\", error);\n }\n // Something went wrong during processing; throw a 5xx server error\n response.makeServerError(\"error in post-processing function\", error).assertOk();\n }\n }\n return response;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\");\n}\nfetchData.lock = function () {\n lockGateways = true;\n};\n// @TODO: Allow a master Gateway function\nfetchData.setGateway = function (gateway) {\n};\nfetchData.setIpfsGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setIpfsGateway\"\n });\n }\n ipfsGateway = gateway;\n};\nfetchData.setArGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setArGateway\"\n });\n }\n arGateway = gateway;\n};\n//# sourceMappingURL=fetch-data.js.map","export const version = \"@ethersproject/providers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _a, _EnsResolver_supports2544, _EnsResolver_getResolver;\nimport { concat, dataSlice, hexlify, zeroPadLeft } from \"@ethersproject/bytes\";\nimport { dnsEncode, namehash } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { encodeBase58, toArray, toNumber } from \"@ethersproject/math\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData } from \"@ethersproject/web\";\nimport { logger } from \"./logger.js\";\nconst BN_1 = BigInt(1);\nconst Empty = new Uint8Array([]);\nconst HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n const offset = toNumber(dataSlice(result, start, start + 32));\n const length = toNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n}\nfunction parseString(result, start) {\n try {\n const bytes = parseBytes(result, start);\n if (bytes != null) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(Empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\n// @TODO: This should use the fetch-data:ipfs gateway\n// Trim off the ipfs:// prefix and return the default gateway URL\nfunction getIpfsLink(link) {\n if (link.match(/^ipfs:\\/\\/ipfs\\//i)) {\n link = link.substring(12);\n }\n else if (link.match(/^ipfs:\\/\\//i)) {\n link = link.substring(7);\n }\n else {\n logger.throwArgumentError(\"unsupported IPFS format\", \"link\", link);\n }\n return `https:/\\/gateway.ipfs.io/ipfs/${link}`;\n}\n;\n;\nexport class MulticoinProviderPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n validate(proivder) {\n return this;\n }\n supportsCoinType(coinType) {\n return false;\n }\n async encodeAddress(coinType, address) {\n throw new Error(\"unsupported coin\");\n }\n async decodeAddress(coinType, data) {\n throw new Error(\"unsupported coin\");\n }\n}\nconst BasicMulticoinPluginId = \"org.ethers.provider-prugins.basicmulticoin\";\nexport class BasicMulticoinProviderPlugin extends MulticoinProviderPlugin {\n constructor() {\n super(BasicMulticoinPluginId);\n }\n}\nconst matcherIpfs = new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\");\nconst matchers = [\n new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n new RegExp(\"^(data):(.*)$\", \"i\"),\n matcherIpfs,\n new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\nexport class EnsResolver {\n constructor(provider, address, name) {\n // For EIP-2544 names, the ancestor that provided the resolver\n _EnsResolver_supports2544.set(this, void 0);\n defineProperties(this, { provider, address, name });\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n }\n async supportsWildcard() {\n if (!__classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\")) {\n // supportsInterface(bytes4 = selector(\"resolve(bytes,bytes)\"))\n __classPrivateFieldSet(this, _EnsResolver_supports2544, this.provider.call({\n to: this.address,\n data: \"0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000\"\n }).then((result) => {\n return (logger.getBigInt(result) === BN_1);\n }).catch((error) => {\n if (error.code === \"CALL_EXCEPTION\") {\n return false;\n }\n // Rethrow the error: link is down, etc. Let future attempts retry.\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n throw error;\n }), \"f\");\n }\n return await __classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\");\n }\n async _fetch(selector, parameters = \"0x\") {\n // e.g. keccak256(\"addr(bytes32,uint256)\")\n const addrData = concat([selector, namehash(this.name), parameters]);\n const tx = {\n to: this.address,\n enableCcipRead: true,\n data: addrData\n };\n // Wildcard support; use EIP-2544 to resolve the request\n let wrapped = false;\n if (await this.supportsWildcard()) {\n wrapped = true;\n // selector(\"resolve(bytes,bytes)\")\n tx.data = concat([\"0x9061b923\", encodeBytes([dnsEncode(this.name), addrData])]);\n }\n try {\n let data = await this.provider.call(tx);\n if ((logger.getBytes(data).length % 32) === 4) {\n return logger.throwError(\"resolver threw error\", \"CALL_EXCEPTION\", {\n transaction: tx, data\n });\n }\n if (wrapped) {\n return parseBytes(data, 0);\n }\n return data;\n }\n catch (error) {\n if (error.code !== \"CALL_EXCEPTION\") {\n throw error;\n }\n }\n return null;\n }\n async getAddress(coinType = 60) {\n if (coinType === 60) {\n try {\n // keccak256(\"addr(bytes32)\")\n const result = await this._fetch(\"0x3b3b57de\");\n // No address\n if (result === \"0x\" || result === HashZero) {\n return null;\n }\n const network = await this.provider.getNetwork();\n return network.formatter.callAddress(result);\n }\n catch (error) {\n if (error.code === \"CALL_EXCEPTION\") {\n return null;\n }\n throw error;\n }\n }\n let coinPlugin = null;\n for (const plugin of this.provider.plugins) {\n if (!(plugin instanceof MulticoinProviderPlugin)) {\n continue;\n }\n if (plugin.supportsCoinType(coinType)) {\n coinPlugin = plugin;\n break;\n }\n }\n if (coinPlugin == null) {\n return null;\n }\n // keccak256(\"addr(bytes32,uint256\")\n const data = parseBytes((await this._fetch(\"0xf1cb7e06\", numPad(coinType))) || \"0x\", 0);\n // No address\n if (data == null || data === \"0x\") {\n return null;\n }\n // Compute the address\n const address = await coinPlugin.encodeAddress(coinType, data);\n if (address != null) {\n return address;\n }\n return logger.throwError(`invalid coin data`, \"UNSUPPORTED_OPERATION\", {\n operation: `getAddress(${coinType})`,\n info: { coinType, data }\n });\n }\n async getText(key) {\n // The key encoded as parameter to fetchBytes\n let keyBytes = toUtf8Bytes(key);\n // The nodehash consumes the first slot, so the string pointer targets\n // offset 64, with the length at offset 64 and data starting at offset 96\n const calldata = logger.getBytes(concat([numPad(64), numPad(keyBytes.length), keyBytes]));\n const hexBytes = parseBytes((await this._fetch(\"0x59d1d43c\", bytesPad(calldata))) || \"0x\", 0);\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n return toUtf8String(hexBytes);\n }\n async getContentHash() {\n // keccak256(\"contenthash()\")\n const hexBytes = parseBytes((await this._fetch(\"0xbc1c58d1\")) || \"0x\", 0);\n // No contenthash\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key)\n const ipfs = hexBytes.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipfs) {\n const scheme = (ipfs[1] === \"e3010170\") ? \"ipfs\" : \"ipns\";\n const length = parseInt(ipfs[4], 16);\n if (ipfs[5].length === length * 2) {\n return `${scheme}:/\\/${encodeBase58(\"0x\" + ipfs[2])}`;\n }\n }\n // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/);\n if (swarm && swarm[1].length === 64) {\n return `bzz:/\\/${swarm[1]}`;\n }\n return logger.throwError(`invalid or unsupported content hash data`, \"UNSUPPORTED_OPERATION\", {\n operation: \"getContentHash()\",\n info: { data: hexBytes }\n });\n }\n async getAvatar() {\n return (await this._getAvatar()).url;\n }\n async _getAvatar() {\n const linkage = [{ type: \"name\", value: this.name }];\n try {\n // test data for ricmoo.eth\n //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n const avatar = await this.getText(\"avatar\");\n if (avatar == null) {\n linkage.push({ type: \"!avatar\", value: \"\" });\n throw new Error(\"!avatar\");\n }\n linkage.push({ type: \"avatar\", value: avatar });\n for (let i = 0; i < matchers.length; i++) {\n const match = avatar.match(matchers[i]);\n if (match == null) {\n continue;\n }\n const scheme = match[1].toLowerCase();\n switch (scheme) {\n case \"https\":\n case \"data\":\n linkage.push({ type: \"url\", value: avatar });\n return { linkage, url: avatar };\n case \"ipfs\": {\n const url = getIpfsLink(avatar);\n linkage.push({ type: \"ipfs\", value: avatar });\n linkage.push({ type: \"url\", value: url });\n return { linkage, url };\n }\n case \"erc721\":\n case \"erc1155\": {\n // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n const selector = (scheme === \"erc721\") ? \"0xc87b56dd\" : \"0x0e89341c\";\n linkage.push({ type: scheme, value: avatar });\n // The owner of this name\n const owner = await this.getAddress();\n if (owner == null) {\n linkage.push({ type: \"!owner\", value: \"\" });\n throw new Error(\"!owner\");\n }\n const comps = (match[2] || \"\").split(\"/\");\n if (comps.length !== 2) {\n linkage.push({ type: `!${scheme}caip`, value: (match[2] || \"\") });\n throw new Error(\"!caip\");\n }\n const formatter = (await this.provider.getNetwork()).formatter;\n const addr = formatter.address(comps[0]);\n const tokenId = numPad(comps[1]);\n // Check that this account owns the token\n if (scheme === \"erc721\") {\n // ownerOf(uint256 tokenId)\n const tokenOwner = formatter.callAddress(await this.provider.call({\n to: addr, data: concat([\"0x6352211e\", tokenId])\n }));\n if (owner !== tokenOwner) {\n linkage.push({ type: \"!owner\", value: tokenOwner });\n throw new Error(\"!owner\");\n }\n linkage.push({ type: \"owner\", value: tokenOwner });\n }\n else if (scheme === \"erc1155\") {\n // balanceOf(address owner, uint256 tokenId)\n const balance = logger.getBigInt(await this.provider.call({\n to: addr, data: concat([\"0x00fdd58e\", zeroPadLeft(owner, 32), tokenId])\n }));\n if (!balance) {\n linkage.push({ type: \"!balance\", value: \"0\" });\n throw new Error(\"!balance\");\n }\n linkage.push({ type: \"balance\", value: balance.toString() });\n }\n // Call the token contract for the metadata URL\n const tx = {\n to: comps[0],\n data: concat([selector, tokenId])\n };\n let metadataUrl = parseString(await this.provider.call(tx), 0);\n if (metadataUrl == null) {\n linkage.push({ type: \"!metadata-url\", value: \"\" });\n throw new Error(\"!metadata-url\");\n }\n linkage.push({ type: \"metadata-url-base\", value: metadataUrl });\n // ERC-1155 allows a generic {id} in the URL\n if (scheme === \"erc1155\") {\n metadataUrl = metadataUrl.replace(\"{id}\", hexlify(tokenId).substring(2));\n linkage.push({ type: \"metadata-url-expanded\", value: metadataUrl });\n }\n // Transform IPFS metadata links\n if (metadataUrl.match(/^ipfs:/i)) {\n metadataUrl = getIpfsLink(metadataUrl);\n }\n linkage.push({ type: \"metadata-url\", value: metadataUrl });\n // Get the token metadata\n let metadata = {};\n const response = await fetchData(metadataUrl);\n try {\n metadata = response.bodyJson;\n }\n catch (error) {\n try {\n linkage.push({ type: \"!metadata\", value: response.bodyText });\n }\n catch (error) {\n const bytes = response.body;\n if (bytes) {\n linkage.push({ type: \"!metadata\", value: hexlify(bytes) });\n }\n throw error;\n }\n throw error;\n }\n if (!metadata) {\n linkage.push({ type: \"!metadata\", value: \"\" });\n throw new Error(\"!metadata\");\n }\n linkage.push({ type: \"metadata\", value: JSON.stringify(metadata) });\n // Pull the image URL out\n let imageUrl = metadata.image;\n if (typeof (imageUrl) !== \"string\") {\n linkage.push({ type: \"!imageUrl\", value: \"\" });\n throw new Error(\"!imageUrl\");\n }\n if (imageUrl.match(/^(https:\\/\\/|data:)/i)) {\n // Allow\n }\n else {\n // Transform IPFS link to gateway\n const ipfs = imageUrl.match(matcherIpfs);\n if (ipfs == null) {\n linkage.push({ type: \"!imageUrl-ipfs\", value: imageUrl });\n throw new Error(\"!imageUrl-ipfs\");\n }\n linkage.push({ type: \"imageUrl-ipfs\", value: imageUrl });\n imageUrl = getIpfsLink(imageUrl);\n }\n linkage.push({ type: \"url\", value: imageUrl });\n return { linkage, url: imageUrl };\n }\n }\n }\n }\n catch (error) {\n console.log(\"EE\", error);\n }\n return { linkage, url: null };\n }\n static async fromName(provider, name) {\n let currentName = name;\n while (true) {\n if (currentName === \"\" || currentName === \".\") {\n return null;\n }\n // Optimization since the eth node cannot change and does\n // not have a wildcar resolver\n if (name !== \"eth\" && currentName === \"eth\") {\n return null;\n }\n // Check the current node for a resolver\n const addr = await __classPrivateFieldGet(EnsResolver, _a, \"m\", _EnsResolver_getResolver).call(EnsResolver, provider, currentName);\n // Found a resolver!\n if (addr != null) {\n const resolver = new EnsResolver(provider, addr, name);\n // Legacy resolver found, using EIP-2544 so it isn't safe to use\n if (currentName !== name && !(await resolver.supportsWildcard())) {\n return null;\n }\n return resolver;\n }\n // Get the parent node\n currentName = currentName.split(\".\").slice(1).join(\".\");\n }\n }\n}\n_a = EnsResolver, _EnsResolver_supports2544 = new WeakMap(), _EnsResolver_getResolver = async function _EnsResolver_getResolver(provider, name) {\n const network = await provider.getNetwork();\n const ensPlugin = network.getPlugin(\"org.ethers.plugins.ens\");\n // No ENS...\n if (!ensPlugin) {\n return logger.throwError(\"network does not support ENS\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getResolver\", info: { network: network.name }\n });\n }\n try {\n // keccak256(\"resolver(bytes32)\")\n const addrData = await provider.call({\n to: ensPlugin.address,\n data: concat([\"0x0178b8bf\" + namehash(name)]),\n enableCcipRead: true\n });\n const addr = network.formatter.callAddress(addrData);\n if (addr === dataSlice(HashZero, 0, 20)) {\n return null;\n }\n return addr;\n }\n catch (error) {\n // ENS registry cannot throw errors on resolver(bytes32),\n // so probably a link error\n throw error;\n }\n return null;\n};\n//# sourceMappingURL=ens-resolver.js.map","export const version = \"@ethersproject/signing-key@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _Signature_props;\nimport { toHex } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { arrayify, concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\n// Constants\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27);\nconst BN_28 = BigInt(28);\nconst BN_35 = BigInt(35);\nconst BN_255 = BigInt(255);\nconst BN_MASK_255 = (BN_1 << BN_255) - BN_1;\nconst _guard = {};\nconst Zero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nexport class Signature {\n constructor(guard, r, s, v) {\n _Signature_props.set(this, void 0);\n logger.assertPrivate(guard, _guard, \"Signature\");\n __classPrivateFieldSet(this, _Signature_props, { r, s, v, networkV: null }, \"f\");\n }\n get r() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\"); }\n set r(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\", hexlify(value));\n }\n get s() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\"); }\n set s(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n else if (arrayify(value)[0] & 0x80) {\n logger.throwArgumentError(\"non-canonical s\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\", hexlify(value));\n }\n get v() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\"); }\n set v(value) {\n const v = logger.getNumber(value, \"value\");\n if (v !== 27 && v !== 28) {\n throw new Error(\"@TODO\");\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\", v);\n }\n get networkV() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\"); }\n get legacyChainId() {\n const v = this.networkV;\n if (v == null) {\n return null;\n }\n return Signature.getChainId(v);\n }\n get vs() {\n // The EIP-2098 compact representation\n const vs = arrayify(this.s);\n if (this.yParity) {\n vs[0] |= 0x80;\n }\n return hexlify(vs);\n }\n get yParity() {\n if (this.v === 27) {\n return 0;\n }\n return 1;\n /*\n // When v is 0 or 1 it is the recid directly\n if (this.v.isZero()) { return 0; }\n if (this.v.eq(1)) { return 1; }\n\n // Otherwise, odd (e.g. 27) is 0 and even (e.g. 28) is 1\n return this.v.and(1).isZero() ? 1: 0;\n */\n }\n get serialized() {\n return concat([this.r, this.s, (this.yParity ? \"0x1c\" : \"0x1b\")]);\n }\n [(_Signature_props = new WeakMap(), Symbol.for('nodejs.util.inspect.custom'))]() {\n return `Signature { r: \"${this.r}\", s: \"${this.s}\", yParity: ${this.yParity}, networkV: ${this.networkV} }`;\n }\n clone() {\n if (getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\")) {\n logger.throwError(\"cannot clone EIP-155 signatures\", \"UNSUPPORTED_OPERATION\", {\n operation: \"clone\"\n });\n }\n const { r, s, v } = __classPrivateFieldGet(this, _Signature_props, \"f\");\n return new Signature(_guard, r, s, v);\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n }\n toJSON() {\n const { r, s, v, networkV } = this;\n return {\n _type: \"signature\",\n networkV: ((networkV != null) ? networkV.toString() : null),\n r, s, v,\n };\n }\n static create() {\n return new Signature(_guard, Zero, Zero, 27);\n }\n // Get the chain ID from an EIP-155 v\n static getChainId(v) {\n const bv = logger.getBigInt(v, \"v\");\n // The v is not an EIP-155 v, so it is the unspecified chain ID\n if ((bv == BN_27) || (bv == BN_28)) {\n return BN_0;\n }\n // Bad value for an EIP-155 v\n if (bv < BN_35) {\n logger.throwArgumentError(\"invalid EIP-155 v\", \"v\", v);\n }\n return (bv - BN_35) / BN_2;\n }\n // Get the EIP-155 v transformed for a given chainId\n static getChainIdV(chainId, v) {\n return (logger.getBigInt(chainId) * BN_2) + BigInt(35 + v - 27);\n }\n // Convert an EIP-155 v into a normalized v\n static getNormalizedV(v) {\n const bv = logger.getBigInt(v);\n if (bv == BN_0) {\n return 27;\n }\n if (bv == BN_1) {\n return 28;\n }\n // Otherwise, EIP-155 v means odd is 27 and even is 28\n return (bv & BN_1) ? 27 : 28;\n }\n static fromTransaction(r, s, _v) {\n const v = logger.getBigInt(_v, \"v\");\n const sig = Signature.from({ r, s, v });\n setStore(__classPrivateFieldGet(sig, _Signature_props, \"f\"), \"networkV\", v);\n return sig.freeze();\n }\n static from(sig) {\n const throwError = (message) => {\n return logger.throwArgumentError(message, \"signature\", sig);\n };\n if (typeof (sig) === \"string\") {\n if (dataLength(sig) !== 65) {\n throwError(\"invlaid raw signature length\");\n }\n const r = dataSlice(sig, 0, 32);\n const s = dataSlice(sig, 32, 64);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = Signature.getNormalizedV(dataSlice(sig, 64, 65));\n return new Signature(_guard, r, s, v);\n }\n if (sig instanceof Signature) {\n return sig.clone();\n }\n const r = sig.r;\n if (r == null) {\n throwError(\"missing r\");\n }\n if (!isHexString(r, 32)) {\n throwError(\"invalid r\");\n }\n const s = (function (s, vs) {\n if (s) {\n if (!isHexString(s, 32)) {\n throwError(\"invalid s\");\n }\n return s;\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return toHex(BigInt(vs) & BN_MASK_255, 32);\n }\n return throwError(\"missing s\");\n })(sig.s, sig.vs);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = (function (v, vs, yParity) {\n if (v) {\n return Signature.getNormalizedV(v);\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return ((arrayify(vs)[0] & 0x80) ? 28 : 27);\n }\n if (yParity) {\n switch (yParity) {\n case 0: return 27;\n case 1: return 28;\n }\n return throwError(\"invalid yParity\");\n }\n //if (chainId) { return BigNumber.from(chainId).and(1).sub(27); } // @TODO: check this\n return throwError(\"missing v\");\n })(sig.v, sig.vs, sig.yParity);\n // @TODO: check vs, chainId, yParity\n const result = new Signature(_guard, r, s, v);\n if (sig.yParity && sig.yParity !== result.yParity) {\n }\n if (sig.vs && sig.vs !== result.vs) {\n }\n //if (sig.chainId && sig.chainId !== result.chainId) {\n //}\n return result;\n }\n}\n//# sourceMappingURL=signature.js.map","/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nimport nodeCrypto from 'crypto';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _3n = BigInt(3);\nconst _8n = BigInt(8);\nconst POW_2_256 = _2n ** BigInt(256);\nconst CURVE = {\n a: _0n,\n b: BigInt(7),\n P: POW_2_256 - _2n ** BigInt(32) - BigInt(977),\n n: POW_2_256 - BigInt('432420386565659656852420866394968145599'),\n h: _1n,\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n};\nexport { CURVE };\nfunction weistrass(x) {\n const { a, b } = CURVE;\n const x2 = mod(x * x);\n const x3 = mod(x2 * x);\n return mod(x3 + a * x + b);\n}\nconst USE_ENDOMORPHISM = CURVE.a === _0n;\nclass JacobianPoint {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('JacobianPoint#fromAffine: expected Point');\n }\n return new JacobianPoint(p.x, p.y, _1n);\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return JacobianPoint.toAffineBatch(points).map(JacobianPoint.fromAffine);\n }\n equals(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n return U1 === U2 && S1 === S2;\n }\n negate() {\n return new JacobianPoint(this.x, mod(-this.y), this.z);\n }\n double() {\n const { x: X1, y: Y1, z: Z1 } = this;\n const A = mod(X1 ** _2n);\n const B = mod(Y1 ** _2n);\n const C = mod(B ** _2n);\n const D = mod(_2n * (mod((X1 + B) ** _2n) - A - C));\n const E = mod(_3n * A);\n const F = mod(E ** _2n);\n const X3 = mod(F - _2n * D);\n const Y3 = mod(E * (D - X3) - _8n * C);\n const Z3 = mod(_2n * Y1 * Z1);\n return new JacobianPoint(X3, Y3, Z3);\n }\n add(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n if (X2 === _0n || Y2 === _0n)\n return this;\n if (X1 === _0n || Y1 === _0n)\n return other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n const H = mod(U2 - U1);\n const r = mod(S2 - S1);\n if (H === _0n) {\n if (r === _0n) {\n return this.double();\n }\n else {\n return JacobianPoint.ZERO;\n }\n }\n const HH = mod(H ** _2n);\n const HHH = mod(H * HH);\n const V = mod(U1 * HH);\n const X3 = mod(r ** _2n - HHH - _2n * V);\n const Y3 = mod(r * (V - X3) - S1 * HHH);\n const Z3 = mod(Z1 * Z2 * H);\n return new JacobianPoint(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiplyUnsafe(scalar) {\n let n = normalizeScalar(scalar);\n const G = JacobianPoint.BASE;\n const P0 = JacobianPoint.ZERO;\n if (n === _0n)\n return P0;\n if (n === _1n)\n return this;\n if (!USE_ENDOMORPHISM) {\n let p = P0;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n let { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let k1p = P0;\n let k2p = P0;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n return k1p.add(k2p);\n }\n precomputeWindow(W) {\n const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1;\n const points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(JacobianPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = JacobianPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = JacobianPoint.ZERO;\n let f = JacobianPoint.ZERO;\n const windows = 1 + (USE_ENDOMORPHISM ? 128 / W : 256 / W);\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n if (wbits === 0) {\n let pr = precomputes[offset];\n if (window % 2)\n pr = pr.negate();\n f = f.add(pr);\n }\n else {\n let cached = precomputes[offset + Math.abs(wbits) - 1];\n if (wbits < 0)\n cached = cached.negate();\n p = p.add(cached);\n }\n }\n return { p, f };\n }\n multiply(scalar, affinePoint) {\n let n = normalizeScalar(scalar);\n let point;\n let fake;\n if (USE_ENDOMORPHISM) {\n const { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let { p: k1p, f: f1p } = this.wNAF(k1, affinePoint);\n let { p: k2p, f: f2p } = this.wNAF(k2, affinePoint);\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(n, affinePoint);\n point = p;\n fake = f;\n }\n return JacobianPoint.normalizeZ([point, fake])[0];\n }\n toAffine(invZ = invert(this.z)) {\n const { x, y, z } = this;\n const iz1 = invZ;\n const iz2 = mod(iz1 * iz1);\n const iz3 = mod(iz2 * iz1);\n const ax = mod(x * iz2);\n const ay = mod(y * iz3);\n const zz = mod(z * iz1);\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return new Point(ax, ay);\n }\n}\nJacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n);\nJacobianPoint.ZERO = new JacobianPoint(_0n, _1n, _0n);\nconst pointPrecomputes = new WeakMap();\nexport class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n static fromCompressedHex(bytes) {\n const isShort = bytes.length === 32;\n const x = bytesToNumber(isShort ? bytes : bytes.subarray(1));\n if (!isValidFieldElement(x))\n throw new Error('Point is not on curve');\n const y2 = weistrass(x);\n let y = sqrtMod(y2);\n const isYOdd = (y & _1n) === _1n;\n if (isShort) {\n if (isYOdd)\n y = mod(-y);\n }\n else {\n const isFirstByteOdd = (bytes[0] & 1) === 1;\n if (isFirstByteOdd !== isYOdd)\n y = mod(-y);\n }\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromUncompressedHex(bytes) {\n const x = bytesToNumber(bytes.subarray(1, 33));\n const y = bytesToNumber(bytes.subarray(33, 65));\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n const len = bytes.length;\n const header = bytes[0];\n if (len === 32 || (len === 33 && (header === 0x02 || header === 0x03))) {\n return this.fromCompressedHex(bytes);\n }\n if (len === 65 && header === 0x04)\n return this.fromUncompressedHex(bytes);\n throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${len}`);\n }\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normalizePrivateKey(privateKey));\n }\n static fromSignature(msgHash, signature, recovery) {\n msgHash = ensureBytes(msgHash);\n const h = truncateHash(msgHash);\n const { r, s } = normalizeSignature(signature);\n if (recovery !== 0 && recovery !== 1) {\n throw new Error('Cannot recover signature: invalid recovery bit');\n }\n if (h === _0n)\n throw new Error('Cannot recover signature: msgHash cannot be 0');\n const prefix = recovery & 1 ? '03' : '02';\n const R = Point.fromHex(prefix + numTo32bStr(r));\n const { n } = CURVE;\n const rinv = invert(r, n);\n const u1 = mod(-h * rinv, n);\n const u2 = mod(s * rinv, n);\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2);\n if (!Q)\n throw new Error('Cannot recover signature: point at infinify');\n Q.assertValidity();\n return Q;\n }\n toRawBytes(isCompressed = false) {\n return hexToBytes(this.toHex(isCompressed));\n }\n toHex(isCompressed = false) {\n const x = numTo32bStr(this.x);\n if (isCompressed) {\n const prefix = this.y & _1n ? '03' : '02';\n return `${prefix}${x}`;\n }\n else {\n return `04${x}${numTo32bStr(this.y)}`;\n }\n }\n toHexX() {\n return this.toHex(true).slice(2);\n }\n toRawX() {\n return this.toRawBytes(true).slice(1);\n }\n assertValidity() {\n const msg = 'Point is not on elliptic curve';\n const { x, y } = this;\n if (!isValidFieldElement(x) || !isValidFieldElement(y))\n throw new Error(msg);\n const left = mod(y * y);\n const right = weistrass(x);\n if (mod(left - right) !== _0n)\n throw new Error(msg);\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(this.x, mod(-this.y));\n }\n double() {\n return JacobianPoint.fromAffine(this).double().toAffine();\n }\n add(other) {\n return JacobianPoint.fromAffine(this).add(JacobianPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return JacobianPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n multiplyAndAddUnsafe(Q, a, b) {\n const P = JacobianPoint.fromAffine(this);\n const aP = P.multiply(a);\n const bQ = JacobianPoint.fromAffine(Q).multiplyUnsafe(b);\n const sum = aP.add(bQ);\n return sum.equals(JacobianPoint.ZERO) ? undefined : sum.toAffine();\n }\n}\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _0n);\nfunction sliceDER(s) {\n return Number.parseInt(s[0], 16) >= 8 ? '00' + s : s;\n}\nfunction parseDERInt(data) {\n if (data.length < 2 || data[0] !== 0x02) {\n throw new Error(`Invalid signature integer tag: ${bytesToHex(data)}`);\n }\n const len = data[1];\n const res = data.subarray(2, len + 2);\n if (!len || res.length !== len) {\n throw new Error(`Invalid signature integer: wrong length`);\n }\n if (res[0] === 0x00 && res[1] <= 0x7f) {\n throw new Error('Invalid signature integer: trailing length');\n }\n return { data: bytesToNumber(res), left: data.subarray(len + 2) };\n}\nfunction parseDERSignature(data) {\n if (data.length < 2 || data[0] != 0x30) {\n throw new Error(`Invalid signature tag: ${bytesToHex(data)}`);\n }\n if (data[1] !== data.length - 2) {\n throw new Error('Invalid signature: incorrect length');\n }\n const { data: r, left: sBytes } = parseDERInt(data.subarray(2));\n const { data: s, left: rBytesLeft } = parseDERInt(sBytes);\n if (rBytesLeft.length) {\n throw new Error(`Invalid signature: left bytes after parsing: ${bytesToHex(rBytesLeft)}`);\n }\n return { r, s };\n}\nexport class Signature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromCompact(hex) {\n const arr = isUint8a(hex);\n const name = 'Signature.fromCompact';\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`${name}: Expected string or Uint8Array`);\n const str = arr ? bytesToHex(hex) : hex;\n if (str.length !== 128)\n throw new Error(`${name}: Expected 64-byte hex`);\n return new Signature(hexToNumber(str.slice(0, 64)), hexToNumber(str.slice(64, 128)));\n }\n static fromDER(hex) {\n const arr = isUint8a(hex);\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`Signature.fromDER: Expected string or Uint8Array`);\n const { r, s } = parseDERSignature(arr ? hex : hexToBytes(hex));\n return new Signature(r, s);\n }\n static fromHex(hex) {\n return this.fromDER(hex);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isWithinCurveOrder(r))\n throw new Error('Invalid Signature: r must be 0 < r < n');\n if (!isWithinCurveOrder(s))\n throw new Error('Invalid Signature: s must be 0 < s < n');\n }\n hasHighS() {\n const HALF = CURVE.n >> _1n;\n return this.s > HALF;\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, CURVE.n - this.s) : this;\n }\n toDERRawBytes(isCompressed = false) {\n return hexToBytes(this.toDERHex(isCompressed));\n }\n toDERHex(isCompressed = false) {\n const sHex = sliceDER(numberToHexUnpadded(this.s));\n if (isCompressed)\n return sHex;\n const rHex = sliceDER(numberToHexUnpadded(this.r));\n const rLen = numberToHexUnpadded(rHex.length / 2);\n const sLen = numberToHexUnpadded(sHex.length / 2);\n const length = numberToHexUnpadded(rHex.length / 2 + sHex.length / 2 + 4);\n return `30${length}02${rLen}${rHex}02${sLen}${sHex}`;\n }\n toRawBytes() {\n return this.toDERRawBytes();\n }\n toHex() {\n return this.toDERHex();\n }\n toCompactRawBytes() {\n return hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n}\nfunction concatBytes(...arrays) {\n if (!arrays.every(isUint8a))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nfunction isUint8a(bytes) {\n return bytes instanceof Uint8Array;\n}\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\nfunction bytesToHex(uint8a) {\n if (!(uint8a instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\nfunction numTo32bStr(num) {\n if (num > POW_2_256)\n throw new Error('Expected number < 2^256');\n return num.toString(16).padStart(64, '0');\n}\nfunction numTo32b(num) {\n return hexToBytes(numTo32bStr(num));\n}\nfunction numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n}\nfunction hexToNumber(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToNumber: expected string, got ' + typeof hex);\n }\n return BigInt(`0x${hex}`);\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex' + hex.length);\n const array = new Uint8Array(hex.length / 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)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\nfunction bytesToNumber(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nfunction ensureBytes(hex) {\n return hex instanceof Uint8Array ? Uint8Array.from(hex) : hexToBytes(hex);\n}\nfunction normalizeScalar(num) {\n if (typeof num === 'number' && Number.isSafeInteger(num) && num > 0)\n return BigInt(num);\n if (typeof num === 'bigint' && isWithinCurveOrder(num))\n return num;\n throw new TypeError('Expected valid private scalar: 0 < scalar < curve.n');\n}\nfunction mod(a, b = CURVE.P) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction sqrtMod(x) {\n const { P } = CURVE;\n const _6n = BigInt(6);\n const _11n = BigInt(11);\n const _22n = BigInt(22);\n const _23n = BigInt(23);\n const _44n = BigInt(44);\n const _88n = BigInt(88);\n const b2 = (x * x * x) % P;\n const b3 = (b2 * b2 * x) % P;\n const b6 = (pow2(b3, _3n) * b3) % P;\n const b9 = (pow2(b6, _3n) * b3) % P;\n const b11 = (pow2(b9, _2n) * b2) % P;\n const b22 = (pow2(b11, _11n) * b11) % P;\n const b44 = (pow2(b22, _22n) * b22) % P;\n const b88 = (pow2(b44, _44n) * b44) % P;\n const b176 = (pow2(b88, _88n) * b88) % P;\n const b220 = (pow2(b176, _44n) * b44) % P;\n const b223 = (pow2(b220, _3n) * b3) % P;\n const t1 = (pow2(b223, _23n) * b22) % P;\n const t2 = (pow2(t1, _6n) * b2) % P;\n return pow2(t2, _2n);\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, p = CURVE.P) {\n const scratch = new Array(nums.length);\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = acc;\n return mod(acc * num, p);\n }, _1n);\n const inverted = invert(lastMultiplied, p);\n nums.reduceRight((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = mod(acc * scratch[i], p);\n return mod(acc * num, p);\n }, inverted);\n return scratch;\n}\nconst divNearest = (a, b) => (a + b / _2n) / b;\nconst POW_2_128 = _2n ** BigInt(128);\nfunction splitScalarEndo(k) {\n const { n } = CURVE;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\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)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalarEndo: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n}\nfunction truncateHash(hash) {\n const { n } = CURVE;\n const byteLength = hash.length;\n const delta = byteLength * 8 - 256;\n let h = bytesToNumber(hash);\n if (delta > 0)\n h = h >> BigInt(delta);\n if (h >= n)\n h -= n;\n return h;\n}\nclass HmacDrbg {\n constructor() {\n this.v = new Uint8Array(32).fill(1);\n this.k = new Uint8Array(32).fill(0);\n this.counter = 0;\n }\n hmac(...values) {\n return utils.hmacSha256(this.k, ...values);\n }\n hmacSync(...values) {\n if (typeof utils.hmacSha256Sync !== 'function')\n throw new Error('utils.hmacSha256Sync is undefined, you need to set it');\n const res = utils.hmacSha256Sync(this.k, ...values);\n if (res instanceof Promise)\n throw new Error('To use sync sign(), ensure utils.hmacSha256 is sync');\n return res;\n }\n incr() {\n if (this.counter >= 1000) {\n throw new Error('Tried 1,000 k values for sign(), all were invalid');\n }\n this.counter += 1;\n }\n async reseed(seed = new Uint8Array()) {\n this.k = await this.hmac(this.v, Uint8Array.from([0x00]), seed);\n this.v = await this.hmac(this.v);\n if (seed.length === 0)\n return;\n this.k = await this.hmac(this.v, Uint8Array.from([0x01]), seed);\n this.v = await this.hmac(this.v);\n }\n reseedSync(seed = new Uint8Array()) {\n this.k = this.hmacSync(this.v, Uint8Array.from([0x00]), seed);\n this.v = this.hmacSync(this.v);\n if (seed.length === 0)\n return;\n this.k = this.hmacSync(this.v, Uint8Array.from([0x01]), seed);\n this.v = this.hmacSync(this.v);\n }\n async generate() {\n this.incr();\n this.v = await this.hmac(this.v);\n return this.v;\n }\n generateSync() {\n this.incr();\n this.v = this.hmacSync(this.v);\n return this.v;\n }\n}\nfunction isWithinCurveOrder(num) {\n return _0n < num && num < CURVE.n;\n}\nfunction isValidFieldElement(num) {\n return _0n < num && num < CURVE.P;\n}\nfunction kmdToSig(kBytes, m, d) {\n const k = bytesToNumber(kBytes);\n if (!isWithinCurveOrder(k))\n return;\n const { n } = CURVE;\n const q = Point.BASE.multiply(k);\n const r = mod(q.x, n);\n if (r === _0n)\n return;\n const s = mod(invert(k, n) * mod(m + d * r, n), n);\n if (s === _0n)\n return;\n const sig = new Signature(r, s);\n const recovery = (q.x === sig.r ? 0 : 2) | Number(q.y & _1n);\n return { sig, recovery };\n}\nfunction normalizePrivateKey(key) {\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else if (typeof key === 'number' && Number.isSafeInteger(key) && key > 0) {\n num = BigInt(key);\n }\n else if (typeof key === 'string') {\n if (key.length !== 64)\n throw new Error('Expected 32 bytes of private key');\n num = hexToNumber(key);\n }\n else if (isUint8a(key)) {\n if (key.length !== 32)\n throw new Error('Expected 32 bytes of private key');\n num = bytesToNumber(key);\n }\n else {\n throw new TypeError('Expected valid private key');\n }\n if (!isWithinCurveOrder(num))\n throw new Error('Expected private key: 0 < key < n');\n return num;\n}\nfunction normalizePublicKey(publicKey) {\n if (publicKey instanceof Point) {\n publicKey.assertValidity();\n return publicKey;\n }\n else {\n return Point.fromHex(publicKey);\n }\n}\nfunction normalizeSignature(signature) {\n if (signature instanceof Signature) {\n signature.assertValidity();\n return signature;\n }\n try {\n return Signature.fromDER(signature);\n }\n catch (error) {\n return Signature.fromCompact(signature);\n }\n}\nexport function getPublicKey(privateKey, isCompressed = false) {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n}\nexport function recoverPublicKey(msgHash, signature, recovery, isCompressed = false) {\n return Point.fromSignature(msgHash, signature, recovery).toRawBytes(isCompressed);\n}\nfunction isPub(item) {\n const arr = isUint8a(item);\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === 33 || len === 65;\n if (str)\n return len === 66 || len === 130;\n if (item instanceof Point)\n return true;\n return false;\n}\nexport function getSharedSecret(privateA, publicB, isCompressed = false) {\n if (isPub(privateA))\n throw new TypeError('getSharedSecret: first arg must be private key');\n if (!isPub(publicB))\n throw new TypeError('getSharedSecret: second arg must be public key');\n const b = normalizePublicKey(publicB);\n b.assertValidity();\n return b.multiply(normalizePrivateKey(privateA)).toRawBytes(isCompressed);\n}\nfunction bits2int(bytes) {\n const slice = bytes.length > 32 ? bytes.slice(0, 32) : bytes;\n return bytesToNumber(slice);\n}\nfunction bits2octets(bytes) {\n const z1 = bits2int(bytes);\n const z2 = mod(z1, CURVE.n);\n return int2octets(z2 < _0n ? z1 : z2);\n}\nfunction int2octets(num) {\n if (typeof num !== 'bigint')\n throw new Error('Expected bigint');\n const hex = numTo32bStr(num);\n return hexToBytes(hex);\n}\nfunction initSigArgs(msgHash, privateKey, extraEntropy) {\n if (msgHash == null)\n throw new Error(`sign: expected valid message hash, not \"${msgHash}\"`);\n const h1 = ensureBytes(msgHash);\n const d = normalizePrivateKey(privateKey);\n const seedArgs = [int2octets(d), bits2octets(h1)];\n if (extraEntropy != null) {\n if (extraEntropy === true)\n extraEntropy = utils.randomBytes(32);\n const e = ensureBytes(extraEntropy);\n if (e.length !== 32)\n throw new Error('sign: Expected 32 bytes of extra data');\n seedArgs.push(e);\n }\n const seed = concatBytes(...seedArgs);\n const m = bits2int(h1);\n return { seed, m, d };\n}\nfunction finalizeSig(recSig, opts) {\n let { sig, recovery } = recSig;\n const { canonical, der, recovered } = Object.assign({ canonical: true, der: true }, opts);\n if (canonical && sig.hasHighS()) {\n sig = sig.normalizeS();\n recovery ^= 1;\n }\n const hashed = der ? sig.toDERRawBytes() : sig.toCompactRawBytes();\n return recovered ? [hashed, recovery] : hashed;\n}\nasync function sign(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n await drbg.reseed(seed);\n while (!(sig = kmdToSig(await drbg.generate(), m, d)))\n await drbg.reseed();\n return finalizeSig(sig, opts);\n}\nfunction signSync(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n drbg.reseedSync(seed);\n while (!(sig = kmdToSig(drbg.generateSync(), m, d)))\n drbg.reseedSync();\n return finalizeSig(sig, opts);\n}\nexport { sign, signSync };\nconst vopts = { strict: true };\nexport function verify(signature, msgHash, publicKey, opts = vopts) {\n let sig;\n try {\n sig = normalizeSignature(signature);\n msgHash = ensureBytes(msgHash);\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n if (opts.strict && sig.hasHighS())\n return false;\n const h = truncateHash(msgHash);\n if (h === _0n)\n return false;\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const { n } = CURVE;\n const sinv = invert(s, n);\n const u1 = mod(h * sinv, n);\n const u2 = mod(r * sinv, n);\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2);\n if (!R)\n return false;\n const v = mod(R.x, n);\n return v === r;\n}\nasync function taggedHash(tag, ...messages) {\n const tagB = new Uint8Array(tag.split('').map((c) => c.charCodeAt(0)));\n const tagH = await utils.sha256(tagB);\n const h = await utils.sha256(concatBytes(tagH, tagH, ...messages));\n return bytesToNumber(h);\n}\nasync function createChallenge(x, P, message) {\n const rx = numTo32b(x);\n const t = await taggedHash('BIP0340/challenge', rx, P.toRawX(), message);\n return mod(t, CURVE.n);\n}\nfunction hasEvenY(point) {\n return (point.y & _1n) === _0n;\n}\nclass SchnorrSignature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n if (bytes.length !== 64)\n throw new TypeError(`SchnorrSignature.fromHex: expected 64 bytes, not ${bytes.length}`);\n const r = bytesToNumber(bytes.subarray(0, 32));\n const s = bytesToNumber(bytes.subarray(32, 64));\n return new SchnorrSignature(r, s);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isValidFieldElement(r) || !isWithinCurveOrder(s))\n throw new Error('Invalid signature');\n }\n toHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n toRawBytes() {\n return hexToBytes(this.toHex());\n }\n}\nfunction schnorrGetPublicKey(privateKey) {\n return Point.fromPrivateKey(privateKey).toRawX();\n}\nasync function schnorrSign(message, privateKey, auxRand = utils.randomBytes()) {\n if (message == null)\n throw new TypeError(`sign: Expected valid message, not \"${message}\"`);\n const { n } = CURVE;\n const m = ensureBytes(message);\n const d0 = normalizePrivateKey(privateKey);\n const rand = ensureBytes(auxRand);\n if (rand.length !== 32)\n throw new TypeError('sign: Expected 32 bytes of aux randomness');\n const P = Point.fromPrivateKey(d0);\n const d = hasEvenY(P) ? d0 : n - d0;\n const t0h = await taggedHash('BIP0340/aux', rand);\n const t = d ^ t0h;\n const k0h = await taggedHash('BIP0340/nonce', numTo32b(t), P.toRawX(), m);\n const k0 = mod(k0h, n);\n if (k0 === _0n)\n throw new Error('sign: Creation of signature failed. k is zero');\n const R = Point.fromPrivateKey(k0);\n const k = hasEvenY(R) ? k0 : n - k0;\n const e = await createChallenge(R.x, P, m);\n const sig = new SchnorrSignature(R.x, mod(k + e * d, n)).toRawBytes();\n const isValid = await schnorrVerify(sig, m, P.toRawX());\n if (!isValid)\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\nasync function schnorrVerify(signature, message, publicKey) {\n const raw = signature instanceof SchnorrSignature;\n let sig;\n try {\n sig = raw ? signature : SchnorrSignature.fromHex(signature);\n if (raw)\n sig.assertValidity();\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n const m = ensureBytes(message);\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const e = await createChallenge(r, P, m);\n const R = Point.BASE.multiplyAndAddUnsafe(P, normalizePrivateKey(s), mod(-e, CURVE.n));\n if (!R || !hasEvenY(R) || R.x !== r)\n return false;\n return true;\n}\nexport const schnorr = {\n Signature: SchnorrSignature,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n};\nPoint.BASE._setWindowSize(8);\nconst crypto = {\n node: nodeCrypto,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nexport const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normalizePrivateKey(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n hashToPrivateKey: (hash) => {\n hash = ensureBytes(hash);\n if (hash.length < 40 || hash.length > 1024)\n throw new Error('Expected 40-1024 bytes of private key as per FIPS 186');\n const num = mod(bytesToNumber(hash), CURVE.n);\n if (num === _0n || num === _1n)\n throw new Error('Invalid private key');\n return numTo32b(num);\n },\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return Uint8Array.from(randomBytes(bytesLength));\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => {\n return utils.hashToPrivateKey(utils.randomBytes(40));\n },\n bytesToHex,\n mod,\n sha256: async (message) => {\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-256', message.buffer);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHash } = crypto.node;\n return Uint8Array.from(createHash('sha256').update(message).digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha256 function\");\n }\n },\n hmacSha256: async (key, ...messages) => {\n if (crypto.web) {\n const ckey = await crypto.web.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n const message = concatBytes(...messages);\n const buffer = await crypto.web.subtle.sign('HMAC', ckey, message);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHmac } = crypto.node;\n const hash = createHmac('sha256', key);\n messages.forEach((m) => hash.update(m));\n return Uint8Array.from(hash.digest());\n }\n else {\n throw new Error(\"The environment doesn't have hmac-sha256 function\");\n }\n },\n sha256Sync: undefined,\n hmacSha256Sync: undefined,\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point === Point.BASE ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_3n);\n return cached;\n },\n};\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 _SigningKey_privateKey;\nimport * as secp256k1 from \"@noble/secp256k1\";\nimport { arrayify, concat, dataLength, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac } from \"@ethersproject/crypto\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"./signature.js\";\nimport { logger } from \"./logger.js\";\n// Make noble-secp256k1 sync\nsecp256k1.utils.hmacSha256Sync = function (key, ...messages) {\n return arrayify(computeHmac(\"sha256\", key, concat(messages)));\n};\nexport class SigningKey {\n constructor(privateKey) {\n _SigningKey_privateKey.set(this, void 0);\n logger.assertArgument((dataLength(privateKey) === 32), \"invalid private key length\", \"privateKey\", \"[REDACTED]\");\n __classPrivateFieldSet(this, _SigningKey_privateKey, hexlify(privateKey), \"f\");\n }\n get privateKey() { return __classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"); }\n get publicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")); }\n get compressedPublicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"), true); }\n sign(digest) {\n logger.assertArgument((dataLength(digest) === 32), \"invalid digest length\", \"digest\", digest);\n const [sigDer, recid] = secp256k1.signSync(arrayify(digest), arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), {\n recovered: true,\n canonical: true\n });\n const sig = secp256k1.Signature.fromHex(sigDer);\n return Signature.from({\n r: toHex(\"0x\" + sig.r.toString(16), 32),\n s: toHex(\"0x\" + sig.s.toString(16), 32),\n v: (recid ? 0x1c : 0x1b)\n }).freeze();\n }\n computeShardSecret(other) {\n const pubKey = SigningKey.computePublicKey(other);\n return hexlify(secp256k1.getSharedSecret(arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), pubKey));\n }\n static computePublicKey(key, compressed) {\n let bytes = logger.getBytes(key, \"key\");\n if (bytes.length === 32) {\n const pubKey = secp256k1.getPublicKey(bytes, !!compressed);\n return hexlify(pubKey);\n }\n if (bytes.length === 64) {\n const pub = new Uint8Array(65);\n pub[0] = 0x04;\n pub.set(bytes, 1);\n bytes = pub;\n }\n const point = secp256k1.Point.fromHex(bytes);\n return hexlify(point.toRawBytes(compressed));\n }\n static recoverPublicKey(digest, signature) {\n const sig = Signature.from(signature);\n const der = secp256k1.Signature.fromCompact(arrayify(concat([sig.r, sig.s]))).toDERRawBytes();\n const pubKey = secp256k1.recoverPublicKey(arrayify(digest), der, sig.yParity);\n if (pubKey != null) {\n return hexlify(pubKey);\n }\n return logger.throwArgumentError(\"invalid signautre for digest\", \"signature\", signature);\n }\n static _addPoints(p0, p1, compressed) {\n const pub0 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p0).substring(2));\n const pub1 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p1).substring(2));\n return \"0x\" + pub0.add(pub1).toHex(!!compressed);\n }\n}\n_SigningKey_privateKey = new WeakMap();\n/*\nconst key = new SigningKey(\"0x1234567890123456789012345678901234567890123456789012345678901234\");\nconsole.log(key);\nconsole.log(key.sign(\"0x1234567890123456789012345678901234567890123456789012345678901234\"));\n{\n const privKey = \"0x1234567812345678123456781234567812345678123456781234567812345678\";\n const signingKey = new SigningKey(privKey);\n console.log(\"0\", signingKey, signingKey.publicKey, signingKey.publicKeyCompressed);\n\n let pubKey = SigningKey.computePublicKey(privKey);\n let pubKeyComp = SigningKey.computePublicKey(privKey, true);\n let pubKeyRaw = \"0x\" + SigningKey.computePublicKey(privKey).substring(4);\n console.log(\"A\", pubKey, pubKeyComp);\n\n let a = SigningKey.computePublicKey(pubKey);\n let b = SigningKey.computePublicKey(pubKey, true);\n console.log(\"B\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyComp);\n b = SigningKey.computePublicKey(pubKeyComp, true);\n console.log(\"C\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyRaw);\n b = SigningKey.computePublicKey(pubKeyRaw, true);\n console.log(\"D\", a, b);\n\n const digest = \"0x1122334411223344112233441122334411223344112233441122334411223344\";\n const sig = signingKey.sign(digest);\n console.log(\"SS\", sig, sig.r, sig.s, sig.yParity);\n\n console.log(\"R\", SigningKey.recoverPublicKey(digest, sig));\n}\n*/\n//# sourceMappingURL=signing-key.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { dataLength } from \"@ethersproject/bytes\";\nfunction accessSetify(addr, storageKeys) {\n return {\n address: getAddress(addr),\n storageKeys: (storageKeys || []).map((storageKey, index) => {\n if (dataLength(storageKey) !== 32) {\n //logger.throwArgumentError(\"invalid access list storageKey\", `accessList[${ addr }>\n throw new Error(\"\");\n }\n return storageKey.toLowerCase();\n })\n };\n}\nexport function accessListify(value) {\n if (Array.isArray(value)) {\n return value.map((set, index) => {\n if (Array.isArray(set)) {\n if (set.length > 2) {\n //logger.throwArgumentError(\"access list expected to be [ address, storageKeys[>\n throw new Error(\"\");\n }\n return accessSetify(set[0], set[1]);\n }\n return accessSetify(set.address, set.storageKeys);\n });\n }\n const result = Object.keys(value).map((addr) => {\n const storageKeys = value[addr].reduce((accum, storageKey) => {\n accum[storageKey] = true;\n return accum;\n }, {});\n return accessSetify(addr, Object.keys(storageKeys).sort());\n });\n result.sort((a, b) => (a.address.localeCompare(b.address)));\n return result;\n}\n//# sourceMappingURL=accesslist.js.map","export const version = \"@ethersproject/transactions@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _Transaction_props;\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toArray } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"./accesslist.js\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nfunction formatNumber(_value, name) {\n const value = logger.getBigInt(_value, \"value\");\n const result = toArray(value);\n if (result.length > 32) {\n logger.throwArgumentError(`value too large`, `tx.${name}`, value);\n }\n return result;\n}\nfunction formatAccessList(value) {\n return accessListify(value).map((set) => [set.address, set.storageKeys]);\n}\nfunction _parseLegacy(data) {\n return {};\n}\nfunction _serializeLegacy(tx, sig) {\n const fields = [\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n ];\n let chainId = BN_0;\n if (tx.chainId != null) {\n // A chainId was provided; if non-zero we'll use EIP-155\n chainId = logger.getBigInt(tx.chainId, \"tx.chainId\");\n // We have a chainId in the tx and an EIP-155 v in the signature,\n // make sure they agree with each other\n if (sig && sig.networkV != null && sig.legacyChainId !== chainId) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n }\n else if (sig) {\n // No chainId provided, but the signature is signing with EIP-155; derive chainId\n const legacy = sig.legacyChainId;\n if (legacy != null) {\n chainId = legacy;\n }\n }\n // Requesting an unsigned transaction\n if (!sig) {\n // We have an EIP-155 transaction (chainId was specified and non-zero)\n if (chainId !== BN_0) {\n fields.push(toArray(chainId));\n fields.push(\"0x\");\n fields.push(\"0x\");\n }\n return encodeRlp(fields);\n }\n // We pushed a chainId and null r, s on for hashing only; remove those\n let v = BigInt(27 + sig.yParity);\n if (chainId !== BN_0) {\n v = Signature.getChainIdV(chainId, sig.v);\n }\n else if (BigInt(sig.v) !== v) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n fields.push(toArray(v));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n return encodeRlp(fields);\n}\nfunction _parseEip1559(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip1559(tx, sig) {\n // If there is an explicit gasPrice, make sure it matches the\n // EIP-1559 fees; otherwise they may not understand what they\n // think they are setting in terms of fee.\n //if (tx.gasPrice != null) {\n // if (tx.gasPrice !== (tx.maxFeePerGas || BN_0)) {\n // logger.throwArgumentError(\"mismatch EIP-1559 gasPrice != maxFeePerGas\", \"tx\", tx);\n // }\n //}\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n formatNumber(tx.maxFeePerGas || 0, \"maxFeePerGas\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"yParity\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x02\", encodeRlp(fields)]);\n}\nfunction _parseEip2930(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip2930(tx, sig) {\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"recoveryParam\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x01\", encodeRlp(fields)]);\n}\nexport class Transaction {\n constructor() {\n _Transaction_props.set(this, void 0);\n __classPrivateFieldSet(this, _Transaction_props, {\n type: null,\n to: null,\n nonce: 0,\n gasLimit: BigInt(0),\n gasPrice: null,\n maxPriorityFeePerGas: null,\n maxFeePerGas: null,\n data: \"0x\",\n value: BigInt(0),\n chainId: BigInt(0),\n sig: null,\n accessList: null\n }, \"f\");\n }\n // A type of null indicates the type will be populated automatically\n get type() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\"); }\n get typeName() {\n switch (this.type) {\n case 0: return \"legacy\";\n case 1: return \"eip-2930\";\n case 2: return \"eip-1559\";\n }\n return null;\n }\n set type(value) {\n switch (value) {\n case null:\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", null);\n break;\n case 0:\n case \"legacy\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 0);\n break;\n case 1:\n case \"berlin\":\n case \"eip-2930\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 1);\n break;\n case 2:\n case \"london\":\n case \"eip-1559\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 2);\n break;\n default:\n throw new Error(`unsupported transaction type`);\n }\n }\n /*\n detectType(): number {\n const hasFee = (this.maxFeePerGas != null) || (this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n const hasLegacy = (this.gasPrice != null);\n\n if (hasLegacy) {\n if (hasFee) {\n throw new Error(\"cannot mix legacy and london properties\");\n }\n if (hasAccessList) { return 1; }\n return 0;\n }\n\n return 2;\n }\n */\n get to() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\"); }\n set to(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\", (value == null) ? null : getAddress(value));\n }\n get nonce() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\"); }\n set nonce(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\", logger.getNumber(value, \"value\")); }\n get gasLimit() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\"); }\n set gasLimit(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\", logger.getBigInt(value)); }\n get gasPrice() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\"); }\n set gasPrice(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxPriorityFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\"); }\n set maxPriorityFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\"); }\n set maxFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get data() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\"); }\n set data(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\", hexlify(value)); }\n get value() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\"); }\n set value(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\", logger.getBigInt(value));\n }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\", logger.getBigInt(value)); }\n get signature() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\") || null; }\n set signature(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\", (value == null) ? null : Signature.from(value));\n }\n get accessList() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\") || null; }\n set accessList(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\", (value == null) ? null : accessListify(value));\n }\n get hash() {\n if (this.signature == null) {\n throw new Error(\"cannot hash unsigned transaction; maybe you meant .unsignedHash\");\n }\n return keccak256(this.serialized);\n }\n get unsignedHash() {\n return keccak256(this.unsignedSerialized);\n }\n get from() {\n if (this.signature == null) {\n return null;\n }\n // use ecomputeAddress(this.fromPublicKey);\n return \"\";\n }\n get fromPublicKey() {\n if (this.signature == null) {\n return null;\n }\n // use ecrecover\n return \"\";\n }\n isSigned() {\n return this.signature != null;\n }\n get serialized() {\n if (this.signature == null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this, this.signature);\n case 1:\n return _serializeEip2930(this, this.signature);\n case 2:\n return _serializeEip1559(this, this.signature);\n }\n throw new Error(\"unsupported type\");\n }\n get unsignedSerialized() {\n if (this.signature != null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this);\n case 1:\n return _serializeEip2930(this);\n case 2:\n return _serializeEip1559(this);\n }\n throw new Error(\"unsupported type\");\n }\n // Validates properties and lists possible types this transaction adheres to\n inferTypes() {\n // Checks that there are no conflicting properties set\n const hasGasPrice = this.gasPrice != null;\n const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n //if (hasGasPrice && hasFee) {\n // throw new Error(\"transaction cannot have gasPrice and maxFeePerGas\");\n //}\n if (!!this.maxFeePerGas && !!this.maxPriorityFeePerGas) {\n if (this.maxFeePerGas < this.maxPriorityFeePerGas) {\n throw new Error(\"priorityFee cannot be more than maxFee\");\n }\n }\n //if (this.type === 2 && hasGasPrice) {\n // throw new Error(\"eip-1559 transaction cannot have gasPrice\");\n //}\n if ((this.type === 0 || this.type === 1) && hasFee) {\n throw new Error(\"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas\");\n }\n if (this.type === 0 && hasAccessList) {\n throw new Error(\"legacy transaction cannot have accessList\");\n }\n const types = [];\n // Explicit type\n if (this.type != null) {\n types.push(this.type);\n }\n else {\n if (hasFee) {\n types.push(2);\n }\n else if (hasGasPrice) {\n types.push(1);\n if (!hasAccessList) {\n types.push(0);\n }\n }\n else if (hasAccessList) {\n types.push(1);\n types.push(2);\n }\n else {\n types.push(0);\n types.push(1);\n types.push(2);\n }\n }\n types.sort();\n return types;\n }\n clone() {\n return Transaction.from(this);\n }\n freeze() {\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").sig = (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig.clone().freeze());\n }\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").accessList = Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList.map((set) => {\n Object.freeze(set.storageKeys);\n return Object.freeze(set);\n }));\n }\n Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n }\n static from(tx) {\n if (typeof (tx) === \"string\") {\n const payload = arrayify(tx);\n if (payload[0] >= 0x7f) { // @TODO: > vs >= ??\n return Transaction.from(_parseLegacy(payload));\n }\n switch (payload[0]) {\n case 1: return Transaction.from(_parseEip2930(payload.slice(1)));\n case 2: return Transaction.from(_parseEip1559(payload.slice(1)));\n }\n throw new Error(\"unsupported transaction type\");\n }\n const result = new Transaction();\n if (tx.type != null) {\n result.type = tx.type;\n }\n if (tx.to != null) {\n result.to = tx.to;\n }\n if (tx.nonce != null) {\n result.nonce = tx.nonce;\n }\n if (tx.gasLimit != null) {\n result.gasLimit = tx.gasLimit;\n }\n if (tx.gasPrice != null) {\n result.gasPrice = tx.gasPrice;\n }\n if (tx.maxPriorityFeePerGas != null) {\n result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas;\n }\n if (tx.maxFeePerGas != null) {\n result.maxFeePerGas = tx.maxFeePerGas;\n }\n if (tx.data != null) {\n result.data = tx.data;\n }\n if (tx.value != null) {\n result.value = tx.value;\n }\n if (tx.chainId != null) {\n result.chainId = tx.chainId;\n }\n if (tx.signature != null) {\n result.signature = Signature.from(tx.signature);\n }\n if (tx.accessList != null) {\n result.accessList = tx.accessList;\n }\n // Should these be checked?? Should from be allowed if there is no signature?\n // from?: null | A;\n // hash?: null | string;\n return result;\n }\n}\n_Transaction_props = new WeakMap();\n//# sourceMappingURL=transaction.js.map","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 _Block_transactions, _TransactionReceipt_logs;\n//import { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\n// -----------------------\nfunction getValue(value) {\n if (value == null) {\n return null;\n }\n return value;\n}\nfunction toJson(value) {\n if (value == null) {\n return null;\n }\n return value.toString();\n}\n// @TODO? implements Required\nexport class FeeData {\n constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) {\n defineProperties(this, {\n gasPrice: getValue(gasPrice),\n maxFeePerGas: getValue(maxFeePerGas),\n maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n });\n }\n toJSON() {\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this;\n return {\n _type: \"FeeData\",\n gasPrice: toJson(gasPrice),\n maxFeePerGas: toJson(maxFeePerGas),\n maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n };\n }\n}\n;\nexport function copyRequest(req) {\n const result = {};\n // These could be addresses, ENS names or Addressables\n if (req.to) {\n result.to = req.to;\n }\n if (req.from) {\n result.from = req.from;\n }\n if (req.data) {\n result.data = hexlify(req.data);\n }\n const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value\".split(/,/);\n for (const key in bigIntKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getBigInt(req[key], `request.${key}`);\n }\n const numberKeys = \"type,nonce\".split(/,/);\n for (const key in numberKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getNumber(req[key], `request.${key}`);\n }\n if (req.accessList) {\n result.accessList = accessListify(req.accessList);\n }\n if (\"blockTag\" in req) {\n result.blockTag = req.blockTag;\n }\n if (\"enableCcipRead\" in req) {\n result.enableCcipReadEnabled = !!req.enableCcipRead;\n }\n if (\"customData\" in req) {\n result.customData = req.customData;\n }\n return result;\n}\n;\nexport class Block {\n constructor(block, provider) {\n _Block_transactions.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _Block_transactions, Object.freeze(block.transactions.map((tx) => {\n if (typeof (tx) !== \"string\" && tx.provider !== provider) {\n throw new Error(\"provider mismatch\");\n }\n return tx;\n })), \"f\");\n ;\n defineProperties(this, {\n provider,\n hash: getValue(block.hash),\n number: block.number,\n timestamp: block.timestamp,\n parentHash: block.parentHash,\n nonce: block.nonce,\n difficulty: block.difficulty,\n gasLimit: block.gasLimit,\n gasUsed: block.gasUsed,\n miner: block.miner,\n extraData: block.extraData,\n baseFeePerGas: getValue(block.baseFeePerGas)\n });\n }\n get transactions() { return __classPrivateFieldGet(this, _Block_transactions, \"f\"); }\n //connect(provider: Provider): Block {\n // return new Block(this, provider);\n //}\n toJSON() {\n const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, nonce, number, parentHash, timestamp, transactions } = this;\n return {\n _type: \"Block\",\n baseFeePerGas: toJson(baseFeePerGas),\n difficulty: toJson(difficulty),\n extraData,\n gasLimit: toJson(gasLimit),\n gasUsed: toJson(gasUsed),\n hash, miner, nonce, number, parentHash, timestamp,\n transactions,\n };\n }\n [(_Block_transactions = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return {\n value: this.transactions[index++], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get length() { return this.transactions.length; }\n get date() {\n if (this.timestamp == null) {\n return null;\n }\n return new Date(this.timestamp * 1000);\n }\n async getTransaction(index) {\n const tx = this.transactions[index];\n if (tx == null) {\n throw new Error(\"no such tx\");\n }\n if (typeof (tx) === \"string\") {\n return (await this.provider.getTransaction(tx));\n }\n else {\n return tx;\n }\n }\n isMined() { return !!this.hash; }\n isLondon() { return !!this.baseFeePerGas; }\n orphanedEvent() {\n if (!this.isMined()) {\n throw new Error(\"\");\n }\n return createOrphanedBlockFilter(this);\n }\n}\nexport class Log {\n constructor(log, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n const topics = Object.freeze(log.topics.slice());\n defineProperties(this, {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n removed: log.removed,\n address: log.address,\n data: log.data,\n topics,\n index: log.index,\n transactionIndex: log.transactionIndex,\n });\n }\n //connect(provider: Provider): Log {\n // return new Log(this, provider);\n //}\n toJSON() {\n const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this;\n return {\n _type: \"log\",\n address, blockHash, blockNumber, data, index,\n removed, topics, transactionHash, transactionIndex\n };\n }\n async getBlock() {\n return (await this.provider.getBlock(this.blockHash));\n }\n async getTransaction() {\n return (await this.provider.getTransaction(this.transactionHash));\n }\n async getTransactionReceipt() {\n return (await this.provider.getTransactionReceipt(this.transactionHash));\n }\n removedEvent() {\n return createRemovedLogFilter(this);\n }\n}\nexport class TransactionReceipt {\n constructor(tx, provider) {\n _TransactionReceipt_logs.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _TransactionReceipt_logs, Object.freeze(tx.logs.map((log) => {\n if (provider !== log.provider) {\n //return log.connect(provider);\n throw new Error(\"provider mismatch\");\n }\n return log;\n })), \"f\");\n defineProperties(this, {\n provider,\n to: tx.to,\n from: tx.from,\n contractAddress: tx.contractAddress,\n hash: tx.hash,\n index: tx.index,\n blockHash: tx.blockHash,\n blockNumber: tx.blockNumber,\n logsBloom: tx.logsBloom,\n gasUsed: tx.gasUsed,\n cumulativeGasUsed: tx.cumulativeGasUsed,\n gasPrice: (tx.effectiveGasPrice || tx.gasPrice),\n byzantium: tx.byzantium,\n status: tx.status,\n root: tx.root\n });\n }\n get logs() { return __classPrivateFieldGet(this, _TransactionReceipt_logs, \"f\"); }\n //connect(provider: Provider): TransactionReceipt {\n // return new TransactionReceipt(this, provider);\n //}\n toJSON() {\n const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, byzantium, status, root } = this;\n return {\n _type: \"TransactionReceipt\",\n blockHash, blockNumber, byzantium, contractAddress,\n cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n from,\n gasPrice: toJson(this.gasPrice),\n gasUsed: toJson(this.gasUsed),\n hash, index, logs, logsBloom, root, status, to\n };\n }\n get length() { return this.logs.length; }\n [(_TransactionReceipt_logs = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return { value: this.logs[index++], done: false };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get fee() {\n return this.gasUsed * this.gasPrice;\n }\n async getBlock() {\n const block = await this.provider.getBlock(this.blockHash);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n const tx = await this.provider.getTransaction(this.hash);\n if (tx == null) {\n throw new Error(\"TODO\");\n }\n return tx;\n }\n async confirmations() {\n return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n }\n removedEvent() {\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transction cannot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"reorderedEvent(other)\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\n;\nexport class TransactionResponse {\n constructor(tx, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null;\n this.blockHash = (tx.blockHash != null) ? tx.blockHash : null;\n this.hash = tx.hash;\n this.index = tx.index;\n this.type = tx.type;\n this.from = tx.from;\n this.to = tx.to || null;\n this.gasLimit = tx.gasLimit;\n this.nonce = tx.nonce;\n this.data = tx.data;\n this.value = tx.value;\n this.gasPrice = tx.gasPrice;\n this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null;\n this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null;\n this.chainId = tx.chainId;\n this.signature = tx.signature;\n this.accessList = (tx.accessList != null) ? tx.accessList : null;\n }\n //connect(provider: Provider): TransactionResponse {\n // return new TransactionResponse(this, provider);\n //}\n toJSON() {\n const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList } = this;\n return {\n _type: \"TransactionReceipt\",\n accessList, blockNumber, blockHash,\n chainId: toJson(this.chainId),\n data, from,\n gasLimit: toJson(this.gasLimit),\n gasPrice: toJson(this.gasPrice),\n hash,\n maxFeePerGas: toJson(this.maxFeePerGas),\n maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n nonce, signature, to, index, type,\n value: toJson(this.value),\n };\n }\n async getBlock() {\n let blockNumber = this.blockNumber;\n if (blockNumber == null) {\n const tx = await this.getTransaction();\n if (tx) {\n blockNumber = tx.blockNumber;\n }\n }\n if (blockNumber == null) {\n return null;\n }\n const block = this.provider.getBlock(blockNumber);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n return this.provider.getTransaction(this.hash);\n }\n async wait(confirms) {\n return this.provider.waitForTransaction(this.hash, confirms);\n }\n isMined() {\n return (this.blockHash != null);\n }\n isLegacy() {\n return (this.type === 0);\n }\n isBerlin() {\n return (this.type === 1);\n }\n isLondon() {\n return (this.type === 2);\n }\n removedEvent() {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\nfunction createOrphanedBlockFilter(block) {\n return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\nfunction createReorderedTransactionFilter(tx, other) {\n return { orphan: \"reorder-transaction\", tx, other };\n}\nfunction createRemovedTransactionFilter(tx) {\n return { orphan: \"drop-transaction\", tx };\n}\nfunction createRemovedLogFilter(log) {\n return { orphan: \"drop-log\", log: {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n address: log.address,\n data: log.data,\n topics: Object.freeze(log.topics.slice()),\n index: log.index\n } };\n}\nfunction fail() {\n throw new Error(\"this provider should not be used\");\n}\nclass DummyProvider {\n async getNetwork() { return fail(); }\n async getFeeData() { return fail(); }\n async estimateGas(tx) { return fail(); }\n async call(tx) { return fail(); }\n async resolveName(name) { return fail(); }\n // State\n async getBlockNumber() { return fail(); }\n // Account\n async getBalanceOf(address, blockTag) {\n return fail();\n }\n async getTransactionCountOf(address, blockTag) {\n return fail();\n }\n async getCode(address, blockTag) {\n return fail();\n }\n async getStorageAt(address, position, blockTag) {\n return fail();\n }\n // Write\n async broadcastTransaction(signedTx) { return fail(); }\n // Queries\n async getBlock(blockHashOrBlockTag) {\n return fail();\n }\n async getBlockWithTransactions(blockHashOrBlockTag) {\n return fail();\n }\n async getTransaction(hash) {\n return fail();\n }\n async getTransactionReceipt(hash) {\n return fail();\n }\n // Bloom-filter Queries\n async getLogs(filter) {\n return fail();\n }\n // ENS\n async lookupAddress(address) {\n return fail();\n }\n async waitForTransaction(hash, confirms, timeout) {\n return fail();\n }\n async waitForBlock(blockTag) {\n return fail();\n }\n // EventEmitterable\n async on(event, listener) { return fail(); }\n async once(event, listener) { return fail(); }\n async emit(event, ...args) { return fail(); }\n async listenerCount(event) { return fail(); }\n async listeners(event) { return fail(); }\n async off(event, listener) { return fail(); }\n async removeAllListeners(event) { return fail(); }\n async addListener(event, listener) { return fail(); }\n async removeListener(event, listener) { return fail(); }\n}\n// A singleton provider instance that can be used as a placeholder. This\n// allows API that have a Provider added later to not require a null check.\nexport const dummyProvider = new DummyProvider();\n//# sourceMappingURL=provider.js.map","// Belongs to Networks; requires abstract-provider\n// provider requires abstract-provider and network\nvar __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 _Formatter_format, _Formatter_baseBlock;\n/**\n * Formatter\n *\n * This is responsibile for converting much of the various\n * loose network values into a concrete ethers-ready value.\n *\n * For example, converting addresses to checksum addresses,\n * validating a hash is 32 bytes, and so on.\n *\n * By sub-classing this class and providing it in a custom\n * Network object this allows exotic (non-Ethereum) networks\n * to be fairly simple to adapt to ethers.\n */\nimport { getAddress, getCreateAddress } from \"@ethersproject/address\";\nimport { dataLength, dataSlice, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { Block, Log, TransactionReceipt, TransactionResponse } from \"./provider.js\";\nimport { logger } from \"./logger.js\";\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n//export type AccessListSet = { address: string, storageKeys: Array };\n//export type AccessList = Array;\n//export type AccessListish = AccessList |\n// Array<[ string, Array ]> |\n// Record>;\nfunction stringify(value) {\n if (typeof (value) !== \"string\") {\n throw new Error(\"invalid string\");\n }\n return value;\n}\nexport class Formatter {\n constructor() {\n _Formatter_format.set(this, void 0);\n _Formatter_baseBlock.set(this, void 0);\n const address = this.address.bind(this);\n const bigNumber = this.bigNumber.bind(this);\n const blockTag = this.blockTag.bind(this);\n const data = this.data.bind(this);\n const hash = this.hash.bind(this);\n const number = this.number.bind(this);\n const uint256 = this.uint256.bind(this);\n const topics = this.arrayOf(hash);\n __classPrivateFieldSet(this, _Formatter_format, {\n address,\n bigNumber,\n blockTag,\n data,\n hash,\n number,\n uint256,\n topics,\n filter: this.object({\n fromBlock: this.allowNull(blockTag, undefined),\n toBlock: this.allowNull(blockTag, undefined),\n blockHash: this.allowNull(hash, undefined),\n address: this.allowNull(address, undefined),\n topics: this.allowNull(topics, undefined)\n }),\n transactionRequest: this.object({\n from: this.allowNull(address),\n type: this.allowNull(number),\n to: this.allowNull(address),\n nonce: this.allowNull(number),\n gasLimit: this.allowNull(uint256),\n gasPrice: this.allowNull(uint256),\n maxFeePerGas: this.allowNull(uint256),\n maxPriorityFeePerGas: this.allowNull(uint256),\n data: this.allowNull(data),\n value: this.allowNull(uint256),\n }),\n transactionResponse: this.object({\n hash: hash,\n index: number,\n type: this.allowNull(number, 0),\n // These can be null for pending blocks\n blockHash: this.allowNull(hash),\n blockNumber: this.allowNull(number),\n // For Legacy transactions, this comes from the v\n chainId: this.allowNull(number),\n from: address,\n to: this.address,\n gasLimit: bigNumber,\n gasPrice: this.allowNull(bigNumber),\n maxFeePerGas: this.allowNull(bigNumber),\n maxPriorityFeePerGas: this.allowNull(bigNumber),\n value: bigNumber,\n data: data,\n nonce: number,\n r: hash,\n s: hash,\n v: number,\n accessList: this.allowNull(this.accessList)\n }, {\n index: [\"transactionIndex\"]\n }),\n }, \"f\");\n __classPrivateFieldSet(this, _Formatter_baseBlock, this.object({\n number: number,\n hash: this.allowNull(hash, null),\n timestamp: number,\n parentHash: hash,\n nonce: this.allowNull(stringify, \"0x0000000000000000\"),\n difficulty: bigNumber,\n gasLimit: bigNumber,\n gasUsed: bigNumber,\n miner: this.allowNull(address, \"0x0000000000000000000000000000000000000000\"),\n extraData: stringify,\n baseFeePerGas: this.allowNull(bigNumber),\n }), \"f\");\n }\n // An address\n address(value) {\n return getAddress(value);\n }\n // An address from a call result; may be zero-padded\n callAddress(value) {\n if (dataLength(value) !== 32 || dataSlice(value, 0, 12) !== \"0x000000000000000000000000\") {\n logger.throwArgumentError(\"invalid call address\", \"value\", value);\n }\n return this.address(dataSlice(value, 12));\n }\n // An address from a transaction (e.g. { from: string, nonce: number })\n contractAddress(value) {\n return getCreateAddress({\n from: this.address(value.from),\n nonce: logger.getNumber(value.nonce, \"value.nonce\")\n });\n }\n // Block Tag\n blockTag(value) {\n if (value == null) {\n return \"latest\";\n }\n switch (value) {\n case \"earliest\":\n return \"0x0\";\n case \"latest\":\n case \"pending\":\n return value;\n }\n if (typeof (value) === \"number\" || (isHexString(value) && dataLength(value) < 32)) {\n return quantity(value);\n }\n return logger.throwArgumentError(\"invalid blockTag\", \"value\", value);\n }\n // Block objects\n block(value, provider) {\n const params = __classPrivateFieldGet(this, _Formatter_baseBlock, \"f\").call(this, value);\n params.transactions = value.transactions.map((t) => this.hash(t));\n return new Block(params, provider);\n }\n blockWithTransactions(value, provider) {\n throw new Error();\n }\n // Transactions\n transactionRequest(value, provider) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionRequest(value);\n }\n transactionResponse(value, provider) {\n value = Object.assign({}, value);\n // @TODO: Use the remap feature\n if (value.data == null && value.input != null) {\n value.data = value.input;\n }\n if (value.gasLimit == null && value.gas) {\n value.gasLimit = value.gas;\n }\n value = __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionResponse(value);\n const sig = Signature.fromTransaction(value.r, value.s, value.v);\n value.signature = sig;\n if (value.chainId == null) {\n value.chainId = sig.legacyChainId;\n }\n return new TransactionResponse(value, provider);\n }\n // Receipts\n log(value, provider) {\n const log = this.object({\n address: this.address,\n blockHash: this.hash,\n blockNumber: this.number,\n data: this.data,\n index: this.number,\n removed: this.boolean,\n topics: this.topics,\n transactionHash: this.hash,\n transactionIndex: this.number,\n }, {\n index: [\"logIndex\"]\n })(value);\n return new Log(log, provider);\n }\n receipt(value, provider) {\n const receipt = this.object({\n blockHash: this.hash,\n blockNumber: this.number,\n contractAddress: this.allowNull(this.address),\n cumulativeGasUsed: this.bigNumber,\n from: this.address,\n gasUsed: this.bigNumber,\n logs: this.arrayOf((v) => (this.log(v, provider))),\n logsBloom: this.data,\n root: this.allowNull(this.data),\n status: this.allowNull(this.number),\n to: this.address,\n gasPrice: this.allowNull(this.bigNumber),\n hash: this.hash,\n index: this.number,\n type: this.allowNull(this.number, 0),\n }, {\n hash: [\"transactionHash\"],\n gasPrice: [\"effectiveGasPrice\"],\n index: [\"transactionIndex\"]\n })(value);\n // RSK incorrectly implemented EIP-658, so we munge things a bit here for it\n if (receipt.root != null) {\n if (receipt.root.length <= 4) {\n // Could be 0x00, 0x0, 0x01 or 0x1\n const value = parseInt(receipt.root);\n if (value === 0 || value === 1) {\n // Make sure if both are specified, they match\n if (receipt.status != null && receipt.status !== value) {\n return logger.throwError(\"alt-root-status/status mismatch\", \"BAD_DATA\", {\n value: { root: receipt.root, status: receipt.status }\n });\n }\n receipt.status = value;\n delete receipt.root;\n }\n else {\n return logger.throwError(\"invalid alt-root-status\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n else if (!isHexString(receipt.root, 32)) {\n // Must be a valid bytes32\n return logger.throwError(\"invalid receipt root hash\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n //receipt.byzantium = (receipt.root == null);\n return new TransactionReceipt(receipt, provider);\n }\n // Fitlers\n topics(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").topics(value);\n }\n filter(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").filter(value);\n }\n filterLog(value) {\n console.log(\"ME\", value);\n return null;\n }\n // Converts a serialized transaction to a TransactionResponse\n transaction(value) {\n throw new Error();\n }\n // Useful utility formatters functions, which if need be use the\n // methods within the formatter to ensure internal compatibility\n // Access List; converts an AccessListish to an AccessList\n accessList(value) {\n return accessListify(value);\n }\n // Converts falsish values to a specific value, otherwise use the formatter. Calls preserve `this`.\n allowFalsish(format, ifFalse) {\n return ((value) => {\n if (!value) {\n return ifFalse;\n }\n return format.call(this, value);\n });\n }\n // Allows null, optionally replacing it with a default value. Calls preserve `this`.\n allowNull(format, ifNull) {\n return ((value) => {\n if (value == null) {\n return ifNull;\n }\n return format.call(this, value);\n });\n }\n // Requires an Array satisfying the formatter. Calls preserves `this`.\n arrayOf(format) {\n return ((array) => {\n if (!Array.isArray(array)) {\n throw new Error(\"not an array\");\n }\n return array.map((i) => format.call(this, i));\n });\n }\n // Requires a value which is a value BigNumber\n bigNumber(value) {\n return logger.getBigInt(value, \"value\");\n }\n uint256(value) {\n const result = this.bigNumber(value);\n if (result < 0 || result > BN_MAX_UINT256) {\n logger.throwArgumentError(\"invalid uint256\", \"value\", value);\n }\n return result;\n }\n // Requires a value which is a value boolean or string equivalent\n boolean(value) {\n switch (value) {\n case true:\n case \"true\":\n return true;\n case false:\n case \"false\":\n return false;\n }\n return logger.throwArgumentError(`invalid boolean; ${JSON.stringify(value)}`, \"value\", value);\n }\n // Requires a value which is a valid hexstring. If dataOrLength is true,\n // the length must be even (i.e. a datahexstring) or if it is a number,\n // specifies teh number of bytes value must represent\n _hexstring(dataOrLength) {\n if (dataOrLength == null) {\n dataOrLength = false;\n }\n return (function (value) {\n if (isHexString(value, dataOrLength)) {\n return value.toLowerCase();\n }\n throw new Error(\"bad hexstring\");\n });\n }\n data(value) {\n if (dataLength(value) == null) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return value;\n }\n // Requires a network-native hash\n hash(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").data(value);\n }\n // Requires a valid number, within the IEEE 754 safe range\n number(value) {\n return logger.getNumber(value);\n }\n // Requires an object which matches a fleet of other formatters\n // Any FormatFunc may return `undefined` to have the value omitted\n // from the result object. Calls preserve `this`.\n object(format, altNames) {\n return ((value) => {\n const result = {};\n for (const key in format) {\n let srcKey = key;\n if (altNames && key in altNames && !(srcKey in value)) {\n for (const altKey of altNames[key]) {\n if (altKey in value) {\n srcKey = altKey;\n break;\n }\n }\n }\n try {\n const nv = format[key].call(this, value[srcKey]);\n if (nv !== undefined) {\n result[key] = nv;\n }\n }\n catch (error) {\n const message = (error instanceof Error) ? error.message : \"not-an-error\";\n logger.throwError(`invalid value for value.${key} (${message})`, \"BAD_DATA\", { value });\n }\n }\n return result;\n });\n }\n // Requires a value which matches a network-native storage slot\n storageSlot(value) {\n return toHex(logger.getBigInt(value), 32);\n }\n}\n_Formatter_format = new WeakMap(), _Formatter_baseBlock = new WeakMap();\n//# sourceMappingURL=formatter.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nconst EnsAddress = \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\";\nexport class NetworkPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n clone() {\n return new NetworkPlugin(this.name);\n }\n validate(network) {\n return this;\n }\n}\nexport class GasCostPlugin extends NetworkPlugin {\n constructor(effectiveBlock = 0, costs) {\n super(`org.ethers.plugins.gas-cost#${(effectiveBlock || 0)}`);\n const props = { effectiveBlock };\n function set(name, nullish) {\n let value = (costs || {})[name];\n if (value == null) {\n value = nullish;\n }\n if (typeof (value) !== \"number\") {\n logger.throwArgumentError(`invalud value for ${name}`, \"costs\", costs);\n }\n props[name] = value;\n }\n set(\"txBase\", 21000);\n set(\"txCreate\", 32000);\n set(\"txDataZero\", 4);\n set(\"txDataNonzero\", 16);\n set(\"txAccessListStorageKey\", 1900);\n set(\"txAccessListAddress\", 2400);\n defineProperties(this, props);\n }\n clone() {\n return new GasCostPlugin(this.effectiveBlock, this);\n }\n}\n// Networks shoudl use this plugin to specify the contract address\n// and network necessary to resolve ENS names.\nexport class EnsPlugin extends NetworkPlugin {\n constructor(address, targetNetwork) {\n super(\"org.ethers.plugins.ens\");\n defineProperties(this, {\n address: (address || EnsAddress),\n targetNetwork: ((targetNetwork == null) ? 1 : targetNetwork)\n });\n }\n clone() {\n return new EnsPlugin(this.address, this.targetNetwork);\n }\n validate(network) {\n network.formatter.address(this.address);\n return this;\n }\n}\nexport class MaxPriorityFeePlugin extends NetworkPlugin {\n constructor(priorityFee) {\n super(\"org.ethers.plugins.max-priority-fee\");\n defineProperties(this, {\n priorityFee: logger.getBigInt(priorityFee)\n });\n }\n async getPriorityFee(provider) {\n return this.priorityFee;\n }\n clone() {\n return new MaxPriorityFeePlugin(this.priorityFee);\n }\n}\n//# sourceMappingURL=plugins-network.js.map","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 _Network_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { Formatter } from \"./formatter.js\";\nimport { logger } from \"./logger.js\";\nimport { EnsPlugin, GasCostPlugin } from \"./plugins-network.js\";\n/* * * *\n// Networks which operation against an L2 can use this plugin to\n// specify how to access L1, for the purpose of resolving ENS,\n// for example.\nexport class LayerOneConnectionPlugin extends NetworkPlugin {\n readonly provider!: Provider;\n// @TODO: Rename to ChainAccess and allow for connecting to any chain\n constructor(provider: Provider) {\n super(\"org.ethers.plugins.layer-one-connection\");\n defineProperties(this, { provider });\n }\n\n clone(): LayerOneConnectionPlugin {\n return new LayerOneConnectionPlugin(this.provider);\n }\n}\n*/\n/* * * *\nexport class PriceOraclePlugin extends NetworkPlugin {\n readonly address!: string;\n\n constructor(address: string) {\n super(\"org.ethers.plugins.price-oracle\");\n defineProperties(this, { address });\n }\n\n clone(): PriceOraclePlugin {\n return new PriceOraclePlugin(this.address);\n }\n}\n*/\n// Networks or clients with a higher need for security (such as clients\n// that may automatically make CCIP requests without user interaction)\n// can use this plugin to anonymize requests or intercept CCIP requests\n// to notify and/or receive authorization from the user\n/* * * *\nexport type FetchDataFunc = (req: Frozen) => Promise;\nexport class CcipPreflightPlugin extends NetworkPlugin {\n readonly fetchData!: FetchDataFunc;\n\n constructor(fetchData: FetchDataFunc) {\n super(\"org.ethers.plugins.ccip-preflight\");\n defineProperties(this, { fetchData });\n }\n\n clone(): CcipPreflightPlugin {\n return new CcipPreflightPlugin(this.fetchData);\n }\n}\n*/\nconst Networks = new Map();\nconst defaultFormatter = new Formatter();\nexport class Network {\n constructor(name, _chainId, formatter) {\n _Network_props.set(this, void 0);\n const chainId = logger.getBigInt(_chainId);\n if (formatter == null) {\n formatter = defaultFormatter;\n }\n const plugins = new Map();\n __classPrivateFieldSet(this, _Network_props, { name, chainId, formatter, plugins }, \"f\");\n }\n toJSON() {\n return { name: this.name, chainId: this.chainId };\n }\n get name() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\"); }\n set name(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\", value); }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\", logger.getBigInt(value, \"chainId\")); }\n get formatter() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\"); }\n set formatter(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\", value); }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _Network_props, \"f\").plugins.values());\n }\n attachPlugin(plugin) {\n if (this.isFrozen()) {\n throw new Error(\"frozen\");\n }\n if (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _Network_props, \"f\").plugins.set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(name)) || null;\n }\n // Gets a list of Plugins which match basename, ignoring any fragment\n getPlugins(basename) {\n return (this.plugins.filter((p) => (p.name.split(\"#\")[0] === basename)));\n }\n clone() {\n const clone = new Network(this.name, this.chainId, this.formatter);\n this.plugins.forEach((plugin) => {\n clone.attachPlugin(plugin.clone());\n });\n return clone;\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Network_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Network_props, \"f\"));\n }\n computeIntrinsicGas(tx) {\n const costs = this.getPlugin(\"org.ethers.gas-cost\") || (new GasCostPlugin());\n let gas = costs.txBase;\n if (tx.to == null) {\n gas += costs.txCreate;\n }\n if (tx.data) {\n for (let i = 2; i < tx.data.length; i += 2) {\n if (tx.data.substring(i, i + 2) === \"00\") {\n gas += costs.txDataZero;\n }\n else {\n gas += costs.txDataNonzero;\n }\n }\n }\n if (tx.accessList) {\n const accessList = this.formatter.accessList(tx.accessList);\n for (const addr in accessList) {\n gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length;\n }\n }\n return gas;\n }\n static from(network) {\n // Default network\n if (network == null) {\n return Network.from(\"homestead\");\n }\n // Canonical name or chain ID\n if (typeof (network) === \"number\") {\n network = BigInt(network);\n }\n if (typeof (network) === \"string\" || typeof (network) === \"bigint\") {\n const networkFunc = Networks.get(network);\n if (networkFunc) {\n return networkFunc();\n }\n if (typeof (network) === \"bigint\") {\n return new Network(\"unknown\", network);\n }\n logger.throwArgumentError(\"unknown network\", \"network\", network);\n }\n // Clonable with network-like abilities\n if (typeof (network.clone) === \"function\") {\n const clone = network.clone();\n //if (typeof(network.name) !== \"string\" || typeof(network.chainId) !== \"number\") {\n //}\n return clone;\n }\n // Networkish\n if (typeof (network) === \"object\") {\n if (typeof (network.name) !== \"string\" || typeof (network.chainId) !== \"number\") {\n logger.throwArgumentError(\"invalid network object name or chainId\", \"network\", network);\n }\n const custom = new Network((network.name), (network.chainId));\n if (network.ensAddress || network.ensNetwork != null) {\n custom.attachPlugin(new EnsPlugin(network.ensAddress, network.ensNetwork));\n }\n //if ((network).layerOneConnection) {\n // custom.attachPlugin(new LayerOneConnectionPlugin((network).layerOneConnection));\n //}\n return custom;\n }\n return logger.throwArgumentError(\"invalid network\", \"network\", network);\n }\n static register(nameOrChainId, networkFunc) {\n if (typeof (nameOrChainId) === \"number\") {\n nameOrChainId = BigInt(nameOrChainId);\n }\n const existing = Networks.get(nameOrChainId);\n if (existing) {\n logger.throwArgumentError(`conflicting network for ${JSON.stringify(existing.name)}`, \"nameOrChainId\", nameOrChainId);\n }\n Networks.set(nameOrChainId, networkFunc);\n }\n}\n_Network_props = new WeakMap();\n//# sourceMappingURL=network.js.map","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 _PollingBlockSubscriber_instances, _PollingBlockSubscriber_provider, _PollingBlockSubscriber_poller, _PollingBlockSubscriber_interval, _PollingBlockSubscriber_blockNumber, _PollingBlockSubscriber_poll, _OnBlockSubscriber_provider, _OnBlockSubscriber_poll, _PollingOrphanSubscriber_filter, _PollingTransactionSubscriber_hash, _PollingEventSubscriber_instances, _PollingEventSubscriber_provider, _PollingEventSubscriber_filter, _PollingEventSubscriber_poller, _PollingEventSubscriber_blockNumber, _PollingEventSubscriber_poll;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport function getPollingSubscriber(provider, event) {\n if (event === \"block\") {\n return new PollingBlockSubscriber(provider);\n }\n if (isHexString(event, 32)) {\n return new PollingTransactionSubscriber(provider, event);\n }\n return logger.throwError(\"unsupported polling event\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getPollingSubscriber\", info: { event }\n });\n}\n// @TODO: refactor this\nexport class PollingBlockSubscriber {\n constructor(provider) {\n _PollingBlockSubscriber_instances.add(this);\n _PollingBlockSubscriber_provider.set(this, void 0);\n _PollingBlockSubscriber_poller.set(this, void 0);\n _PollingBlockSubscriber_interval.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingBlockSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, 4000, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\"); }\n set pollingInterval(value) { __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, value, \"f\"); }\n start() {\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber already running\");\n }\n __classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).call(this);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n }\n stop() {\n if (!__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber not running\");\n }\n clearTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\"));\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingBlockSubscriber_provider = new WeakMap(), _PollingBlockSubscriber_poller = new WeakMap(), _PollingBlockSubscriber_interval = new WeakMap(), _PollingBlockSubscriber_blockNumber = new WeakMap(), _PollingBlockSubscriber_instances = new WeakSet(), _PollingBlockSubscriber_poll = async function _PollingBlockSubscriber_poll() {\n const blockNumber = await __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").getBlockNumber();\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n return;\n }\n // @TODO: Put a cap on the maximum number of events per loop?\n if (blockNumber !== __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\")) {\n for (let b = __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") + 1; b <= blockNumber; b++) {\n __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").emit(\"block\", b);\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n};\nexport class OnBlockSubscriber {\n constructor(provider) {\n _OnBlockSubscriber_provider.set(this, void 0);\n _OnBlockSubscriber_poll.set(this, void 0);\n __classPrivateFieldSet(this, _OnBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _OnBlockSubscriber_poll, (blockNumber) => {\n this._poll(blockNumber, __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\"));\n }, \"f\");\n }\n async _poll(blockNumber, provider) {\n throw new Error(\"sub-classes must override this\");\n }\n start() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\").call(this, -2);\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n pause(dropWhilePaused) { this.stop(); }\n resume() { this.start(); }\n}\n_OnBlockSubscriber_provider = new WeakMap(), _OnBlockSubscriber_poll = new WeakMap();\nexport class PollingOrphanSubscriber extends OnBlockSubscriber {\n constructor(provider, filter) {\n super(provider);\n _PollingOrphanSubscriber_filter.set(this, void 0);\n __classPrivateFieldSet(this, _PollingOrphanSubscriber_filter, copy(filter), \"f\");\n }\n async _poll(blockNumber, provider) {\n console.log(__classPrivateFieldGet(this, _PollingOrphanSubscriber_filter, \"f\"));\n throw new Error(\"@TODO\");\n }\n}\n_PollingOrphanSubscriber_filter = new WeakMap();\nexport class PollingTransactionSubscriber extends OnBlockSubscriber {\n constructor(provider, hash) {\n super(provider);\n _PollingTransactionSubscriber_hash.set(this, void 0);\n __classPrivateFieldSet(this, _PollingTransactionSubscriber_hash, hash, \"f\");\n }\n async _poll(blockNumber, provider) {\n const tx = await provider.getTransactionReceipt(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"));\n if (tx) {\n provider.emit(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"), tx);\n }\n }\n}\n_PollingTransactionSubscriber_hash = new WeakMap();\nexport class PollingEventSubscriber {\n constructor(provider, filter) {\n _PollingEventSubscriber_instances.add(this);\n _PollingEventSubscriber_provider.set(this, void 0);\n _PollingEventSubscriber_filter.set(this, void 0);\n _PollingEventSubscriber_poller.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingEventSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingEventSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_filter, copy(filter), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_poller, __classPrivateFieldGet(this, _PollingEventSubscriber_instances, \"m\", _PollingEventSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n start() {\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getBlockNumber().then((blockNumber) => {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n });\n }\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingEventSubscriber_provider = new WeakMap(), _PollingEventSubscriber_filter = new WeakMap(), _PollingEventSubscriber_poller = new WeakMap(), _PollingEventSubscriber_blockNumber = new WeakMap(), _PollingEventSubscriber_instances = new WeakSet(), _PollingEventSubscriber_poll = async function _PollingEventSubscriber_poll(blockNumber) {\n // The initial block hasn't been determined yet\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n return;\n }\n const filter = copy(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"));\n filter.fromBlock = __classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") + 1;\n filter.toBlock = blockNumber;\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n const logs = await __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getLogs(filter);\n for (const log of logs) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").emit(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"), log);\n }\n};\n//# sourceMappingURL=subscriber-polling.js.map","// @TODO\n// Event coalescence\n// When we register an event with an async value (e.g. address is a Signer\n// or ENS name), we need to add it immeidately for the Event API, but also\n// need time to resolve the address. Upon resolving the address, we need to\n// migrate the listener to the static event. We also need to maintain a map\n// of Signer/ENS name to address so we can sync respond to listenerCount.\nvar __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 _AbstractProvider_instances, _AbstractProvider_subs, _AbstractProvider_plugins, _AbstractProvider_pausedState, _AbstractProvider_networkPromise, _AbstractProvider_anyNetwork, _AbstractProvider_performCache, _AbstractProvider_nextTimer, _AbstractProvider_timers, _AbstractProvider_disableCcipRead, _AbstractProvider_perform, _AbstractProvider_call, _AbstractProvider_getBlock, _AbstractProvider_hasSub, _AbstractProvider_getSub;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { toArray } from \"@ethersproject/math\";\nimport { defineProperties, EventPayload, resolveProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { EnsResolver } from \"./ens-resolver.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { FeeData } from \"./provider.js\";\nimport { PollingBlockSubscriber, PollingEventSubscriber, PollingOrphanSubscriber, PollingTransactionSubscriber } from \"./subscriber-polling.js\";\n// Constants\nconst BN_2 = BigInt(2);\nconst MAX_CCIP_REDIRECTS = 10;\nfunction getTag(prefix, value) {\n return prefix + \":\" + JSON.stringify(value, (k, v) => {\n if (typeof (v) === \"bigint\") {\n return `bigint:${v.toString()}`;\n }\n if (typeof (v) === \"string\") {\n return v.toLowerCase();\n }\n // Sort object keys\n if (typeof (v) === \"object\" && !Array.isArray(v)) {\n const keys = Object.keys(v);\n keys.sort();\n return keys.reduce((accum, key) => {\n accum[key] = v[key];\n return accum;\n }, {});\n }\n return v;\n });\n}\nexport class UnmanagedSubscriber {\n constructor(name) { defineProperties(this, { name }); }\n start() { }\n stop() { }\n pause(dropWhilePaused) { }\n resume() { }\n}\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\n// Normalize a ProviderEvent into a Subscription\n// @TODO: Make events sync if possible; like block\n//function getSyncSubscription(_event: ProviderEvent): Subscription {\n//}\nasync function getSubscription(_event, provider) {\n if (_event == null) {\n throw new Error(\"invalid event\");\n }\n // Normalize topic array info an EventFilter\n if (Array.isArray(_event)) {\n _event = { topics: _event };\n }\n if (typeof (_event) === \"string\") {\n switch (_event) {\n case \"block\":\n case \"pending\":\n case \"debug\":\n case \"network\": {\n return { type: _event, tag: _event };\n }\n }\n }\n if (isHexString(_event, 32)) {\n const hash = _event.toLowerCase();\n return { type: \"transaction\", tag: getTag(\"tx\", { hash }), hash };\n }\n if (_event.orphan) {\n const event = _event;\n // @TODO: Should lowercase and whatnot things here instead of copy...\n return { type: \"orphan\", tag: getTag(\"orphan\", event), filter: copy(event) };\n }\n if ((_event.address || _event.topics)) {\n const event = _event;\n const filter = {\n topics: ((event.topics || []).map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n }))\n };\n if (event.address) {\n const addresses = [];\n const promises = [];\n const addAddress = (addr) => {\n if (isHexString(addr)) {\n addresses.push(addr);\n }\n else {\n promises.push((async () => {\n addresses.push(await resolveAddress(addr, provider));\n })());\n }\n };\n if (Array.isArray(event.address)) {\n event.address.forEach(addAddress);\n }\n else {\n addAddress(event.address);\n }\n if (promises.length) {\n await Promise.all(promises);\n }\n filter.address = concisify(addresses.map((a) => a.toLowerCase()));\n }\n return { filter, tag: getTag(\"event\", filter), type: \"event\" };\n }\n return logger.throwArgumentError(\"unknown ProviderEvent\", \"event\", _event);\n}\nfunction getTime() { return (new Date()).getTime(); }\nexport function copyRequest(tx) {\n // @TODO: copy the copy from contracts and use it from this\n return tx;\n}\nexport class AbstractProvider {\n // @TODO: This should be a () => Promise so network can be\n // done when needed; or rely entirely on _detectNetwork?\n constructor(_network) {\n _AbstractProvider_instances.add(this);\n _AbstractProvider_subs.set(this, void 0);\n _AbstractProvider_plugins.set(this, void 0);\n // null=unpaused, true=paused+dropWhilePaused, false=paused\n _AbstractProvider_pausedState.set(this, void 0);\n _AbstractProvider_networkPromise.set(this, void 0);\n _AbstractProvider_anyNetwork.set(this, void 0);\n _AbstractProvider_performCache.set(this, void 0);\n _AbstractProvider_nextTimer.set(this, void 0);\n _AbstractProvider_timers.set(this, void 0);\n _AbstractProvider_disableCcipRead.set(this, void 0);\n if (_network === \"any\") {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, true, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n else if (_network) {\n const network = Network.from(_network);\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(network), \"f\");\n setTimeout(() => { this.emit(\"network\", network, null); }, 0);\n }\n else {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n //this.#approxNumber = -2;\n //this.#approxNumberT0 = 0;\n __classPrivateFieldSet(this, _AbstractProvider_performCache, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_plugins, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_nextTimer, 0, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_timers, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, false, \"f\");\n }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").values());\n }\n attachPlugin(plugin) {\n if (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(name)) || null;\n }\n set disableCcipRead(value) { __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, !!value, \"f\"); }\n get disableCcipRead() { return __classPrivateFieldGet(this, _AbstractProvider_disableCcipRead, \"f\"); }\n async ccipReadFetch(tx, calldata, urls) {\n if (this.disableCcipRead || urls.length === 0 || tx.to == null) {\n return null;\n }\n const sender = tx.to.toLowerCase();\n const data = calldata.toLowerCase();\n const errorMessages = [];\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n // URL expansion\n const href = url.replace(\"{sender}\", sender).replace(\"{data}\", data);\n // If no {data} is present, use POST; otherwise GET\n //const json: string | null = (url.indexOf(\"{data}\") >= 0) ? null: JSON.stringify({ data, sender });\n //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => {\n // value.status = response.statusCode;\n // return value;\n //});\n const request = new FetchRequest(href);\n if (url.indexOf(\"{data}\") === -1) {\n request.body = { data, sender };\n }\n let errorMessage = \"unknown error\";\n const resp = await fetchData(request);\n try {\n const result = resp.bodyJson;\n if (result.data) {\n return result.data;\n }\n if (result.message) {\n errorMessage = result.message;\n }\n }\n catch (error) { }\n // 4xx indicates the result is not present; stop\n if (resp.statusCode >= 400 && resp.statusCode < 500) {\n return logger.throwError(`response not found during CCIP fetch: ${errorMessage}`, \"OFFCHAIN_FAULT\", {\n reason: \"404_MISSING_RESOURCE\",\n transaction: tx, info: { url, errorMessage }\n });\n }\n // 5xx indicates server issue; try the next url\n errorMessages.push(errorMessage);\n }\n return logger.throwError(`error encountered during CCIP fetch: ${errorMessages.map((m) => JSON.stringify(m)).join(\", \")}`, \"OFFCHAIN_FAULT\", {\n reason: \"500_SERVER_ERROR\",\n transaction: tx, info: { urls, errorMessages }\n });\n }\n _wrapTransaction(tx, hash, blockNumber) {\n return tx;\n }\n _detectNetwork() {\n return logger.throwError(\"sub-classes must implement this\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_detectNetwork\"\n });\n }\n async _perform(req) {\n return logger.throwError(`unsupported method: ${req.method}`, \"UNSUPPORTED_OPERATION\", {\n operation: req.method,\n info: req\n });\n }\n // State\n async getBlockNumber() {\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getBlockNumber\" }), \"%response\");\n }\n async _getAddress(address) {\n if (typeof (address) === \"string\") {\n return address;\n }\n return await address.getAddress();\n }\n async _getBlockTag(blockTag) {\n const network = await this.getNetwork();\n if (typeof (blockTag) === \"number\" && Number.isSafeInteger(blockTag) && blockTag < 0) {\n //let blockNumber = await this._getApproxBlockNumber(500);\n let blockNumber = await this.getBlockNumber();\n blockNumber += blockTag;\n if (blockNumber < 0) {\n blockNumber = 0;\n }\n return network.formatter.blockTag(blockNumber);\n }\n return network.formatter.blockTag(blockTag);\n }\n async getNetwork() {\n // No explicit network was set and this is our first time\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") == null) {\n // Detect the current network (shared with all calls)\n const detectNetwork = this._detectNetwork().then((network) => {\n this.emit(\"network\", network, null);\n return network;\n }, (error) => {\n // Reset the networkPromise on failure, so we will try again\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === detectNetwork) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n throw error;\n });\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, detectNetwork, \"f\");\n return await detectNetwork;\n }\n const networkPromise = __classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\");\n const [expected, actual] = await Promise.all([\n networkPromise,\n this._detectNetwork() // The actual connected network\n ]);\n if (expected.chainId !== actual.chainId) {\n if (__classPrivateFieldGet(this, _AbstractProvider_anyNetwork, \"f\")) {\n // The \"any\" network can change, so notify listeners\n this.emit(\"network\", actual, expected);\n // Update the network if something else hasn't already changed it\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === networkPromise) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(actual), \"f\");\n }\n }\n else {\n // Otherwise, we do not allow changes to the underlying network\n logger.throwError(`network changed: ${expected.chainId} => ${actual.chainId} `, \"NETWORK_ERROR\", {\n event: \"changed\"\n });\n }\n }\n return expected.clone().freeze();\n }\n async getFeeData() {\n const { block, gasPrice } = await resolveProperties({\n block: this.getBlock(\"latest\"),\n gasPrice: ((async () => {\n try {\n const gasPrice = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getGasPrice\" });\n return logger.getBigInt(gasPrice, \"%response\");\n }\n catch (error) { }\n return null;\n })())\n });\n let maxFeePerGas = null, maxPriorityFeePerGas = null;\n if (block && block.baseFeePerGas) {\n // We may want to compute this more accurately in the future,\n // using the formula \"check if the base fee is correct\".\n // See: https://eips.ethereum.org/EIPS/eip-1559\n maxPriorityFeePerGas = BigInt(\"1500000000\");\n // Allow a network to override their maximum priority fee per gas\n const priorityFeePlugin = (await this.getNetwork()).getPlugin(\"org.ethers.plugins.max-priority-fee\");\n if (priorityFeePlugin) {\n maxPriorityFeePerGas = await priorityFeePlugin.getPriorityFee(this);\n }\n maxFeePerGas = (block.baseFeePerGas * BN_2) + maxPriorityFeePerGas;\n }\n return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas);\n }\n async _getTransaction(_request) {\n const network = await this.getNetwork();\n // Fill in any addresses\n const request = Object.assign({}, _request, await resolveProperties({\n to: (_request.to ? resolveAddress(_request.to, this) : undefined),\n from: (_request.from ? resolveAddress(_request.from, this) : undefined),\n }));\n return network.formatter.transactionRequest(request);\n }\n async estimateGas(_tx) {\n const transaction = await this._getTransaction(_tx);\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"estimateGas\", transaction\n }), \"%response\");\n }\n async call(_tx) {\n const { tx, blockTag } = await resolveProperties({\n tx: this._getTransaction(_tx),\n blockTag: this._getBlockTag(_tx.blockTag)\n });\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, tx, blockTag, _tx.enableCcipRead ? 0 : -1);\n }\n // Account\n async getBalanceOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBalance\", address, blockTag\n }), \"%response\");\n }\n async getTransactionCountOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getTransactionCount\", address, blockTag\n }), \"%response\");\n }\n async getCode(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getCode\", address, blockTag\n }));\n }\n async getStorageAt(_address, _position, _blockTag) {\n const position = logger.getBigInt(_position);\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getStorageAt\", address, position, blockTag\n }));\n }\n // Write\n async broadcastTransaction(signedTx) {\n throw new Error();\n return {};\n }\n // Queries\n async getBlock(block) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, false);\n if (params == null) {\n return null;\n }\n return format.block(params, this);\n }\n async getBlockWithTransactions(block) {\n const format = (await this.getNetwork()).formatter;\n const params = __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, true);\n if (params == null) {\n return null;\n }\n return format.blockWithTransactions(params, this);\n }\n async getTransaction(hash) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n return format.transactionResponse(params, this);\n }\n async getTransactionReceipt(hash) {\n const format = (await this.getNetwork()).formatter;\n const receipt = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransactionReceipt\", hash });\n if (receipt == null) {\n return null;\n }\n // Some backends did not backfill the effectiveGasPrice into old transactions\n // in the receipt, so we look it up manually and inject it.\n if (receipt.gasPrice == null && receipt.effectiveGasPrice == null) {\n const tx = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n receipt.effectiveGasPrice = tx.gasPrice;\n }\n return format.receipt(receipt, this);\n }\n async _getFilter(filter) {\n const lookup = {};\n if (filter.address) {\n if (Array.isArray(filter.address)) {\n lookup.address = Promise.all(filter.address.map((a) => resolveAddress(a, this)));\n }\n else {\n lookup.address = resolveAddress(filter.address, this);\n }\n }\n const addBlockTag = (key) => {\n if (filter[key] == null) {\n return;\n }\n lookup[key] = this._getBlockTag(filter[key]);\n };\n addBlockTag(\"fromBlock\");\n addBlockTag(\"toBlock\");\n const result = await resolveProperties(lookup);\n if (Array.isArray(result.address)) {\n result.address.sort();\n }\n if (filter.blockHash) {\n if (filter.fromBlock || filter.toBlock) {\n throw new Error(\"invalid filter\");\n }\n result.blockHash = filter.blockHash;\n }\n return result;\n }\n // Bloom-filter Queries\n async getLogs(_filter) {\n const { network, filter } = await resolveProperties({\n network: this.getNetwork(),\n filter: this._getFilter(_filter)\n });\n return (await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getLogs\", filter })).map((l) => {\n return network.formatter.log(l, this);\n });\n }\n // ENS\n _getProvider(chainId) {\n return logger.throwError(\"provider cannot connect to target network\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_getProvider()\"\n });\n }\n async getResolver(name) {\n return await EnsResolver.fromName(this, name);\n }\n async getAvatar(name) {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAvatar();\n }\n return null;\n }\n async resolveName(name) {\n if (typeof (name) === \"string\") {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAddress();\n }\n }\n else {\n const address = await name.getAddress();\n if (address == null) {\n return logger.throwArgumentError(\"Addressable returned no address\", \"name\", name);\n }\n return address;\n }\n return null;\n }\n async lookupAddress(address) {\n throw new Error();\n //return \"TODO\";\n }\n async waitForTransaction(hash, confirms = 1, timeout) {\n if (confirms === 0) {\n return this.getTransactionReceipt(hash);\n }\n return new Promise(async (resolve, reject) => {\n let timer = null;\n const listener = (async (blockNumber) => {\n try {\n const receipt = await this.getTransactionReceipt(hash);\n if (receipt != null) {\n if (blockNumber - receipt.blockNumber + 1 >= confirms) {\n resolve(receipt);\n this.off(\"block\", listener);\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n return;\n }\n }\n }\n catch (error) {\n console.log(\"EEE\", error);\n }\n this.once(\"block\", listener);\n });\n if (timeout != null) {\n timer = setTimeout(() => {\n if (timer == null) {\n return;\n }\n timer = null;\n this.off(\"block\", listener);\n reject(logger.makeError(\"timeout\", \"TIMEOUT\", {}));\n }, timeout);\n }\n listener(await this.getBlockNumber());\n });\n }\n async waitForBlock(blockTag) {\n throw new Error();\n //return new Block({ }, this);\n }\n _clearTimeout(timerId) {\n const timer = __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").get(timerId);\n if (!timer) {\n return;\n }\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n }\n _setTimeout(_func, timeout = 0) {\n var _a, _b;\n const timerId = (__classPrivateFieldSet(this, _AbstractProvider_nextTimer, (_b = __classPrivateFieldGet(this, _AbstractProvider_nextTimer, \"f\"), _a = _b++, _b), \"f\"), _a);\n const func = () => {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n _func();\n };\n if (this.paused) {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer: null, func, time: timeout });\n }\n else {\n const timer = setTimeout(func, timeout);\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer, func, time: getTime() });\n }\n return timerId;\n }\n _forEachSubscriber(func) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n func(sub.subscriber);\n }\n }\n // Event API; sub-classes should override this; any supported\n // event filter will have been munged into an EventFilter\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"debug\":\n case \"network\":\n return new UnmanagedSubscriber(sub.type);\n case \"block\":\n return new PollingBlockSubscriber(this);\n case \"event\":\n return new PollingEventSubscriber(this, sub.filter);\n case \"transaction\":\n return new PollingTransactionSubscriber(this, sub.hash);\n case \"orphan\":\n return new PollingOrphanSubscriber(this, sub.filter);\n }\n throw new Error(`unsupported event: ${sub.type}`);\n }\n _recoverSubscriber(oldSub, newSub) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n if (sub.subscriber === oldSub) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n sub.subscriber = newSub;\n if (sub.started) {\n newSub.start();\n }\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n newSub.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n break;\n }\n }\n }\n async on(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: false });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async once(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: true });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async emit(event, ...args) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event, args);\n if (!sub) {\n return false;\n }\n ;\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const payload = new EventPayload(this, (once ? null : listener), event);\n setTimeout(() => { listener.call(this, ...args, payload); }, 0);\n return !once;\n });\n return (count > 0);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n let total = 0;\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n let result = [];\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (!listener || sub.listeners.length === 0) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const { tag, started, subscriber } = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n else {\n for (const [tag, { started, subscriber }] of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\")) {\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return this.off(event, listener);\n }\n // Sub-classes should override this to shutdown any sockets, etc.\n // but MUST call this super.shutdown.\n async shutdown() {\n // Stop all listeners\n this.removeAllListeners();\n // Shut down all tiemrs\n for (const timerId of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").keys()) {\n this._clearTimeout(timerId);\n }\n }\n get paused() { return (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null); }\n pause(dropWhilePaused) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == !!dropWhilePaused) {\n return;\n }\n return logger.throwError(\"cannot change pause type; resume first\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause\"\n });\n }\n this._forEachSubscriber((s) => s.pause(dropWhilePaused));\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, !!dropWhilePaused, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Clear the timer\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n // Remaining time needed for when we become unpaused\n timer.time = getTime() - timer.time;\n }\n }\n resume() {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == null) {\n return;\n }\n this._forEachSubscriber((s) => s.resume());\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Remaining time when we were paused\n let timeout = timer.time;\n if (timeout < 0) {\n timeout = 0;\n }\n // Start time (in cause paused, so we con compute remaininf time)\n timer.time = getTime();\n // Start the timer\n setTimeout(timer.func, timeout);\n }\n }\n}\n_AbstractProvider_subs = new WeakMap(), _AbstractProvider_plugins = new WeakMap(), _AbstractProvider_pausedState = new WeakMap(), _AbstractProvider_networkPromise = new WeakMap(), _AbstractProvider_anyNetwork = new WeakMap(), _AbstractProvider_performCache = new WeakMap(), _AbstractProvider_nextTimer = new WeakMap(), _AbstractProvider_timers = new WeakMap(), _AbstractProvider_disableCcipRead = new WeakMap(), _AbstractProvider_instances = new WeakSet(), _AbstractProvider_perform = \n// Shares multiple identical requests made during the same 250ms\nasync function _AbstractProvider_perform(req) {\n // Create a tag\n const tag = getTag(req.method, req);\n let perform = __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag);\n if (!perform) {\n perform = this._perform(req);\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").set(tag, perform);\n setTimeout(() => {\n if (__classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag) === perform) {\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").delete(tag);\n }\n }, 250);\n }\n return await perform;\n}, _AbstractProvider_call = async function _AbstractProvider_call(tx, blockTag, attempt) {\n if (attempt >= MAX_CCIP_REDIRECTS) {\n logger.throwError(\"CCIP read exceeded maximum redirections\", \"OFFCHAIN_FAULT\", {\n reason: \"TOO_MANY_REDIRECTS\",\n transaction: Object.assign({}, tx, { blockTag, enableCcipRead: true })\n });\n }\n const transaction = copyRequest(tx);\n try {\n return hexlify(await this._perform({ method: \"call\", transaction, blockTag }));\n }\n catch (error) {\n // CCIP Read OffchainLookup\n if (!this.disableCcipRead && isCallException(error) && attempt >= 0 && blockTag === \"latest\" && transaction.to != null && dataSlice(error.data, 0, 4) === \"0x556f1830\") {\n const data = error.data;\n const txSender = await resolveAddress(transaction.to, this);\n // Parse the CCIP Read Arguments\n let ccipArgs;\n try {\n ccipArgs = parseOffchainLookup(dataSlice(error.data, 4));\n }\n catch (error) {\n return logger.throwError(error.message, \"OFFCHAIN_FAULT\", {\n reason: \"BAD_DATA\",\n transaction, info: { data }\n });\n }\n // Check the sender of the OffchainLookup matches the transaction\n if (ccipArgs.sender.toLowerCase() !== txSender.toLowerCase()) {\n return logger.throwError(\"CCIP Read sender mismatch\", \"CALL_EXCEPTION\", {\n data, transaction,\n errorSignature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n errorName: \"OffchainLookup\",\n errorArgs: ccipArgs.errorArgs\n });\n }\n const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls);\n if (ccipResult == null) {\n return logger.throwError(\"CCIP Read failed to fetch data\", \"OFFCHAIN_FAULT\", {\n reason: \"FETCH_FAILED\",\n transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs }\n });\n }\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, {\n to: txSender,\n data: concat([\n ccipArgs.selector, encodeBytes([ccipResult, ccipArgs.extraData])\n ]),\n }, blockTag, attempt + 1);\n }\n throw error;\n }\n}, _AbstractProvider_getBlock = async function _AbstractProvider_getBlock(block, includeTransactions) {\n const format = (await this.getNetwork()).formatter;\n if (isHexString(block, 32)) {\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockHash: block, includeTransactions\n });\n }\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockTag: format.blockTag(block), includeTransactions\n });\n}, _AbstractProvider_hasSub = async function _AbstractProvider_hasSub(event, emitArgs) {\n let sub = await getSubscription(event, this);\n // This is a log that is removing an existing log; we actually want\n // to emit an orphan event for the removed log\n if (sub.type === \"event\" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) {\n sub = await getSubscription({ orphan: \"drop-log\", log: emitArgs[0] }, this);\n }\n return __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(sub.tag) || null;\n}, _AbstractProvider_getSub = async function _AbstractProvider_getSub(event) {\n const subscription = await getSubscription(event, this);\n // Prevent tampering with our tag in any subclass' _getSubscriber\n const tag = subscription.tag;\n let sub = __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(tag);\n if (!sub) {\n const subscriber = this._getSubscriber(subscription);\n const addressableMap = new WeakMap();\n const nameMap = new Map();\n sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [] };\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").set(tag, sub);\n }\n return sub;\n};\nfunction _parseString(result, start) {\n try {\n const bytes = _parseBytes(result, start);\n if (bytes) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction _parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n try {\n const offset = logger.getNumber(dataSlice(result, start, start + 32));\n const length = logger.getNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\nconst empty = new Uint8Array([]);\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\nconst zeros = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseOffchainLookup(data) {\n const result = {\n sender: \"\", urls: [], calldata: \"\", selector: \"\", extraData: \"\", errorArgs: []\n };\n if (dataLength(data) < 5 * 32) {\n throw new Error(\"insufficient OffchainLookup data\");\n }\n const sender = dataSlice(data, 0, 32);\n if (dataSlice(sender, 0, 12) !== dataSlice(zeros, 0, 12)) {\n throw new Error(\"corrupt OffchainLookup sender\");\n }\n result.sender = dataSlice(sender, 12);\n // Read the URLs from the response\n try {\n const urls = [];\n const urlsOffset = logger.getNumber(dataSlice(data, 32, 64));\n const urlsLength = logger.getNumber(dataSlice(data, urlsOffset, urlsOffset + 32));\n const urlsData = dataSlice(data, urlsOffset + 32);\n for (let u = 0; u < urlsLength; u++) {\n const url = _parseString(urlsData, u * 32);\n if (url == null) {\n throw new Error(\"abort\");\n }\n urls.push(url);\n }\n result.urls = urls;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup urls\");\n }\n // Get the CCIP calldata to forward\n try {\n const calldata = _parseBytes(data, 64);\n if (calldata == null) {\n throw new Error(\"abort\");\n }\n result.calldata = calldata;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup calldata\");\n }\n // Get the callbackSelector (bytes4)\n if (dataSlice(data, 100, 128) !== dataSlice(zeros, 0, 28)) {\n throw new Error(\"corrupt OffchainLookup callbaackSelector\");\n }\n result.selector = dataSlice(data, 96, 100);\n // Get the extra data to send back to the contract as context\n try {\n const extraData = _parseBytes(data, 128);\n if (extraData == null) {\n throw new Error(\"abort\");\n }\n result.extraData = extraData;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup extraData\");\n }\n result.errorArgs = \"sender,urls,calldata,selector,extraData\".split(/,/).map((k) => result[k]);\n return result;\n}\n//# sourceMappingURL=abstract-provider.js.map","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 __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 _AbstractSigner_instances, _AbstractSigner_checkProvider, _AbstractSigner_fromify, _VoidSigner_instances, _VoidSigner_throwUnsupported, _WrappedSigner_signer;\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\nexport class AbstractSigner {\n constructor(provider) {\n _AbstractSigner_instances.add(this);\n defineProperties(this, { provider: (provider || null) });\n }\n async getBalance(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getBalance\").getBalanceOf(await this.getAddress(), blockTag);\n }\n async getTransactionCount(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getTransactionCount\").getTransactionCountOf(await this.getAddress(), blockTag);\n }\n async estimateGas(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"estimateGas\").estimateGas(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async call(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"call\").call(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async populateTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"populateTransaction\");\n //let pop: Deferrable = Object.assign({ }, tx);\n let pop = Object.assign({}, tx);\n if (pop.to != null) {\n pop.to = provider.resolveName(pop.to).then((to) => {\n if (to == null) {\n return logger.throwArgumentError(\"transaction to ENS name not configured\", \"tx.to\", pop.to);\n }\n return to;\n });\n }\n if (pop.from != null) {\n const from = pop.from;\n pop.from = Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n return logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n return address;\n });\n }\n if (pop.nonce == null) {\n pop.nonce = this.getTransactionCount();\n }\n pop = resolveProperties(pop);\n if (pop.gasLimit == null) {\n pop.gasLimit = provider.estimateGas(pop);\n }\n pop = resolveProperties(pop);\n //@TODO: Copy logic from AbstractSigner in v5\n return await resolveProperties(pop);\n }\n async resolveName(name) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"resolveName\");\n return await provider.resolveName(name);\n }\n async sendTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"sendTransaction\");\n const txObj = Transaction.from(await this.populateTransaction(tx));\n return await provider.broadcastTransaction(await this.signTransaction(txObj));\n }\n}\n_AbstractSigner_instances = new WeakSet(), _AbstractSigner_checkProvider = function _AbstractSigner_checkProvider(operation) {\n if (this.provider) {\n return this.provider;\n }\n return logger.throwError(\"missing provider\", \"UNSUPPORTED_OPERATION\", { operation });\n}, _AbstractSigner_fromify = async function _AbstractSigner_fromify(tx) {\n tx = Object.assign({}, tx);\n const actions = [];\n if (tx.from != null) {\n const from = tx.from;\n actions.push(Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n tx.from = address;\n }));\n }\n await Promise.all(actions);\n return tx;\n};\nexport class VoidSigner extends AbstractSigner {\n constructor(address, provider) {\n super(provider);\n _VoidSigner_instances.add(this);\n defineProperties(this, { address });\n }\n async getAddress() { return this.address; }\n connect(provider) {\n return new VoidSigner(this.address, provider);\n }\n async signTransaction(tx) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"transactions\", \"signTransaction\");\n }\n async signMessage(message) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"messages\", \"signMessage\");\n }\n async signTypedData(domain, types, value) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"typed-data\", \"signTypedData\");\n }\n}\n_VoidSigner_instances = new WeakSet(), _VoidSigner_throwUnsupported = function _VoidSigner_throwUnsupported(suffix, operation) {\n return logger.throwError(`VoidSigner cannot sign ${suffix}`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n};\nexport class WrappedSigner extends AbstractSigner {\n //get provider(): null | Provider { return this.#signer.provider; }\n constructor(signer) {\n super(signer.provider);\n _WrappedSigner_signer.set(this, void 0);\n __classPrivateFieldSet(this, _WrappedSigner_signer, signer, \"f\");\n }\n async getAddress() {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").getAddress();\n }\n connect(provider) {\n return new WrappedSigner(__classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").connect(provider));\n }\n async signTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTransaction(tx);\n }\n async sendTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").sendTransaction(tx);\n }\n async signMessage(message) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signMessage(message);\n }\n async signTypedData(domain, types, value) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTypedData(domain, types, value);\n }\n}\n_WrappedSigner_signer = new WeakMap();\n//# sourceMappingURL=abstract-signer.js.map","// Show the throttle message only once\nconst shown = new Set();\nexport function showThrottleMessage(service) {\n if (shown.has(service)) {\n return;\n }\n shown.add(service);\n console.log(\"========= NOTICE =========\");\n console.log(`Request-Rate Exceeded for ${service} (this message will not be repeated)`);\n console.log(\"\");\n console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n console.log(\"community resource for low-traffic projects and early prototyping.\");\n console.log(\"\");\n console.log(\"While your application will continue to function, we highly recommended\");\n console.log(\"signing up for your own API keys to improve performance, increase your\");\n console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n console.log(\"\");\n console.log(\"For more details: https:/\\/docs.ethers.io/api-keys/\");\n console.log(\"==========================\");\n}\n//# sourceMappingURL=community.js.map","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 _FilterIdSubscriber_instances, _FilterIdSubscriber_provider, _FilterIdSubscriber_filterIdPromise, _FilterIdSubscriber_poller, _FilterIdSubscriber_network, _FilterIdSubscriber_poll, _FilterIdSubscriber_teardown, _FilterIdEventSubscriber_event;\nimport { PollingEventSubscriber } from \"./subscriber-polling.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport class FilterIdSubscriber {\n constructor(provider) {\n _FilterIdSubscriber_instances.add(this);\n _FilterIdSubscriber_provider.set(this, void 0);\n _FilterIdSubscriber_filterIdPromise.set(this, void 0);\n _FilterIdSubscriber_poller.set(this, void 0);\n _FilterIdSubscriber_network.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_poller, __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, null, \"f\");\n }\n _subscribe(provider) {\n throw new Error(\"subclasses must override this\");\n }\n _emitResults(provider, result) {\n throw new Error(\"subclasses must override this\");\n }\n _recover(provider) {\n throw new Error(\"subclasses must override this\");\n }\n start() { __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).call(this, -2); }\n stop() {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n if (dropWhilePaused) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n resume() { this.start(); }\n}\n_FilterIdSubscriber_provider = new WeakMap(), _FilterIdSubscriber_filterIdPromise = new WeakMap(), _FilterIdSubscriber_poller = new WeakMap(), _FilterIdSubscriber_network = new WeakMap(), _FilterIdSubscriber_instances = new WeakSet(), _FilterIdSubscriber_poll = async function _FilterIdSubscriber_poll(blockNumber) {\n try {\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\") == null) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, this._subscribe(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")), \"f\");\n }\n const filterId = await __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterId == null) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")._recoverSubscriber(this, this._recover(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")));\n return;\n }\n const network = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").getNetwork();\n if (!__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\")) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, network, \"f\");\n }\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\").chainId !== network.chainId) {\n throw new Error(\"chaid changed\");\n }\n const result = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_getFilterChanges\", [filterId]);\n await this._emitResults(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\"), result);\n }\n catch (error) {\n console.log(\"@TODO\", error);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").once(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n}, _FilterIdSubscriber_teardown = function _FilterIdSubscriber_teardown() {\n const filterIdPromise = __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterIdPromise) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n filterIdPromise.then((filterId) => {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_uninstallFilter\", [filterId]);\n });\n }\n};\nexport class FilterIdEventSubscriber extends FilterIdSubscriber {\n constructor(provider, filter) {\n super(provider);\n _FilterIdEventSubscriber_event.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdEventSubscriber_event, copy(filter), \"f\");\n }\n _recover(provider) {\n return new PollingEventSubscriber(provider, __classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"));\n }\n async _subscribe(provider) {\n const filterId = await provider.send(\"eth_newFilter\", [__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\")]);\n console.log(\"____SUB\", filterId);\n return filterId;\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n const log = network.formatter.log(result, provider);\n provider.emit(__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"), log);\n }\n }\n}\n_FilterIdEventSubscriber_event = new WeakMap();\nexport class FilterIdPendingSubscriber extends FilterIdSubscriber {\n async _subscribe(provider) {\n return await provider.send(\"eth_newPendingTransactionFilter\", []);\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n provider.emit(\"pending\", network.formatter.hash(result));\n }\n }\n}\n//# sourceMappingURL=subscriber-filterid.js.map","// @TODO:\n// - Add the batching API\nvar __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 _JsonRpcApiProvider_nextId, _JsonRpcApiProvider_options, _JsonRpcProvider_connect, _JsonRpcProvider_pollingInterval;\n// https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=true&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { TypedDataEncoder } from \"@ethersproject/hash\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { AbstractProvider, UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { FilterIdEventSubscriber, FilterIdPendingSubscriber } from \"./subscriber-filterid.js\";\nimport { logger } from \"./logger.js\";\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nconst Primitive = \"bigint,boolean,function,number,string,symbol\".split(/,/g);\n//const Methods = \"getAddress,then\".split(/,/g);\nfunction deepCopy(value) {\n if (value == null || Primitive.indexOf(typeof (value)) >= 0) {\n return value;\n }\n // Keep any Addressable\n if (typeof (value.getAddress) === \"function\") {\n return value;\n }\n if (Array.isArray(value)) {\n return (value.map(deepCopy));\n }\n if (typeof (value) === \"object\") {\n return Object.keys(value).reduce((accum, key) => {\n accum[key] = value[key];\n return accum;\n }, {});\n }\n throw new Error(`should not happen: ${value} (${typeof (value)})`);\n}\nfunction getLowerCase(value) {\n if (value) {\n return value.toLowerCase();\n }\n return value;\n}\nfunction isPollable(value) {\n return (value && typeof (value.pollingInterval) === \"number\");\n}\nconst defaultOptions = {\n // Default to use filter ID (the FilterIdSubscriber will\n // fallback onto polling if subscription fails)\n polling: false,\n // Maximum batch size (in bytes)\n batchMaxSize: (1 << 20),\n // How long to wait before dispatching a new batch\n batchStallTime: 250,\n};\n// @TODO: Unchecked Signers\nexport class JsonRpcSigner {\n constructor(provider, address) {\n defineProperties(this, { provider, address });\n }\n connect(provider) {\n return logger.throwError(\"cannot reconnect JsonRpcSigner\", \"UNSUPPORTED_OPERATION\", {\n operation: \"signer.connect\"\n });\n }\n async getAddress() {\n return this.address;\n }\n async getNetwork() {\n return await this.provider.getNetwork();\n }\n async getFeeData() {\n return await this.provider.getFeeData();\n }\n async estimateGas(tx) {\n return await this.provider.estimateGas(tx);\n }\n async call(tx) {\n return await this.provider.call(tx);\n }\n async resolveName(name) {\n return await this.provider.resolveName(name);\n }\n async getBalance(blockTag) {\n return await this.provider.getBalanceOf(this.address);\n }\n async getTransactionCount(blockTag) {\n return await this.provider.getTransactionCountOf(this.address);\n }\n // Returns just the hash of the transaction after sent, which is what\n // the bare JSON-RPC API does;\n async sendUncheckedTransaction(_tx) {\n const tx = deepCopy(_tx);\n const promises = [];\n // Make sure the from matches the sender\n if (tx.from) {\n const _from = tx.from;\n promises.push((async () => {\n const from = await resolveAddress(_from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n })());\n }\n else {\n tx.from = this.address;\n }\n // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n // wishes to use this, it is easy to specify explicitly, otherwise\n // we look it up for them.\n if (tx.gasLimit == null) {\n promises.push((async () => {\n tx.gasLimit = await this.provider.estimateGas(Object.assign(Object.assign({}, tx), { from: this.address }));\n })());\n }\n // The address may be an ENS name or Addressable\n if (tx.to != null) {\n const _to = tx.to;\n promises.push((async () => {\n tx.to = await resolveAddress(_to, this.provider);\n })());\n }\n // Wait until all of our properties are filled in\n if (promises.length) {\n await Promise.all(promises);\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return this.provider.send(\"eth_sendTransaction\", [hexTx]);\n }\n async sendTransaction(tx) {\n // This cannot be mined any earlier than any recent block\n const blockNumber = await this.provider.getBlockNumber();\n // Send the transaction\n const hash = await this.sendUncheckedTransaction(tx);\n // Unfortunately, JSON-RPC only provides and opaque transaction hash\n // for a response, and we need the actual transaction, so we poll\n // for it; it should show up very quickly\n return await (new Promise((resolve, reject) => {\n const checkTx = async (duration) => {\n // Try getting the transaction\n const tx = await this.provider.getTransaction(hash);\n if (tx != null) {\n resolve(this.provider._wrapTransaction(tx, hash, blockNumber));\n return;\n }\n // Wait another 4 seconds\n this.provider._setTimeout(() => { checkTx(4000); }, duration);\n };\n checkTx(1000);\n }));\n }\n async signTransaction(_tx) {\n const tx = deepCopy(_tx);\n // Make sure the from matches the sender\n if (tx.from) {\n const from = await resolveAddress(tx.from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n return logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n }\n else {\n tx.from = this.address;\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return await this.provider.send(\"eth_sign_Transaction\", [hexTx]);\n }\n async signMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"personal_sign\", [\n hexlify(message), this.address.toLowerCase()\n ]);\n }\n async signTypedData(domain, types, _value) {\n const value = deepCopy(_value);\n // Populate any ENS names (in-place)\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value) => {\n const address = await resolveAddress(value);\n if (address == null) {\n return logger.throwArgumentError(\"TypedData does not support null address\", \"value\", value);\n }\n return address;\n });\n return await this.provider.send(\"eth_signTypedData_v4\", [\n this.address.toLowerCase(),\n JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n ]);\n }\n async unlock(password) {\n return this.provider.send(\"personal_unlockAccount\", [\n this.address.toLowerCase(), password, null\n ]);\n }\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n async _legacySignMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"eth_sign\", [\n this.address.toLowerCase(), hexlify(message)\n ]);\n }\n}\nexport class JsonRpcApiProvider extends AbstractProvider {\n constructor(network) {\n super(network);\n _JsonRpcApiProvider_nextId.set(this, void 0);\n _JsonRpcApiProvider_options.set(this, void 0);\n __classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, 1, \"f\");\n __classPrivateFieldSet(this, _JsonRpcApiProvider_options, Object.assign({}, defaultOptions), \"f\");\n }\n _getOptions(key) {\n return __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key];\n }\n _setOptions(options) {\n // Validate all the options\n for (const _key in options) {\n const key = _key;\n const value = options[key];\n if (typeof (value) !== typeof (__classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key])) {\n return logger.throwArgumentError(\"invalid option value\", `options.${key}`, value);\n }\n }\n // Update the values\n for (const _key in options) {\n const key = _key;\n __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key] = (options[key]);\n }\n }\n prepareRequest(method, params) {\n var _a, _b;\n return {\n method, params, id: (__classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, (_b = __classPrivateFieldGet(this, _JsonRpcApiProvider_nextId, \"f\"), _a = _b++, _b), \"f\"), _a), jsonrpc: \"2.0\"\n };\n }\n // Sends the payload to the backend\n //async sendPayload(payload: any): Promise {\n // throw new Error(\"sub-class must implement this\");\n //}\n async send(method, params) {\n // @TODO: This should construct and queue the payload\n throw new Error(\"sub-class must implement this\");\n }\n async getSigner(address = 0) {\n const network = await this.getNetwork();\n const accounts = await this.send(\"eth_accounts\", []);\n // Account index\n if (typeof (address) === \"number\") {\n if (address > accounts.length) {\n throw new Error(\"no such account\");\n }\n return new JsonRpcSigner(this, accounts[address]);\n }\n // Account address\n address = network.formatter.address(address);\n for (const account of accounts) {\n if (network.formatter.address(account) === account) {\n return new JsonRpcSigner(this, account);\n }\n }\n throw new Error(\"invalid account\");\n }\n // Sub-classes can override this; it detects the *actual* network we\n // are connected to\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" })));\n }\n _getSubscriber(sub) {\n // Pending Filters aren't availble via polling\n if (sub.type === \"pending\") {\n return new FilterIdPendingSubscriber(this);\n }\n if (sub.type === \"event\") {\n return new FilterIdEventSubscriber(this, sub.filter);\n }\n // Orphaned Logs are handled automatically, by the filter, since\n // logs with removed are emitted by it\n if (sub.type === \"orphan\" && sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"orphan\");\n }\n return super._getSubscriber(sub);\n }\n getRpcTransaction(tx) {\n const result = {};\n // JSON-RPC now requires numeric values to be \"quantity\" values\n [\"chainId\", \"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n let dstKey = key;\n if (key === \"gasLimit\") {\n dstKey = \"gas\";\n }\n result[dstKey] = quantity(tx[key]);\n });\n // Make sure addresses and data are lowercase\n [\"from\", \"to\", \"data\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n result[key] = hexlify(tx[key]);\n });\n // Normalize the access list object\n if (tx.accessList) {\n result[\"accessList\"] = accessListify(tx.accessList);\n }\n return result;\n }\n getRpcRequest(req) {\n switch (req.method) {\n case \"chainId\":\n return { method: \"eth_chainId\", args: [] };\n case \"getBlockNumber\":\n return { method: \"eth_blockNumber\", args: [] };\n case \"getGasPrice\":\n return { method: \"eth_gasPrice\", args: [] };\n case \"getBalance\":\n return {\n method: \"eth_getBalance\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getTransactionCount\":\n return {\n method: \"eth_getTransactionCount\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getCode\":\n return {\n method: \"eth_getCode\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getStorageAt\":\n return {\n method: \"eth_getStorageAt\",\n args: [\n getLowerCase(req.address),\n (\"0x\" + req.position.toString(16)),\n req.blockTag\n ]\n };\n case \"sendTransaction\":\n return {\n method: \"eth_sendRawTransaction\",\n args: [req.signedTransaction]\n };\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return {\n method: \"eth_getBlockByNumber\",\n args: [req.blockTag, !!req.includeTransactions]\n };\n }\n else if (\"blockHash\" in req) {\n return {\n method: \"eth_getBlockByHash\",\n args: [req.blockHash, !!req.includeTransactions]\n };\n }\n break;\n case \"getTransaction\":\n return {\n method: \"eth_getTransactionByHash\",\n args: [req.hash]\n };\n case \"getTransactionReceipt\":\n return {\n method: \"eth_getTransactionReceipt\",\n args: [req.hash]\n };\n case \"call\":\n return {\n method: \"eth_call\",\n args: [this.getRpcTransaction(req.transaction), req.blockTag]\n };\n case \"estimateGas\": {\n return {\n method: \"eth_estimateGas\",\n args: [this.getRpcTransaction(req.transaction)]\n };\n }\n case \"getLogs\":\n if (req.filter && req.filter.address != null) {\n if (Array.isArray(req.filter.address)) {\n req.filter.address = req.filter.address.map(getLowerCase);\n }\n else {\n req.filter.address = getLowerCase(req.filter.address);\n }\n }\n return { method: \"eth_getLogs\", args: [req.filter] };\n }\n return null;\n }\n getRpcError(method, args, error) {\n if (method === \"eth_call\") {\n const result = spelunkData(error);\n if (result) {\n // @TODO: Extract errorSignature, errorName, errorArgs, reason if\n // it is Error(string) or Panic(uint25)\n return logger.makeError(\"execution reverted during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: result.data,\n transaction: args[0]\n });\n }\n return logger.makeError(\"missing revert data during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: \"0x\", transaction: args[0], info: { error }\n });\n }\n if (method === \"eth_estimateGas\") {\n }\n const message = JSON.stringify(spelunkMessage(error));\n if (message.match(/insufficient funds|base fee exceeds gas limit/)) {\n return logger.makeError(\"insufficient funds for intrinsic transaction cost\", \"INSUFFICIENT_FUNDS\", {\n transaction: args[0]\n });\n }\n if (message.match(/nonce/) && message.match(/too low/)) {\n return logger.makeError(\"nonce has already been used\", \"NONCE_EXPIRED\", {\n transaction: args[0]\n });\n }\n // \"replacement transaction underpriced\"\n if (message.match(/replacement transaction/) && message.match(/underpriced/)) {\n return logger.makeError(\"replacement fee too low\", \"REPLACEMENT_UNDERPRICED\", {\n transaction: args[0]\n });\n }\n if (message.match(/only replay-protected/)) {\n return logger.makeError(\"legacy pre-eip-155 transactions not supported\", \"UNSUPPORTED_OPERATION\", {\n operation: method, info: { transaction: args[0] }\n });\n }\n if (method === \"estimateGas\" && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) {\n return logger.makeError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", \"UNPREDICTABLE_GAS_LIMIT\", {\n transaction: args[0]\n });\n }\n return error;\n }\n async _perform(req) {\n // Legacy networks do not like the type field being passed along (which\n // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n if (req.method === \"call\" || req.method === \"estimateGas\") {\n let tx = req.transaction;\n if (tx && tx.type != null && logger.getBigInt(tx.type)) {\n // If there are no EIP-1559 properties, it might be non-EIP-a559\n if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n const feeData = await this.getFeeData();\n if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n // Network doesn't know about EIP-1559 (and hence type)\n req = Object.assign({}, req, {\n transaction: Object.assign({}, tx, { type: undefined })\n });\n }\n }\n }\n }\n const request = this.getRpcRequest(req);\n if (request != null) {\n this.emit(\"debug\", { type: \"sendRequest\", request });\n try {\n const result = await this.send(request.method, request.args);\n //console.log(\"RR\", result);\n this.emit(\"debug\", { type: \"getResponse\", result });\n return result;\n }\n catch (error) {\n this.emit(\"debug\", { type: \"getError\", error });\n throw this.getRpcError(request.method, request.args, error);\n }\n }\n return super._perform(req);\n }\n}\n_JsonRpcApiProvider_nextId = new WeakMap(), _JsonRpcApiProvider_options = new WeakMap();\nexport class JsonRpcProvider extends JsonRpcApiProvider {\n constructor(url, network) {\n if (url == null) {\n url = \"http:/\\/localhost:8545\";\n }\n super(network);\n _JsonRpcProvider_connect.set(this, void 0);\n _JsonRpcProvider_pollingInterval.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, { request: new FetchRequest(url) }, \"f\");\n }\n else {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, Object.assign({}, url), \"f\");\n __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request = __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request.clone();\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, 4000, \"f\");\n }\n async send(method, params) {\n params = copy(params);\n // Configure a POST connection for the requested method\n const connection = Object.assign({}, __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\"));\n connection.request = connection.request.clone();\n connection.request.body = this.prepareRequest(method, params);\n const result = (await fetchData(connection)).bodyJson;\n if (\"error\" in result) {\n return logger.throwError(\"error from JSON-RPC\", \"UNKNOWN_ERROR\", {\n result\n });\n }\n return result.result;\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\"); }\n set pollingInterval(value) {\n if (!Number.isInteger(value) || value < 0) {\n throw new Error(\"invalid interval\");\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, value, \"f\");\n this._forEachSubscriber((sub) => {\n if (isPollable(sub)) {\n sub.pollingInterval = __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\");\n }\n });\n }\n}\n_JsonRpcProvider_connect = new WeakMap(), _JsonRpcProvider_pollingInterval = new WeakMap();\n// This class should only be used when it is not possible for the\n// underlying network to change, such as with INFURA. If you are\n// using MetaMask or some other client which allows users to change\n// their network DO NOT USE THIS. Bad things will happen.\nexport class StaticJsonRpcProvider extends JsonRpcProvider {\n constructor(url, network) {\n super(url, network);\n defineProperties(this, { network });\n }\n async _detectNetwork() {\n return this.network;\n }\n}\nfunction spelunkData(value) {\n if (value == null) {\n return null;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\" && value.message.match(\"reverted\") && isHexString(value.data)) {\n return { message: value.message, data: value.data };\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n const result = spelunkData(value[key]);\n if (result) {\n return result;\n }\n }\n return null;\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return spelunkData(JSON.parse(value));\n }\n catch (error) { }\n }\n return null;\n}\nfunction _spelunkMessage(value, result) {\n if (value == null) {\n return;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\") {\n result.push(value.message);\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n _spelunkMessage(value[key], result);\n }\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return _spelunkMessage(JSON.parse(value), result);\n }\n catch (error) { }\n }\n}\nfunction spelunkMessage(value) {\n const result = [];\n _spelunkMessage(value, result);\n return result;\n}\n//# sourceMappingURL=provider-jsonrpc.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"rpc.ankr.com/eth\";\n case \"matic\":\n return \"rpc.ankr.com/polygon\";\n case \"arbitrum\":\n return \"rpc.ankr.com/arbitrum\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AnkrProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const connection = AnkrProvider.getConnection(network, apiKey);\n super(connection, network);\n defineProperties(this, { apiKey });\n // Ankr does not support filterId, so we force polling\n super._setOptions({ polling: true });\n }\n _getProvider(chainId) {\n try {\n return new AnkrProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"AnkrProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n}\n//# sourceMappingURL=provider-ankr.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.alchemyapi.io\";\n case \"ropsten\":\n return \"eth-ropsten.alchemyapi.io\";\n case \"rinkeby\":\n return \"eth-rinkeby.alchemyapi.io\";\n case \"goerli\":\n return \"eth-goerli.alchemyapi.io\";\n case \"kovan\":\n return \"eth-kovan.alchemyapi.io\";\n case \"matic\":\n return \"polygon-mainnet.g.alchemy.com\";\n case \"maticmum\":\n return \"polygon-mumbai.g.alchemy.com\";\n case \"arbitrum\":\n return \"arb-mainnet.g.alchemy.com\";\n case \"arbitrum-rinkeby\":\n return \"arb-rinkeby.g.alchemy.com\";\n case \"optimism\":\n return \"opt-mainnet.g.alchemy.com\";\n case \"optimism-kovan\":\n return \"opt-kovan.g.alchemy.com\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AlchemyProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n super(AlchemyProvider.getConnection(network, apiKey), network);\n defineProperties(this, { apiKey });\n }\n _getProvider(chainId) {\n try {\n return new AlchemyProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v2/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"alchemy\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n}\n//# sourceMappingURL=provider-alchemy.js.map","import { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nexport class CloudflareProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\") {\n const network = Network.from(_network);\n if (network.name !== \"homestead\") {\n return logger.throwArgumentError(\"unsupported network\", \"network\", _network);\n }\n super(\"https:/\\/cloudflare-eth.com/\", network);\n }\n}\n//# sourceMappingURL=provider-cloudflare.js.map","import { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { isError } from \"@ethersproject/logger\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nif (false) {\n console.log(isHexString, isError);\n} // @TODO\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { NetworkPlugin } from \"./plugins-network.js\";\nimport { logger } from \"./logger.js\";\nconst defaultApiKey = \"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB\";\nconst EtherscanPluginId = \"org.ethers.plugins.etherscan\";\nexport class EtherscanPlugin extends NetworkPlugin {\n constructor(baseUrl, communityApiKey) {\n super(EtherscanPluginId);\n //if (communityApiKey == null) { communityApiKey = null; }\n defineProperties(this, { baseUrl, communityApiKey });\n }\n clone() {\n return new EtherscanPlugin(this.baseUrl, this.communityApiKey);\n }\n}\nexport class EtherscanProvider extends AbstractProvider {\n constructor(_network, apiKey) {\n super();\n const network = Network.from(_network);\n if (apiKey == null) {\n const plugin = network.getPlugin(EtherscanPluginId);\n if (plugin) {\n apiKey = plugin.communityApiKey;\n }\n else {\n apiKey = defaultApiKey;\n }\n }\n defineProperties(this, { apiKey, network });\n // Test that the network is supported by Etherscan\n this.getBaseUrl();\n }\n getBaseUrl() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return plugin.baseUrl;\n }\n switch (this.network.name) {\n case \"homestead\":\n return \"https:/\\/api.etherscan.io\";\n case \"ropsten\":\n return \"https:/\\/api-ropsten.etherscan.io\";\n case \"rinkeby\":\n return \"https:/\\/api-rinkeby.etherscan.io\";\n case \"kovan\":\n return \"https:/\\/api-kovan.etherscan.io\";\n case \"goerli\":\n return \"https:/\\/api-goerli.etherscan.io\";\n default:\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", this.network);\n }\n getUrl(module, params) {\n const query = Object.keys(params).reduce((accum, key) => {\n const value = params[key];\n if (value != null) {\n accum += `&${key}=${value}`;\n }\n return accum;\n }, \"\");\n const apiKey = ((this.apiKey) ? `&apikey=${this.apiKey}` : \"\");\n return `${this.getBaseUrl()}/api?module=${module}${query}${apiKey}`;\n }\n getPostUrl() {\n return `${this.getBaseUrl()}/api`;\n }\n getPostData(module, params) {\n params.module = module;\n params.apikey = this.apiKey;\n return params;\n }\n async detectNetwork() {\n return this.network;\n }\n async fetch(module, params, post) {\n const url = (post ? this.getPostUrl() : this.getUrl(module, params));\n const payload = (post ? this.getPostData(module, params) : null);\n /*\n this.emit(\"debug\", {\n action: \"request\",\n request: url,\n provider: this\n });\n */\n const request = new FetchRequest(url);\n const connection = {\n request,\n throttleSlotInterval: 1000,\n processResponse: async (request, response) => {\n const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)) : {};\n const throttle = ((typeof (result.result) === \"string\") ? result.result : \"\").toLowerCase().indexOf(\"rate limit\") >= 0;\n if (module === \"proxy\") {\n // This JSON response indicates we are being throttled\n if (result && result.status == 0 && result.message == \"NOTOK\" && throttle) {\n response.throwThrottleError(result.result);\n }\n }\n else {\n if (throttle) {\n response.throwThrottleError(result.result);\n }\n }\n return response;\n },\n };\n if (payload) {\n request.setHeader(\"content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n request.body = Object.keys(payload).map((k) => `${k}=${payload[k]}`).join(\"&\");\n }\n const response = await fetchData(connection);\n if (!response.hasBody()) {\n throw new Error();\n }\n /*\n this.emit(\"debug\", {\n action: \"response\",\n request: url,\n response: deepCopy(result),\n provider: this\n });\n */\n const result = JSON.parse(toUtf8String(response.body));\n if (module === \"proxy\") {\n if (result.jsonrpc != \"2.0\") {\n // @TODO: not any\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n throw error;\n }\n if (result.error) {\n // @TODO: not any\n const error = new Error(result.error.message || \"unknown error\");\n if (result.error.code) {\n error.code = result.error.code;\n }\n if (result.error.data) {\n error.data = result.error.data;\n }\n throw error;\n }\n return result.result;\n }\n else {\n // getLogs, getHistory have weird success responses\n if (result.status == 0 && (result.message === \"No records found\" || result.message === \"No transactions found\")) {\n return result.result;\n }\n if (result.status != 1 || result.message != \"OK\") {\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n // if ((result.result || \"\").toLowerCase().indexOf(\"rate limit\") >= 0) {\n // error.throttleRetry = true;\n // }\n throw error;\n }\n return result.result;\n }\n }\n // The transaction has already been sanitized by the calls in Provider\n _getTransactionPostData(transaction) {\n const result = {};\n for (let key in transaction) {\n if (transaction[key] == null) {\n continue;\n }\n let value = transaction[key];\n if (key === \"type\" && value === 0) {\n continue;\n }\n // Quantity-types require no leading zero, unless 0\n if ({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true }[key]) {\n value = quantity(hexlify(value));\n }\n else if (key === \"accessList\") {\n value = \"[\" + this.network.formatter.accessList(value).map((set) => {\n return `{address:\"${set.address}\",storageKeys:[\"${set.storageKeys.join('\",\"')}\"]}`;\n }).join(\",\") + \"]\";\n }\n else {\n value = hexlify(value);\n }\n result[key] = value;\n }\n return result;\n }\n _checkError(req, error, transaction) {\n /*\n let body = \"\";\n if (isError(error, Logger.Errors.SERVER_ERROR) && error.response && error.response.hasBody()) {\n body = toUtf8String(error.response.body);\n }\n console.log(body);\n \n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\" && body) {\n \n // Etherscan keeps changing their string\n if (body.match(/reverted/i) || body.match(/VM execution error/i)) {\n \n // Etherscan prefixes the data like \"Reverted 0x1234\"\n let data = e.data;\n if (data) { data = \"0x\" + data.replace(/^.*0x/i, \"\"); }\n if (!isHexString(data)) { data = \"0x\"; }\n \n logger.throwError(\"call exception\", Logger.Errors.CALL_EXCEPTION, {\n error, data\n });\n }\n }\n \n // Get the message from any nested error structure\n let message = error.message;\n if (isError(error, Logger.Errors.SERVER_ERROR)) {\n if (error.error && typeof(error.error.message) === \"string\") {\n message = error.error.message;\n } else if (typeof(error.body) === \"string\") {\n message = error.body;\n } else if (typeof(error.responseText) === \"string\") {\n message = error.responseText;\n }\n }\n message = (message || \"\").toLowerCase();\n \n // \"Insufficient funds. The account you tried to send transaction from\n // does not have enough funds. Required 21464000000000 and got: 0\"\n if (message.match(/insufficient funds/)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.Errors.INSUFFICIENT_FUNDS, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction with the same hash was already imported.\"\n if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) {\n logger.throwError(\"nonce has already been used\", Logger.Errors.NONCE_EXPIRED, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction gas price is too low. There is another transaction with\n // same nonce in the queue. Try increasing the gas price or incrementing the nonce.\"\n if (message.match(/another transaction with same nonce/)) {\n logger.throwError(\"replacement fee too low\", Logger.Errors.REPLACEMENT_UNDERPRICED, {\n error, transaction, info: { method }\n });\n }\n \n if (message.match(/execution failed due to an exception|execution reverted/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, {\n error, transaction, info: { method }\n });\n }\n */\n throw error;\n }\n async _detectNetwork() {\n return this.network;\n }\n async _perform(req) {\n switch (req.method) {\n case \"chainId\":\n return this.network.chainId;\n case \"getBlockNumber\":\n return this.fetch(\"proxy\", { action: \"eth_blockNumber\" });\n case \"getGasPrice\":\n return this.fetch(\"proxy\", { action: \"eth_gasPrice\" });\n case \"getBalance\":\n // Returns base-10 result\n return this.fetch(\"account\", {\n action: \"balance\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getTransactionCount\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionCount\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getCode\":\n return this.fetch(\"proxy\", {\n action: \"eth_getCode\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getStorageAt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getStorageAt\",\n address: req.address,\n position: req.position,\n tag: req.blockTag\n });\n case \"sendTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_sendRawTransaction\",\n hex: req.signedTransaction\n }, true).catch((error) => {\n return this._checkError(req, error, req.signedTransaction);\n });\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return this.fetch(\"proxy\", {\n action: \"eth_getBlockByNumber\",\n tag: req.blockTag,\n boolean: (req.includeTransactions ? \"true\" : \"false\")\n });\n }\n return logger.throwError(\"getBlock by blockHash not supported by Etherscan\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getBlock(blockHash)\"\n });\n case \"getTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionByHash\",\n txhash: req.hash\n });\n case \"getTransactionReceipt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionReceipt\",\n txhash: req.hash\n });\n case \"call\": {\n if (req.blockTag !== \"latest\") {\n throw new Error(\"EtherscanProvider does not support blockTag for call\");\n }\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_call\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n case \"estimateGas\": {\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_estimateGas\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n /*\n case \"getLogs\": {\n // Needs to complain if more than one address is passed in\n const args: Record = { action: \"getLogs\" }\n \n if (params.filter.fromBlock) {\n args.fromBlock = checkLogTag(params.filter.fromBlock);\n }\n \n if (params.filter.toBlock) {\n args.toBlock = checkLogTag(params.filter.toBlock);\n }\n \n if (params.filter.address) {\n args.address = params.filter.address;\n }\n \n // @TODO: We can handle slightly more complicated logs using the logs API\n if (params.filter.topics && params.filter.topics.length > 0) {\n if (params.filter.topics.length > 1) {\n logger.throwError(\"unsupported topic count\", Logger.Errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics });\n }\n if (params.filter.topics.length === 1) {\n const topic0 = params.filter.topics[0];\n if (typeof(topic0) !== \"string\" || topic0.length !== 66) {\n logger.throwError(\"unsupported topic format\", Logger.Errors.UNSUPPORTED_OPERATION, { topic0: topic0 });\n }\n args.topic0 = topic0;\n }\n }\n \n const logs: Array = await this.fetch(\"logs\", args);\n \n // Cache txHash => blockHash\n let blocks: { [tag: string]: string } = {};\n \n // Add any missing blockHash to the logs\n for (let i = 0; i < logs.length; i++) {\n const log = logs[i];\n if (log.blockHash != null) { continue; }\n if (blocks[log.blockNumber] == null) {\n const block = await this.getBlock(log.blockNumber);\n if (block) {\n blocks[log.blockNumber] = block.hash;\n }\n }\n \n log.blockHash = blocks[log.blockNumber];\n }\n \n return logs;\n }\n */\n default:\n break;\n }\n return super._perform(req);\n }\n async getNetwork() {\n return this.network;\n }\n async getEtherPrice() {\n if (this.network.name !== \"homestead\") {\n return 0.0;\n }\n return parseFloat((await this.fetch(\"stats\", { action: \"ethprice\" })).ethusd);\n }\n isCommunityResource() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return (plugin.communityApiKey === this.apiKey);\n }\n return (defaultApiKey === this.apiKey);\n }\n}\n/*\n(async function() {\n const provider = new EtherscanProvider();\n console.log(provider);\n console.log(await provider.getBlockNumber());\n / *\n provider.on(\"block\", (b) => {\n console.log(\"BB\", b);\n });\n console.log(await provider.getTransactionReceipt(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\"));\n\n provider.once(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\", (tx) => {\n console.log(\"TT\", tx);\n });\n * /\n try {\n console.log(await provider.getBlock(100));\n } catch (error) {\n console.log(error);\n }\n\n try {\n console.log(await provider.getBlock(13821768));\n } catch (error) {\n console.log(error);\n }\n\n})();\n*/\n//# sourceMappingURL=provider-etherscan.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultProjectId = \"84842078b09946638c03157f83405213\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"mainnet.infura.io\";\n case \"ropsten\":\n return \"ropsten.infura.io\";\n case \"rinkeby\":\n return \"rinkeby.infura.io\";\n case \"kovan\":\n return \"kovan.infura.io\";\n case \"goerli\":\n return \"goerli.infura.io\";\n case \"matic\":\n return \"polygon-mainnet.infura.io\";\n case \"maticmum\":\n return \"polygon-mumbai.infura.io\";\n case \"optimism\":\n return \"optimism-mainnet.infura.io\";\n case \"optimism-kovan\":\n return \"optimism-kovan.infura.io\";\n case \"arbitrum\":\n return \"arbitrum-mainnet.infura.io\";\n case \"arbitrum-rinkeby\":\n return \"arbitrum-rinkeby.infura.io\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class InfuraProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", projectId, projectSecret) {\n const network = Network.from(_network);\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const connection = InfuraProvider.getConnection(network, projectId, projectSecret);\n super(connection, network);\n defineProperties(this, { projectId, projectSecret });\n }\n _getProvider(chainId) {\n try {\n return new InfuraProvider(chainId, this.projectId, this.projectSecret);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, projectId, projectSecret) {\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v3/${projectId}`);\n request.allowGzip = true;\n if (projectSecret) {\n request.setCredentials(\"\", projectSecret);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (projectId === defaultProjectId) {\n showThrottleMessage(\"InfuraProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.projectId === defaultProjectId);\n }\n}\n//# sourceMappingURL=provider-infura.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\n// These are load-balancer-based application IDs\nconst defaultAppIds = {\n homestead: \"6004bcd10040261633ade990\",\n ropsten: \"6004bd4d0040261633ade991\",\n rinkeby: \"6004bda20040261633ade994\",\n goerli: \"6004bd860040261633ade992\",\n};\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.gateway.pokt.network\";\n case \"ropsten\":\n return \"eth-ropsten.gateway.pokt.network\";\n case \"rinkeby\":\n return \"eth-rinkeby.gateway.pokt.network\";\n case \"goerli\":\n return \"eth-goerli.gateway.pokt.network\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nfunction normalizeApiKey(network, _appId, applicationSecretKey, loadBalancer) {\n loadBalancer = !!loadBalancer;\n let community = false;\n let applicationId = _appId;\n if (applicationId == null) {\n applicationId = defaultAppIds[network.name];\n if (applicationId == null) {\n logger.throwArgumentError(\"network does not support default applicationId\", \"applicationId\", _appId);\n }\n loadBalancer = true;\n community = true;\n }\n else if (applicationId === defaultAppIds[network.name]) {\n loadBalancer = true;\n community = true;\n }\n if (applicationSecretKey == null) {\n applicationSecretKey = null;\n }\n return { applicationId, applicationSecretKey, community, loadBalancer };\n}\nexport class PocketProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", _appId, _secretKey, _loadBalancer) {\n const network = Network.from(_network);\n const { applicationId, applicationSecretKey, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n const connection = PocketProvider.getConnection(network, applicationId, applicationSecretKey, loadBalancer);\n super(connection, network);\n defineProperties(this, { applicationId, applicationSecretKey, loadBalancer });\n }\n static getConnection(network, _appId, _secretKey, _loadBalancer) {\n const { applicationId, applicationSecretKey, community, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n let url = `https:/\\/${getHost(network.name)}/v1/`;\n if (loadBalancer) {\n url += \"lb/\";\n }\n url += applicationId;\n const request = new FetchRequest(url);\n request.allowGzip = true;\n if (applicationSecretKey) {\n request.setCredentials(\"\", applicationSecretKey);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (community) {\n showThrottleMessage(\"PocketProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.applicationId === defaultAppIds[this.network.name]);\n }\n}\n//# sourceMappingURL=provider-pocket.js.map","export function shuffle(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n }\n}\n//# sourceMappingURL=shuffle.js.map","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 _FallbackProvider_instances, _FallbackProvider_configs, _FallbackProvider_initialSyncPromise, _FallbackProvider_getNextConfig, _FallbackProvider_addRunner, _FallbackProvider_initialSync, _FallbackProvider_checkQuorum, _FallbackProvider_waitForQuorum;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { shuffle } from \"./shuffle.js\";\n//const BN_0 = BigInt(\"0\");\nconst BN_1 = BigInt(\"1\");\nconst BN_2 = BigInt(\"2\");\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\nfunction getTime() { return (new Date()).getTime(); }\n;\nconst defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 };\nconst defaultState = {\n blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0,\n outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0,\n _network: null, _updateNumber: null, _totalTime: 0\n};\nasync function waitForSync(config, blockNumber) {\n while (config.blockNumber < 0 || config.blockNumber < blockNumber) {\n if (!config._updateNumber) {\n config._updateNumber = (async () => {\n const blockNumber = await config.provider.getBlockNumber();\n if (blockNumber > config.blockNumber) {\n config.blockNumber = blockNumber;\n }\n config._updateNumber = null;\n })();\n }\n await config._updateNumber;\n config.outOfSync++;\n }\n}\n// Normalizes a result to a string that can be used to compare against\n// other results using normal string equality\nfunction normalize(network, value, req) {\n switch (req.method) {\n case \"chainId\":\n return logger.getBigInt(value).toString();\n case \"getBlockNumber\":\n return logger.getNumber(value).toString();\n case \"getGasPrice\":\n return logger.getBigInt(value).toString();\n case \"getBalance\":\n return logger.getBigInt(value).toString();\n case \"getTransactionCount\":\n return logger.getNumber(value).toString();\n case \"getCode\":\n return hexlify(value);\n case \"getStorageAt\":\n return hexlify(value);\n case \"getBlock\":\n if (req.includeTransactions) {\n return JSON.stringify(network.formatter.blockWithTransactions(value));\n }\n return JSON.stringify(network.formatter.block(value));\n case \"getTransaction\":\n return JSON.stringify(network.formatter.transactionResponse(value));\n case \"getTransactionReceipt\":\n return JSON.stringify(network.formatter.receipt(value));\n case \"call\":\n return hexlify(value);\n case \"estimateGas\":\n return logger.getBigInt(value).toString();\n case \"getLogs\":\n return JSON.stringify(value.map((v) => network.formatter.log(v)));\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}\n// This strategy picks the highest wieght result, as long as the weight is\n// equal to or greater than quorum\nfunction checkQuorum(quorum, results) {\n const tally = new Map();\n for (const { result, normal, weight } of results) {\n const t = tally.get(normal) || { result, weight: 0 };\n t.weight += weight;\n tally.set(normal, t);\n }\n let bestWeight = 0;\n let bestResult = undefined;\n for (const { weight, result } of tally.values()) {\n if (weight >= quorum && weight > bestWeight) {\n bestWeight = weight;\n bestResult = result;\n }\n }\n return bestResult;\n}\n/*\nfunction getMean(results: Array): bigint {\n const total = results.reduce((a, r) => (a + BigInt(r.result)), BN_0);\n return total / BigInt(results.length);\n}\n*/\nfunction getMedian(results) {\n // Get the sorted values\n const values = results.map((r) => BigInt(r.result));\n values.sort((a, b) => ((a < b) ? -1 : (b > a) ? 1 : 0));\n const mid = values.length / 2;\n // Odd-length; take the middle value\n if (values.length % 2) {\n return values[mid];\n }\n // Even length; take the ceiling of the mean of the center two values\n return (values[mid - 1] + values[mid] + BN_1) / BN_2;\n}\nexport class FallbackProvider extends AbstractProvider {\n constructor(providers, network) {\n super(network);\n _FallbackProvider_instances.add(this);\n _FallbackProvider_configs.set(this, void 0);\n _FallbackProvider_initialSyncPromise.set(this, void 0);\n __classPrivateFieldSet(this, _FallbackProvider_configs, providers.map((p) => {\n if (p instanceof AbstractProvider) {\n return Object.assign({ provider: p }, defaultConfig, defaultState);\n }\n else {\n return Object.assign({}, defaultConfig, p, defaultState);\n }\n }), \"f\");\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, null, \"f\");\n this.quorum = 2; //Math.ceil(providers.length / 2);\n this.eventQuorum = 1;\n this.eventWorkers = 1;\n if (this.quorum > __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").reduce((a, c) => (a + c.weight), 0)) {\n logger.throwArgumentError(\"quorum exceed provider wieght\", \"quorum\", this.quorum);\n }\n }\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" }))).freeze();\n }\n _getSubscriber(sub) {\n throw new Error(\"@TODO\");\n }\n async _perform(req) {\n await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_initialSync).call(this);\n // Bootstrap enough to meet quorum\n const running = new Set();\n for (let i = 0; i < this.quorum; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n const result = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n for (const runner of running) {\n runner.done = true;\n }\n return result;\n }\n}\n_FallbackProvider_configs = new WeakMap(), _FallbackProvider_initialSyncPromise = new WeakMap(), _FallbackProvider_instances = new WeakSet(), _FallbackProvider_getNextConfig = function _FallbackProvider_getNextConfig(configs) {\n // Shuffle the states, sorted by priority\n const allConfigs = __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").slice();\n shuffle(allConfigs);\n allConfigs.sort((a, b) => (b.priority - a.priority));\n for (const config of allConfigs) {\n if (configs.indexOf(config) === -1) {\n return config;\n }\n }\n return null;\n}, _FallbackProvider_addRunner = function _FallbackProvider_addRunner(running, req) {\n const config = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_getNextConfig).call(this, Array.from(running).map((r) => r.config));\n if (config == null) {\n return null;\n }\n const result = {};\n const runner = {\n config, result, didBump: false, done: false,\n perform: null, staller: null\n };\n const now = getTime();\n runner.perform = (async () => {\n try {\n config.requests++;\n result.result = await config.provider._perform(req);\n }\n catch (error) {\n config.errorResponses++;\n result.error = error;\n }\n if (runner.done) {\n config.lateResponses++;\n }\n const dt = (getTime() - now);\n config._totalTime += dt;\n config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt;\n runner.perform = null;\n })();\n runner.staller = (async () => {\n await stall(config.stallTimeout);\n runner.staller = null;\n })();\n running.add(runner);\n return runner;\n}, _FallbackProvider_initialSync = \n// Initializes the blockNumber and network for each runner and\n// blocks until initialized\nasync function _FallbackProvider_initialSync() {\n let initialSync = __classPrivateFieldGet(this, _FallbackProvider_initialSyncPromise, \"f\");\n if (!initialSync) {\n const promises = [];\n __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").forEach((config) => {\n promises.push(waitForSync(config, 0));\n promises.push((async () => {\n config._network = await config.provider.getNetwork();\n })());\n });\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, initialSync = (async () => {\n // Wait for all providers to have a block number and network\n await Promise.all(promises);\n // Check all the networks match\n let chainId = null;\n for (const config of __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\")) {\n const network = (config._network);\n if (chainId == null) {\n chainId = network.chainId;\n }\n else if (network.chainId !== chainId) {\n logger.throwError(\"cannot mix providers on different networks\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FallbackProvider\"\n });\n }\n }\n })(), \"f\");\n }\n await initialSync;\n}, _FallbackProvider_checkQuorum = async function _FallbackProvider_checkQuorum(running, req) {\n // Get all the result objects\n const results = [];\n for (const runner of running) {\n if (\"result\" in runner.result) {\n const result = runner.result.result;\n results.push({\n result,\n normal: normalize((runner.config._network), result, req),\n weight: runner.config.weight\n });\n }\n }\n // Are there enough results to event meet quorum?\n if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) {\n return undefined;\n }\n switch (req.method) {\n case \"getBlockNumber\": {\n throw new Error(\"TODO\");\n }\n case \"getGasPrice\":\n case \"estimateGas\":\n return getMedian(results);\n case \"getBlock\":\n // Pending blocks are mempool dependant and already\n // quite untrustworthy\n if (\"blockTag\" in req && req.blockTag === \"pending\") {\n return results[0].result;\n }\n return checkQuorum(this.quorum, results);\n case \"chainId\":\n case \"getBalance\":\n case \"getTransactionCount\":\n case \"getCode\":\n case \"getStorageAt\":\n case \"getTransaction\":\n case \"getTransactionReceipt\":\n case \"getLogs\":\n return checkQuorum(this.quorum, results);\n case \"call\":\n // @TODO: Check errors\n return checkQuorum(this.quorum, results);\n case \"sendTransaction\":\n throw new Error(\"TODO\");\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}, _FallbackProvider_waitForQuorum = async function _FallbackProvider_waitForQuorum(running, req) {\n if (running.size === 0) {\n throw new Error(\"no runners?!\");\n }\n // Any promises that are interesting to watch for; an expired stall\n // or a successful perform\n const interesting = [];\n //const results: Array = [ ];\n //const errors: Array = [ ];\n let newRunners = 0;\n for (const runner of running) {\n // @TODO: use runner.perfom != null\n /*\n if (\"result\" in runner.result) {\n results.push(runner.result.result);\n } else if (\"error\" in runner.result) {\n errors.push(runner.result.error);\n }\n*/\n // No responses, yet; keep an eye on it\n if (runner.perform) {\n interesting.push(runner.perform);\n }\n // Still stalling...\n if (runner.staller) {\n interesting.push(runner.staller);\n continue;\n }\n // This runner has already triggered another runner\n if (runner.didBump) {\n continue;\n }\n // Got a response (result or error) or stalled; kick off another runner\n runner.didBump = true;\n newRunners++;\n }\n // Check for quorum\n /*\n console.log({ results, errors } );\n if (results.length >= this.quorum) {\n return results[0];\n }\n\n if (errors.length >= this.quorum) {\n return errors[0];\n }\n */\n const value = await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_checkQuorum).call(this, running, req);\n if (value !== undefined) {\n if (value instanceof Error) {\n throw value;\n }\n return value;\n }\n // Add any new runners, because a staller timed out or a result\n // or error response came in.\n for (let i = 0; i < newRunners; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n if (interesting.length === 0) {\n throw new Error(\"quorum not met\");\n // return logger.throwError(\"failed to meet quorum\", \"\", {\n // });\n }\n // Wait for someone to either complete its perform or trigger a stall\n await Promise.race(interesting);\n return await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n};\n//# sourceMappingURL=provider-fallback.js.map","function getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst _WebSocket = getGlobal().WebSocket;\nexport { _WebSocket as WebSocket };\n//# sourceMappingURL=ws-browser.js.map","/**\n * SocketProvider\n *\n * Generic long-lived socket provider.\n *\n * Sub-classing notes\n * - a sub-class MUST call the `_start()` method once connected\n * - a sub-class MUST override the `_write(string)` method\n * - a sub-class MUST call `_processMessage(string)` for each message\n */\nvar __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 _SocketSubscriber_provider, _SocketSubscriber_filter, _SocketSubscriber_filterId, _SocketSubscriber_paused, _SocketSubscriber_emitPromise, _SocketEventSubscriber_logFilter, _SocketEventSubscriber_formatter, _SocketProvider_callbacks, _SocketProvider_ready, _SocketProvider_subs, _SocketProvider_pending;\nimport { UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { JsonRpcApiProvider } from \"./provider-jsonrpc.js\";\nexport class SocketSubscriber {\n constructor(provider, filter) {\n _SocketSubscriber_provider.set(this, void 0);\n _SocketSubscriber_filter.set(this, void 0);\n _SocketSubscriber_filterId.set(this, void 0);\n _SocketSubscriber_paused.set(this, void 0);\n _SocketSubscriber_emitPromise.set(this, void 0);\n __classPrivateFieldSet(this, _SocketSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n get filter() { return JSON.parse(__classPrivateFieldGet(this, _SocketSubscriber_filter, \"f\")); }\n start() {\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_subscribe\", this.filter).then((filterId) => {\n ;\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\")._register(filterId, this);\n return filterId;\n }), \"f\");\n }\n stop() {\n (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\")).then((filterId) => {\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_unsubscribe\", [filterId]);\n });\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n }\n // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs\n // and resume\n pause(dropWhilePaused) {\n if (!dropWhilePaused) {\n logger.throwError(\"preserve logs while paused not supported by SocketSubscriber yet\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause(false)\"\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_paused, !!dropWhilePaused, \"f\");\n }\n resume() {\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n }\n _handleMessage(message) {\n if (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\") == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _SocketSubscriber_paused, \"f\") === null) {\n let emitPromise = __classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\");\n if (emitPromise == null) {\n emitPromise = this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n }\n else {\n emitPromise = emitPromise.then(async () => {\n await this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, emitPromise.then(() => {\n if (__classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\") === emitPromise) {\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n }), \"f\");\n }\n }\n async _emit(provider, message) {\n throw new Error(\"sub-classes must implemente this; _emit\");\n }\n}\n_SocketSubscriber_provider = new WeakMap(), _SocketSubscriber_filter = new WeakMap(), _SocketSubscriber_filterId = new WeakMap(), _SocketSubscriber_paused = new WeakMap(), _SocketSubscriber_emitPromise = new WeakMap();\nexport class SocketBlockSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newHeads\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"block\", parseInt(message.number));\n }\n}\nexport class SocketPendingSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newPendingTransactions\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"pending\", message);\n }\n}\nexport class SocketEventSubscriber extends SocketSubscriber {\n constructor(provider, filter) {\n super(provider, [\"logs\", filter]);\n _SocketEventSubscriber_logFilter.set(this, void 0);\n _SocketEventSubscriber_formatter.set(this, void 0);\n __classPrivateFieldSet(this, _SocketEventSubscriber_logFilter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketEventSubscriber_formatter, provider.getNetwork().then((network) => network.formatter), \"f\");\n }\n get logFilter() { return JSON.parse(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\")); }\n async _emit(provider, message) {\n const formatter = await __classPrivateFieldGet(this, _SocketEventSubscriber_formatter, \"f\");\n provider.emit(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\"), formatter.log(message, provider));\n }\n}\n_SocketEventSubscriber_logFilter = new WeakMap(), _SocketEventSubscriber_formatter = new WeakMap();\nexport class SocketProvider extends JsonRpcApiProvider {\n constructor(network) {\n super(network);\n _SocketProvider_callbacks.set(this, void 0);\n _SocketProvider_ready.set(this, void 0);\n // Maps each filterId to its subscriber\n _SocketProvider_subs.set(this, void 0);\n // If any events come in before a subscriber has finished\n // registering, queue them\n _SocketProvider_pending.set(this, void 0);\n __classPrivateFieldSet(this, _SocketProvider_callbacks, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_ready, false, \"f\");\n __classPrivateFieldSet(this, _SocketProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_pending, new Map(), \"f\");\n }\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"close\":\n return new UnmanagedSubscriber(\"close\");\n case \"block\":\n return new SocketBlockSubscriber(this);\n case \"pending\":\n return new SocketPendingSubscriber(this);\n case \"event\":\n return new SocketEventSubscriber(this, sub.filter);\n case \"orphan\":\n // Handled auto-matically within AbstractProvider\n // when the log.removed = true\n if (sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"drop-log\");\n }\n }\n return super._getSubscriber(sub);\n }\n _register(filterId, subscriber) {\n __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").set(filterId, subscriber);\n const pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending) {\n for (const message of pending) {\n subscriber._handleMessage(message);\n }\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").delete(filterId);\n }\n }\n async send(method, params) {\n const payload = this.prepareRequest(method, params);\n const promise = new Promise((resolve, reject) => {\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").set(payload.id, { payload, resolve, reject });\n });\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n await this._write(JSON.stringify(payload));\n }\n return await promise;\n }\n // Sub-classes must call this once they are connected\n async _start() {\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _SocketProvider_ready, true, \"f\");\n for (const { payload } of __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").values()) {\n await this._write(JSON.stringify(payload));\n }\n }\n // Sub-classes must call this for each message\n async _processMessage(message) {\n const result = JSON.parse(message);\n if (\"id\" in result) {\n const promise = __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").get(result.id);\n if (!promise) {\n console.log(\"Weird... Response for not a thing we sent\");\n return;\n }\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").delete(result.id);\n if (\"error\" in result) {\n const { message, code, data } = result.error;\n const error = logger.makeError(message || \"unkonwn error\", \"SERVER_ERROR\", {\n request: `ws:${JSON.stringify(promise.payload)}`,\n info: { code, data }\n });\n promise.reject(error);\n }\n else {\n promise.resolve(result.result);\n }\n }\n else if (result.method === \"eth_subscription\") {\n const filterId = result.params.subscription;\n const subscriber = __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").get(filterId);\n if (subscriber) {\n subscriber._handleMessage(result.params.result);\n }\n else {\n let pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending == null) {\n pending = [];\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").set(filterId, pending);\n }\n pending.push(result.params.result);\n }\n }\n }\n async _write(message) {\n throw new Error(\"sub-classes must override this\");\n }\n}\n_SocketProvider_callbacks = new WeakMap(), _SocketProvider_ready = new WeakMap(), _SocketProvider_subs = new WeakMap(), _SocketProvider_pending = new WeakMap();\n//# sourceMappingURL=provider-socket.js.map","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 _WebSocketProvider_websocket;\nimport { WebSocket } from \"ws\"; /*-browser*/\nimport { SocketProvider } from \"./provider-socket.js\";\nexport class WebSocketProvider extends SocketProvider {\n constructor(url, network) {\n super(network);\n _WebSocketProvider_websocket.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, new WebSocket(url), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, url, \"f\");\n }\n this.websocket.onopen = () => {\n this._start();\n };\n this.websocket.onmessage = (message) => {\n this._processMessage(message.data);\n };\n }\n get websocket() { return __classPrivateFieldGet(this, _WebSocketProvider_websocket, \"f\"); }\n async _write(message) {\n this.websocket.send(message);\n }\n}\n_WebSocketProvider_websocket = new WeakMap();\n//# sourceMappingURL=provider-websocket.js.map","import { EnsPlugin, GasCostPlugin, MaxPriorityFeePlugin } from \"./plugins-network.js\";\nimport { EtherscanPlugin } from \"./provider-etherscan.js\";\nimport { Network as _Network } from \"./network.js\";\n// See: https://chainlist.org\nfunction injectCommonNetworks(Network) {\n /// Register popular Ethereum networks\n function registerEth(name, chainId, options) {\n const func = function () {\n const network = new Network(name, chainId);\n // We use 0 to disable ENS\n if (options.ensNetwork != null) {\n network.attachPlugin(new EnsPlugin(null, options.ensNetwork));\n }\n if (options.priorityFee) {\n network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee));\n }\n if (options.etherscan) {\n const { url, apiKey } = options.etherscan;\n network.attachPlugin(new EtherscanPlugin(url, apiKey));\n }\n network.attachPlugin(new GasCostPlugin());\n return network;\n };\n // Register the network by name and chain ID\n Network.register(name, func);\n Network.register(chainId, func);\n if (options.altNames) {\n options.altNames.forEach((name) => {\n Network.register(name, func);\n });\n }\n }\n registerEth(\"homestead\", 1, { ensNetwork: 1, altNames: [\"mainnet\"] });\n registerEth(\"ropsten\", 3, { ensNetwork: 3 });\n registerEth(\"rinkeby\", 4, { ensNetwork: 4 });\n registerEth(\"goerli\", 5, { ensNetwork: 5 });\n registerEth(\"kovan\", 42, { ensNetwork: 42 });\n registerEth(\"classic\", 61, {});\n registerEth(\"classicKotti\", 6, {});\n registerEth(\"xdai\", 100, { ensNetwork: 1 });\n // Polygon has a 35 gwei maxPriorityFee requirement\n registerEth(\"matic\", 137, {\n ensNetwork: 1,\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api.polygonscan.com/\"\n }\n });\n registerEth(\"maticMumbai\", 80001, {\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api-testnet.polygonscan.com/\"\n }\n });\n registerEth(\"bnb\", 56, {\n ensNetwork: 1,\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api.bscscan.com\"\n }\n });\n registerEth(\"bnbt\", 97, {\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api-testnet.bscscan.com\"\n }\n });\n return Network;\n}\nconst Network = injectCommonNetworks(_Network);\nexport { Network };\n//# sourceMappingURL=common-networks.js.map","const IpcSocketProvider = undefined;\nexport { IpcSocketProvider };\n//# sourceMappingURL=provider-ipcsocket-browser.js.map","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 _ContractTransactionReceipt_interface, _ContractTransactionResponse_interface;\nimport { defineProperties, EventPayload } from \"@ethersproject/properties\";\nimport { Log, TransactionReceipt, TransactionResponse } from \"@ethersproject/providers\";\nexport class EventLog extends Log {\n constructor(log, iface, fragment) {\n super(log, log.provider);\n const args = iface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, interface: iface });\n }\n get eventName() { return this.fragment.name; }\n get eventSignature() { return this.fragment.format(); }\n}\nexport class ContractTransactionReceipt extends TransactionReceipt {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionReceipt_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionReceipt_interface, iface, \"f\");\n }\n get logs() {\n return super.logs.map((log) => {\n const fragment = log.topics.length ? __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\").getEvent(log.topics[0]) : null;\n if (fragment) {\n return new EventLog(log, __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\"), fragment);\n }\n else {\n return log;\n }\n });\n }\n}\n_ContractTransactionReceipt_interface = new WeakMap();\nexport class ContractTransactionResponse extends TransactionResponse {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionResponse_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionResponse_interface, iface, \"f\");\n }\n async wait(confirms) {\n const receipt = await super.wait();\n if (receipt == null) {\n return null;\n }\n return new ContractTransactionReceipt(__classPrivateFieldGet(this, _ContractTransactionResponse_interface, \"f\"), this.provider, receipt);\n }\n}\n_ContractTransactionResponse_interface = new WeakMap();\nexport class ContractEventPayload extends EventPayload {\n constructor(contract, listener, filter, fragment, _log) {\n super(contract, listener, filter);\n const log = new EventLog(_log, contract.interface, fragment);\n const args = contract.interface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, log });\n }\n get eventName() {\n return this.fragment.name;\n }\n get eventSignature() {\n return this.fragment.format();\n }\n async getBlock() {\n return await this.log.getBlock();\n }\n async getTransaction() {\n return await this.log.getTransaction();\n }\n async getTransactionReceipt() {\n return await this.log.getTransactionReceipt();\n }\n}\n//# sourceMappingURL=wrappers.js.map","export const version = \"@ethersproject/contract@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _PreparedTopicFilter_filter;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { Interface, Typed } from \"@ethersproject/abi\";\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { copyRequest } from \"@ethersproject/providers\";\nimport { ContractEventPayload, ContractTransactionResponse, EventLog } from \"./wrappers.js\";\nimport { logger } from \"./logger.js\";\nfunction canEstimate(value) {\n return (value && typeof (value.estimateGas) === \"function\");\n}\nfunction canCall(value) {\n return (value && typeof (value.call) === \"function\");\n}\nfunction canSend(value) {\n return (value && typeof (value.sendTransaction) === \"function\");\n}\nfunction canResolve(value) {\n return (value && typeof (value.resolveName) === \"function\");\n}\nfunction canQuery(value) {\n return (value && typeof (value.getLogs) === \"function\");\n}\nfunction canSubscribe(value) {\n return (value && typeof (value.on) === \"function\" && typeof (value.off) === \"function\");\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\nclass PreparedTopicFilter {\n constructor(contract, fragment, args) {\n _PreparedTopicFilter_filter.set(this, void 0);\n defineProperties(this, { fragment });\n if (fragment.inputs.length < args.length) {\n throw new Error(\"too many arguments\");\n }\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(contract.runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n __classPrivateFieldSet(this, _PreparedTopicFilter_filter, (async function () {\n const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n })(), \"f\");\n }\n getTopicFilter() {\n return __classPrivateFieldGet(this, _PreparedTopicFilter_filter, \"f\");\n }\n}\n_PreparedTopicFilter_filter = new WeakMap();\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n// the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n// TransactionResponse otherwise)\n//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\nfunction _WrappedMethodBase() {\n return Function;\n}\nfunction getRunner(value, feature) {\n if (value == null) {\n return null;\n }\n if (typeof (value[feature]) === \"function\") {\n return value;\n }\n if (value.provider && typeof (value.provider[feature]) === \"function\") {\n return value.provider;\n }\n return null;\n}\nexport async function copyOverrides(arg) {\n // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n const overrides = copyRequest(Typed.dereference(arg, \"overrides\"));\n // Some sanity checking; these are what these methods adds\n //if ((overrides).to) {\n if (overrides.to) {\n logger.throwArgumentError(\"cannot override to\", \"overrides.to\", overrides.to);\n }\n else if (overrides.data) {\n logger.throwArgumentError(\"cannot override data\", \"overrides.data\", overrides.data);\n }\n // Resolve any from\n if (overrides.from) {\n overrides.from = await resolveAddress(overrides.from);\n }\n return overrides;\n}\nexport async function resolveArgs(_runner, inputs, args) {\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(_runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n return await Promise.all(inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n}\nclass WrappedMethod extends _WrappedMethodBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getFunctionName(key),\n _contract: contract, _key: key\n });\n const proxy = new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n const fragment = target.getFragment(...args);\n if (fragment.constant) {\n return await target.staticCall(...args);\n }\n return await target.send(...args);\n },\n });\n return proxy;\n }\n // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n get fragment() {\n return this._contract.interface.getFunction(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getFunction(this._key, args);\n }\n async populateTransaction(...args) {\n const fragment = this.getFragment(...args);\n // If an overrides was passed in, copy it and normalize the values\n let overrides = {};\n if (fragment.inputs.length + 1 === args.length) {\n overrides = await copyOverrides(args.pop());\n }\n if (fragment.inputs.length !== args.length) {\n throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n }\n const resolvedArgs = await resolveArgs(this._contract.runner, fragment.inputs, args);\n return Object.assign({}, overrides, await resolveProperties({\n to: this._contract.getAddress(),\n data: this._contract.interface.encodeFunctionData(fragment, resolvedArgs)\n }));\n }\n async staticCall(...args) {\n const result = await this.staticCallResult(...args);\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n async send(...args) {\n const runner = getRunner(this._contract.runner, \"sendTransaction\");\n if (!canSend(runner)) {\n return logger.throwError(\"contract runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", {\n operation: \"sendTransaction\"\n });\n }\n const tx = await runner.sendTransaction(await this.populateTransaction(...args));\n const provider = getRunner(this._contract.runner, \"getLogs\");\n return new ContractTransactionResponse(this._contract.interface, provider, tx);\n }\n async estimateGas(...args) {\n const runner = getRunner(this._contract.runner, \"estimateGas\");\n if (!canEstimate(runner)) {\n return logger.throwError(\"contract runner does not support gas estimation\", \"UNSUPPORTED_OPERATION\", {\n operation: \"estimateGas\"\n });\n }\n return await runner.estimateGas(await this.populateTransaction(...args));\n }\n async staticCallResult(...args) {\n const runner = getRunner(this._contract.runner, \"call\");\n if (!canCall(runner)) {\n return logger.throwError(\"contract runner does not support calling\", \"UNSUPPORTED_OPERATION\", {\n operation: \"call\"\n });\n }\n const fragment = this.getFragment(...args);\n const tx = await this.populateTransaction(...args);\n let result = \"0x\";\n try {\n result = await runner.call(tx);\n }\n catch (error) {\n if (isCallException(error)) {\n throw this._contract.interface.makeError(fragment, error.data, tx);\n }\n throw error;\n }\n return this._contract.interface.decodeFunctionResult(fragment, result);\n }\n}\nfunction _WrappedEventBase() {\n return Function;\n}\nclass WrappedEvent extends _WrappedEventBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getEventName(key),\n _contract: contract, _key: key\n });\n return new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n return new PreparedTopicFilter(contract, target.getFragment(...args), args);\n },\n });\n }\n // Only works on non-ambiguous keys\n get fragment() {\n return this._contract.interface.getEvent(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getEvent(this._key, args);\n }\n}\n;\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\nconst internal = Symbol.for(\"_ethersInternal_contract\");\nconst internalValues = new WeakMap();\nfunction setInternal(contract, values) {\n internalValues.set(contract[internal], values);\n}\nfunction getInternal(contract) {\n return internalValues.get(contract[internal]);\n}\nfunction isDeferred(value) {\n return (value && typeof (value) === \"object\" && (\"getTopicFilter\" in value) &&\n (typeof (value.getTopicFilter) === \"function\") && value.fragment);\n}\nasync function getSubTag(contract, event) {\n let fragment;\n let topics;\n if (Array.isArray(event)) {\n // Topics; e.g. `[ \"0x1234...89ab\" ]`\n fragment = contract.interface.getEvent(event[0]);\n topics = event;\n }\n else if (typeof (event) === \"string\") {\n // Event name (name or signature); `\"Transfer\"`\n fragment = contract.interface.getEvent(event);\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else if (isDeferred(event)) {\n // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n fragment = event.fragment;\n topics = await event.getTopicFilter();\n }\n else if (\"fragment\" in event) {\n // ContractEvent; e.g. `contract.filter.Transfer`\n fragment = event.fragment;\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else {\n console.log(event);\n throw new Error(\"TODO\");\n }\n // Normalize topics and sort TopicSets\n topics = topics.map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n });\n const tag = topics.map((t) => {\n if (t == null) {\n return \"null\";\n }\n if (Array.isArray(t)) {\n return t.join(\"|\");\n }\n return t;\n }).join(\"&\");\n return { fragment, tag, topics };\n}\nasync function hasSub(contract, event) {\n const { subs } = getInternal(contract);\n return subs.get((await getSubTag(contract, event)).tag) || null;\n}\nasync function getSub(contract, event) {\n // Make sure our runner can actually subscribe to events\n const runner = getRunner(contract.runner, \"on\");\n const runnerOff = getRunner(contract.runner, \"off\");\n if (!runner || runner !== runnerOff || !canSubscribe(runner)) {\n return logger.throwError(\"contract runner does not support subscribing\", \"UNSUPPORTED_OPERATION\", {\n operation: \"on\"\n });\n }\n const { fragment, tag, topics } = await getSubTag(contract, event);\n const { addr, subs } = getInternal(contract);\n let sub = subs.get(tag);\n if (!sub) {\n const address = (addr ? addr : contract);\n const filter = { address, topics };\n const listener = (log) => {\n const payload = new ContractEventPayload(contract, null, event, fragment, log);\n emit(contract, event, payload.args, payload);\n };\n let started = false;\n const start = () => {\n if (started) {\n return;\n }\n runner.on(filter, listener);\n started = true;\n };\n const stop = () => {\n if (!started) {\n return;\n }\n runner.off(filter, listener);\n started = false;\n };\n sub = { tag, listeners: [], start, stop };\n subs.set(tag, sub);\n }\n return sub;\n}\nasync function _emit(contract, event, args, payload) {\n await lastEmit;\n const sub = await hasSub(contract, event);\n if (!sub) {\n return false;\n }\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const passArgs = args.slice();\n if (payload) {\n passArgs.push(new ContractEventPayload(contract, (once ? null : listener), event, payload.fragment, payload.log));\n }\n setTimeout(() => { listener.call(contract, ...passArgs); }, 0);\n return !once;\n });\n return (count > 0);\n}\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit = Promise.resolve();\nasync function emit(contract, event, args, payload) {\n try {\n await lastEmit;\n }\n catch (error) { }\n const resultPromise = _emit(contract, event, args, payload);\n lastEmit = resultPromise;\n return await resultPromise;\n}\nconst passProperties = [\"then\"];\nexport class BaseContract {\n constructor(target, abi, runner = null, _deployTx) {\n const iface = Interface.from(abi);\n defineProperties(this, { target, runner, interface: iface });\n Object.defineProperty(this, internal, { value: {} });\n let addrPromise;\n let addr = null;\n let deployTx = null;\n if (_deployTx) {\n const provider = getRunner(runner, \"getLogs\");\n deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx);\n }\n let subs = new Map();\n // Resolve the target as the address\n if (typeof (target) === \"string\") {\n if (isHexString(target)) {\n addr = target;\n addrPromise = Promise.resolve(target);\n }\n else {\n const resolver = getRunner(runner, \"resolveName\");\n if (!canResolve(resolver)) {\n throw logger.makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\"\n });\n }\n addrPromise = resolver.resolveName(target).then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n }\n else {\n addrPromise = target.getAddress().then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n // Set our private values\n setInternal(this, { addrPromise, addr, deployTx, subs });\n // Add the event filters\n const filters = new Proxy({}, {\n get: (target, _prop, receiver) => {\n // Pass important checks (like `then` for Promise) through\n if (passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = this.getEvent(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract event: ${prop}`);\n }\n });\n defineProperties(this, { filters });\n // Return a Proxy that will respond to functions\n return new Proxy(this, {\n get: (target, _prop, receiver) => {\n if (_prop in target || passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = target.getFunction(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract method: ${prop}`);\n }\n });\n }\n async getAddress() { return await getInternal(this).addrPromise; }\n deploymentTransaction() {\n return getInternal(this).deployTx;\n }\n getFunction(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedMethod(this, key));\n }\n getEvent(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedEvent(this, key));\n }\n async queryFilter(event, fromBlock = 0, toBlock = \"latest\") {\n const { addr, addrPromise } = getInternal(this);\n const address = (addr ? addr : (await addrPromise));\n const { fragment, topics } = await getSubTag(this, event);\n const filter = { address, topics, fromBlock, toBlock };\n const runner = getRunner(this.runner, \"getLogs\");\n if (!canQuery(runner)) {\n return logger.throwError(\"contract runner does not support querying\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getLogs\"\n });\n }\n return (await runner.getLogs(filter)).map((log) => {\n return new EventLog(log, this.interface, fragment);\n });\n }\n async on(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: false });\n sub.start();\n return this;\n }\n async once(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: true });\n sub.start();\n return this;\n }\n async emit(event, ...args) {\n return await emit(this, event, args, null);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n const { subs } = getInternal(this);\n let total = 0;\n for (const { listeners } of subs.values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n const { subs } = getInternal(this);\n let result = [];\n for (const { listeners } of subs.values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (listener == null || sub.listeners.length === 0) {\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n else {\n const { subs } = getInternal(this);\n for (const { tag, stop } of subs.values()) {\n stop();\n subs.delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return await this.off(event, listener);\n }\n static buildClass(abi) {\n class CustomContract extends BaseContract {\n constructor(address, runner = null) {\n super(address, abi, runner);\n }\n }\n return CustomContract;\n }\n ;\n static from(target, abi, runner = null) {\n const contract = new this(target, abi, runner);\n return contract;\n }\n}\nfunction _ContractBase() {\n return BaseContract;\n}\nexport class Contract extends _ContractBase() {\n}\n//# sourceMappingURL=contract.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nexport function computeAddress(key) {\n const publicKey = SigningKey.computePublicKey(key, false);\n return getAddress(keccak256(\"0x\" + publicKey.substring(4)).substring(26));\n}\n//# sourceMappingURL=address.js.map","const subsChrs = \" !#$%&'()*+,-./<=>?@[]^_`{|}~\";\nconst Word = /^[a-z]*$/i;\nfunction unfold(words, sep) {\n let initial = 97;\n return words.reduce((accum, word) => {\n if (word === sep) {\n initial++;\n }\n else if (word.match(Word)) {\n accum.push(String.fromCharCode(initial) + word);\n }\n else {\n initial = 97;\n accum.push(word);\n }\n return accum;\n }, []);\n}\nexport function decode(data, subs) {\n // Replace all the substitutions with their expanded form\n for (let i = subsChrs.length - 1; i >= 0; i--) {\n data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2));\n }\n // Get all tle clumps; each suffix, first-increment and second-increment\n const clumps = [];\n const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => {\n if (semi) {\n for (let i = parseInt(semi); i >= 0; i--) {\n clumps.push(\";\");\n }\n }\n else {\n clumps.push(item.toLowerCase());\n }\n return \"\";\n });\n if (leftover) {\n throw new Error(`leftovers: ${JSON.stringify(leftover)}`);\n }\n return unfold(unfold(clumps, \";\"), \":\");\n}\nexport function decodeOwl(data) {\n if (data[0] !== \"0\") {\n throw TypeError(\"unsupported auwl data\");\n }\n return decode(data.substring(1 + 2 * subsChrs.length), data.substring(1, 1 + 2 * subsChrs.length));\n}\n//# sourceMappingURL=decode-owl.js.map","export const version = \"@ethersproject/wordlists@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { defineProperties } from \"@ethersproject/properties\";\nexport class Wordlist {\n constructor(locale) {\n defineProperties(this, { locale });\n }\n // Subclasses may override this\n split(mnemonic) {\n return mnemonic.toLowerCase().split(/ +/g);\n }\n // Subclasses may override this\n join(words) {\n return words.join(\" \");\n }\n}\n//# sourceMappingURL=wordlist.js.map","// Use the encode-latin.js script to create the necessary\n// data files to be consumed by this class\nvar __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 _WordlistOwl_instances, _WordlistOwl_data, _WordlistOwl_checksum, _WordlistOwl_words, _WordlistOwl_loadWords;\nimport { id } from \"@ethersproject/hash\";\nimport { decodeOwl } from \"./decode-owl.js\";\nimport { logger } from \"./logger.js\";\nimport { Wordlist } from \"./wordlist.js\";\nexport class WordlistOwl extends Wordlist {\n constructor(locale, data, checksum) {\n super(locale);\n _WordlistOwl_instances.add(this);\n _WordlistOwl_data.set(this, void 0);\n _WordlistOwl_checksum.set(this, void 0);\n _WordlistOwl_words.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwl_data, data, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_checksum, checksum, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_words, null, \"f\");\n }\n get _data() { return __classPrivateFieldGet(this, _WordlistOwl_data, \"f\"); }\n _decodeWords() {\n return decodeOwl(__classPrivateFieldGet(this, _WordlistOwl_data, \"f\"));\n }\n getWord(index) {\n const words = __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this);\n if (index < 0 || index >= words.length) {\n logger.throwArgumentError(`invalid word index: ${index}`, \"index\", index);\n }\n return words[index];\n }\n getWordIndex(word) {\n return __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this).indexOf(word);\n }\n}\n_WordlistOwl_data = new WeakMap(), _WordlistOwl_checksum = new WeakMap(), _WordlistOwl_words = new WeakMap(), _WordlistOwl_instances = new WeakSet(), _WordlistOwl_loadWords = function _WordlistOwl_loadWords() {\n if (__classPrivateFieldGet(this, _WordlistOwl_words, \"f\") == null) {\n const words = this._decodeWords();\n // Verify the computed list matches the official list\n const checksum = id(words.join(\"\\n\") + \"\\n\");\n /* c8 ignore start */\n if (checksum !== __classPrivateFieldGet(this, _WordlistOwl_checksum, \"f\")) {\n throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);\n }\n /* c8 ignore stop */\n __classPrivateFieldSet(this, _WordlistOwl_words, words, \"f\");\n }\n return __classPrivateFieldGet(this, _WordlistOwl_words, \"f\");\n};\n//# sourceMappingURL=wordlist-owl.js.map","import { WordlistOwl } from \"./wordlist-owl.js\";\nconst words = \"0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO\";\nconst checksum = \"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\";\nexport class LangEn extends WordlistOwl {\n constructor() { super(\"en\", words, checksum); }\n}\nexport const langEn = new LangEn();\n//# sourceMappingURL=lang-en.js.map","export const version = \"@ethersproject/wallet@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { langEn as en } from \"./lang-en.js\";\nexport const wordlists = Object.freeze({\n en\n});\n//# sourceMappingURL=wordlists-en.js.map","const Base64 = \")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\";\nexport function decodeBits(width, data) {\n const maxValue = (1 << width) - 1;\n const result = [];\n let accum = 0, bits = 0, flood = 0;\n for (let i = 0; i < data.length; i++) {\n // Accumulate 6 bits of data\n accum = ((accum << 6) | Base64.indexOf(data[i]));\n bits += 6;\n // While we have enough for a word...\n while (bits >= width) {\n // ...read the word\n const value = (accum >> (bits - width));\n accum &= (1 << (bits - width)) - 1;\n bits -= width;\n // A value of 0 indicates we exceeded maxValue, it\n // floods over into the next value\n if (value === 0) {\n flood += maxValue;\n }\n else {\n result.push(value + flood);\n flood = 0;\n }\n }\n }\n return result;\n}\n//# sourceMappingURL=bit-reader.js.map","import { decodeBits } from \"./bit-reader.js\";\nimport { decodeOwl } from \"./decode-owl.js\";\nexport function decodeOwlA(data, accents) {\n let words = decodeOwl(data).join(\",\");\n // Inject the accents\n accents.split(/,/g).forEach((accent) => {\n const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);\n if (!match) {\n throw new Error(\"internal error parsing accents\");\n }\n let posOffset = 0;\n const positions = decodeBits(parseInt(match[3]), match[4]);\n const charCode = parseInt(match[2]);\n const regex = new RegExp(`([${match[1]}])`, \"g\");\n words = words.replace(regex, (all, letter) => {\n const rem = --positions[posOffset];\n if (rem === 0) {\n letter = String.fromCharCode(letter.charCodeAt(0), charCode);\n posOffset++;\n }\n return letter;\n });\n });\n return words.split(\",\");\n}\n//# sourceMappingURL=decode-owla.js.map","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 _WordlistOwlA_accent;\nimport { WordlistOwl } from \"./wordlist-owl.js\";\nimport { decodeOwlA } from \"./decode-owla.js\";\nexport class WordlistOwlA extends WordlistOwl {\n constructor(locale, data, accent, checksum) {\n super(locale, data, checksum);\n _WordlistOwlA_accent.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwlA_accent, accent, \"f\");\n }\n get _accent() { return __classPrivateFieldGet(this, _WordlistOwlA_accent, \"f\"); }\n _decodeWords() {\n return decodeOwlA(this._data, this._accent);\n }\n}\n_WordlistOwlA_accent = new WeakMap();\n//# sourceMappingURL=wordlist-owla.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { pbkdf2, sha256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from \"@ethersproject/strings\";\nimport { langEn } from \"@ethersproject/wordlists\";\nimport { logger } from \"./logger.js\";\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits) {\n return ((1 << bits) - 1) << (8 - bits) & 0xff;\n}\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits) {\n return ((1 << bits) - 1) & 0xff;\n}\nfunction mnemonicToEntropy(mnemonic, wordlist = langEn) {\n logger.assertNormalize(\"NFKD\");\n if (wordlist == null) {\n wordlist = langEn;\n }\n const words = wordlist.split(mnemonic);\n if ((words.length % 3) !== 0 || words.length < 12 || words.length > 24) {\n logger.throwArgumentError(\"invalid mnemonic length\", \"mnemonic\", \"[ REDACTED ]\");\n }\n const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));\n let offset = 0;\n for (let i = 0; i < words.length; i++) {\n let index = wordlist.getWordIndex(words[i].normalize(\"NFKD\"));\n if (index === -1) {\n logger.throwArgumentError(`invalid mnemonic word at index ${i}`, \"mnemonic\", \"[ REDACTED ]\");\n }\n for (let bit = 0; bit < 11; bit++) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n }\n offset++;\n }\n }\n const entropyBits = 32 * words.length / 3;\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n logger.throwArgumentError(\"invalid mnemonic checksum\", \"mnemonic\", \"[ REDACTED ]\");\n }\n return hexlify(entropy.slice(0, entropyBits / 8));\n}\nfunction entropyToMnemonic(entropy, wordlist = langEn) {\n if ((entropy.length % 4) || entropy.length < 16 || entropy.length > 32) {\n logger.throwArgumentError(\"invalid entropy size\", \"entropy\", \"[ REDACTED ]\");\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n const indices = [0];\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i++) {\n // Consume the whole byte (with still more to go)\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n }\n else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n remainingBits += 3;\n }\n }\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits);\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\n return wordlist.join(indices.map((index) => wordlist.getWord(index)));\n}\nconst _guard = {};\nexport class Mnemonic {\n constructor(guard, entropy, phrase, password, wordlist) {\n if (password == null) {\n password = \"\";\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n logger.assertPrivate(guard, _guard, \"Mnemonic\");\n defineProperties(this, { phrase, password, wordlist, entropy });\n }\n computeSeed() {\n const salt = toUtf8Bytes(\"mnemonic\" + this.password, UnicodeNormalizationForm.NFKD);\n return pbkdf2(toUtf8Bytes(this.phrase, UnicodeNormalizationForm.NFKD), salt, 2048, 64, \"sha512\");\n }\n static fromPhrase(phrase, password, wordlist) {\n // Normalize the case and space; throws if invalid\n const entropy = mnemonicToEntropy(phrase, wordlist);\n phrase = entropyToMnemonic(logger.getBytes(entropy), wordlist);\n return new Mnemonic(_guard, entropy, phrase, password, wordlist);\n }\n static fromEntropy(_entropy, password, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n const phrase = entropyToMnemonic(entropy, wordlist);\n return new Mnemonic(_guard, hexlify(entropy), phrase, password, wordlist);\n }\n static entropyToPhrase(_entropy, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n return entropyToMnemonic(entropy, wordlist);\n }\n static phraseToEntropy(phrase, wordlist) {\n return mnemonicToEntropy(phrase, wordlist);\n }\n static isValidMnemonic(phrase, wordlist) {\n try {\n mnemonicToEntropy(phrase, wordlist);\n return true;\n }\n catch (error) { }\n return false;\n }\n}\n//# sourceMappingURL=mnemonic.js.map","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 _BaseWallet_signingKey;\nimport { getAddress, resolveAddress } from \"@ethersproject/address\";\nimport { hashMessage, TypedDataEncoder } from \"@ethersproject/hash\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { AbstractSigner } from \"@ethersproject/providers\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport class BaseWallet extends AbstractSigner {\n constructor(privateKey, provider) {\n super(provider);\n _BaseWallet_signingKey.set(this, void 0);\n __classPrivateFieldSet(this, _BaseWallet_signingKey, privateKey, \"f\");\n const address = computeAddress(this.signingKey.publicKey);\n defineProperties(this, { address });\n }\n // Store these in getters to reduce visibility in console.log\n get signingKey() { return __classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"); }\n get privateKey() { return this.signingKey.privateKey; }\n async getAddress() { return this.address; }\n connect(provider) {\n return new BaseWallet(__classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"), provider);\n }\n async signTransaction(_tx) {\n // Replace any Addressable or ENS name with an address\n const tx = Object.assign({}, _tx, await resolveProperties({\n to: (_tx.to ? resolveAddress(_tx.to, this.provider) : undefined),\n from: (_tx.from ? resolveAddress(_tx.from, this.provider) : undefined)\n }));\n if (tx.from != null) {\n if (getAddress(tx.from) !== this.address) {\n logger.throwArgumentError(\"transaction from address mismatch\", \"tx.from\", _tx.from);\n }\n delete tx.from;\n }\n // Build the transaction\n const btx = Transaction.from(tx);\n btx.signature = this.signingKey.sign(btx.unsignedHash);\n return btx.serialized;\n }\n async signMessage(message) {\n return this.signingKey.sign(hashMessage(message)).serialized;\n }\n async signTypedData(domain, types, value) {\n // Populate any ENS names\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name) => {\n if (this.provider == null) {\n return logger.throwError(\"cannot resolve ENS names without a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n info: { name }\n });\n }\n const address = await this.provider.resolveName(name);\n if (address == null) {\n return logger.throwError(\"unconfigured ENS name\", \"UNCONFIGURED_NAME\", {\n value: name\n });\n }\n return address;\n });\n return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized;\n }\n}\n_BaseWallet_signingKey = new WeakMap();\n//# sourceMappingURL=base-wallet.js.map","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 __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 _a, _HDNodeWallet_fromSeed, _HDNodeWalletManager_root;\nimport { arrayify, concat, dataSlice, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac, randomBytes, ripemd160, sha256 } from \"@ethersproject/crypto\";\nimport { decodeBase58, encodeBase58, toBigInt, toHex } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { VoidSigner } from \"@ethersproject/providers\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { langEn } from \"@ethersproject/wordlists/lib/lang-en.js\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nexport const defaultPath = \"m/44'/60'/0'/0/0\";\n// \"Bitcoin seed\"\nconst MasterSecret = new Uint8Array([66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100]);\nconst HardenedBit = 0x80000000;\nconst N = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\nconst Nibbles = \"0123456789abcdef\";\nfunction zpad(value, length) {\n let result = \"\";\n while (value) {\n result = Nibbles[value % 16] + result;\n value = Math.trunc(value / 16);\n }\n while (result.length < length * 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction encodeBase58Check(_value) {\n const value = logger.getBytes(_value);\n const check = dataSlice(sha256(sha256(value)), 0, 4);\n const bytes = concat([value, check]);\n return encodeBase58(bytes);\n}\nconst _guard = {};\nfunction ser_I(index, chainCode, publicKey, privateKey) {\n const data = new Uint8Array(37);\n if (index & HardenedBit) {\n if (privateKey == null) {\n return logger.throwError(\"cannot derive child of neutered node\", \"UNSUPPORTED_OPERATION\", {\n operation: \"deriveChild\"\n });\n }\n // Data = 0x00 || ser_256(k_par)\n data.set(arrayify(privateKey), 1);\n }\n else {\n // Data = ser_p(point(k_par))\n data.set(arrayify(publicKey));\n }\n // Data += ser_32(i)\n for (let i = 24; i >= 0; i -= 8) {\n data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff);\n }\n const I = arrayify(computeHmac(\"sha512\", chainCode, data));\n return { IL: I.slice(0, 32), IR: I.slice(32) };\n}\nfunction derivePath(node, path) {\n const components = path.split(\"/\");\n if (components.length === 0 || (components[0] === \"m\" && node.depth !== 0)) {\n throw new Error(\"invalid path - \" + path);\n }\n if (components[0] === \"m\") {\n components.shift();\n }\n let result = node;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n if (component.match(/^[0-9]+'$/)) {\n const index = parseInt(component.substring(0, component.length - 1));\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(HardenedBit + index);\n }\n else if (component.match(/^[0-9]+$/)) {\n const index = parseInt(component);\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(index);\n }\n else {\n throw new Error(\"invalid path component - \" + component);\n }\n }\n return result;\n}\nexport class HDNodeWallet extends BaseWallet {\n constructor(guard, signingKey, parentFingerprint, chainCode, path, index, depth, mnemonic, provider) {\n super(signingKey, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeWallet\");\n defineProperties(this, { publicKey: signingKey.compressedPublicKey });\n const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n defineProperties(this, {\n parentFingerprint, fingerprint,\n chainCode, path, index, depth\n });\n defineProperties(this, { mnemonic });\n }\n connect(provider) {\n return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488ADE4\", zpad(this.depth, 1), this.parentFingerprint,\n zpad(this.index, 4), this.chainCode,\n concat([\"0x00\", this.privateKey])\n ]));\n }\n hasPath() { return (this.path != null); }\n neuter() {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.provider);\n }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey);\n const ki = new SigningKey(toHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32));\n return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.mnemonic, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n static fromSeed(seed) {\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, seed, null);\n }\n static fromPhrase(phrase, password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromMnemonic(mnemonic, path = defaultPath) {\n if (!path) {\n path = defaultPath;\n }\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromExtendedKey(extendedKey) {\n const bytes = arrayify(decodeBase58(extendedKey)); // @TODO: redact\n if (bytes.length !== 82 || encodeBase58Check(bytes.slice(0, 78)) !== extendedKey) {\n logger.throwArgumentError(\"invalid extended key\", \"extendedKey\", \"[ REDACTED ]\");\n }\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n switch (hexlify(bytes.slice(0, 4))) {\n // Public Key\n case \"0x0488b21e\":\n case \"0x043587cf\": {\n const publicKey = hexlify(key);\n return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey, parentFingerprint, chainCode, null, index, depth, null);\n }\n // Private Key\n case \"0x0488ade4\":\n case \"0x04358394 \":\n if (key[0] !== 0) {\n break;\n }\n return new HDNodeWallet(_guard, new SigningKey(key.slice(1)), parentFingerprint, chainCode, null, index, depth, null, null);\n }\n return logger.throwArgumentError(\"invalid extended key prefix\", \"extendedKey\", \"[ REDACTED ]\");\n }\n static createRandom(password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n}\n_a = HDNodeWallet, _HDNodeWallet_fromSeed = function _HDNodeWallet_fromSeed(_seed, mnemonic) {\n const seed = logger.getBytes(_seed, \"seed\");\n if (seed.length < 16 || seed.length > 64) {\n throw new Error(\"invalid seed\");\n }\n const I = arrayify(computeHmac(\"sha512\", MasterSecret, seed));\n const signingKey = new SigningKey(hexlify(I.slice(0, 32)));\n return new HDNodeWallet(_guard, signingKey, \"0x00000000\", hexlify(I.slice(32)), \"m\", 0, 0, mnemonic, null);\n};\nexport class HDNodeVoidWallet extends VoidSigner {\n constructor(guard, address, publicKey, parentFingerprint, chainCode, path, index, depth, provider) {\n super(address, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeVoidWallet\");\n defineProperties(this, { publicKey });\n const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4);\n defineProperties(this, {\n publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth\n });\n }\n connect(provider) {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488B21E\",\n zpad(this.depth, 1),\n this.parentFingerprint,\n zpad(this.index, 4),\n this.chainCode,\n this.publicKey,\n ]));\n }\n hasPath() { return (this.path != null); }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null);\n const Ki = SigningKey._addPoints(IL, this.publicKey, true);\n const address = computeAddress(Ki);\n return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n}\nexport class HDNodeWalletManager {\n constructor(phrase, password = \"\", path = \"m/44'/60'/0'/0\", locale = langEn) {\n _HDNodeWalletManager_root.set(this, void 0);\n __classPrivateFieldSet(this, _HDNodeWalletManager_root, HDNodeWallet.fromPhrase(phrase, password, path, locale), \"f\");\n }\n getSigner(index = 0) {\n return __classPrivateFieldGet(this, _HDNodeWalletManager_root, \"f\").deriveChild(index);\n }\n}\n_HDNodeWalletManager_root = new WeakMap();\nexport function getAccountPath(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index < 0 || index >= HardenedBit) {\n logger.throwArgumentError(\"invalid account index\", \"index\", index);\n }\n return `m/44'/60'/${index}'/0/0`;\n}\n//# sourceMappingURL=hdwallet.js.map","/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */\nvar __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 _AES_key, _AES_Kd, _AES_Ke;\n// Number of rounds by keysize\nconst numberOfRounds = { 16: 10, 24: 12, 32: 14 };\n// Round constant words\nconst rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n// S-box and Inverse S-box (S is for Substitution)\nconst S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\nconst Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n// Transformations for encryption\nconst T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\nconst T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\nconst T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\nconst T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n// Transformations for decryption\nconst T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\nconst T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\nconst T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\nconst T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n// Transformations for decryption key expansion\nconst U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\nconst U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\nconst U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\nconst U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\nfunction convertToInt32(bytes) {\n const result = [];\n for (let i = 0; i < bytes.length; i += 4) {\n result.push((bytes[i] << 24) | (bytes[i + 1] << 16) | (bytes[i + 2] << 8) | bytes[i + 3]);\n }\n return result;\n}\nexport class AES {\n constructor(key) {\n _AES_key.set(this, void 0);\n _AES_Kd.set(this, void 0);\n _AES_Ke.set(this, void 0);\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n __classPrivateFieldSet(this, _AES_key, new Uint8Array(key), \"f\");\n const rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new TypeError('invalid key size (must be 16, 24 or 32 bytes)');\n }\n // encryption round keys\n __classPrivateFieldSet(this, _AES_Ke, [], \"f\");\n // decryption round keys\n __classPrivateFieldSet(this, _AES_Kd, [], \"f\");\n for (let i = 0; i <= rounds; i++) {\n __classPrivateFieldGet(this, _AES_Ke, \"f\").push([0, 0, 0, 0]);\n __classPrivateFieldGet(this, _AES_Kd, \"f\").push([0, 0, 0, 0]);\n }\n const roundKeyCount = (rounds + 1) * 4;\n const KC = this.key.length / 4;\n // convert the key into ints\n const tk = convertToInt32(this.key);\n // copy values into round key arrays\n let index;\n for (let i = 0; i < KC; i++) {\n index = i >> 2;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[index][i % 4] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - index][i % 4] = tk[i];\n }\n // key expansion (fips-197 section 5.2)\n let rconpointer = 0;\n let t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (let i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n }\n else {\n for (let i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n tk[KC / 2] ^= (S[tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n for (let i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n // copy values into round key arrays\n let i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][c] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - r][c] = tk[i++];\n t++;\n }\n }\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (let r = 1; r < rounds; r++) {\n for (let c = 0; c < 4; c++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[tt & 0xFF]);\n }\n }\n }\n get key() { return __classPrivateFieldGet(this, _AES_key, \"f\").slice(); }\n encrypt(plaintext) {\n if (plaintext.length != 16) {\n throw new TypeError('invalid plaintext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Ke, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(plaintext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Ke, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T1[(t[i] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[t[(i + 3) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Ke, \"f\")[rounds][i];\n result[4 * i] = (S[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n decrypt(ciphertext) {\n if (ciphertext.length != 16) {\n throw new TypeError('invalid ciphertext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Kd, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(ciphertext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Kd, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T5[(t[i] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[t[(i + 1) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds][i];\n result[4 * i] = (Si[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n}\n_AES_key = new WeakMap(), _AES_Kd = new WeakMap(), _AES_Ke = new WeakMap();\n//# sourceMappingURL=aes.js.map","import { AES } from \"./aes.js\";\nexport class ModeOfOperation {\n constructor(name, key, cls) {\n if (cls && !(this instanceof cls)) {\n throw new Error(`${name} must be instantiated with \"new\"`);\n }\n Object.defineProperties(this, {\n aes: { enumerable: true, value: new AES(key) },\n name: { enumerable: true, value: name }\n });\n }\n}\n//# sourceMappingURL=mode.js.map","// Cipher Block Chaining\nvar __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 _CBC_iv, _CBC_lastBlock;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CBC extends ModeOfOperation {\n constructor(key, iv) {\n super(\"ECC\", key, CBC);\n _CBC_iv.set(this, void 0);\n _CBC_lastBlock.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CBC_iv, \"f\")); }\n encrypt(plaintext) {\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext.length);\n for (let i = 0; i < plaintext.length; i += 16) {\n for (let j = 0; j < 16; j++) {\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] ^= plaintext[i + j];\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.aes.encrypt(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\")), \"f\");\n ciphertext.set(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\"), i);\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n const plaintext = new Uint8Array(ciphertext.length);\n for (let i = 0; i < ciphertext.length; i += 16) {\n const block = this.aes.decrypt(ciphertext.subarray(i, i + 16));\n for (let j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j];\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] = ciphertext[i + j];\n }\n }\n return plaintext;\n }\n}\n_CBC_iv = new WeakMap(), _CBC_lastBlock = new WeakMap();\n//# sourceMappingURL=mode-cbc.js.map","// Cipher Feedback\nvar __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 _CFB_instances, _CFB_iv, _CFB_shiftRegister, _CFB_shift;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CFB extends ModeOfOperation {\n constructor(key, iv, segmentSize = 8) {\n super(\"CFB\", key, CFB);\n _CFB_instances.add(this);\n _CFB_iv.set(this, void 0);\n _CFB_shiftRegister.set(this, void 0);\n // This library currently only handles byte-aligned segmentSize\n if (!Number.isInteger(segmentSize) || (segmentSize % 8)) {\n throw new TypeError(\"invalid segmentSize\");\n }\n Object.defineProperties(this, {\n segmentSize: { enumerable: true, value: segmentSize }\n });\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CFB_shiftRegister, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CFB_iv, \"f\")); }\n encrypt(plaintext) {\n if (8 * plaintext.length % this.segmentSize) {\n throw new TypeError(\"invalid plaintext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n ciphertext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (8 * ciphertext.length % this.segmentSize) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const plaintext = new Uint8Array(ciphertext);\n for (let i = 0; i < plaintext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return plaintext;\n }\n}\n_CFB_iv = new WeakMap(), _CFB_shiftRegister = new WeakMap(), _CFB_instances = new WeakSet(), _CFB_shift = function _CFB_shift(data) {\n const segmentSize = this.segmentSize / 8;\n // Shift the register\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").subarray(segmentSize));\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(data.subarray(0, segmentSize), 16 - segmentSize);\n};\n//# sourceMappingURL=mode-cfb.js.map","// Counter Mode\nvar __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 _CTR_remaining, _CTR_remainingIndex, _CTR_counter;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CTR extends ModeOfOperation {\n constructor(key, initialValue) {\n super(\"CTR\", key, CTR);\n // Remaining bytes for the one-time pad\n _CTR_remaining.set(this, void 0);\n _CTR_remainingIndex.set(this, void 0);\n // The current counter\n _CTR_counter.set(this, void 0);\n __classPrivateFieldSet(this, _CTR_counter, new Uint8Array(16), \"f\");\n __classPrivateFieldGet(this, _CTR_counter, \"f\").fill(0);\n __classPrivateFieldSet(this, _CTR_remaining, __classPrivateFieldGet(this, _CTR_counter, \"f\"), \"f\"); // This will be discarded immediately\n __classPrivateFieldSet(this, _CTR_remainingIndex, 16, \"f\");\n if (initialValue == null) {\n initialValue = 1;\n }\n if (typeof (initialValue) === \"number\") {\n this.setCounterValue(initialValue);\n }\n else {\n this.setCounterBytes(initialValue);\n }\n }\n get counter() { return new Uint8Array(__classPrivateFieldGet(this, _CTR_counter, \"f\")); }\n setCounterValue(value) {\n if (!Number.isInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) {\n throw new TypeError(\"invalid counter initial integer value\");\n }\n for (let index = 15; index >= 0; --index) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[index] = value % 256;\n value = Math.floor(value / 256);\n }\n }\n setCounterBytes(value) {\n if (value.length !== 16) {\n throw new TypeError(\"invalid counter initial Uint8Array value length\");\n }\n __classPrivateFieldGet(this, _CTR_counter, \"f\").set(value);\n }\n increment() {\n for (let i = 15; i >= 0; i--) {\n if (__classPrivateFieldGet(this, _CTR_counter, \"f\")[i] === 255) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i] = 0;\n }\n else {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i]++;\n break;\n }\n }\n }\n encrypt(plaintext) {\n var _a, _b;\n const crypttext = new Uint8Array(plaintext);\n for (let i = 0; i < crypttext.length; i++) {\n if (__classPrivateFieldGet(this, _CTR_remainingIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _CTR_remaining, this.aes.encrypt(__classPrivateFieldGet(this, _CTR_counter, \"f\")), \"f\");\n __classPrivateFieldSet(this, _CTR_remainingIndex, 0, \"f\");\n this.increment();\n }\n crypttext[i] ^= __classPrivateFieldGet(this, _CTR_remaining, \"f\")[__classPrivateFieldSet(this, _CTR_remainingIndex, (_b = __classPrivateFieldGet(this, _CTR_remainingIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return crypttext;\n }\n decrypt(ciphertext) {\n return this.encrypt(ciphertext);\n }\n}\n_CTR_remaining = new WeakMap(), _CTR_remainingIndex = new WeakMap(), _CTR_counter = new WeakMap();\n//# sourceMappingURL=mode-ctr.js.map","// Output Feedback\nvar __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 _OFB_iv, _OFB_lastPrecipher, _OFB_lastPrecipherIndex;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class OFB extends ModeOfOperation {\n constructor(key, iv) {\n super(\"OFB\", key, OFB);\n _OFB_iv.set(this, void 0);\n _OFB_lastPrecipher.set(this, void 0);\n _OFB_lastPrecipherIndex.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.iv, \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 16, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _OFB_iv, \"f\")); }\n encrypt(plaintext) {\n var _a, _b;\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i++) {\n if (__classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.aes.encrypt(__classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")), \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 0, \"f\");\n }\n ciphertext[i] ^= __classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")[__classPrivateFieldSet(this, _OFB_lastPrecipherIndex, (_b = __classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n return this.encrypt(ciphertext);\n }\n}\n_OFB_iv = new WeakMap(), _OFB_lastPrecipher = new WeakMap(), _OFB_lastPrecipherIndex = new WeakMap();\n//# sourceMappingURL=mode-ofb.js.map","export function pkcs7Pad(data) {\n const padder = 16 - (data.length % 16);\n const result = new Uint8Array(data.length + padder);\n result.set(data);\n for (let i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n}\nexport function pkcs7Strip(data) {\n if (data.length < 16) {\n throw new TypeError('PKCS#7 invalid length');\n }\n const padder = data[data.length - 1];\n if (padder > 16) {\n throw new TypeError('PKCS#7 padding byte out of range');\n }\n const length = data.length - padder;\n for (let i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new TypeError('PKCS#7 invalid padding byte');\n }\n }\n return new Uint8Array(data.subarray(0, length));\n}\n//# sourceMappingURL=padding.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from '@ethersproject/strings';\nimport { logger } from \"./logger.js\";\nexport function looseArrayify(hexString) {\n if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\n hexString = '0x' + hexString;\n }\n return arrayify(hexString);\n}\nexport function zpad(value, length) {\n value = String(value);\n while (value.length < length) {\n value = '0' + value;\n }\n return value;\n}\nexport function getPassword(password) {\n if (typeof (password) === 'string') {\n return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC);\n }\n return arrayify(password);\n}\nexport function spelunk(object, _path) {\n const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i);\n if (match == null) {\n return logger.throwArgumentError(\"invalid path\", \"path\", _path);\n }\n const path = match[1];\n const type = match[3];\n const reqd = (match[4] === \"!\");\n let cur = object;\n for (const comp of path.toLowerCase().split('.')) {\n // Search for a child object with a case-insensitive matching key\n if (Array.isArray(cur)) {\n if (!comp.match(/^[0-9]+$/)) {\n break;\n }\n cur = cur[parseInt(comp)];\n }\n else if (typeof (cur) === \"object\") {\n let found = null;\n for (const key in cur) {\n if (key.toLowerCase() === comp) {\n found = cur[key];\n break;\n }\n }\n cur = found;\n }\n else {\n cur = null;\n }\n if (cur == null) {\n break;\n }\n }\n if (reqd && cur == null) {\n logger.throwArgumentError(\"missing required value\", \"path\", path);\n }\n if (type && cur != null) {\n if (type === \"int\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9]+$/)) {\n return parseInt(cur);\n }\n else if (Number.isSafeInteger(cur)) {\n return cur;\n }\n }\n if (type === \"number\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9.]*$/)) {\n return parseFloat(cur);\n }\n }\n if (type === \"data\") {\n if (typeof (cur) === \"string\") {\n return looseArrayify(cur);\n }\n }\n if (type === \"array\" && Array.isArray(cur)) {\n return cur;\n }\n if (type === typeof (cur)) {\n return cur;\n }\n logger.throwArgumentError(`wrong type found for ${type} `, \"path\", path);\n }\n return cur;\n}\n/*\nexport function follow(object: any, path: string): null | string {\n let currentChild = object;\n\n for (const comp of path.toLowerCase().split('/')) {\n\n // Search for a child object with a case-insensitive matching key\n let matchingChild = null;\n for (const key in currentChild) {\n if (key.toLowerCase() === comp) {\n matchingChild = currentChild[key];\n break;\n }\n }\n\n if (matchingChild === null) { return null; }\n\n currentChild = matchingChild;\n }\n\n return currentChild;\n}\n\n// \"path/to/something:type!\"\nexport function followRequired(data: any, path: string): string {\n const value = follow(data, path);\n if (value != null) { return value; }\n return logger.throwArgumentError(\"invalid value\", `data:${ path }`,\n JSON.stringify(data));\n}\n*/\n// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\nexport function uuidV4(randomBytes) {\n const bytes = logger.getBytes(randomBytes, \"randomBytes\");\n // Section: 4.1.3:\n // - time_hi_and_version[12:16] = 0b0100\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n // Section 4.4\n // - clock_seq_hi_and_reserved[6] = 0b0\n // - clock_seq_hi_and_reserved[7] = 0b1\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const value = hexlify(bytes);\n return [\n value.substring(2, 10),\n value.substring(10, 14),\n value.substring(14, 18),\n value.substring(18, 22),\n value.substring(22, 34),\n ].join(\"-\");\n}\n//# sourceMappingURL=utils.js.map","import { CBC, pkcs7Strip } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { pbkdf2 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, looseArrayify, spelunk } from \"./utils.js\";\nexport function isCrowdsaleJson(json) {\n try {\n const data = JSON.parse(json);\n if (data.encseed) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\n// See: https://github.com/ethereum/pyethsaletool\nexport function decryptCrowdsaleJson(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n // Ethereum Address\n const address = getAddress(spelunk(data, \"ethaddr:string!\"));\n // Encrypted Seed\n const encseed = looseArrayify(spelunk(data, \"encseed:string!\"));\n if (!encseed || (encseed.length % 16) !== 0) {\n logger.throwArgumentError(\"invalid encseed\", \"json\", json);\n }\n const key = arrayify(pbkdf2(password, password, 2000, 32, \"sha256\")).slice(0, 16);\n const iv = encseed.slice(0, 16);\n const encryptedSeed = encseed.slice(16);\n // Decrypt the seed\n const aesCbc = new CBC(key, iv);\n const seed = pkcs7Strip(arrayify(aesCbc.decrypt(encryptedSeed)));\n // This wallet format is weird... Convert the binary encoded hex to a string.\n let seedHex = \"\";\n for (let i = 0; i < seed.length; i++) {\n seedHex += String.fromCharCode(seed[i]);\n }\n return { address, privateKey: id(seedHex) };\n}\n//# sourceMappingURL=json-crowdsale.js.map","import { CTR } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256, pbkdf2, randomBytes, scrypt, scryptSync } from \"@ethersproject/crypto\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, spelunk, uuidV4, zpad } from \"./utils.js\";\nimport { version } from \"./_version.js\";\nconst defaultPath = \"m/44'/60'/0'/0/0\";\nexport function isKeystoreJson(json) {\n try {\n const data = JSON.parse(json);\n const version = ((data.version != null) ? parseInt(data.version) : 0);\n if (version === 3) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\nfunction decrypt(data, key, ciphertext) {\n const cipher = spelunk(data, \"crypto.cipher:string\");\n if (cipher === \"aes-128-ctr\") {\n const iv = spelunk(data, \"crypto.cipherparams.iv:data!\");\n const aesCtr = new CTR(key, iv);\n return hexlify(aesCtr.decrypt(ciphertext));\n }\n return logger.throwError(\"unsupported cipher\", \"UNSUPPORTED_OPERATION\", {\n operation: \"decrypt\"\n });\n}\nfunction getAccount(data, _key) {\n const key = logger.getBytes(_key);\n const ciphertext = spelunk(data, \"crypto.ciphertext:data!\");\n const computedMAC = hexlify(keccak256(concat([key.slice(16, 32), ciphertext]))).substring(2);\n if (computedMAC !== spelunk(data, \"crypto.mac:string!\").toLowerCase()) {\n return logger.throwArgumentError(\"incorrect password\", \"password\", \"[ REDACTED ]\");\n }\n const privateKey = decrypt(data, key.slice(0, 16), ciphertext);\n const address = computeAddress(privateKey);\n if (data.address) {\n let check = data.address.toLowerCase();\n if (check.substring(0, 2) !== \"0x\") {\n check = \"0x\" + check;\n }\n if (getAddress(check) !== address) {\n logger.throwArgumentError(\"keystore address/privateKey mismatch\", \"address\", data.address);\n }\n }\n const account = { address, privateKey };\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n const version = spelunk(data, \"x-ethers.version:string\");\n if (version === \"0.1\") {\n const mnemonicKey = key.slice(32, 64);\n const mnemonicCiphertext = spelunk(data, \"x-ethers.mnemonicCiphertext:data!\");\n const mnemonicIv = spelunk(data, \"x-ethers.mnemonicCounter:data!\");\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n account.mnemonic = {\n path: (spelunk(data, \"x-ethers.path:string\") || defaultPath),\n locale: (spelunk(data, \"x-ethers.locale:string\") || \"en\"),\n entropy: hexlify(arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext)))\n };\n }\n return account;\n}\nfunction getKdfParams(data) {\n const kdf = spelunk(data, \"crypto.kdf:string\");\n if (kdf && typeof (kdf) === \"string\") {\n const throwError = function (name, value) {\n return logger.throwArgumentError(\"invalid key-derivation function parameters\", name, value);\n };\n if (kdf.toLowerCase() === \"scrypt\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const N = spelunk(data, \"crypto.kdfparams.n:int!\");\n const r = spelunk(data, \"crypto.kdfparams.r:int!\");\n const p = spelunk(data, \"crypto.kdfparams.p:int!\");\n // Check for all required parameters\n if (!N || !r || !p) {\n return throwError(\"kdf\", kdf);\n }\n // Make sure N is a power of 2\n if ((N & (N - 1)) !== 0) {\n return throwError(\"N\", N);\n }\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n return throwError(\"dklen\", dkLen);\n }\n return { name: \"scrypt\", salt, N, r, p, dkLen: 64 };\n }\n else if (kdf.toLowerCase() === \"pbkdf2\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const prf = spelunk(data, \"crypto.kdfparams.prf:string!\");\n const algorithm = prf.split(\"-\").pop();\n if (algorithm !== \"sha256\" && algorithm !== \"sha512\") {\n return throwError(\"prf\", prf);\n }\n const count = spelunk(data, \"crypto.kdfparams.c:int!\");\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n throwError(\"dklen\", dkLen);\n }\n return { name: \"pbkdf2\", salt, count, dkLen, algorithm };\n }\n }\n return logger.throwArgumentError(\"unsupported key-derivation function\", \"kdf\", kdf);\n}\nexport function decryptKeystoreJsonSync(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = scryptSync(password, salt, N, r, p, dkLen);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport async function decryptKeystoreJson(json, _password, progress) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n if (progress) {\n progress(0);\n await stall(0);\n }\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n if (progress) {\n progress(1);\n await stall(0);\n }\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = await scrypt(password, salt, N, r, p, dkLen, progress);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nexport async function encryptKeystoreJson(account, password, options, progressCallback) {\n // Check the address matches the private key\n //if (getAddress(account.address) !== computeAddress(account.privateKey)) {\n // throw new Error(\"address/privateKey mismatch\");\n //}\n // Check the mnemonic (if any) matches the private key\n /*\n if (hasMnemonic(account)) {\n const mnemonic = account.mnemonic;\n const node = HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || defaultPath);\n\n if (node.privateKey != account.privateKey) {\n throw new Error(\"mnemonic mismatch\");\n }\n }\n */\n // The options are optional, so adjust the call as needed\n if (typeof (options) === \"function\" && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n if (!options) {\n options = {};\n }\n const privateKey = logger.getBytes(account.privateKey, \"privateKey\");\n const passwordBytes = getPassword(password);\n /*\n let mnemonic: null | Mnemonic = null;\n let entropy: Uint8Array = null\n let path: string = null;\n let locale: string = null;\n if (hasMnemonic(account)) {\n const srcMnemonic = account.mnemonic;\n entropy = arrayify(mnemonicToEntropy(srcMnemonic.phrase, srcMnemonic.locale || \"en\"));\n path = srcMnemonic.path || defaultPath;\n locale = srcMnemonic.locale || \"en\";\n mnemonic = Mnemonic.from(\n }\n */\n // Check/generate the salt\n const salt = (options.salt != null) ? logger.getBytes(options.salt, \"options.slat\") : randomBytes(32);\n // Override initialization vector\n const iv = (options.iv != null) ? logger.getBytes(options.iv, \"options.iv\") : randomBytes(16);\n if (iv.length !== 16) {\n logger.throwArgumentError(\"invalid options.iv\", \"options.iv\", options.iv);\n }\n // Override the uuid\n const uuidRandom = (options.uuid != null) ? logger.getBytes(options.uuid, \"options.uuid\") : randomBytes(16);\n if (uuidRandom.length !== 16) {\n logger.throwArgumentError(\"invalid options.uuid\", \"options.uuid\", options.iv);\n }\n if (uuidRandom.length !== 16) {\n throw new Error(\"invalid uuid\");\n }\n // Override the scrypt password-based key derivation function parameters\n let N = (1 << 17), r = 8, p = 1;\n if (options.scrypt) {\n if (options.scrypt.N) {\n N = options.scrypt.N;\n }\n if (options.scrypt.r) {\n r = options.scrypt.r;\n }\n if (options.scrypt.p) {\n p = options.scrypt.p;\n }\n }\n // We take 64 bytes:\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n const _key = await scrypt(passwordBytes, salt, N, r, p, 64, progressCallback);\n const key = arrayify(_key);\n // This will be used to encrypt the wallet (as per Web3 secret storage)\n const derivedKey = key.slice(0, 16);\n const macPrefix = key.slice(16, 32);\n // Encrypt the private key\n const aesCtr = new CTR(derivedKey, iv);\n const ciphertext = arrayify(aesCtr.encrypt(privateKey));\n // Compute the message authentication code, used to check the password\n const mac = keccak256(concat([macPrefix, ciphertext]));\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n const data = {\n address: account.address.substring(2).toLowerCase(),\n id: uuidV4(uuidRandom),\n version: 3,\n Crypto: {\n cipher: \"aes-128-ctr\",\n cipherparams: {\n iv: hexlify(iv).substring(2),\n },\n ciphertext: hexlify(ciphertext).substring(2),\n kdf: \"scrypt\",\n kdfparams: {\n salt: hexlify(salt).substring(2),\n n: N,\n dklen: 32,\n p: p,\n r: r\n },\n mac: mac.substring(2)\n }\n };\n // If we have a mnemonic, encrypt it into the JSON wallet\n if (account.mnemonic) {\n const client = (options.client != null) ? options.client : `ethers/${version}`;\n const path = account.mnemonic.path || defaultPath;\n const locale = account.mnemonic.locale || \"en\";\n const mnemonicKey = key.slice(32, 64);\n const entropy = logger.getBytes(account.mnemonic.entropy, \"account.mnemonic.entropy\");\n const mnemonicIv = randomBytes(16);\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n const mnemonicCiphertext = arrayify(mnemonicAesCtr.encrypt(entropy));\n const now = new Date();\n const timestamp = (now.getUTCFullYear() + \"-\" +\n zpad(now.getUTCMonth() + 1, 2) + \"-\" +\n zpad(now.getUTCDate(), 2) + \"T\" +\n zpad(now.getUTCHours(), 2) + \"-\" +\n zpad(now.getUTCMinutes(), 2) + \"-\" +\n zpad(now.getUTCSeconds(), 2) + \".0Z\");\n const gethFilename = (\"UTC--\" + timestamp + \"--\" + data.address);\n data[\"x-ethers\"] = {\n client, gethFilename, path, locale,\n mnemonicCounter: hexlify(mnemonicIv).substring(2),\n mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2),\n version: \"0.1\"\n };\n }\n return JSON.stringify(data);\n}\n//# sourceMappingURL=json-keystore.js.map","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 _Wallet_mnemonic;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { randomBytes } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { computeAddress } from \"./address.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nimport { HDNodeWallet } from \"./hdwallet.js\";\nimport { decryptCrowdsaleJson, isCrowdsaleJson } from \"./json-crowdsale.js\";\nimport { decryptKeystoreJson, decryptKeystoreJsonSync, isKeystoreJson } from \"./json-keystore.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nfunction tryWallet(value) {\n try {\n if (!value || !value.signingKey) {\n return null;\n }\n const key = trySigningKey(value.signingKey);\n if (key == null || computeAddress(key.publicKey) !== value.address) {\n return null;\n }\n if (value.mnemonic) {\n const wallet = HDNodeWallet.fromMnemonic(value.mnemonic);\n if (wallet.privateKey !== key.privateKey) {\n return null;\n }\n }\n return value;\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\n// Try using value as mnemonic to derive the defaultPath HDodeWallet\nfunction tryMnemonic(value) {\n try {\n if (value == null || typeof (value.phrase) !== \"string\" ||\n typeof (value.password) !== \"string\" ||\n value.wordlist == null) {\n return null;\n }\n return HDNodeWallet.fromPhrase(value.phrase, value.password, null, value.wordlist);\n }\n catch (error) {\n console.log(error);\n }\n return null;\n}\nfunction trySigningKey(value) {\n try {\n if (!value || !isHexString(value.privateKey, 32)) {\n return null;\n }\n const key = value.privateKey;\n if (SigningKey.computePublicKey(key) !== value.publicKey) {\n return null;\n }\n return new SigningKey(key);\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport class Wallet extends BaseWallet {\n constructor(key, provider) {\n let signingKey = null;\n let mnemonic = null;\n // A normal private key\n if (typeof (key) === \"string\") {\n signingKey = new SigningKey(key);\n }\n // Try Wallet\n if (signingKey == null) {\n const wallet = tryWallet(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // Try Mnemonic, with the defaultPath wallet\n if (signingKey == null) {\n const wallet = tryMnemonic(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // A signing key\n if (signingKey == null) {\n signingKey = trySigningKey(key);\n }\n if (signingKey == null) {\n logger.throwArgumentError(\"invalid key\", \"key\", \"[ REDACTED ]\");\n }\n super(signingKey, provider);\n _Wallet_mnemonic.set(this, void 0);\n __classPrivateFieldSet(this, _Wallet_mnemonic, mnemonic, \"f\");\n }\n // Store this in a getter to reduce visibility in console.log\n get mnemonic() { return __classPrivateFieldGet(this, _Wallet_mnemonic, \"f\"); }\n connect(provider) {\n return new Wallet(this, provider);\n }\n async encrypt(password, options, progressCallback) {\n throw new Error(\"TODO\");\n }\n encryptSync(password, options) {\n throw new Error(\"TODO\");\n }\n static async fromEncryptedJson(json, password, progress) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = await decryptKeystoreJson(json, password, progress);\n }\n else if (isCrowdsaleJson(json)) {\n if (progress) {\n progress(0);\n await stall(0);\n }\n account = decryptCrowdsaleJson(json, password);\n if (progress) {\n progress(1);\n await stall(0);\n }\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static fromEncryptedJsonSync(json, password) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = decryptKeystoreJsonSync(json, password);\n }\n else if (isCrowdsaleJson(json)) {\n account = decryptCrowdsaleJson(json, password);\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static createRandom(provider, password, wordlist) {\n return new Wallet(Mnemonic.fromEntropy(randomBytes(16), password, wordlist), provider);\n }\n static fromMnemonic(mnemonic, provider) {\n return new Wallet(mnemonic, provider);\n }\n static fromPhrase(phrase, provider, password = \"\", wordlist) {\n return new Wallet(Mnemonic.fromPhrase(phrase, password, wordlist), provider);\n }\n}\n_Wallet_mnemonic = new WeakMap();\n//# sourceMappingURL=wallet.js.map","export const version = \"ethers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map"],"names":["__classPrivateFieldSet","this","__classPrivateFieldGet","version","maxValue","logger","_guard","internal","nibbles","BN_0","BN_1","zeros","BN_255","passProperties","getValue","pbkdf2","sha256","u64.split","u64.rotrSH","u64.shrSH","u64.rotrSL","u64.shrSL","u64.rotrBH","u64.rotrBL","u64.add4L","u64.add4H","u64.add5L","u64.add5H","u64.add","u64.add3L","u64.add3H","sha512","getGlobal","crypto","randomBytes","locked","_0n","_1n","_2n","u64.rotlBH","u64.rotlSH","u64.rotlBL","u64.rotlSL","rotl","ripemd160","noble_ripemd160","crypto_random","scrypt","_nobleAsync","_nobleSync","H","Empty","BN_MAX_UINT256","getTime","_a","numPad","bytesPad","encodeBytes","BN_2","Signature","secp256k1.utils","secp256k1.signSync","secp256k1.Signature","secp256k1.getSharedSecret","secp256k1.getPublicKey","secp256k1.Point","secp256k1.recoverPublicKey","copyRequest","Network","copy","concisify","defaultApiKey","getHost","stall","WebSocket","_Network","en","defaultPath"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,iBAAiB,CAAC,KAAK,EAAE;AAC/C,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,IAAI,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,KAAK;AAC/C,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,CAAC;AAQD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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AG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,G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CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AACvC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACpC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,KAAK,CAAC,MAAM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,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AAChE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AAClD,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AAC3D,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AACzC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AACzC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EA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AE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3gD,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5gD;AACA,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG;AACA,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG;AACA,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,E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"} \ No newline at end of file diff --git a/packages/ethers/dist/ethers.min.js b/packages/ethers/dist/ethers.min.js new file mode 100644 index 000000000..da83e4c1c --- /dev/null +++ b/packages/ethers/dist/ethers.min.js @@ -0,0 +1,6 @@ +async function t(t){const e=Object.keys(t);return(await Promise.all(e.map((e=>Promise.resolve(t[e]))))).reduce(((t,r,n)=>(t[e[n]]=r,t)),{})}function e(t,e){const r=e.split("|").map((t=>t.trim()));for(let n=0;n{try{if("test"!=="test".normalize(e))throw new Error("bad");if("NFD"===e){const t=String.fromCharCode(233).normalize("NFD");if(t!==String.fromCharCode(101,769))throw new Error("broken")}t.push(e)}catch(t){}return t}),[]);function E(t,e,r){Object.defineProperty(t,e,{enumerable:!0,writable:!1,value:r})}const T=9007199254740991,k={};k.INVALID_ARGUMENT=TypeError,k.NUMERIC_FAULT=RangeError,k.BUFFER_OVERRUN=RangeError;class A{constructor(t){h.add(this),E(this,"version",t||"_")}makeError(t,e,r){{const s=[];if(r)for(const t in r){const e=r[t];try{s.push(t+"="+JSON.stringify(e))}catch(n){s.push(t+"=[could not serialize object]")}}s.push(`code=${e}`),s.push(`version=${this.version}`),s.length&&(t+=" ("+s.join(", ")+")")}const n=new(k[e]||Error)(t);if(E(n,"code",e),r)for(const t in r)E(n,t,r[t]);return n}throwError(t,e,r){throw this.makeError(t,e,r)}throwArgumentError(t,e,r){return this.throwError(t,"INVALID_ARGUMENT",{argument:e,value:r})}assert(t,e,r,n){t||this.throwError(e,r||"UNKNOWN_ERROR",n)}assertArgument(t,e,r,n){return this.assert(t,e,"INVALID_ARGUMENT",{argument:r,value:n})}assertIntegerArgument(t,e,r,n){let s=null;"number"!=typeof e?s="expected a number":Number.isInteger(e)?(null!=r&&en)&&(s="value is out of range"):s="invalid integer",s&&this.throwArgumentError(s,t,e)}assertSafeUint53(t,e){this.assertArgument("number"==typeof t,"invalid number","value",t),null==e&&(e="value not safe");const r="assertSafeInteger";this.assert(t>=0&&t<9007199254740991,e,"NUMERIC_FAULT",{operation:r,fault:"out-of-safe-range",value:t}),this.assert(t%1==0,e,"NUMERIC_FAULT",{operation:r,fault:"non-integer",value:t})}assertNormalize(t){-1===v.indexOf(t)&&this.throwError("platform missing String.prototype.normalize","UNSUPPORTED_OPERATION",{operation:"String.prototype.normalize",info:{form:t}})}assertPrivate(t,e,r=""){if(t!==e){let t=r,e="new";r&&(t+=".",e+=" "+r),this.throwError(`private constructor; use ${t}from* methods`,"UNSUPPORTED_OPERATION",{operation:e})}}assertArgumentCount(t,e,r=""){r&&(r=": "+r),this.assert(t>=e,"missing arguemnt"+r,"MISSING_ARGUMENT",{count:t,expectedCount:e}),this.assert(t>=e,"too many arguemnts"+r,"UNEXPECTED_ARGUMENT",{count:t,expectedCount:e})}assertInt53(t,e){g(this,h,"m",f).call(this,"Int53",t,e||"unknown",-T)}assertUint53(t,e){g(this,h,"m",f).call(this,"Int53",t,e||"unknown",0)}assertInteger(t,e="unknown",r=0,n=T){}getBytes(t,e){return g(this,h,"m",d).call(this,t,e,!1)}getBytesCopy(t,e){return g(this,h,"m",d).call(this,t,e,!0)}getNumber(t,e){switch(typeof t){case"bigint":return(t<-T||t>T)&&this.throwArgumentError("overflow",e||"value",t),Number(t);case"number":return Number.isInteger(t)?(t<-T||t>T)&&this.throwArgumentError("overflow",e||"value",t):this.throwArgumentError("underflow",e||"value",t),t;case"string":try{return this.getNumber(BigInt(t),e)}catch(r){this.throwArgumentError(`invalid numeric string: ${r.message}`,e||"value",t)}}return this.throwArgumentError("invalid numeric value",e||"value",t)}getBigInt(t,e){switch(typeof t){case"bigint":return t;case"number":return Number.isInteger(t)?(t<-T||t>T)&&this.throwArgumentError("overflow",e||"value",t):this.throwArgumentError("underflow",e||"value",t),BigInt(t);case"string":try{return BigInt(t)}catch(r){this.throwArgumentError(`invalid BigNumberish string: ${r.message}`,e||"value",t)}}return this.throwArgumentError("invalid BigNumberish value",e||"value",t)}debug(...t){g(this,h,"m",p).call(this,w.DEBUG,t)}info(...t){g(this,h,"m",p).call(this,w.INFO,t)}warn(...t){g(this,h,"m",p).call(this,w.WARNING,t)}static globalLogger(){return b||(b=new A("@ethersproject/logger@6.0.0-beta.1")),b}static setLogLevel(t){const e=m[t.toLowerCase()];null!=e?y=e:A.globalLogger().warn("invalid log level - "+t)}}h=new WeakSet,f=function(t,e,r,n){("number"!=typeof e||isNaN(e))&&this.throwArgumentError(`invalid ${t}`,"INVALID_ARGUMENT",{name:"value",value:e});let s=`invalid ${t} value`,i=null;isNaN(e)?i="not-a-number":eT?(s=`unsafe ${t} value`,i="overflow"):Math.floor(e)!==e&&(i="underflow"),i&&this.throwError(s,"NUMERIC_FAULT",{operation:r,fault:i,value:e})},d=function(t,e,r){if(t instanceof Uint8Array)return r?new Uint8Array(t):t;if("string"==typeof t&&t.match(/^0x([0-9a-f][0-9a-f])*$/i)){const e=new Uint8Array((t.length-2)/2);let r=2;for(let n=0;nm[r]||console.log.apply(console,e)},A.LogLevels=w;const N=new A("@ethersproject/abi@6.0.0-beta.1");var P,x,O,I,S,R,_,C=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},B=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function F(t){const e=new Set;return t.forEach((t=>e.add(t))),Object.freeze(e)}!function(t){t.sighash="sighash",t.minimal="minimal",t.full="full",t.json="json"}(_||(_={}));const U="constant external internal payable private public pure view",L=F(U.split(" ")),D="constructor error event function struct",M=F(D.split(" ")),j="calldata memory storage payable indexed",G=F(j.split(" ")),$=F([D,j,"tuple returns",U].join(" ").split(" ")),W={"(":"OPEN_PAREN",")":"CLOSE_PAREN","[":"OPEN_BRACKET","]":"CLOSE_BRACKET",",":"COMMA","@":"AT"},z=new RegExp("^(\\s*)"),H=new RegExp("^([0-9]+)"),V=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"),K=new RegExp("^(address|bool|bytes(0-9*)|string|u?int([0-9]*))");class J{constructor(t){P.add(this),x.set(this,void 0),O.set(this,void 0),C(this,x,0,"f"),C(this,O,t.slice(),"f")}get offset(){return B(this,x,"f")}get length(){return B(this,O,"f").length-B(this,x,"f")}clone(){return new J(B(this,O,"f"))}reset(){C(this,x,0,"f")}popKeyword(t){const e=this.peek();if("KEYWORD"!==e.type||!t.has(e.text))throw new Error(`expected keyword ${e.text}`);return this.pop().text}popType(t){if(this.peek().type!==t)throw new Error(`expected ${t}; got ${JSON.stringify(this.peek())}`);return this.pop().text}popParen(){const t=this.peek();if("OPEN_PAREN"!==t.type)throw new Error("bad start");const e=B(this,P,"m",I).call(this,B(this,x,"f")+1,t.match+1);return C(this,x,t.match+1,"f"),e}popParams(){const t=this.peek();if("OPEN_PAREN"!==t.type)throw new Error("bad start");const e=[];for(;B(this,x,"f")=B(this,O,"f").length)throw new Error("out-of-bounds");return B(this,O,"f")[B(this,x,"f")]}peekKeyword(t){const e=this.peekType("KEYWORD");return null!=e&&t.has(e)?e:null}peekType(t){if(0===this.length)return null;const e=this.peek();return e.type===t?e.text:null}pop(){var t;const e=this.peek();return C(this,x,(t=B(this,x,"f"),++t),"f"),e}toString(){const t=[];for(let e=B(this,x,"f");e`}}function q(t){const e=[],r=e=>{const r=i0&&"NUMBER"===e[e.length-1].type){const r=e.pop().text;t=r+t,e[e.length-1].value=N.getNumber(r)}if(0===e.length||"BRACKET"!==e[e.length-1].type)throw new Error("missing opening bracket");e[e.length-1].text+=t}}else if(a=o.match(V),a){if(c.text=a[1],i+=c.text.length,$.has(c.text)){c.type="KEYWORD";continue}if(c.text.match(K)){c.type="TYPE";continue}c.type="ID"}else{if(a=o.match(H),!a)throw new Error(`unexpected token ${JSON.stringify(o[0])} at position ${i}`);c.text=a[1],c.type="NUMBER",i+=c.text.length}}return new J(e.map((t=>Object.freeze(t))))}function X(t,e){let r=[];for(const n in e.keys())t.has(n)&&r.push(n);if(r.length>1)throw new Error(`conflicting types: ${r.join(", ")}`)}function Y(t,e){if(e.peekKeyword(M)){const r=e.pop().text;if(r!==t)throw new Error(`expected ${t}, got ${r}`)}return e.popType("ID")}function Z(t,e){const r=new Set;for(;;){const n=t.peekType("KEYWORD");if(null==n||e&&!e.has(n))break;if(t.pop(),r.has(n))throw new Error(`duplicate keywords: ${JSON.stringify(n)}`);r.add(n)}return Object.freeze(r)}function Q(t,e){return t.popParams().map((t=>ot.fromTokens(t,e)))}function tt(t){if(t.peekType("AT")){if(t.pop(),t.peekType("NUMBER"))return N.getBigInt(t.pop().text);throw new Error("invalid gas")}return null}function et(t){if(t.length)throw new Error(`unexpected tokens: ${t.toString()}`)}x=new WeakMap,O=new WeakMap,P=new WeakSet,I=function(t=0,e=0){return new J(B(this,O,"f").slice(t,e).map((e=>Object.freeze(Object.assign({},e,{match:e.match-t,linkBack:e.linkBack-t,linkNext:e.linkNext-t})))))};const rt=new RegExp(/^(.*)\[([0-9]*)\]$/);function nt(t){const e=t.match(K);if(!e)return N.throwArgumentError("invalid type","type",t);if("uint"===t)return"uint256";if("int"===t)return"int256";if(e[2]){const r=parseInt(e[2]);(0===r||r>32)&&N.throwArgumentError("invalid bytes length","type",t)}else if(e[3]){const r=parseInt(e[3]);(0===r||r>256||r%8)&&N.throwArgumentError("invalid numeric width","type",t)}return t}const st={},it=Symbol.for("_ethers_internal");class ot{constructor(t,e,n,s,i,o,a,c){if(S.add(this),N.assertPrivate(t,st,"ParamType"),Object.defineProperty(this,it,{value:"_ParamTypeInternal"}),o&&(o=Object.freeze(o.slice())),"array"===s){if(null==a||null==c)throw new Error("")}else if(null!=a||null!=c)throw new Error("");if("tuple"===s){if(null==o)throw new Error("")}else if(null!=o)throw new Error("");r(this,{name:e,type:n,baseType:s,indexed:i,components:o,arrayLength:a,arrayChildren:c})}format(t=_.sighash){if(_[t]||N.throwArgumentError("invalid format type","format",t),t===_.json){let e={type:"tuple"===this.baseType?"tuple":this.type,name:this.name||void 0};return"boolean"==typeof this.indexed&&(e.indexed=this.indexed),this.isTuple()&&(e.components=this.components.map((e=>JSON.parse(e.format(t))))),JSON.stringify(e)}let e="";return this.isArray()?(e+=this.arrayChildren.format(t),e+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`):this.isTuple()?(t!==_.sighash&&(e+=this.type),e+="("+this.components.map((e=>e.format(t))).join(t===_.full?", ":",")+")"):e+=this.type,t!==_.sighash&&(!0===this.indexed&&(e+=" indexed"),t===_.full&&this.name&&(e+=" "+this.name)),e}static isArray(t){return t&&"array"===t.baseType}isArray(){return"array"===this.baseType}isTuple(){return"tuple"===this.baseType}isIndexable(){return null!=this.indexed}walk(t,e){if(this.isArray()){if(!Array.isArray(t))throw new Error("invlaid array value");if(-1!==this.arrayLength&&t.length!==this.arrayLength)throw new Error("array is wrong length");return t.map((t=>this.arrayChildren.walk(t,e)))}if(this.isTuple()){if(!Array.isArray(t))throw new Error("invlaid tuple value");if(t.length!==this.components.length)throw new Error("array is wrong length");return t.map(((t,r)=>this.components[r].walk(t,e)))}return e(this.type,t)}async walkAsync(t,e){const r=[],n=[t];return B(this,S,"m",R).call(this,r,t,e,(t=>{n[0]=t})),r.length&&await Promise.all(r),n[0]}static from(t,e){if(ot.isParamType(t))return t;if("string"==typeof t)return ot.fromTokens(q(t),e);if(t instanceof J)return ot.fromTokens(t,e);const r=t.name;!r||"string"==typeof r&&r.match(V)||N.throwArgumentError("invalid name","obj.name",r);let n=t.indexed;null!=n&&(e||N.throwArgumentError("parameter cannot be indexed","obj.indexed",t.indexed),n=!!n);let s=t.type,i=s.match(rt);if(i){const e=i[2],o=ot.from({type:i[1],components:t.components});return new ot(st,r,s,"array",n,null,e,o)}if("tuple("===s.substring(0,5)||"("===s[0]){const e=null!=t.components?t.components.map((t=>ot.from(t))):null;return new ot(st,r,s,"tuple",n,e,null,null)}return s=nt(t.type),new ot(st,r,s,s,n,null,null,null)}static fromObject(t,e){throw new Error("@TODO")}static fromTokens(t,e){let r="",n="",s=null;Z(t,F(["tuple"])).has("tuple")||t.peekType("OPEN_PAREN")?(n="tuple",s=t.popParams().map((t=>ot.from(t))),r=`tuple(${s.map((t=>t.format())).join(",")})`):(r=nt(t.popType("TYPE")),n=r);let i=null,o=null;for(;t.length&&t.peekType("BRACKET");){const e=t.pop();i=new ot(st,"",r,n,null,s,o,i),o=e.value,r+=e.text,n="array",s=null}let a=null;if(Z(t,G).has("indexed")){if(!e)throw new Error("");a=!0}const c=t.peekType("ID")?t.pop().text:"";if(t.length)throw new Error("leftover tokens");return new ot(st,c,r,n,a,s,o,i)}static isParamType(t){return t&&"_ParamTypeInternal"===t[it]}}var at;S=new WeakSet,R=function t(e,r,n,s){if(this.isArray()){if(!Array.isArray(r))throw new Error("invlaid array value");if(-1!==this.arrayLength&&r.length!==this.arrayLength)throw new Error("array is wrong length");const i=this.arrayChildren,o=r.slice();return o.forEach(((r,s)=>{B(i,S,"m",t).call(i,e,r,n,(t=>{o[s]=t}))})),void s(o)}if(this.isTuple()){const i=this.components;let o;if(Array.isArray(r))o=r.slice();else{if(null==r||"object"!=typeof r)throw new Error("invlaid tuple value");o=i.map((t=>{if(!t.name)throw new Error("cannot use object value with unnamed components");if(!(t.name in r))throw new Error(`missing value for component ${t.name}`);return r[t.name]}))}if(r.length!==this.components.length)throw new Error("array is wrong length");return o.forEach(((r,s)=>{var a;B(a=i[s],S,"m",t).call(a,e,r,n,(t=>{o[s]=t}))})),void s(o)}const i=n(this.type,r);i.then?e.push(async function(){s(await i)}()):s(i)},function(t){t.constructor="constructor",t.error="error",t.event="event",t.function="function",t.struct="struct"}(at||(at={}));class ct{constructor(t,e,n){N.assertPrivate(t,st,"Fragment"),r(this,{type:e,inputs:n=Object.freeze(n.slice())})}static from(t){if("string"==typeof t)return this.fromString(t);if(t instanceof J)return this.fromTokens(t);if("object"==typeof t)return this.fromObject(t);throw new Error(`unsupported type: ${t}`)}static fromObject(t){switch(t.type){case"constructor":return dt.fromObject(t);case"error":return ht.fromObject(t);case"event":return ft.fromObject(t);case"function":return pt.fromObject(t);case"struct":return wt.fromObject(t)}throw new Error("not implemented yet")}static fromString(t){try{ct.from(JSON.parse(t))}catch(t){}return ct.fromTokens(q(t))}static fromTokens(t){const e=t.popKeyword(M);switch(e){case"constructor":return dt.fromTokens(t);case"error":return ht.fromTokens(t);case"event":return ft.fromTokens(t);case"function":return pt.fromTokens(t);case"struct":return wt.fromTokens(t)}throw new Error(`unsupported type: ${e}`)}static isConstructor(t){return t&&"constructor"===t.type}static isError(t){return t&&"error"===t.type}static isEvent(t){return t&&"event"===t.type}static isFunction(t){return t&&"function"===t.type}static isStruct(t){return t&&"struct"===t.type}}class lt extends ct{constructor(t,e,n,s){super(t,e,s),s=Object.freeze(s.slice()),r(this,{name:n})}}function ut(t,e){return"("+e.map((e=>e.format(t))).join(t===_.full?", ":",")+")"}class ht extends lt{constructor(t,e,r){super(t,at.error,e,r)}format(t=_.sighash){if(_[t]||N.throwArgumentError("invalid format type","format",t),t===_.json)return JSON.stringify({type:"error",name:this.name,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==_.sighash&&e.push("error"),e.push(this.name+ut(t,this.inputs)),e.join(" ")}static fromString(t){return ht.fromTokens(q(t))}static fromTokens(t){const e=Y("error",t),r=Q(t);return et(t),new ht(st,e,r)}}class ft extends lt{constructor(t,e,n,s){super(t,at.event,e,n),r(this,{anonymous:s})}format(t=_.sighash){if(_[t]||N.throwArgumentError("invalid format type","format",t),t===_.json)return JSON.stringify({type:"event",anonymous:this.anonymous,name:this.name,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==_.sighash&&e.push("event"),e.push(this.name+ut(t,this.inputs)),t!==_.sighash&&this.anonymous&&e.push("anonymous"),e.join(" ")}static fromString(t){return ft.fromTokens(q(t))}static fromTokens(t){const e=Y("event",t),r=Q(t,!0),n=!!Z(t,F(["anonymous"])).has("anonymous");return et(t),new ft(st,e,r,n)}}class dt extends ct{constructor(t,e,n,s,i){super(t,e,n),r(this,{payable:s,gas:i})}format(t=_.sighash){if(_[t]||N.throwArgumentError("invalid format type","format",t),t===_.sighash&&N.throwError("cannot format a constructor for sighash","UNSUPPORTED_OPERATION",{operation:"format(sighash)"}),t===_.json)return JSON.stringify({type:"constructor",stateMutability:this.payable?"payable":"undefined",payable:this.payable,gas:null!=this.gas?this.gas:void 0,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[`constructor${ut(t,this.inputs)}`];return e.push(this.payable?"payable":"nonpayable"),null!=this.gas&&e.push(`@${this.gas.toString()}`),e.join(" ")}static fromString(t){return dt.fromTokens(q(t))}static fromObject(t){throw new Error("TODO")}static fromTokens(t){Z(t,F(["constructor"]));const e=Q(t),r=!!Z(t,F(["payable"])).has("payable"),n=tt(t);return et(t),new dt(st,at.constructor,e,r,n)}}class pt extends lt{constructor(t,e,n,s,i,o){super(t,at.function,e,s);r(this,{constant:"view"===n||"pure"===n,gas:o,outputs:i=Object.freeze(i.slice()),payable:"payable"===n,stateMutability:n})}format(t=_.sighash){if(_[t]||N.throwArgumentError("invalid format type","format",t),t===_.json)return JSON.stringify({type:"function",name:this.name,constant:this.constant,stateMutability:"nonpayable"!==this.stateMutability?this.stateMutability:void 0,payable:this.payable,gas:null!=this.gas?this.gas:void 0,inputs:this.inputs.map((e=>JSON.parse(e.format(t)))),outputs:this.outputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==_.sighash&&e.push("function"),e.push(this.name+ut(t,this.inputs)),t!==_.sighash&&("nonpayable"!==this.stateMutability&&e.push(this.stateMutability),this.outputs&&this.outputs.length&&(e.push("returns"),e.push(ut(t,this.outputs))),null!=this.gas&&e.push(`@${this.gas.toString()}`)),e.join(" ")}static fromString(t){return pt.fromTokens(q(t))}static fromTokens(t){const e=Y("function",t),r=Q(t),n=function(t){let e=Z(t,L);return X(e,F("constant payable nonpayable".split(" "))),X(e,F("pure view payable nonpayable".split(" "))),e.has("view")?"view":e.has("pure")?"pure":e.has("payable")?"payable":e.has("nonpayable")?"nonpayable":e.has("constant")?"view":"nonpayable"}(t);let s=[];Z(t,F(["returns"])).has("returns")&&(s=Q(t));const i=tt(t);return et(t),new pt(st,e,n,r,s,i)}}class wt extends lt{format(){throw new Error("@TODO")}static fromString(t){return wt.fromTokens(q(t))}static fromTokens(t){const e=Y("struct",t),r=Q(t);return et(t),new wt(st,at.struct,e,r)}}const gt=new A("@ethersproject/math@6.0.0-beta.1"),mt=BigInt(0);function yt(t){if(t instanceof Uint8Array){let e="0x0";for(const r of t)e+="0123456789abcdef"[r>>4],e+="0123456789abcdef"[15&r];return BigInt(e)}return gt.getBigInt(t,"value")}function bt(t){const e=yt(t);return(e<-9007199254740991||e>9007199254740991)&>.throwArgumentError("overflow","value",t),Number(e)}function vt(t,e){const r=gt.getBigInt(t,"value");if(r<0)throw new Error("cannot convert negative value to hex");let n=r.toString(16);if(null==e)n.length%2&&(n="0"+n);else{const t=gt.getNumber(e,"width");if(2*t>n-kt){return-((~r&(kt<256||t%1)&>.throwArgumentError("invalid decimal length","decimals",t),BigInt("1"+Ft.substring(0,t))}function Lt(t,e=0){let r=gt.getBigInt(t,"value");const n=Ut(gt.getNumber(e,"decimals")),s=String(n),i=r<0;i&&(r*=Ct);let o=String(r%n);for(;o.length1&&"0"===o.substring(o.length-1);)o=o.substring(0,o.length-1);let a=String(r/n);return 1!==s.length&&(a+="."+o),i&&(a="-"+a),a}function Dt(t,e=0){const r=Ut(gt.getNumber(e,"decimals"));"string"==typeof t&&t.match(/^-?[0-9.]+$/)||gt.throwArgumentError("invalid decimal value","value",t);const n="-"===t.substring(0,1);n&&(t=t.substring(1)),"."===t&>.throwArgumentError("missing value","value",t);const s=t.split(".");s.length>2&>.throwArgumentError("too many decimal points","value",t);let i=s[0]||"0",o=s[1]||"0";for(;"0"===o[o.length-1];)o=o.substring(0,o.length-1);for(o.length>String(r).length-1&&Bt("fractional component exceeds decimals","underflow","parseFixed"),""===o&&(o="0");o.lengthnull==t[e]?n:(typeof t[e]!==r&>.throwArgumentError("invalid fixed format ("+e+" not "+r+")","format."+e,t[e]),t[e]);e=s("signed","boolean",e),r=s("width","number",r),n=s("decimals","number",n)}return r%8&>.throwArgumentError("invalid fixed format width (not byte aligned)","format.width",r),n>80&>.throwArgumentError("invalid fixed format (decimals too large)","format.decimals",n),new Mt(_t,e,r,n)}}class jt{constructor(t,e,r,n){xt.add(this),Ot.set(this,void 0),t!==_t&>.throwError("cannot use FixedNumber constructor; use FixedNumber.from","UNSUPPORTED_OPERATION",{operation:"new FixedFormat"}),this.format=Mt.from(n),St(this,Ot,r,"f"),this._isFixedNumber=!0,Object.freeze(this)}addUnsafe(t){Rt(this,xt,"m",It).call(this,t);const e=Dt(Rt(this,Ot,"f"),this.format.decimals),r=Dt(Rt(t,Ot,"f"),t.format.decimals);return jt.fromValue(e+r,this.format.decimals,this.format)}subUnsafe(t){Rt(this,xt,"m",It).call(this,t);const e=Dt(Rt(this,Ot,"f"),this.format.decimals),r=Dt(Rt(t,Ot,"f"),t.format.decimals);return jt.fromValue(e-r,this.format.decimals,this.format)}mulUnsafe(t){Rt(this,xt,"m",It).call(this,t);const e=Dt(Rt(this,Ot,"f"),this.format.decimals),r=Dt(Rt(t,Ot,"f"),t.format.decimals);return jt.fromValue(e*r/this.format._multiplier,this.format.decimals,this.format)}divUnsafe(t){Rt(this,xt,"m",It).call(this,t);const e=Dt(Rt(this,Ot,"f"),this.format.decimals),r=Dt(Rt(t,Ot,"f"),t.format.decimals);return jt.fromValue(e*this.format._multiplier/r,this.format.decimals,this.format)}floor(){const t=this.toString().split(".");1===t.length&&t.push("0");let e=jt.from(t[0],this.format);const r=!t[1].match(/^(0*)$/);return this.isNegative()&&r&&(e=e.subUnsafe(Gt.toFormat(e.format))),e}ceiling(){const t=this.toString().split(".");1===t.length&&t.push("0");let e=jt.from(t[0],this.format);const r=!t[1].match(/^(0*)$/);return!this.isNegative()&&r&&(e=e.addUnsafe(Gt.toFormat(e.format))),e}round(t){null==t&&(t=0);const e=this.toString().split(".");if(1===e.length&&e.push("0"),(t<0||t>80||t%1)&>.throwArgumentError("invalid decimal count","decimals",t),e[1].length<=t)return this;const r=jt.from("1"+Ft.substring(0,t),this.format),n=$t.toFormat(this.format);return this.mulUnsafe(r).addUnsafe(n).floor().divUnsafe(r)}isZero(){return"0.0"===Rt(this,Ot,"f")||"0"===Rt(this,Ot,"f")}isNegative(){return"-"===Rt(this,Ot,"f")[0]}toString(){return Rt(this,Ot,"f")}toHexString(t){throw new Error("TODO")}toUnsafeFloat(){return parseFloat(this.toString())}toFormat(t){return jt.fromString(Rt(this,Ot,"f"),t)}static fromValue(t,e=0,r="fixed"){return jt.fromString(Lt(t,e),Mt.from(r))}static fromString(t,e="fixed"){const r=Mt.from(e),n=Dt(t,r.decimals);!r.signed&&n<0&&Bt("unsigned value cannot be negative","overflow","value",t);const s=r.signed?vt(Nt(n,r.width)):vt(n,r.width/8),i=Lt(n,r.decimals);return new jt(_t,s,i,r)}static fromBytes(t,e="fixed"){const r=gt.getBytes(t,"value"),n=Mt.from(e);if(r.length>n.width/8)throw new Error("overflow");let s=yt(r);n.signed&&(s=At(s,n.width));const i=vt(Nt(s,(n.signed?0:1)+n.width)),o=Lt(s,n.decimals);return new jt(_t,i,o,n)}static from(t,e){if("string"==typeof t)return jt.fromString(t,e);if(t instanceof Uint8Array)return jt.fromBytes(t,e);try{return jt.fromValue(t,0,e)}catch(t){if("INVALID_ARGUMENT"!==t.code)throw t}return gt.throwArgumentError("invalid FixedNumber value","value",t)}static isFixedNumber(t){return!(!t||!t._isFixedNumber)}}Ot=new WeakMap,xt=new WeakSet,It=function(t){this.format.name!==t.format.name&>.throwArgumentError("incompatible format; use fixedNumber.toFormat","other",t)};const Gt=jt.from(1),$t=jt.from("0.5"),Wt="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";let zt=null;function Ht(t){if(null==zt){zt={};for(let t=0;t>=Qt;return 0===e.length&&e.push(0),new Uint8Array(e)}if((e=t)&&"function"==typeof e.toHexString)return ee(t.toHexString());var e;if("string"==typeof t){let e=t;if(!e.match(/^0x[0-9a-f]*$/i))throw new RangeError(`invalid hex data string (${JSON.stringify(t)})`);const r=[];for(let t=2;t>4]+"0123456789abcdef"[15&n]}return r}function oe(t){let e=ie(ee(t)).substring(2);for(;"0"===e.substring(0,1);)e=e.substring(1);return""===e&&(e="0"),"0x"+e}function ae(t){return"0x"+t.map((t=>ie(t).substring(2))).join("")}function ce(t){return Xt(t,!0)?(t.length-2)/2:re(t).length}function le(t,e,r){const n=re(t);return null!=r&&r>n.length&&Zt.throwError("cannot slice beyond data bounds","BUFFER_OVERRUN",{buffer:n,length:n.length,offset:r}),ie(n.slice(null==e?0:e,null==r?n.length:r))}function ue(t){let e=ie(t).substring(2);for(;"00"==e.substring(0,2);)e=e.substring(2);return"0x"+e}function he(t,e,r){const n=re(t);e{null!=t&&(xe(this,we,"f").has(t)?xe(this,we,"f").get(t).push(e):xe(this,we,"f").set(t,[e]))})),Object.freeze(this),new Proxy(this,{get:(t,e,r)=>{if("string"==typeof e){if(e.match(/^[0-9]+$/)){const r=N.getNumber(e,"%index");if(r<0||r>=this.length)throw new RangeError("out of result range");const n=t[r];return n instanceof Error&&xe(this,pe,"m",ge).call(this,`index ${r}`,n),n}if(e in t||Ie.indexOf(e)>=0)return Reflect.get(t,e,r);if(!(e in t))return t.getValue(e)}return Reflect.get(t,e,r)}})}slice(t,e){null==t&&(t=0),null==e&&(e=this.length);const r=[];for(let n=t;n32&&N.throwError("value out-of-bounds","BUFFER_OVERRUN",{buffer:e,length:32,offset:e.length}),e.length%32&&(e=ee(ae([Oe.slice(e.length%32),e]))),e}we=new WeakMap,pe=new WeakSet,ge=function(t,e){const r=new Error(`deferred error during ABI decoding triggered accessing ${t}`);throw r.error=e,r};class Ce{constructor(t,e,n,s){r(this,{name:t,type:e,localName:n,dynamic:s},{name:"string",type:"string",localName:"string",dynamic:"boolean"})}_throwError(t,e){return N.throwArgumentError(t,this.localName,e)}}class Be{constructor(){me.add(this),ye.set(this,void 0),be.set(this,void 0),Pe(this,ye,[],"f"),Pe(this,be,0,"f")}get data(){return ae(xe(this,ye,"f"))}get length(){return xe(this,be,"f")}appendWriter(t){return xe(this,me,"m",ve).call(this,ee(t.data))}writeBytes(t){let e=ee(t);const r=e.length%32;return r&&(e=ee(ae([e,Oe.slice(r)]))),xe(this,me,"m",ve).call(this,e)}writeValue(t){return xe(this,me,"m",ve).call(this,_e(t))}writeUpdatableValue(){const t=xe(this,ye,"f").length;return xe(this,ye,"f").push(Oe),Pe(this,be,xe(this,be,"f")+32,"f"),e=>{xe(this,ye,"f")[t]=_e(e)}}}ye=new WeakMap,be=new WeakMap,me=new WeakSet,ve=function(t){return xe(this,ye,"f").push(t),Pe(this,be,xe(this,be,"f")+t.length,"f"),t.length};class Fe{constructor(t,e,n){Ee.add(this),Te.set(this,void 0),ke.set(this,void 0),Ae.set(this,void 0),r(this,{allowLoose:!!n}),Pe(this,Te,ee(t),"f"),Pe(this,Ae,e||Fe.coerce,"f"),Pe(this,ke,0,"f")}get data(){return ie(xe(this,Te,"f"))}get dataLength(){return xe(this,Te,"f").length}get consumed(){return xe(this,ke,"f")}get bytes(){return new Uint8Array(xe(this,Te,"f"))}static coerce(t,e){let r=t.match("^u?int([0-9]+)$");return r&&parseInt(r[1])<=48&&(e=e.toNumber()),e}coerce(t,e){return xe(this,Ae,"f").call(this,t,e)}subReader(t){return new Fe(xe(this,Te,"f").slice(xe(this,ke,"f")+t),xe(this,Ae,"f"),this.allowLoose)}readBytes(t,e){let r=xe(this,Ee,"m",Ne).call(this,0,t,!!e);return Pe(this,ke,xe(this,ke,"f")+r.length,"f"),r.slice(0,t)}readValue(){return yt(this.readBytes(32))}readIndex(){return bt(this.readBytes(32))}}Te=new WeakMap,ke=new WeakMap,Ae=new WeakMap,Ee=new WeakSet,Ne=function(t,e,r){let n=32*Math.ceil(e/32);return xe(this,ke,"f")+n>xe(this,Te,"f").length&&(this.allowLoose&&r&&xe(this,ke,"f")+e<=xe(this,Te,"f").length?n=e:N.throwError("data out-of-bounds","BUFFER_OVERRUN",{buffer:ee(xe(this,Te,"f")),length:xe(this,Te,"f").length,offset:xe(this,ke,"f")+n})),xe(this,Te,"f").slice(xe(this,ke,"f"),xe(this,ke,"f")+n)}; +/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +const Ue=t=>new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),Le=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),De=(t,e)=>t<<32-e|t>>>e;if(!(68===new Uint8Array(new Uint32Array([287454020]).buffer)[0]))throw new Error("Non little-endian hardware is not supported");Array.from({length:256},((t,e)=>e.toString(16).padStart(2,"0")));const Me=(()=>{const t="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);try{if(t){const{setImmediate:e}=t("timers");return()=>new Promise((t=>e(t)))}}catch(t){}return()=>new Promise((t=>setTimeout(t,0)))})();async function je(t,e,r){let n=Date.now();for(let s=0;s=0&&tt().update(Ge(e)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}class Ke extends ze{constructor(t,e){super(),this.finished=!1,this.destroyed=!1,We(t);const r=Ge(e);if(this.iHash=t.create(),!(this.iHash instanceof ze))throw new TypeError("Expected instance of class which extends utils.Hash");const n=this.blockLen=this.iHash.blockLen;this.outputLen=this.iHash.outputLen;const s=new Uint8Array(n);s.set(r.length>this.iHash.blockLen?t.create().update(r).digest():r);for(let t=0;tnew Ke(t,e).update(r).digest();function qe(t,e,r,n){const{c:s,dkLen:i,DK:o,PRF:a,PRFSalt:c}=function(t,e,r,n){We(t);const s=He({dkLen:32,asyncTick:10},n),{c:i,dkLen:o,asyncTick:a}=s;if($e(i),$e(o),$e(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");const c=Ge(e),l=Ge(r),u=new Uint8Array(o),h=Je.create(t,c),f=h._cloneInto().update(l);return{c:i,dkLen:o,asyncTick:a,DK:u,PRF:h,PRFSalt:f}}(t,e,r,n);let l;const u=new Uint8Array(4),h=Le(u),f=new Uint8Array(a.outputLen);for(let t=1,e=0;enew Ke(t,e);class Xe extends ze{constructor(t,e,r,n){super(),this.blockLen=t,this.outputLen=e,this.padOffset=r,this.isLE=n,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=Le(this.buffer)}update(t){if(this.destroyed)throw new Error("instance is destroyed");const{view:e,buffer:r,blockLen:n,finished:s}=this;if(s)throw new Error("digest() was already called");const i=(t=Ge(t)).length;for(let s=0;sn-i&&(this.process(r,0),i=0);for(let t=i;t>s&i),a=Number(r&i),c=n?4:0,l=n?0:4;t.setUint32(e+c,o,n),t.setUint32(e+l,a,n)}(r,n-8,BigInt(8*this.length),s),this.process(r,0);const o=Le(t);this.get().forEach(((t,e)=>o.setUint32(4*e,t,s)))}digest(){const{buffer:t,outputLen:e}=this;this.digestInto(t);const r=t.slice(0,e);return this.destroy(),r}_cloneInto(t){t||(t=new this.constructor),t.set(...this.get());const{blockLen:e,buffer:r,length:n,finished:s,destroyed:i,pos:o}=this;return t.length=n,t.pos=o,t.finished=s,t.destroyed=i,n%e&&t.buffer.set(r),t}}const Ye=(t,e,r)=>t&e^~t&r,Ze=(t,e,r)=>t&e^t&r^e&r,Qe=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),tr=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),er=new Uint32Array(64);class rr extends Xe{constructor(){super(64,32,8,!1),this.A=0|tr[0],this.B=0|tr[1],this.C=0|tr[2],this.D=0|tr[3],this.E=0|tr[4],this.F=0|tr[5],this.G=0|tr[6],this.H=0|tr[7]}get(){const{A:t,B:e,C:r,D:n,E:s,F:i,G:o,H:a}=this;return[t,e,r,n,s,i,o,a]}set(t,e,r,n,s,i,o,a){this.A=0|t,this.B=0|e,this.C=0|r,this.D=0|n,this.E=0|s,this.F=0|i,this.G=0|o,this.H=0|a}process(t,e){for(let r=0;r<16;r++,e+=4)er[r]=t.getUint32(e,!1);for(let t=16;t<64;t++){const e=er[t-15],r=er[t-2],n=De(e,7)^De(e,18)^e>>>3,s=De(r,17)^De(r,19)^r>>>10;er[t]=s+er[t-7]+n+er[t-16]|0}let{A:r,B:n,C:s,D:i,E:o,F:a,G:c,H:l}=this;for(let t=0;t<64;t++){const e=l+(De(o,6)^De(o,11)^De(o,25))+Ye(o,a,c)+Qe[t]+er[t]|0,u=(De(r,2)^De(r,13)^De(r,22))+Ze(r,n,s)|0;l=c,c=a,a=o,o=i+e|0,i=s,s=n,n=r,r=e+u|0}r=r+this.A|0,n=n+this.B|0,s=s+this.C|0,i=i+this.D|0,o=o+this.E|0,a=a+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(r,n,s,i,o,a,c,l)}roundClean(){er.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}const nr=Ve((()=>new rr)),sr=BigInt(2**32-1),ir=BigInt(32);function or(t,e=!1){return e?{h:Number(t&sr),l:Number(t>>ir&sr)}:{h:0|Number(t>>ir&sr),l:0|Number(t&sr)}}function ar(t,e=!1){let r=new Uint32Array(t.length),n=new Uint32Array(t.length);for(let s=0;st>>>r,lr=(t,e,r)=>t<<32-r|e>>>r,ur=(t,e,r)=>t>>>r|e<<32-r,hr=(t,e,r)=>t<<32-r|e>>>r,fr=(t,e,r)=>t<<64-r|e>>>r-32,dr=(t,e,r)=>t>>>r-32|e<<64-r;function pr(t,e,r,n){const s=(e>>>0)+(n>>>0);return{h:t+r+(s/2**32|0)|0,l:0|s}}const wr=(t,e,r)=>(t>>>0)+(e>>>0)+(r>>>0),gr=(t,e,r,n)=>e+r+n+(t/2**32|0)|0,mr=(t,e,r,n)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0),yr=(t,e,r,n,s)=>e+r+n+s+(t/2**32|0)|0,br=(t,e,r,n,s)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0)+(s>>>0),vr=(t,e,r,n,s,i)=>e+r+n+s+i+(t/2**32|0)|0,[Er,Tr]=ar(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map((t=>BigInt(t)))),kr=new Uint32Array(80),Ar=new Uint32Array(80);class Nr extends Xe{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:t,Al:e,Bh:r,Bl:n,Ch:s,Cl:i,Dh:o,Dl:a,Eh:c,El:l,Fh:u,Fl:h,Gh:f,Gl:d,Hh:p,Hl:w}=this;return[t,e,r,n,s,i,o,a,c,l,u,h,f,d,p,w]}set(t,e,r,n,s,i,o,a,c,l,u,h,f,d,p,w){this.Ah=0|t,this.Al=0|e,this.Bh=0|r,this.Bl=0|n,this.Ch=0|s,this.Cl=0|i,this.Dh=0|o,this.Dl=0|a,this.Eh=0|c,this.El=0|l,this.Fh=0|u,this.Fl=0|h,this.Gh=0|f,this.Gl=0|d,this.Hh=0|p,this.Hl=0|w}process(t,e){for(let r=0;r<16;r++,e+=4)kr[r]=t.getUint32(e),Ar[r]=t.getUint32(e+=4);for(let t=16;t<80;t++){const e=0|kr[t-15],r=0|Ar[t-15],n=ur(e,r,1)^ur(e,r,8)^cr(e,0,7),s=hr(e,r,1)^hr(e,r,8)^lr(e,r,7),i=0|kr[t-2],o=0|Ar[t-2],a=ur(i,o,19)^fr(i,o,61)^cr(i,0,6),c=hr(i,o,19)^dr(i,o,61)^lr(i,o,6),l=mr(s,c,Ar[t-7],Ar[t-16]),u=yr(l,n,a,kr[t-7],kr[t-16]);kr[t]=0|u,Ar[t]=0|l}let{Ah:r,Al:n,Bh:s,Bl:i,Ch:o,Cl:a,Dh:c,Dl:l,Eh:u,El:h,Fh:f,Fl:d,Gh:p,Gl:w,Hh:g,Hl:m}=this;for(let t=0;t<80;t++){const e=ur(u,h,14)^ur(u,h,18)^fr(u,h,41),y=hr(u,h,14)^hr(u,h,18)^dr(u,h,41),b=u&f^~u&p,v=br(m,y,h&d^~h&w,Tr[t],Ar[t]),E=vr(v,g,e,b,Er[t],kr[t]),T=0|v,k=ur(r,n,28)^fr(r,n,34)^fr(r,n,39),A=hr(r,n,28)^dr(r,n,34)^dr(r,n,39),N=r&s^r&o^s&o,P=n&i^n&a^i&a;g=0|p,m=0|w,p=0|f,w=0|d,f=0|u,d=0|h,({h:u,l:h}=pr(0|c,0|l,0|E,0|T)),c=0|o,l=0|a,o=0|s,a=0|i,s=0|r,i=0|n;const x=wr(T,A,P);r=gr(x,E,k,N),n=0|x}({h:r,l:n}=pr(0|this.Ah,0|this.Al,0|r,0|n)),({h:s,l:i}=pr(0|this.Bh,0|this.Bl,0|s,0|i)),({h:o,l:a}=pr(0|this.Ch,0|this.Cl,0|o,0|a)),({h:c,l:l}=pr(0|this.Dh,0|this.Dl,0|c,0|l)),({h:u,l:h}=pr(0|this.Eh,0|this.El,0|u,0|h)),({h:f,l:d}=pr(0|this.Fh,0|this.Fl,0|f,0|d)),({h:p,l:w}=pr(0|this.Gh,0|this.Gl,0|p,0|w)),({h:g,l:m}=pr(0|this.Hh,0|this.Hl,0|g,0|m)),this.set(r,n,s,i,o,a,c,l,u,h,f,d,p,w,g,m)}roundClean(){kr.fill(0),Ar.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class Pr extends Nr{constructor(){super(),this.Ah=573645204,this.Al=-64227540,this.Bh=-1621794909,this.Bl=-934517566,this.Ch=596883563,this.Cl=1867755857,this.Dh=-1774684391,this.Dl=1497426621,this.Eh=-1775747358,this.El=-1467023389,this.Fh=-1101128155,this.Fl=1401305490,this.Gh=721525244,this.Gl=746961066,this.Hh=246885852,this.Hl=-2117784414,this.outputLen=32}}class xr extends Nr{constructor(){super(),this.Ah=-876896931,this.Al=-1056596264,this.Bh=1654270250,this.Bl=914150663,this.Ch=-1856437926,this.Cl=812702999,this.Dh=355462360,this.Dl=-150054599,this.Eh=1731405415,this.El=-4191439,this.Fh=-1900787065,this.Fl=1750603025,this.Gh=-619958771,this.Gl=1694076839,this.Hh=1203062813,this.Hl=-1090891868,this.outputLen=48}}const Or=Ve((()=>new Nr));Ve((()=>new Pr)),Ve((()=>new xr));const Ir=new A("@ethersproject/crypto@6.0.0-beta.1");const Sr=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw new Error("unable to locate global object")}();let Rr=Sr.crypto||Sr.msCrypto;function _r(t){switch(t){case"sha256":return nr.create();case"sha512":return Or.create()}return Ir.throwArgumentError("invalid hashing algorithm name","algorithm",t)}let Cr=!1;const Br=function(t,e,r){return"0x"+function(t,e){const r={sha256:nr,sha512:Or}[t];return null==r?Ir.throwArgumentError("invalid hmac algorithm","algorithm",t):Je.create(r,e)}(t,e).update(r).digest("hex")};let Fr=Br;function Ur(t,e,r){const n=Ir.getBytes(e,"key"),s=Ir.getBytes(r,"data");return ie(Fr(t,n,s))}Ur._=Br,Ur.lock=function(){Cr=!0},Ur.register=function(t){if(Cr)throw new Error("computeHmac is locked");Fr=t},Object.freeze(Ur);const[Lr,Dr,Mr]=[[],[],[]],jr=BigInt(0),Gr=BigInt(1),$r=BigInt(2),Wr=BigInt(7),zr=BigInt(256),Hr=BigInt(113);for(let t=0,e=Gr,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],Lr.push(2*(5*n+r)),Dr.push((t+1)*(t+2)/2%64);let s=jr;for(let t=0;t<7;t++)e=(e<>Wr)*Hr)%zr,e&$r&&(s^=Gr<<(Gr<r>32?((t,e,r)=>e<>>64-r)(t,e,r):((t,e,r)=>t<>>32-r)(t,e,r),qr=(t,e,r)=>r>32?((t,e,r)=>t<>>64-r)(t,e,r):((t,e,r)=>e<>>32-r)(t,e,r);class Xr extends ze{constructor(t,e,r,n=!1,s=24){if(super(),this.blockLen=t,this.suffix=e,this.outputLen=r,this.enableXOF=n,this.rounds=s,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,$e(r),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=Ue(this.state)}keccak(){!function(t,e=24){const r=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let e=0;e<10;e++)r[e]=t[e]^t[e+10]^t[e+20]^t[e+30]^t[e+40];for(let e=0;e<10;e+=2){const n=(e+8)%10,s=(e+2)%10,i=r[s],o=r[s+1],a=Jr(i,o,1)^r[n],c=qr(i,o,1)^r[n+1];for(let r=0;r<50;r+=10)t[e+r]^=a,t[e+r+1]^=c}let e=t[2],s=t[3];for(let r=0;r<24;r++){const n=Dr[r],i=Jr(e,s,n),o=qr(e,s,n),a=Lr[r];e=t[a],s=t[a+1],t[a]=i,t[a+1]=o}for(let e=0;e<50;e+=10){for(let n=0;n<10;n++)r[n]=t[e+n];for(let n=0;n<10;n++)t[e+n]^=~r[(n+2)%10]&r[(n+4)%10]}t[0]^=Vr[n],t[1]^=Kr[n]}r.fill(0)}(this.state32,this.rounds),this.posOut=0,this.pos=0}update(t){if(this.destroyed)throw new Error("instance is destroyed");if(this.finished)throw new Error("digest() was already called");const{blockLen:e,state:r}=this,n=(t=Ge(t)).length;for(let s=0;s=this.blockLen&&this.keccak();const n=Math.min(this.blockLen-this.posOut,r-e);t.set(this.state.subarray(this.posOut,this.posOut+n),e),this.posOut+=n,e+=n}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(t)}xof(t){return $e(t),this.xofInto(new Uint8Array(t))}digestInto(t){if(t.lengthVe((()=>new Xr(e,t,r)));Yr(6,144,28),Yr(6,136,32),Yr(6,104,48),Yr(6,72,64),Yr(1,144,28);const Zr=Yr(1,136,32);Yr(1,104,48),Yr(1,72,64);const Qr=(t,e,r)=>function(t){const e=(e,r)=>t(r).update(Ge(e)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=e=>t(e),e}(((n={})=>new Xr(e,t,void 0!==n.dkLen?n.dkLen:r,!0)));Qr(31,168,16),Qr(31,136,32);let tn=!1;const en=function(t){return Zr(t)};let rn=en;function nn(t){const e=Ir.getBytes(t,"data");return ie(rn(e))}nn._=en,nn.lock=function(){tn=!0},nn.register=function(t){if(tn)throw new TypeError("keccak256 is locked");rn=t},Object.freeze(nn);const sn=new Uint8Array([7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8]),on=Uint8Array.from({length:16},((t,e)=>e)),an=on.map((t=>(9*t+5)%16));let cn=[on],ln=[an];for(let t=0;t<4;t++)for(let e of[cn,ln])e.push(e[t].map((t=>sn[t])));const un=[[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8],[12,13,11,15,6,9,9,7,12,15,11,13,7,8,7,7],[13,15,14,11,7,7,6,8,13,14,13,12,5,5,6,9],[14,11,12,14,8,6,5,5,15,12,15,14,9,9,8,6],[15,12,13,13,9,5,8,6,14,11,12,11,8,6,5,5]].map((t=>new Uint8Array(t))),hn=cn.map(((t,e)=>t.map((t=>un[e][t])))),fn=ln.map(((t,e)=>t.map((t=>un[e][t])))),dn=new Uint32Array([0,1518500249,1859775393,2400959708,2840853838]),pn=new Uint32Array([1352829926,1548603684,1836072691,2053994217,0]),wn=(t,e)=>t<>>32-e;function gn(t,e,r,n){return 0===t?e^r^n:1===t?e&r|~e&n:2===t?(e|~r)^n:3===t?e&n|r&~n:e^(r|~n)}const mn=new Uint32Array(16);class yn extends Xe{constructor(){super(64,20,8,!0),this.h0=1732584193,this.h1=-271733879,this.h2=-1732584194,this.h3=271733878,this.h4=-1009589776}get(){const{h0:t,h1:e,h2:r,h3:n,h4:s}=this;return[t,e,r,n,s]}set(t,e,r,n,s){this.h0=0|t,this.h1=0|e,this.h2=0|r,this.h3=0|n,this.h4=0|s}process(t,e){for(let r=0;r<16;r++,e+=4)mn[r]=t.getUint32(e,!0);let r=0|this.h0,n=r,s=0|this.h1,i=s,o=0|this.h2,a=o,c=0|this.h3,l=c,u=0|this.h4,h=u;for(let t=0;t<5;t++){const e=4-t,f=dn[t],d=pn[t],p=cn[t],w=ln[t],g=hn[t],m=fn[t];for(let e=0;e<16;e++){const n=wn(r+gn(t,s,o,c)+mn[p[e]]+f,g[e])+u|0;r=u,u=c,c=0|wn(o,10),o=s,s=n}for(let t=0;t<16;t++){const r=wn(n+gn(e,i,a,l)+mn[w[t]]+d,m[t])+h|0;n=h,h=l,l=0|wn(a,10),a=i,i=r}}this.set(this.h1+o+l|0,this.h2+c+h|0,this.h3+u+n|0,this.h4+r+i|0,this.h0+s+a|0)}roundClean(){mn.fill(0)}destroy(){this.destroyed=!0,this.buffer.fill(0),this.set(0,0,0,0,0)}}const bn=Ve((()=>new yn));let vn=!1;const En=function(t){return bn(t)};let Tn=En;function kn(t){const e=Ir.getBytes(t,"data");return ie(Tn(e))}kn._=En,kn.lock=function(){vn=!0},kn.register=function(t){if(vn)throw new TypeError("ripemd160 is locked");Tn=t},Object.freeze(kn);let An=!1;const Nn=function(t,e,r,n,s){return function(t,e,r,n,s){const i={sha256:nr,sha512:Or}[s];return null==i?Ir.throwArgumentError("invalid pbkdf2 algorithm","algorithm",s):qe(i,t,e,{c:r,dkLen:n})}(t,e,r,n,s)};let Pn=Nn;function xn(t,e,r,n,s){const i=Ir.getBytes(t,"password"),o=Ir.getBytes(e,"salt");return ie(Pn(i,o,r,n,s))}xn._=Nn,xn.lock=function(){An=!0},xn.register=function(t){if(An)throw new Error("pbkdf2 is locked");Pn=t},Object.freeze(xn);let On=!1;const In=function(t){return new Uint8Array(function(t){if(null==Rr)return Ir.throwError("platform does not support secure random numbers","UNSUPPORTED_OPERATION",{operation:"randomBytes"});(t<=0||t>1024||t%1||t!=t)&&Ir.throwArgumentError("invalid length","length",t);const e=new Uint8Array(t);return Rr.getRandomValues(e),e}(t))};let Sn=In;function Rn(t){return Sn(t)}Rn._=In,Rn.lock=function(){On=!0},Rn.register=function(t){if(On)throw new Error("random is locked");Sn=t},Object.freeze(Rn);const _n=(t,e)=>t<>>32-e;function Cn(t,e,r,n,s,i){let o=t[e++]^r[n++],a=t[e++]^r[n++],c=t[e++]^r[n++],l=t[e++]^r[n++],u=t[e++]^r[n++],h=t[e++]^r[n++],f=t[e++]^r[n++],d=t[e++]^r[n++],p=t[e++]^r[n++],w=t[e++]^r[n++],g=t[e++]^r[n++],m=t[e++]^r[n++],y=t[e++]^r[n++],b=t[e++]^r[n++],v=t[e++]^r[n++],E=t[e++]^r[n++],T=o,k=a,A=c,N=l,P=u,x=h,O=f,I=d,S=p,R=w,_=g,C=m,B=y,F=b,U=v,L=E;for(let t=0;t<8;t+=2)P^=_n(T+B|0,7),S^=_n(P+T|0,9),B^=_n(S+P|0,13),T^=_n(B+S|0,18),R^=_n(x+k|0,7),F^=_n(R+x|0,9),k^=_n(F+R|0,13),x^=_n(k+F|0,18),U^=_n(_+O|0,7),A^=_n(U+_|0,9),O^=_n(A+U|0,13),_^=_n(O+A|0,18),N^=_n(L+C|0,7),I^=_n(N+L|0,9),C^=_n(I+N|0,13),L^=_n(C+I|0,18),k^=_n(T+N|0,7),A^=_n(k+T|0,9),N^=_n(A+k|0,13),T^=_n(N+A|0,18),O^=_n(x+P|0,7),I^=_n(O+x|0,9),P^=_n(I+O|0,13),x^=_n(P+I|0,18),C^=_n(_+R|0,7),S^=_n(C+_|0,9),R^=_n(S+C|0,13),_^=_n(R+S|0,18),B^=_n(L+U|0,7),F^=_n(B+L|0,9),U^=_n(F+B|0,13),L^=_n(U+F|0,18);s[i++]=o+T|0,s[i++]=a+k|0,s[i++]=c+A|0,s[i++]=l+N|0,s[i++]=u+P|0,s[i++]=h+x|0,s[i++]=f+O|0,s[i++]=d+I|0,s[i++]=p+S|0,s[i++]=w+R|0,s[i++]=g+_|0,s[i++]=m+C|0,s[i++]=y+B|0,s[i++]=b+F|0,s[i++]=v+U|0,s[i++]=E+L|0}function Bn(t,e,r,n,s){let i=n+0,o=n+16*s;for(let n=0;n<16;n++)r[o+n]=t[e+16*(2*s-1)+n];for(let n=0;n0&&(o+=16),Cn(r,i,t,e+=16,r,o)}function Fn(t,e,r){const n=He({dkLen:32,asyncTick:10,maxmem:1073742848},r),{N:s,r:i,p:o,dkLen:a,asyncTick:c,maxmem:l,onProgress:u}=n;if($e(s),$e(i),$e(o),$e(a),$e(c),$e(l),void 0!==u&&"function"!=typeof u)throw new Error("progressCb should be function");const h=128*i,f=h/4;if(s<=1||0!=(s&s-1)||s>=2**(h/8)||s>2**32)throw new Error("Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32");if(o<0||o>137438953440/h)throw new Error("Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)");if(a<0||a>137438953440)throw new Error("Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32");const d=h*(s+o);if(d>l)throw new Error(`Scrypt: parameters too large, ${d} (128 * r * (N + p)) > ${l} (maxmem)`);const p=qe(nr,t,e,{c:1,dkLen:h*o}),w=Ue(p),g=Ue(new Uint8Array(h*s)),m=Ue(new Uint8Array(h));let y=()=>{};if(u){const t=2*s*o,e=Math.max(Math.floor(t/1e4),1);let r=0;y=()=>{r++,!u||r%e&&r!==t||u(r/t)}}return{N:s,r:i,p:o,dkLen:a,blockSize32:f,V:g,B32:w,B:p,tmp:m,blockMixCb:y,asyncTick:c}}function Un(t,e,r,n,s){const i=qe(nr,t,r,{c:1,dkLen:e});return r.fill(0),n.fill(0),s.fill(0),i}let Ln=!1,Dn=!1;const Mn=async function(t,e,r,n,s,i,o){return await async function(t,e,r){const{N:n,r:s,p:i,dkLen:o,blockSize32:a,V:c,B32:l,B:u,tmp:h,blockMixCb:f,asyncTick:d}=Fn(t,e,r);for(let t=0;t{Bn(c,r,c,r+=a,s),f()})),Bn(c,(n-1)*a,l,e,s),f(),await je(n,d,(t=>{const r=l[e+a-16]%n;for(let t=0;t>1]>>4>=8&&(e[t]=e[t].toUpperCase()),(15&n[t>>1])>=8&&(e[t+1]=e[t+1].toUpperCase());return"0x"+e.join("")}const ss={};for(let t=0;t<10;t++)ss[String(t)]=String(t);for(let t=0;t<26;t++)ss[String.fromCharCode(65+t)]=String(10+t);function is(t){let e=(t=(t=t.toUpperCase()).substring(4)+t.substring(0,2)+"00").split("").map((t=>ss[t])).join("");for(;e.length>=15;){let t=e.substring(0,15);e=parseInt(t,10)%97+e.substring(t.length)}let r=String(98-parseInt(e,10)%97);for(;r.length<2;)r="0"+r;return r}const os=function(){const t={};for(let e=0;e<36;e++){t["0123456789abcdefghijklmnopqrstuvwxyz"[e]]=BigInt(e)}return t}();function as(t){if("string"!=typeof t&&ts.throwArgumentError("invalid address","address",t),t.match(/^(0x)?[0-9a-fA-F]{40}$/)){"0x"!==t.substring(0,2)&&(t="0x"+t);const e=ns(t);return t.match(/([A-F].*[a-f])|([a-f].*[A-F])/)&&e!==t&&ts.throwArgumentError("bad address checksum","address",t),e}if(t.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)){t.substring(2,4)!==is(t)&&ts.throwArgumentError("bad icap checksum","address",t);let e=function(t){t=t.toLowerCase();let e=es;for(let r=0;r>=8;return e}function hs(t){if(Array.isArray(t)){let e=[];if(t.forEach((function(t){e=e.concat(hs(t))})),e.length<=55)return e.unshift(192+e.length),e;const r=us(e.length);return r.unshift(247+r.length),r.concat(e)}const e=Array.prototype.slice.call(ls.getBytes(t,"object"));if(1===e.length&&e[0]<=127)return e;if(e.length<=55)return e.unshift(128+e.length),e;const r=us(e.length);return r.unshift(183+r.length),r.concat(e)}function fs(t){let e="0x";for(const r of hs(t))e+="0123456789abcdef"[r>>4],e+="0123456789abcdef"[15&r];return e}function ds(t){let e=t.toString(16);for(;e.length<2;)e="0"+e;return"0x"+e}function ps(t,e,r){let n=0;for(let s=0;se+1+n&&ls.throwError("child data too short","BUFFER_OVERRUN",{buffer:t,length:n,offset:e})}return{consumed:1+n,result:s}}function gs(t,e){0===t.length&&ls.throwError("data too short","BUFFER_OVERRUN",{buffer:t,length:0,offset:1});const r=e=>{e>t.length&&ls.throwError("data short segment too short","BUFFER_OVERRUN",{buffer:t,length:t.length,offset:e})};if(t[e]>=248){const n=t[e]-247;r(e+1+n);const s=ps(t,e+1,n);return r(e+1+n+s),ws(t,e,e+1+n,n+s)}if(t[e]>=192){const n=t[e]-192;return r(e+1+n),ws(t,e,e+1,n)}if(t[e]>=184){const n=t[e]-183;r(e+1+n);const s=ps(t,e+1,n);r(e+1+n+s);return{consumed:1+n+s,result:ie(t.slice(e+1+n,e+1+n+s))}}if(t[e]>=128){const n=t[e]-128;r(e+1+n);return{consumed:1+n,result:ie(t.slice(e+1,e+1+n))}}return{consumed:1,result:ds(t[e])}}function ms(t){const e=ls.getBytes(t,"data"),r=gs(e,0);return r.consumed!==e.length&&ls.throwArgumentError("unexpected junk after rlp payload","data",t),r.result}function ys(t){const e=as(t.from);let r=ts.getBigInt(t.nonce,"tx.nonce").toString(16);return r="0"===r?"0x":r.length%2?"0x0"+r:"0x"+r,as(le(nn(fs([e,r])),12))}function bs(t,e,r){const n=as(t),s=ts.getBytes(e,"salt"),i=ts.getBytes(r,"initCodeHash");return 32!==s.length&&ts.throwArgumentError("salt must be 32 bytes","salt",e),32!==i.length&&ts.throwArgumentError("initCodeHash must be 32 bytes","initCodeHash",r),as(le(nn(ae(["0xff",n,s,i])),12))}function vs(t){return t&&"function"==typeof t.getAddress}function Es(t){try{return as(t),!0}catch(t){}return!1}async function Ts(t,e){if("string"==typeof t){if(t.match(/^0x[0-9a-f]{40}$/i))return as(t);if(null==e)return ts.throwError("ENS resolution requires a provider","UNSUPPORTED_OPERATION",{operation:"resolveName"});const r=await e.resolveName(t);return null==r||"0x0000000000000000000000000000000000000000"===r?ts.throwError("unconfigured name","UNCONFIGURED_NAME",{value:t}):as(r)}if(vs(t)){const e=await t.getAddress();return null==e&&ts.throwArgumentError("addressable resolved to null","target",t),as(e)}return ts.throwArgumentError("unsupported addressable value","target",t)}var ks,As=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Ns=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Ps={};function xs(t,e){let r=!1;return e<0&&(r=!0,e*=-1),new Ss(Ps,`${r?"":"u"}int${e}`,t,{signed:r,width:e})}function Os(t,e){return new Ss(Ps,`bytes${e||""}`,t,{size:e})}const Is=Symbol.for("_ethers_typed");class Ss{constructor(t,e,n,s=null){if(ks.set(this,void 0),t!==Ps)throw new Error("private constructor");r(this,{_typedSymbol:Is,type:e,value:n}),As(this,ks,s,"f"),this.format()}format(){if("array"===this.type)throw new Error("");if("dynamicArray"===this.type)throw new Error("");return"tuple"===this.type?`tuple(${this.value.map((t=>t.format())).join(",")})`:this.type}defaultValue(){return 0}minValue(){return 0}maxValue(){return 0}isBigInt(){return!!this.type.match(/^u?int[0-9]+$/)}isData(){return"bytes"===this.type.substring(0,5)}isString(){return"string"===this.type}get tupleName(){if("tuple"!==this.type)throw TypeError("not a tuple");return Ns(this,ks,"f")}get arrayLength(){if("array"!==this.type)throw TypeError("not an array");return!0===Ns(this,ks,"f")?-1:!1===Ns(this,ks,"f")?this.value.length:null}static from(t,e){return new Ss(Ps,t,e)}static uint8(t){return xs(t,8)}static uint16(t){return xs(t,16)}static uint24(t){return xs(t,24)}static uint32(t){return xs(t,32)}static uint40(t){return xs(t,40)}static uint48(t){return xs(t,46)}static uint56(t){return xs(t,56)}static uint64(t){return xs(t,64)}static uint72(t){return xs(t,72)}static uint80(t){return xs(t,80)}static uint88(t){return xs(t,88)}static uint96(t){return xs(t,96)}static uint104(t){return xs(t,104)}static uint112(t){return xs(t,112)}static uint120(t){return xs(t,120)}static uint128(t){return xs(t,128)}static uint136(t){return xs(t,136)}static uint144(t){return xs(t,144)}static uint152(t){return xs(t,152)}static uint160(t){return xs(t,160)}static uint168(t){return xs(t,168)}static uint176(t){return xs(t,176)}static uint184(t){return xs(t,184)}static uint192(t){return xs(t,192)}static uint200(t){return xs(t,200)}static uint208(t){return xs(t,208)}static uint216(t){return xs(t,216)}static uint224(t){return xs(t,224)}static uint232(t){return xs(t,232)}static uint240(t){return xs(t,240)}static uint248(t){return xs(t,248)}static uint256(t){return xs(t,256)}static uint(t){return xs(t,256)}static int8(t){return xs(t,-8)}static int16(t){return xs(t,-16)}static int24(t){return xs(t,-24)}static int32(t){return xs(t,-32)}static int40(t){return xs(t,-40)}static int48(t){return xs(t,-46)}static int56(t){return xs(t,-56)}static int64(t){return xs(t,-64)}static int72(t){return xs(t,-72)}static int80(t){return xs(t,-80)}static int88(t){return xs(t,-88)}static int96(t){return xs(t,-96)}static int104(t){return xs(t,-104)}static int112(t){return xs(t,-112)}static int120(t){return xs(t,-120)}static int128(t){return xs(t,-128)}static int136(t){return xs(t,-136)}static int144(t){return xs(t,-144)}static int152(t){return xs(t,-152)}static int160(t){return xs(t,-160)}static int168(t){return xs(t,-168)}static int176(t){return xs(t,-176)}static int184(t){return xs(t,-184)}static int192(t){return xs(t,-192)}static int200(t){return xs(t,-200)}static int208(t){return xs(t,-208)}static int216(t){return xs(t,-216)}static int224(t){return xs(t,-224)}static int232(t){return xs(t,-232)}static int240(t){return xs(t,-240)}static int248(t){return xs(t,-248)}static int256(t){return xs(t,-256)}static int(t){return xs(t,-256)}static bytes(t){return Os(t)}static bytes1(t){return Os(t,1)}static bytes2(t){return Os(t,2)}static bytes3(t){return Os(t,3)}static bytes4(t){return Os(t,4)}static bytes5(t){return Os(t,5)}static bytes6(t){return Os(t,6)}static bytes7(t){return Os(t,7)}static bytes8(t){return Os(t,8)}static bytes9(t){return Os(t,9)}static bytes10(t){return Os(t,10)}static bytes11(t){return Os(t,11)}static bytes12(t){return Os(t,12)}static bytes13(t){return Os(t,13)}static bytes14(t){return Os(t,14)}static bytes15(t){return Os(t,15)}static bytes16(t){return Os(t,16)}static bytes17(t){return Os(t,17)}static bytes18(t){return Os(t,18)}static bytes19(t){return Os(t,19)}static bytes20(t){return Os(t,20)}static bytes21(t){return Os(t,21)}static bytes22(t){return Os(t,22)}static bytes23(t){return Os(t,23)}static bytes24(t){return Os(t,24)}static bytes25(t){return Os(t,25)}static bytes26(t){return Os(t,26)}static bytes27(t){return Os(t,27)}static bytes28(t){return Os(t,28)}static bytes29(t){return Os(t,29)}static bytes30(t){return Os(t,30)}static bytes31(t){return Os(t,31)}static bytes32(t){return Os(t,32)}static address(t){return new Ss(Ps,"address",t)}static bool(t){return new Ss(Ps,"bool",!!t)}static string(t){return new Ss(Ps,"string",t)}static array(t,e){throw new Error("not implemented yet")}static tuple(t,e){throw new Error("not implemented yet")}static overrides(t){return new Ss(Ps,"overrides",Object.assign({},t))}static isTyped(t){return t&&t._typedSymbol===Is}static dereference(t,e){if(Ss.isTyped(t)){if(t.type!==e)throw new Error(`invalid type: expecetd ${e}, got ${t.type}`);return t.value}return t}}ks=new WeakMap;class Rs extends Ce{constructor(t){super("address","address",t,!1)}defaultValue(){return"0x0000000000000000000000000000000000000000"}encode(t,e){let r=Ss.dereference(e,"string");try{r=as(r)}catch(t){return this._throwError(t.message,e)}return t.writeValue(r)}decode(t){return as(vt(t.readValue(),20))}}class _s extends Ce{constructor(t){super(t.name,t.type,"_",t.dynamic),this.coder=t}defaultValue(){return this.coder.defaultValue()}encode(t,e){return this.coder.encode(t,e)}decode(t){return this.coder.decode(t)}}function Cs(t,e,r){let n=[];if(Array.isArray(r))n=r;else if(r&&"object"==typeof r){let t={};n=e.map((e=>{const n=e.localName;return n||N.throwError("cannot encode object for signature with missing names","INVALID_ARGUMENT",{argument:"values",info:{coder:e},value:r}),t[n]&&N.throwError("cannot encode object for signature with duplicate names","INVALID_ARGUMENT",{argument:"values",info:{coder:e},value:r}),t[n]=!0,r[n]}))}else N.throwArgumentError("invalid tuple value","tuple",r);e.length!==n.length&&N.throwArgumentError("types/value length mismatch","tuple",r);let s=new Be,i=new Be,o=[];e.forEach(((t,e)=>{let r=n[e];if(t.dynamic){let e=i.length;t.encode(i,r);let n=s.writeUpdatableValue();o.push((t=>{n(t+e)}))}else t.encode(s,r)})),o.forEach((t=>{t(s.length)}));let a=t.appendWriter(s);return a+=t.appendWriter(i),a}function Bs(t,e){let r=[],n=[],s=t.subReader(0);return e.forEach((e=>{let i=null;if(e.dynamic){let r=t.readIndex(),n=s.subReader(r);try{i=e.decode(n)}catch(t){if(l(t,"BUFFER_OVERRUN"))throw t;i=t,i.baseType=e.name,i.name=e.localName,i.type=e.type}}else try{i=e.decode(t)}catch(t){if(l(t,"BUFFER_OVERRUN"))throw t;i=t,i.baseType=e.name,i.name=e.localName,i.type=e.type}if(null==i)throw new Error("investigate");r.push(i),n.push(e.localName||null)})),Re.fromItems(r,n)}class Fs extends Ce{constructor(t,e,n){super("array",t.type+"["+(e>=0?e:"")+"]",n,-1===e||t.dynamic),r(this,{coder:t,length:e})}defaultValue(){const t=this.coder.defaultValue(),e=[];for(let r=0;rt.dataLength&&N.throwError("insufficient data length","BUFFER_OVERRUN",{buffer:t.bytes,offset:32*e,length:t.dataLength}));let r=[];for(let t=0;tt||r<-(t+Ws))&&this._throwError("value out-of-bounds",e)}else(r<$s||r>Pt(n,8*this.size))&&this._throwError("value out-of-bounds",e);return r=Pt(Nt(r,8*this.size),8*this.size),this.signed&&(r=Nt(At(r,8*this.size),256)),t.writeValue(r)}decode(t){let e=Pt(t.readValue(),8*this.size);return this.signed&&(e=At(e,8*this.size)),t.coerce(this.name,e)}}const Vs=new A("@ethersproject/strings@6.0.0-beta.1");var Ks,Js;function qs(t,e,r,n,s){if(t===Js.BAD_PREFIX||t===Js.UNEXPECTED_CONTINUE){let t=0;for(let n=e+1;n>6==2;n++)t++;return t}return t===Js.OVERRUN?r.length-e-1:0}!function(t){t.current="",t.NFC="NFC",t.NFD="NFD",t.NFKC="NFKC",t.NFKD="NFKD"}(Ks||(Ks={})),function(t){t.UNEXPECTED_CONTINUE="unexpected continuation byte",t.BAD_PREFIX="bad codepoint prefix",t.OVERRUN="string overrun",t.MISSING_CONTINUE="missing continuation byte",t.OUT_OF_RANGE="out of UTF-8 range",t.UTF16_SURROGATE="UTF-16 surrogate",t.OVERLONG="overlong representation"}(Js||(Js={}));const Xs=Object.freeze({error:function(t,e,r,n,s){return Vs.throwArgumentError(`invalid codepoint at offset ${e}; ${t}`,"bytes",r)},ignore:qs,replace:function(t,e,r,n,s){return t===Js.OVERLONG?(n.push(null!=s?s:-1),0):(n.push(65533),qs(t,e,r))}});function Ys(t,e){null==e&&(e=Xs.error);const r=Vs.getBytes(t,"bytes"),n=[];let s=0;for(;s>7==0){n.push(t);continue}let i=null,o=null;if(192==(224&t))i=1,o=127;else if(224==(240&t))i=2,o=2047;else{if(240!=(248&t)){s+=e(128==(192&t)?Js.UNEXPECTED_CONTINUE:Js.BAD_PREFIX,s-1,r,n);continue}i=3,o=65535}if(s-1+i>=r.length){s+=e(Js.OVERRUN,s-1,r,n);continue}let a=t&(1<<8-i-1)-1;for(let t=0;t1114111?s+=e(Js.OUT_OF_RANGE,s-1-i,r,n,a):a>=55296&&a<=57343?s+=e(Js.UTF16_SURROGATE,s-1-i,r,n,a):a<=o?s+=e(Js.OVERLONG,s-1-i,r,n,a):n.push(a))}return n}function Zs(t,e=Ks.current){e!=Ks.current&&(Vs.assertNormalize(e),t=t.normalize(e));let r=[];for(let e=0;e>6|192),r.push(63&n|128);else if(55296==(64512&n)){e++;const s=t.charCodeAt(e);if(e>=t.length||56320!=(64512&s))throw new Error("invalid utf-8 string");const i=65536+((1023&n)<<10)+(1023&s);r.push(i>>18|240),r.push(i>>12&63|128),r.push(i>>6&63|128),r.push(63&i|128)}else r.push(n>>12|224),r.push(n>>6&63|128),r.push(63&n|128)}return new Uint8Array(r)}function Qs(t){const e="0000"+t.toString(16);return"\\u"+e.substring(e.length-4)}function ti(t,e){return'"'+Ys(t,e).map((t=>{if(t<256){switch(t){case 8:return"\\b";case 9:return"\\t";case 10:return"\\n";case 13:return"\\r";case 34:return'\\"';case 92:return"\\\\"}if(t>=32&&t<127)return String.fromCharCode(t)}return t<=65535?Qs(t):Qs(55296+((t-=65536)>>10&1023))+Qs(56320+(1023&t))})).join("")+'"'}function ei(t){return t.map((t=>t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode(55296+(t>>10&1023),56320+(1023&t))))).join("")}function ri(t,e){return ei(Ys(t,e))}function ni(t,e=Ks.current){return Ys(Zs(t,e))}function si(t){const e=Zs(t);if(e.length>31)throw new Error("bytes32 string must be less than 32 bytes");return de(e,32)}function ii(t){const e=Vs.getBytes(t,"bytes");if(32!==e.length)throw new Error("invalid bytes32 - not 32 bytes long");if(0!==e[31])throw new Error("invalid bytes32 string - no null terminator");let r=31;for(;0===e[r-1];)r--;return ri(e.slice(0,r))}function oi(t,e){const r=e||function(t){return[parseInt(t,16)]};let n=0,s={};return t.split(",").forEach((t=>{let e=t.split(":");n+=parseInt(e[0],16),s[n]=r(e[1])})),s}function ai(t){let e=0;return t.split(",").map((t=>{let r=t.split("-");1===r.length?r[1]="0":""===r[1]&&(r[1]="1");let n=e+parseInt(r[0],16);return e=parseInt(r[1],16),{l:n,h:e}}))}function ci(t,e){let r=0;for(let n=0;n=r&&t<=r+s.h&&(t-r)%(s.d||1)==0){if(s.e&&-1!==s.e.indexOf(t-r))continue;return s}}return null}const li=ai("221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d"),ui="ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff".split(",").map((t=>parseInt(t,16))),hi=[{h:25,s:32,l:65},{h:30,s:32,e:[23],l:127},{h:54,s:1,e:[48],l:64,d:2},{h:14,s:1,l:57,d:2},{h:44,s:1,l:17,d:2},{h:10,s:1,e:[2,6,8],l:61,d:2},{h:16,s:1,l:68,d:2},{h:84,s:1,e:[18,24,66],l:19,d:2},{h:26,s:32,e:[17],l:435},{h:22,s:1,l:71,d:2},{h:15,s:80,l:40},{h:31,s:32,l:16},{h:32,s:1,l:80,d:2},{h:52,s:1,l:42,d:2},{h:12,s:1,l:55,d:2},{h:40,s:1,e:[38],l:15,d:2},{h:14,s:1,l:48,d:2},{h:37,s:48,l:49},{h:148,s:1,l:6351,d:2},{h:88,s:1,l:160,d:2},{h:15,s:16,l:704},{h:25,s:26,l:854},{h:25,s:32,l:55915},{h:37,s:40,l:1247},{h:25,s:-119711,l:53248},{h:25,s:-119763,l:52},{h:25,s:-119815,l:52},{h:25,s:-119867,e:[1,4,5,7,8,11,12,17],l:52},{h:25,s:-119919,l:52},{h:24,s:-119971,e:[2,7,8,17],l:52},{h:24,s:-120023,e:[2,7,13,15,16,17],l:52},{h:25,s:-120075,l:52},{h:25,s:-120127,l:52},{h:25,s:-120179,l:52},{h:25,s:-120231,l:52},{h:25,s:-120283,l:52},{h:25,s:-120335,l:52},{h:24,s:-119543,e:[17],l:56},{h:24,s:-119601,e:[17],l:58},{h:24,s:-119659,e:[17],l:58},{h:24,s:-119717,e:[17],l:58},{h:24,s:-119775,e:[17],l:58}],fi=oi("b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3"),di=oi("179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7"),pi=oi("df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D",(function(t){if(t.length%4!=0)throw new Error("should not happen; bad data");let e=[];for(let r=0;r{if(ui.indexOf(t)>=0)return[];if(t>=65024&&t<=65039)return[];let e=function(t){const e=ci(t,hi);if(e){if(null==e.s)throw new Error("should not happenl bad range");return[t+e.s]}const r=fi[t];if(r)return r;const n=di[t];return n?[t+n[0]]:pi[t]||null}(t);return e||[t]})),e=r.reduce(((t,e)=>(e.forEach((e=>{t.push(e)})),t)),[]),e=ni(ei(e),Ks.NFKC),e.forEach((e=>{ci(e,wi)&&Vs.throwArgumentError("STRINGPREP_CONTAINS_PROHIBITED","value",t)})),e.forEach((e=>{ci(e,li)&&Vs.throwArgumentError("STRINGPREP_CONTAINS_UNASSIGNED","value",t)}));let n=ei(e);return"-"!==n.substring(0,1)&&"--"!==n.substring(2,4)&&"-"!==n.substring(n.length-1)||Vs.throwArgumentError("invalid hyphen","value",t),n.length>63&&Vs.throwArgumentError("too long","value",t),n}class mi extends Ls{constructor(t){super("string",t)}defaultValue(){return""}encode(t,e){return super.encode(t,Zs(Ss.dereference(e,"string")))}decode(t){return ri(super.decode(t))}}class yi extends Ce{constructor(t,e){let n=!1;const s=[];t.forEach((t=>{t.dynamic&&(n=!0),s.push(t.type)}));super("tuple","tuple("+s.join(",")+")",e,n),r(this,{coders:Object.freeze(t.slice())})}defaultValue(){const t=[];this.coders.forEach((e=>{t.push(e.defaultValue())}));const e=this.coders.reduce(((t,e)=>{const r=e.localName;return r&&(t[r]||(t[r]=0),t[r]++),t}),{});return this.coders.forEach(((r,n)=>{let s=r.localName;s&&1===e[s]&&("length"===s&&(s="_length"),null==t[s]&&(t[s]=t[n]))})),Object.freeze(t)}encode(t,e){const r=Ss.dereference(e,"tuple");return Cs(t,this.coders,r)}decode(t){return t.coerce(this.name,Bs(t,this.coders))}}var bi,vi,Ei=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Ti=new RegExp(/^bytes([0-9]*)$/),ki=new RegExp(/^(u?int)([0-9]*)$/);bi=new WeakSet,vi=function t(e){if(e.isArray())return new Fs(Ei(this,bi,"m",t).call(this,e.arrayChildren),e.arrayLength,e.name);if(e.isTuple())return new yi(e.components.map((e=>Ei(this,bi,"m",t).call(this,e))),e.name);switch(e.baseType){case"address":return new Rs(e.name);case"bool":return new Us(e.name);case"string":return new mi(e.name);case"bytes":return new Ds(e.name);case"":return new Gs(e.name)}let r=e.type.match(ki);if(r){let t=parseInt(r[2]||"256");return(0===t||t>256||t%8!=0)&&N.throwArgumentError("invalid "+r[1]+" bit length","param",e),new Hs(t/8,"int"===r[1],e.name)}if(r=e.type.match(Ti),r){let t=parseInt(r[1]);return(0===t||t>32)&&N.throwArgumentError("invalid bytes length","param",e),new Ms(t,e.name)}return N.throwArgumentError("invalid type","type",e.type)};const Ai=new class{constructor(t){bi.add(this),r(this,{coerceFunc:t},{},{coerceFunc:null})}getDefaultValue(t){const e=t.map((t=>Ei(this,bi,"m",vi).call(this,ot.from(t))));return new yi(e,"_").defaultValue()}encode(t,e){N.assertArgumentCount(e.length,t.length,"types/values length mismatch");const r=t.map((t=>Ei(this,bi,"m",vi).call(this,ot.from(t)))),n=new yi(r,"_"),s=new Be;return n.encode(s,e),s.data}decode(t,e,r){const n=t.map((t=>Ei(this,bi,"m",vi).call(this,ot.from(t))));return new yi(n,"_").decode(new Fe(e,this.coerceFunc,r))}};function Ni(t){return nn(Zs(t))}const Pi=new A("@ethersproject/hash@6.0.0-beta.1"),xi=new Uint8Array(32);xi.fill(0);const Oi=new RegExp("^((.*)\\.)?([^.]+)$");function Ii(t){try{const e=t.split(".");for(let t=0;t{""===e&&Pi.throwArgumentError("invalid DNS name; missing component","name",t);const r=Zs("_"+gi(e));return r[0]=r.length-1,r})))+"00"}const _i="Ethereum Signed Message:\n";function Ci(t){return"string"==typeof t&&(t=Zs(t)),nn(ae([Zs(_i),Zs(String(t.length)),t]))}var Bi,Fi,Ui,Li,Di,Mi=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},ji=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Gi=new Uint8Array(32);Gi.fill(0);const $i=BigInt(-1),Wi=BigInt(0),zi=BigInt(1),Hi=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const Vi=vt(zi,32),Ki=vt(Wi,32),Ji={name:"string",version:"string",chainId:"uint256",verifyingContract:"address",salt:"bytes32"},qi=["name","version","chainId","verifyingContract","salt"];function Xi(t){return function(e){return"string"!=typeof e&&Pi.throwArgumentError(`invalid domain value for ${JSON.stringify(t)}`,`domain.${t}`,e),e}}const Yi={name:Xi("name"),version:Xi("version"),chainId:function(t){return Pi.getBigInt(t,"domain.chainId")},verifyingContract:function(t){try{return as(t).toLowerCase()}catch(t){}return Pi.throwArgumentError('invalid domain value "verifyingContract"',"domain.verifyingContract",t)},salt:function(t){const e=Pi.getBytes(t,"domain.salt");return 32!==e.length&&Pi.throwArgumentError('invalid domain value "salt"',"domain.salt",t),ie(e)}};function Zi(t){{const e=t.match(/^(u?)int(\d*)$/);if(e){const r=""===e[1],n=parseInt(e[2]||"256");(n%8!=0||n>256||e[2]&&e[2]!==String(n))&&Pi.throwArgumentError("invalid numeric width","type",t);const s=Pt(Hi,r?n-1:n),i=r?(s+zi)*$i:Wi;return function(e){const r=Pi.getBigInt(e,"value");return(rs)&&Pi.throwArgumentError(`value out-of-bounds for ${t}`,"value",r),vt(Nt(r,256),32)}}}{const e=t.match(/^bytes(\d+)$/);if(e){const r=parseInt(e[1]);return(0===r||r>32||e[1]!==String(r))&&Pi.throwArgumentError("invalid bytes width","type",t),function(e){return ee(e).length!==r&&Pi.throwArgumentError(`invalid length for ${t}`,"value",e),function(t){const e=ee(t),r=e.length%32;return r?ae([e,Gi.slice(r)]):ie(e)}(e)}}}switch(t){case"address":return function(t){return fe(as(t),32)};case"bool":return function(t){return t?Vi:Ki};case"bytes":return function(t){return nn(t)};case"string":return function(t){return Ni(t)}}return null}function Qi(t,e){return`${t}(${e.map((({name:t,type:e})=>e+" "+t)).join(",")})`}class to{constructor(t){Bi.add(this),Fi.set(this,void 0),Ui.set(this,void 0),Li.set(this,void 0),Mi(this,Fi,JSON.stringify(t),"f"),Mi(this,Ui,new Map,"f"),Mi(this,Li,new Map,"f");const e=new Map,n=new Map,s=new Map;Object.keys(t).forEach((t=>{e.set(t,new Set),n.set(t,[]),s.set(t,new Set)}));for(const r in t){const s=new Set;for(const i of t[r]){s.has(i.name)&&Pi.throwArgumentError(`duplicate variable name ${JSON.stringify(i.name)} in ${JSON.stringify(r)}`,"types",t),s.add(i.name);const o=i.type.match(/^([^\x5b]*)(\x5b|$)/)[1]||null;o===r&&Pi.throwArgumentError(`circular type reference to ${JSON.stringify(o)}`,"types",t);Zi(o)||(n.has(o)||Pi.throwArgumentError(`unknown type ${JSON.stringify(o)}`,"types",t),n.get(o).push(r),e.get(r).add(o))}}const i=Array.from(n.keys()).filter((t=>0===n.get(t).length));0===i.length?Pi.throwArgumentError("missing primary type","types",t):i.length>1&&Pi.throwArgumentError(`ambiguous primary types or unused types: ${i.map((t=>JSON.stringify(t))).join(", ")}`,"types",t),r(this,{primaryType:i[0]}),function r(i,o){o.has(i)&&Pi.throwArgumentError(`circular type reference to ${JSON.stringify(i)}`,"types",t),o.add(i);for(const t of e.get(i))if(n.has(t)){r(t,o);for(const e of o)s.get(e).add(t)}o.delete(i)}(this.primaryType,new Set);for(const[e,r]of s){const n=Array.from(r);n.sort(),ji(this,Ui,"f").set(e,Qi(e,t[e])+n.map((e=>Qi(e,t[e]))).join(""))}}get types(){return JSON.parse(ji(this,Fi,"f"))}getEncoder(t){let e=ji(this,Li,"f").get(t);return e||(e=ji(this,Bi,"m",Di).call(this,t),ji(this,Li,"f").set(t,e)),e}encodeType(t){const e=ji(this,Ui,"f").get(t);return e||Pi.throwArgumentError(`unknown type: ${JSON.stringify(t)}`,"name",t)}encodeData(t,e){return this.getEncoder(t)(e)}hashStruct(t,e){return nn(this.encodeData(t,e))}encode(t){return this.encodeData(this.primaryType,t)}hash(t){return this.hashStruct(this.primaryType,t)}_visit(t,e,r){if(Zi(t))return r(t,e);const n=t.match(/^(.*)(\x5b(\d*)\x5d)$/);if(n){const t=n[1],s=parseInt(n[3]);return s>=0&&e.length!==s&&Pi.throwArgumentError("array length mismatch; expected length ${ arrayLength }","value",e),e.map((e=>this._visit(t,e,r)))}const s=this.types[t];return s?s.reduce(((t,{name:n,type:s})=>(t[n]=this._visit(s,e[n],r),t)),{}):Pi.throwArgumentError(`unknown type: ${t}`,"type",t)}visit(t,e){return this._visit(this.primaryType,t,e)}static from(t){return new to(t)}static getPrimaryType(t){return to.from(t).primaryType}static hashStruct(t,e,r){return to.from(e).hashStruct(t,r)}static hashDomain(t){const e=[];for(const r in t){const n=Ji[r];n||Pi.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(r)}`,"domain",t),e.push({name:r,type:n})}return e.sort(((t,e)=>qi.indexOf(t.name)-qi.indexOf(e.name))),to.hashStruct("EIP712Domain",{EIP712Domain:e},t)}static encode(t,e,r){return ae(["0x1901",to.hashDomain(t),to.from(e).hash(r)])}static hash(t,e,r){return nn(to.encode(t,e,r))}static async resolveNames(t,e,r,n){t=Object.assign({},t);const s={};t.verifyingContract&&!Xt(t.verifyingContract,20)&&(s[t.verifyingContract]="0x");const i=to.from(e);i.visit(r,((t,e)=>("address"!==t||Xt(e,20)||(s[e]="0x"),e)));for(const t in s)s[t]=await n(t);return t.verifyingContract&&s[t.verifyingContract]&&(t.verifyingContract=s[t.verifyingContract]),{domain:t,value:r=i.visit(r,((t,e)=>"address"===t&&s[e]?s[e]:e))}}static getPayload(t,e,r){to.hashDomain(t);const n={},s=[];qi.forEach((e=>{const r=t[e];null!=r&&(n[e]=Yi[e](r),s.push({name:e,type:Ji[e]}))}));const i=to.from(e),o=Object.assign({},e);return o.EIP712Domain?Pi.throwArgumentError("types must not contain EIP712Domain type","types.EIP712Domain",e):o.EIP712Domain=s,i.encode(r),{types:o,domain:n,primaryType:i.primaryType,message:i.visit(r,((t,e)=>{if(t.match(/^bytes(\d*)/))return ie(Pi.getBytes(e));if(t.match(/^u?int/))return Pi.getBigInt(e).toString();switch(t){case"address":return e.toLowerCase();case"bool":return!!e;case"string":return"string"!=typeof e&&Pi.throwArgumentError("invalid string","value",e),e}return Pi.throwArgumentError("unsupported type","type",t)}))}}}Fi=new WeakMap,Ui=new WeakMap,Li=new WeakMap,Bi=new WeakSet,Di=function(t){{const e=Zi(t);if(e)return e}const e=t.match(/^(.*)(\x5b(\d*)\x5d)$/);if(e){const t=e[1],r=this.getEncoder(t),n=parseInt(e[3]);return e=>{n>=0&&e.length!==n&&Pi.throwArgumentError("array length mismatch; expected length ${ arrayLength }","value",e);let s=e.map(r);return ji(this,Ui,"f").has(t)&&(s=s.map(nn)),nn(ae(s))}}const r=this.types[t];if(r){const e=Ni(ji(this,Ui,"f").get(t));return t=>{const n=r.map((({name:e,type:r})=>{const n=this.getEncoder(r)(t[e]);return ji(this,Ui,"f").has(r)?nn(n):n}));return n.unshift(e),ae(n)}}return Pi.throwArgumentError(`unknown type: ${t}`,"type",t)};var eo,ro,no,so,io,oo,ao,co=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},lo=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class uo{constructor(t,e,n){const s=t.name,i=t.format();r(this,{fragment:t,name:s,signature:i,topic:e,args:n})}}class ho{constructor(t,e,n,s){const i=t.name,o=t.format();r(this,{fragment:t,name:i,args:n,signature:o,selector:e,value:s})}}class fo{constructor(t,e,n){const s=t.name,i=t.format();r(this,{fragment:t,name:s,args:n,signature:i,selector:e})}}class po{constructor(t){r(this,{hash:t,_isIndexed:!0})}static isIndexed(t){return!(!t||!t._isIndexed)}}const wo={0:"generic panic",1:"assert(false)",17:"arithmetic overflow",18:"division or modulo by zero",33:"enum overflow",34:"invalid encoded storage byte array accessed",49:"out-of-bounds array access; popping on an empty array",50:"out-of-bounds access of an array or bytesN",65:"out of memory",81:"uninitialized function"},go={"0x08c379a0":{signature:"Error(string)",name:"Error",inputs:["string"],reason:t=>`reverted with reason string ${JSON.stringify(t)}`},"0x4e487b71":{signature:"Panic(uint256)",name:"Panic",inputs:["uint256"],reason:t=>{let e="unknown panic code";return t>=0&&t<=255&&wo[t.toString()]&&(e=wo[t.toString()]),`reverted with panic code 0x${t.toString(16)} (${e})`}}};class mo{constructor(t){eo.add(this),ro.set(this,void 0),no.set(this,void 0),so.set(this,void 0),io.set(this,void 0);let e=[];e="string"==typeof t?JSON.parse(t):t,co(this,so,new Map,"f"),co(this,ro,new Map,"f"),co(this,no,new Map,"f"),r(this,{fragments:Object.freeze(e.map((t=>ct.from(t))).filter((t=>null!=t)))}),co(this,io,this.getAbiCoder(),"f"),this.fragments.forEach((t=>{let e;switch(t.type){case"constructor":return this.deploy?void N.warn("duplicate definition - constructor"):void r(this,{deploy:t});case"function":e=lo(this,so,"f");break;case"event":e=lo(this,no,"f");break;case"error":e=lo(this,ro,"f");break;default:return}const n=t.format();e.has(n)?N.warn("duplicate definition - "+n):e.set(n,t)})),this.deploy||r(this,{deploy:dt.fromString("constructor()")})}format(t){t||(t=_.full),t===_.sighash&&N.throwArgumentError("interface does not support formatting sighash","format",t);const e=this.fragments.map((e=>e.format(t)));return t===_.json?JSON.stringify(e.map((t=>JSON.parse(t)))):e}getAbiCoder(){return Ai}getFunctionName(t){return lo(this,eo,"m",oo).call(this,t,null,!1).name}getFunction(t,e){return lo(this,eo,"m",oo).call(this,t,e||null,!0)}getEventName(t){return lo(this,eo,"m",ao).call(this,t,null,!1).name}getEvent(t,e){return lo(this,eo,"m",ao).call(this,t,e||null,!0)}getError(t,e){if(Xt(t)){const e=t.toLowerCase();for(const t of lo(this,ro,"f").values())if(e===this.getSelector(t))return t;N.throwArgumentError("no matching error","selector",t)}if(-1===t.indexOf("(")){const e=[];for(const[r,n]of lo(this,ro,"f"))r.split("(")[0]===t&&e.push(n);return 0===e.length?N.throwArgumentError("no matching error","name",t):e.length>1&&N.throwArgumentError("multiple matching errors","name",t),e[0]}const r=lo(this,ro,"f").get(ht.fromString(t).format());return r||N.throwArgumentError("no matching error","signature",t)}getSelector(t){return le(Ni(t.format()),0,4)}getEventTopic(t){return Ni(t.format())}_decodeParams(t,e){return lo(this,io,"f").decode(t,e)}_encodeParams(t,e){return lo(this,io,"f").encode(t,e)}encodeDeploy(t){return this._encodeParams(this.deploy.inputs,t||[])}decodeErrorResult(t,e){return"string"==typeof t&&(t=this.getError(t)),le(e,0,4)!==this.getSelector(t)&&N.throwArgumentError(`data signature does not match error ${t.name}.`,"data",e),this._decodeParams(t.inputs,le(e,4))}encodeErrorResult(t,e){return"string"==typeof t&&(t=this.getError(t)),ae([this.getSelector(t),this._encodeParams(t.inputs,e||[])])}decodeFunctionData(t,e){return"string"==typeof t&&(t=this.getFunction(t)),le(e,0,4)!==this.getSelector(t)&&N.throwArgumentError(`data signature does not match function ${t.name}.`,"data",e),this._decodeParams(t.inputs,le(e,4))}encodeFunctionData(t,e){return"string"==typeof t&&(t=this.getFunction(t)),ae([this.getSelector(t),this._encodeParams(t.inputs,e||[])])}decodeFunctionResult(t,e){"string"==typeof t&&(t=this.getFunction(t));let r="invalid length for result data";const n=ee(e);if(n.length%32==0)try{return lo(this,io,"f").decode(t.outputs,n)}catch(t){r="could not decode result data"}return N.throwError(r,"BAD_DATA",{value:ie(n),info:{method:t.name,signature:t.format()}})}makeError(t,e,r){"string"==typeof t&&(t=this.getFunction(t));const n=N.getBytes(e);let s,i,o,a;if(r)try{s=lo(this,io,"f").decode(t.inputs,r.data||"0x")}catch(t){console.log(t)}let c="unknown reason";if(0===n.length)c="missing error reason";else if(n.length%32==4){const t=ie(n.slice(0,4)),e=go[t];if(e)try{o=e.name,a=e.signature,i=lo(this,io,"f").decode(e.inputs,n.slice(4)),c=e.reason(...i)}catch(t){console.log(t)}else{c="unknown custom error";try{const e=this.getError(t);o=e.name,a=e.format(),c=`custom error: ${a}`;try{i=lo(this,io,"f").decode(e.inputs,n.slice(4))}catch(t){c=`custom error: ${a} (coult not decode error data)`}}catch(t){console.log(t)}}}return N.makeError("call revert exception","CALL_EXCEPTION",{data:ie(n),transaction:null,method:t.name,signature:t.format(),args:s,errorArgs:i,errorName:o,errorSignature:a,reason:c})}encodeFunctionResult(t,e){return"string"==typeof t&&(t=this.getFunction(t)),ie(lo(this,io,"f").encode(t.outputs,e||[]))}encodeFilterTopics(t,e){"string"==typeof t&&(t=this.getEvent(t)),e.length>t.inputs.length&&N.throwError("too many arguments for "+t.format(),"UNEXPECTED_ARGUMENT",{count:e.length,expectedCount:t.inputs.length});const r=[];t.anonymous||r.push(this.getEventTopic(t));const n=(t,e)=>"string"===t.type?Ni(e):"bytes"===t.type?nn(ie(e)):("address"===t.type&&lo(this,io,"f").encode(["address"],[e]),fe(ie(e),32));for(e.forEach(((e,s)=>{const i=t.inputs[s];i.indexed?null==e?r.push(null):"array"===i.baseType||"tuple"===i.baseType?N.throwArgumentError("filtering with tuples or arrays not supported","contract."+i.name,e):Array.isArray(e)?r.push(e.map((t=>n(i,t)))):r.push(n(i,e)):null!=e&&N.throwArgumentError("cannot filter non-indexed parameters; must be null","contract."+i.name,e)}));r.length&&null===r[r.length-1];)r.pop();return r}encodeEventLog(t,e){"string"==typeof t&&(t=this.getEvent(t));const r=[],n=[],s=[];return t.anonymous||r.push(this.getEventTopic(t)),e.length!==t.inputs.length&&N.throwArgumentError("event arguments/values mismatch","values",e),t.inputs.forEach(((t,i)=>{const o=e[i];if(t.indexed)if("string"===t.type)r.push(Ni(o));else if("bytes"===t.type)r.push(nn(o));else{if("tuple"===t.baseType||"array"===t.baseType)throw new Error("not implemented");r.push(lo(this,io,"f").encode([t.type],[o]))}else n.push(t),s.push(o)})),{data:lo(this,io,"f").encode(n,s),topics:r}}decodeEventLog(t,e,r){if("string"==typeof t&&(t=this.getEvent(t)),null!=r&&!t.anonymous){const e=this.getEventTopic(t);Xt(r[0],32)&&r[0].toLowerCase()===e||N.throwArgumentError("fragment/topic mismatch","topics[0]",r[0]),r=r.slice(1)}const n=[],s=[],i=[];t.inputs.forEach(((t,e)=>{t.indexed?"string"===t.type||"bytes"===t.type||"tuple"===t.baseType||"array"===t.baseType?(n.push(ot.fromObject({type:"bytes32",name:t.name})),i.push(!0)):(n.push(t),i.push(!1)):(s.push(t),i.push(!1))}));const o=null!=r?lo(this,io,"f").decode(n,ae(r)):null,a=lo(this,io,"f").decode(s,e,!0),c=[],l=[];let u=0,h=0;return t.inputs.forEach(((t,e)=>{let r=null;if(t.indexed)if(null==o)r=new po(null);else if(i[e])r=new po(o[h++]);else try{r=o[h++]}catch(t){r=t}else try{r=a[u++]}catch(t){r=t}c.push(r),l.push(t.name||null)})),Re.fromItems(c,l)}parseTransaction(t){const e=N.getBytes(t.data,"tx.data"),r=N.getBigInt(null!=t.value?t.value:0,"tx.value"),n=this.getFunction(ie(e.slice(0,4)));if(!n)return null;const s=lo(this,io,"f").decode(n.inputs,e.slice(4));return new ho(n,this.getSelector(n),s,r)}parseLog(t){const e=this.getEvent(t.topics[0]);return!e||e.anonymous?null:new uo(e,this.getEventTopic(e),this.decodeEventLog(e,t.data,t.topics))}parseError(t){const e=ie(t),r=this.getError(le(e,0,4));if(!r)return null;const n=lo(this,io,"f").decode(r.inputs,le(e,4));return new fo(r,this.getSelector(r),n)}static from(t){return t instanceof mo?t:"string"==typeof t?new mo(JSON.parse(t)):"function"==typeof t.format?new mo(t.format(_.json)):new mo(t)}}ro=new WeakMap,no=new WeakMap,so=new WeakMap,io=new WeakMap,eo=new WeakSet,oo=function(t,e,r){if(Xt(t)){const e=t.toLowerCase();for(const t of lo(this,so,"f").values())if(e===this.getSelector(t))return t;N.throwArgumentError("no matching function","selector",t)}if(-1===t.indexOf("(")){const n=[];for(const[e,r]of lo(this,so,"f"))e.split("(")[0]===t&&n.push(r);if(e){const t=e.length>0?e[e.length-1]:null;let r=e.length,s=!0;Ss.isTyped(t)&&"overrides"===t.type&&(s=!1,r--);for(let t=n.length-1;t>=0;t--){const e=n[t].inputs.length;e===r||s&&e===r-1||n.splice(t,1)}for(let t=n.length-1;t>=0;t--){const r=n[t].inputs;for(let s=0;s=r.length){if("overrides"===e[s].type)continue;n.splice(t,1);break}if(e[s].type!==r[s].baseType){n.splice(t,1);break}}}}if(1===n.length&&e&&e.length!==n[0].inputs.length){const t=e[e.length-1];(null==t||Array.isArray(t)||"object"!=typeof t)&&n.splice(0,1)}if(0===n.length)N.throwArgumentError("no matching function","name",t);else if(n.length>1&&r){const e=n.map((t=>JSON.stringify(t.format()))).join(", ");N.throwArgumentError(`multiple matching functions (i.e. ${e})`,"name",t)}return n[0]}const n=lo(this,so,"f").get(pt.fromString(t).format());return n||N.throwArgumentError("no matching function","signature",t)},ao=function(t,e,r){if(Xt(t)){const e=t.toLowerCase();for(const t of lo(this,no,"f").values())if(e===this.getEventTopic(t))return t;N.throwArgumentError("no matching event","eventTopic",t)}if(-1===t.indexOf("(")){const n=[];for(const[e,r]of lo(this,no,"f"))e.split("(")[0]===t&&n.push(r);if(e){for(let t=n.length-1;t>=0;t--)n[t].inputs.length=0;t--){const r=n[t].inputs;for(let s=0;s1&&r&&N.throwArgumentError("multiple matching events","name",t),n[0]}const n=lo(this,no,"f").get(ft.fromString(t).format());return n||N.throwArgumentError("no matching event","signature",t)};const yo=new A("@ethersproject/web@6.0.0-beta.1");var bo,vo,Eo=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},To=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class ko{constructor(t,e,r,n,s){bo.set(this,void 0),vo.set(this,void 0),Eo(this,bo,{statusCode:t,statusMessage:e,headers:Object.freeze(Object.assign({},Object.keys(r).reduce(((t,e)=>(t[e.toLowerCase()]=r[e],t)),{}))),body:null==n?null:new Uint8Array(n),request:s||null},"f"),Eo(this,vo,{message:""},"f")}toString(){const t=a(To(this,bo,"f"),"body");return``}get statusCode(){return a(To(this,bo,"f"),"statusCode")}get statusMessage(){return a(To(this,bo,"f"),"statusMessage")}get headers(){return a(To(this,bo,"f"),"headers")}get body(){const t=a(To(this,bo,"f"),"body");return null==t?null:new Uint8Array(t)}get bodyText(){try{const t=a(To(this,bo,"f"),"body");return null==t?"":ri(t)}catch(t){return yo.throwError("response body is not valid UTF-8 data","UNSUPPORTED_OPERATION",{operation:"bodyText",info:{response:this}})}}get bodyJson(){try{return JSON.parse(this.bodyText)}catch(t){return yo.throwError("response body is not valid JSON","UNSUPPORTED_OPERATION",{operation:"bodyJson",info:{response:this}})}}[(bo=new WeakMap,vo=new WeakMap,Symbol.iterator)](){const t=this.headers,e=Object.keys(t);let r=0;return{next:()=>{if(r=200&&this.statusCode<300}assertOk(){if(this.ok())return;let{message:t,error:e}=To(this,vo,"f");""===t&&(t=`server response ${this.statusCode} ${this.statusMessage}`),yo.throwError(t,"SERVER_ERROR",{request:this.request||"unknown request",response:this,error:e})}}async function Ao(t,e){const r=t.url.split(":")[0].toLowerCase();"http"!==r&&"https"!==r&&yo.throwError(`unsupported protocol ${r}`,"UNSUPPORTED_OPERATION",{info:{protocol:r},operation:"request"}),t.credentials&&!t.allowInsecureAuthentication&&yo.throwError("insecure authorized connections unsupported","UNSUPPORTED_OPERATION",{operation:"request"});const n={method:t.method,headers:new Headers(Array.from(t)),body:t.body||void 0},s=await fetch(t.url,n),i={};s.headers.forEach(((t,e)=>{i[e.toLowerCase()]=t}));const o=new Uint8Array(await s.arrayBuffer());return new ko(s.status,s.statusText,i,o,t)}var No,Po=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},xo=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function Oo(t,e,r){if(typeof t!==e)throw new Error(`invalid ${r}`);return t}class Io{constructor(t){No.set(this,void 0),Po(this,No,{allowInsecure:!1,gzip:!1,headers:{},method:"",timeout:300,url:Oo(t,"string","url")},"f")}get url(){return a(xo(this,No,"f"),"url")}set url(t){c(xo(this,No,"f"),"url",Oo(t,"string","url"))}get body(){const t=a(xo(this,No,"f"),"body");return null==t?null:this.isFrozen()?new Uint8Array(t):t}set body(t){if(null==t)c(xo(this,No,"f"),"body",void 0),c(xo(this,No,"f"),"bodyType",void 0);else if("string"==typeof t)c(xo(this,No,"f"),"body",Zs(t)),c(xo(this,No,"f"),"bodyType","text/plain");else if(t instanceof Uint8Array)c(xo(this,No,"f"),"body",t),c(xo(this,No,"f"),"bodyType","application/octet-stream");else{if("object"!=typeof t)throw new Error("invalid body");c(xo(this,No,"f"),"body",Zs(JSON.stringify(t))),c(xo(this,No,"f"),"bodyType","application/json")}}hasBody(){return null!=a(xo(this,No,"f"),"body")}get method(){const t=a(xo(this,No,"f"),"method");return t?t.toUpperCase():this.body?"POST":"GET"}set method(t){null==t&&(t=""),c(xo(this,No,"f"),"method",Oo(t,"string","method"))}get headers(){const t=Object.assign({},a(xo(this,No,"f"),"headers")),e=a(xo(this,No,"f"),"bodyType");return this.credentials,this.allowGzip&&(t["accept-encoding"]="gzip"),null==t["content-type"]&&e&&(t["content-type"]=e),this.body&&(t["content-length"]=String(this.body.length)),Object.freeze(t)}getHeader(t){return this.headers[t.toLowerCase()]}setHeader(t,e){const r=a(xo(this,No,"f"),"headers");c(xo(this,No,"f"),"headers",r),r[Oo(t,"string","key").toLowerCase()]=String(e)}clearHeaders(){c(xo(this,No,"f"),"headers",{})}[(No=new WeakMap,Symbol.iterator)](){const t=this.headers,e=Object.keys(t);let r=0;return{next:()=>{if(r ${JSON.stringify(t)})`});const n=new Io(t);return n.method="GET",n.allowGzip=this.allowGzip,n.timeout=this.timeout,c(xo(n,No,"f"),"body",a(xo(this,No,"f"),"body")),c(xo(n,No,"f"),"headers",Object.assign({},a(xo(this,No,"f"),"headers"))),c(xo(n,No,"f"),"bodyType",a(xo(this,No,"f"),"bodyType")),n}clone(){const t=new Io(this.url);c(xo(t,No,"f"),"method",a(xo(this,No,"f"),"method"));const e=a(xo(this,No,"f"),"body");return c(xo(t,No,"f"),"body",null==e?void 0:new Uint8Array(e)),c(xo(t,No,"f"),"bodyType",a(xo(this,No,"f"),"bodyType")),c(xo(t,No,"f"),"headers",Object.assign({},a(xo(this,No,"f"),"headers"))),c(xo(t,No,"f"),"creds",a(xo(this,No,"f"),"creds")),this.allowGzip&&(t.allowGzip=!0),t.timeout=this.timeout,this.allowInsecureAuthentication&&(t.allowInsecureAuthentication=!0),t}freeze(){const t=a(xo(this,No,"f"),"body");return null!=t&&c(xo(this,No,"f"),"body",new Uint8Array(t)),Object.freeze(xo(this,No,"f").headers),Object.freeze(xo(this,No,"f")),this}isFrozen(){return Object.isFrozen(xo(this,No,"f"))}}async function So(t){return new Promise((e=>{setTimeout(e,t)}))}function Ro(){return(new Date).getTime()}let _o=!1;async function Co(t){const e="string"==typeof t?{request:new Io(t)}:t instanceof Io?{request:t}:Object.assign({},t);if(null==e.request)return yo.throwArgumentError("missing request","connection",t);let r=e.request.clone().freeze();switch(e.request.url.split(":")[0]){case"data":{const t=r.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i);if(t)try{const e={"content-type":t[1]?t[1]:"text/plain"},n=t[2]?ne(t[3]):Zs(t[3].replace(/%([0-9a-f][0-9a-f])/gi,((t,e)=>String.fromCharCode(parseInt(e,16)))));return new ko(200,"OK",e,n,r.clone())}catch(t){return new ko(400,"BAD REQUEST (invalid base64 encoded data)",{},null,r.clone())}return new ko(500,"INTERNAL SERVER ERROR (unsupported dara URI)",{},null,r.clone())}case"ipfs":case"ipns":case"ar":throw new Error("not implemented yet");case"http":case"https":break;default:throw new Error("unsupported scheme")}const n=null!=e.throttleLimit?e.throttleLimit:12;if(!Number.isInteger(n)||n<1)return yo.throwArgumentError("invalid throttleLimit","connection",t);const s=null!=e.throttleSlotInterval?e.throttleSlotInterval:100;if(!Number.isInteger(s)||n<0)return yo.throwArgumentError("invalid throttleSlotInterval","connection",t);const i=null!=e.throttleRetry?e.throttleRetry:null;if(i&&"function"!=typeof i)return yo.throwArgumentError("invalid throttleRetry callback","connection",t);const o=e.preflightRequest||null;if(o&&"function"!=typeof o)return yo.throwArgumentError("invalid preflightRequest callback","connection",t);const a=e.processResponse||null;if(a&&"function"!=typeof a)return yo.throwArgumentError("invalid processResponse callback","connection",t);const c=Ro();let l=null;for(let t=0;t32)throw new Error("internal; should not happen");const r=new Uint8Array(32);return r.set(e,32-e.length),r}function Vo(t){if(t.length%32==0)return t;const e=new Uint8Array(32*Math.ceil(t.length/32));return e.set(t),e}function Ko(t){const e=[];let r=0;for(let n=0;nBo.getBigInt(t)===jo)).catch((t=>{if("CALL_EXCEPTION"===t.code)return!1;throw Do(this,Uo,null,"f"),t})),"f"),await Mo(this,Uo,"f")}async _fetch(t,e="0x"){const r=ae([t,Si(this.name),e]),n={to:this.address,enableCcipRead:!0,data:r};let s=!1;await this.supportsWildcard()&&(s=!0,n.data=ae(["0x9061b923",Ko([Ri(this.name),r])]));try{let t=await this.provider.call(n);return Bo.getBytes(t).length%32==4?Bo.throwError("resolver threw error","CALL_EXCEPTION",{transaction:n,data:t}):s?Wo(t,0):t}catch(t){if("CALL_EXCEPTION"!==t.code)throw t}return null}async getAddress(t=60){if(60===t)try{const t=await this._fetch("0x3b3b57de");if("0x"===t||t===$o)return null;return(await this.provider.getNetwork()).formatter.callAddress(t)}catch(t){if("CALL_EXCEPTION"===t.code)return null;throw t}let e=null;for(const r of this.provider.plugins)if(r instanceof qo&&r.supportsCoinType(t)){e=r;break}if(null==e)return null;const r=Wo(await this._fetch("0xf1cb7e06",Ho(t))||"0x",0);if(null==r||"0x"===r)return null;const n=await e.encodeAddress(t,r);return null!=n?n:Bo.throwError("invalid coin data","UNSUPPORTED_OPERATION",{operation:`getAddress(${t})`,info:{coinType:t,data:r}})}async getText(t){let e=Zs(t);const r=Bo.getBytes(ae([Ho(64),Ho(e.length),e])),n=Wo(await this._fetch("0x59d1d43c",Vo(r))||"0x",0);return null==n||"0x"===n?null:ri(n)}async getContentHash(){const t=Wo(await this._fetch("0xbc1c58d1")||"0x",0);if(null==t||"0x"===t)return null;const e=t.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);if(e){const t="e3010170"===e[1]?"ipfs":"ipns",r=parseInt(e[4],16);if(e[5].length===2*r)return`${t}://${Jt("0x"+e[2])}`}const r=t.match(/^0xe40101fa011b20([0-9a-f]*)$/);return r&&64===r[1].length?`bzz://${r[1]}`:Bo.throwError("invalid or unsupported content hash data","UNSUPPORTED_OPERATION",{operation:"getContentHash()",info:{data:t}})}async getAvatar(){return(await this._getAvatar()).url}async _getAvatar(){const t=[{type:"name",value:this.name}];try{const e=await this.getText("avatar");if(null==e)throw t.push({type:"!avatar",value:""}),new Error("!avatar");t.push({type:"avatar",value:e});for(let r=0;rQo.throwArgumentError(e,"signature",t);if("string"==typeof t){65!==ce(t)&&e("invlaid raw signature length");const r=le(t,0,32),n=le(t,32,64);BigInt(n)>>la&&e("non-canonical s");const s=da.getNormalizedV(le(t,64,65));return new da(ha,r,n,s)}if(t instanceof da)return t.clone();const r=t.r;null==r&&e("missing r"),Xt(r,32)||e("invalid r");const n=function(t,r){return t?(Xt(t,32)||e("invalid s"),t):r?(Xt(r,32)||e("invalid vs"),vt(BigInt(r)&ua,32)):e("missing s")}(t.s,t.vs);BigInt(n)>>la&&e("non-canonical s");const s=function(t,r,n){if(t)return da.getNormalizedV(t);if(r)return Xt(r,32)||e("invalid vs"),128&ee(r)[0]?28:27;if(n){switch(n){case 0:return 27;case 1:return 28}return e("invalid yParity")}return e("missing v")}(t.v,t.vs,t.yParity),i=new da(ha,r,n,s);return t.yParity&&(t.yParity,i.yParity),t.vs&&(t.vs,i.vs),i}} +/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */const pa=BigInt(0),wa=BigInt(1),ga=BigInt(2),ma=BigInt(3),ya=BigInt(8),ba=ga**BigInt(256),va={a:pa,b:BigInt(7),P:ba-ga**BigInt(32)-BigInt(977),n:ba-BigInt("432420386565659656852420866394968145599"),h:wa,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee")};function Ea(t){const{a:e,b:r}=va,n=ja(t*t),s=ja(n*t);return ja(s+e*t+r)}const Ta=va.a===pa;class ka{constructor(t,e,r){this.x=t,this.y=e,this.z=r}static fromAffine(t){if(!(t instanceof Na))throw new TypeError("JacobianPoint#fromAffine: expected Point");return new ka(t.x,t.y,wa)}static toAffineBatch(t){const e=function(t,e=va.P){const r=new Array(t.length),n=$a(t.reduce(((t,n,s)=>n===pa?t:(r[s]=t,ja(t*n,e))),wa),e);return t.reduceRight(((t,n,s)=>n===pa?t:(r[s]=ja(t*r[s],e),ja(t*n,e))),n),r}(t.map((t=>t.z)));return t.map(((t,r)=>t.toAffine(e[r])))}static normalizeZ(t){return ka.toAffineBatch(t).map(ka.fromAffine)}equals(t){if(!(t instanceof ka))throw new TypeError("JacobianPoint expected");const{x:e,y:r,z:n}=this,{x:s,y:i,z:o}=t,a=ja(n**ga),c=ja(o**ga),l=ja(e*c),u=ja(s*a),h=ja(ja(r*o)*c),f=ja(ja(i*n)*a);return l===u&&h===f}negate(){return new ka(this.x,ja(-this.y),this.z)}double(){const{x:t,y:e,z:r}=this,n=ja(t**ga),s=ja(e**ga),i=ja(s**ga),o=ja(ga*(ja((t+s)**ga)-n-i)),a=ja(ma*n),c=ja(a**ga),l=ja(c-ga*o),u=ja(a*(o-l)-ya*i),h=ja(ga*e*r);return new ka(l,u,h)}add(t){if(!(t instanceof ka))throw new TypeError("JacobianPoint expected");const{x:e,y:r,z:n}=this,{x:s,y:i,z:o}=t;if(s===pa||i===pa)return this;if(e===pa||r===pa)return t;const a=ja(n**ga),c=ja(o**ga),l=ja(e*c),u=ja(s*a),h=ja(ja(r*o)*c),f=ja(ja(i*n)*a),d=ja(u-l),p=ja(f-h);if(d===pa)return p===pa?this.double():ka.ZERO;const w=ja(d**ga),g=ja(d*w),m=ja(l*w),y=ja(p**ga-g-ga*m),b=ja(p*(m-y)-h*g),v=ja(n*o*d);return new ka(y,b,v)}subtract(t){return this.add(t.negate())}multiplyUnsafe(t){let e=Ma(t);const r=ka.ZERO;if(e===pa)return r;if(e===wa)return this;if(!Ta){let t=r,n=this;for(;e>pa;)e&wa&&(t=t.add(n)),n=n.double(),e>>=wa;return t}let{k1neg:n,k1:s,k2neg:i,k2:o}=Ha(e),a=r,c=r,l=this;for(;s>pa||o>pa;)s&wa&&(a=a.add(l)),o&wa&&(c=c.add(l)),l=l.double(),s>>=wa,o>>=wa;return n&&(a=a.negate()),i&&(c=c.negate()),c=new ka(ja(c.x*va.beta),c.y,c.z),a.add(c)}precomputeWindow(t){const e=Ta?128/t+1:256/t+1,r=[];let n=this,s=n;for(let i=0;i>=u,o>a&&(o-=l,t+=wa),0===o){let t=n[r];e%2&&(t=t.negate()),i=i.add(t)}else{let t=n[r+Math.abs(o)-1];o<0&&(t=t.negate()),s=s.add(t)}}return{p:s,f:i}}multiply(t,e){let r,n,s=Ma(t);if(Ta){const{k1neg:t,k1:i,k2neg:o,k2:a}=Ha(s);let{p:c,f:l}=this.wNAF(i,e),{p:u,f:h}=this.wNAF(a,e);t&&(c=c.negate()),o&&(u=u.negate()),u=new ka(ja(u.x*va.beta),u.y,u.z),r=c.add(u),n=l.add(h)}else{const{p:t,f:i}=this.wNAF(s,e);r=t,n=i}return ka.normalizeZ([r,n])[0]}toAffine(t=$a(this.z)){const{x:e,y:r,z:n}=this,s=t,i=ja(s*s),o=ja(i*s),a=ja(e*i),c=ja(r*o);if(ja(n*s)!==wa)throw new Error("invZ was invalid");return new Na(a,c)}}ka.BASE=new ka(va.Gx,va.Gy,wa),ka.ZERO=new ka(pa,wa,pa);const Aa=new WeakMap;class Na{constructor(t,e){this.x=t,this.y=e}_setWindowSize(t){this._WINDOW_SIZE=t,Aa.delete(this)}static fromCompressedHex(t){const e=32===t.length,r=La(e?t:t.subarray(1));if(!Ja(r))throw new Error("Point is not on curve");let n=function(t){const{P:e}=va,r=BigInt(6),n=BigInt(11),s=BigInt(22),i=BigInt(23),o=BigInt(44),a=BigInt(88),c=t*t*t%e,l=c*c*t%e,u=Ga(l,ma)*l%e,h=Ga(u,ma)*l%e,f=Ga(h,ga)*c%e,d=Ga(f,n)*f%e,p=Ga(d,s)*d%e,w=Ga(p,o)*p%e,g=Ga(w,a)*w%e,m=Ga(g,o)*p%e,y=Ga(m,ma)*l%e,b=Ga(y,i)*d%e,v=Ga(b,r)*c%e;return Ga(v,ga)}(Ea(r));const s=(n&wa)===wa;if(e)s&&(n=ja(-n));else{1==(1&t[0])!==s&&(n=ja(-n))}const i=new Na(r,n);return i.assertValidity(),i}static fromUncompressedHex(t){const e=La(t.subarray(1,33)),r=La(t.subarray(33,65)),n=new Na(e,r);return n.assertValidity(),n}static fromHex(t){const e=Da(t),r=e.length,n=e[0];if(32===r||33===r&&(2===n||3===n))return this.fromCompressedHex(e);if(65===r&&4===n)return this.fromUncompressedHex(e);throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${r}`)}static fromPrivateKey(t){return Na.BASE.multiply(Xa(t))}static fromSignature(t,e,r){const n=function(t){const{n:e}=va,r=8*t.length-256;let n=La(t);r>0&&(n>>=BigInt(r));n>=e&&(n-=e);return n}(t=Da(t)),{r:s,s:i}=function(t){if(t instanceof Oa)return t.assertValidity(),t;try{return Oa.fromDER(t)}catch(e){return Oa.fromCompact(t)}}(e);if(0!==r&&1!==r)throw new Error("Cannot recover signature: invalid recovery bit");if(n===pa)throw new Error("Cannot recover signature: msgHash cannot be 0");const o=1&r?"03":"02",a=Na.fromHex(o+Ca(s)),{n:c}=va,l=$a(s,c),u=ja(-n*l,c),h=ja(i*l,c),f=Na.BASE.multiplyAndAddUnsafe(a,u,h);if(!f)throw new Error("Cannot recover signature: point at infinify");return f.assertValidity(),f}toRawBytes(t=!1){return Ua(this.toHex(t))}toHex(t=!1){const e=Ca(this.x);if(t){return`${this.y&wa?"03":"02"}${e}`}return`04${e}${Ca(this.y)}`}toHexX(){return this.toHex(!0).slice(2)}toRawX(){return this.toRawBytes(!0).slice(1)}assertValidity(){const t="Point is not on elliptic curve",{x:e,y:r}=this;if(!Ja(e)||!Ja(r))throw new Error(t);const n=ja(r*r);if(ja(n-Ea(e))!==pa)throw new Error(t)}equals(t){return this.x===t.x&&this.y===t.y}negate(){return new Na(this.x,ja(-this.y))}double(){return ka.fromAffine(this).double().toAffine()}add(t){return ka.fromAffine(this).add(ka.fromAffine(t)).toAffine()}subtract(t){return this.add(t.negate())}multiply(t){return ka.fromAffine(this).multiply(t,this).toAffine()}multiplyAndAddUnsafe(t,e,r){const n=ka.fromAffine(this).multiply(e),s=ka.fromAffine(t).multiplyUnsafe(r),i=n.add(s);return i.equals(ka.ZERO)?void 0:i.toAffine()}}function Pa(t){return Number.parseInt(t[0],16)>=8?"00"+t:t}function xa(t){if(t.length<2||2!==t[0])throw new Error(`Invalid signature integer tag: ${_a(t)}`);const e=t[1],r=t.subarray(2,e+2);if(!e||r.length!==e)throw new Error("Invalid signature integer: wrong length");if(0===r[0]&&r[1]<=127)throw new Error("Invalid signature integer: trailing length");return{data:La(r),left:t.subarray(e+2)}}Na.BASE=new Na(va.Gx,va.Gy),Na.ZERO=new Na(pa,pa);class Oa{constructor(t,e){this.r=t,this.s=e,this.assertValidity()}static fromCompact(t){const e=Sa(t),r="Signature.fromCompact";if("string"!=typeof t&&!e)throw new TypeError(`${r}: Expected string or Uint8Array`);const n=e?_a(t):t;if(128!==n.length)throw new Error(`${r}: Expected 64-byte hex`);return new Oa(Fa(n.slice(0,64)),Fa(n.slice(64,128)))}static fromDER(t){const e=Sa(t);if("string"!=typeof t&&!e)throw new TypeError("Signature.fromDER: Expected string or Uint8Array");const{r:r,s:n}=function(t){if(t.length<2||48!=t[0])throw new Error(`Invalid signature tag: ${_a(t)}`);if(t[1]!==t.length-2)throw new Error("Invalid signature: incorrect length");const{data:e,left:r}=xa(t.subarray(2)),{data:n,left:s}=xa(r);if(s.length)throw new Error(`Invalid signature: left bytes after parsing: ${_a(s)}`);return{r:e,s:n}}(e?t:Ua(t));return new Oa(r,n)}static fromHex(t){return this.fromDER(t)}assertValidity(){const{r:t,s:e}=this;if(!Ka(t))throw new Error("Invalid Signature: r must be 0 < r < n");if(!Ka(e))throw new Error("Invalid Signature: s must be 0 < s < n")}hasHighS(){const t=va.n>>wa;return this.s>t}normalizeS(){return this.hasHighS()?new Oa(this.r,va.n-this.s):this}toDERRawBytes(t=!1){return Ua(this.toDERHex(t))}toDERHex(t=!1){const e=Pa(Ba(this.s));if(t)return e;const r=Pa(Ba(this.r)),n=Ba(r.length/2),s=Ba(e.length/2);return`30${Ba(r.length/2+e.length/2+4)}02${n}${r}02${s}${e}`}toRawBytes(){return this.toDERRawBytes()}toHex(){return this.toDERHex()}toCompactRawBytes(){return Ua(this.toCompactHex())}toCompactHex(){return Ca(this.r)+Ca(this.s)}}function Ia(...t){if(!t.every(Sa))throw new Error("Uint8Array list expected");if(1===t.length)return t[0];const e=t.reduce(((t,e)=>t+e.length),0),r=new Uint8Array(e);for(let e=0,n=0;ee.toString(16).padStart(2,"0")));function _a(t){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");let e="";for(let r=0;rba)throw new Error("Expected number < 2^256");return t.toString(16).padStart(64,"0")}function Ba(t){const e=t.toString(16);return 1&e.length?`0${e}`:e}function Fa(t){if("string"!=typeof t)throw new TypeError("hexToNumber: expected string, got "+typeof t);return BigInt(`0x${t}`)}function Ua(t){if("string"!=typeof t)throw new TypeError("hexToBytes: expected string, got "+typeof t);if(t.length%2)throw new Error("hexToBytes: received invalid unpadded hex"+t.length);const e=new Uint8Array(t.length/2);for(let r=0;r0)return BigInt(t);if("bigint"==typeof t&&Ka(t))return t;throw new TypeError("Expected valid private scalar: 0 < scalar < curve.n")}function ja(t,e=va.P){const r=t%e;return r>=pa?r:e+r}function Ga(t,e){const{P:r}=va;let n=t;for(;e-- >pa;)n*=n,n%=r;return n}function $a(t,e=va.P){if(t===pa||e<=pa)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=ja(t,e),n=e,s=pa,i=wa;for(;r!==pa;){const t=n%r,e=s-i*(n/r);n=r,r=t,s=i,i=e}if(n!==wa)throw new Error("invert: does not exist");return ja(s,e)}const Wa=(t,e)=>(t+e/ga)/e,za=ga**BigInt(128);function Ha(t){const{n:e}=va,r=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-wa*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),s=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=r,o=Wa(i*t,e),a=Wa(-n*t,e);let c=ja(t-o*r-a*s,e),l=ja(-o*n-a*i,e);const u=c>za,h=l>za;if(u&&(c=e-c),h&&(l=e-l),c>za||l>za)throw new Error("splitScalarEndo: Endomorphism failed, k="+t);return{k1neg:u,k1:c,k2neg:h,k2:l}}class Va{constructor(){this.v=new Uint8Array(32).fill(1),this.k=new Uint8Array(32).fill(0),this.counter=0}hmac(...t){return sc.hmacSha256(this.k,...t)}hmacSync(...t){if("function"!=typeof sc.hmacSha256Sync)throw new Error("utils.hmacSha256Sync is undefined, you need to set it");const e=sc.hmacSha256Sync(this.k,...t);if(e instanceof Promise)throw new Error("To use sync sign(), ensure utils.hmacSha256 is sync");return e}incr(){if(this.counter>=1e3)throw new Error("Tried 1,000 k values for sign(), all were invalid");this.counter+=1}async reseed(t=new Uint8Array){this.k=await this.hmac(this.v,Uint8Array.from([0]),t),this.v=await this.hmac(this.v),0!==t.length&&(this.k=await this.hmac(this.v,Uint8Array.from([1]),t),this.v=await this.hmac(this.v))}reseedSync(t=new Uint8Array){this.k=this.hmacSync(this.v,Uint8Array.from([0]),t),this.v=this.hmacSync(this.v),0!==t.length&&(this.k=this.hmacSync(this.v,Uint8Array.from([1]),t),this.v=this.hmacSync(this.v))}async generate(){return this.incr(),this.v=await this.hmac(this.v),this.v}generateSync(){return this.incr(),this.v=this.hmacSync(this.v),this.v}}function Ka(t){return pa0)e=BigInt(t);else if("string"==typeof t){if(64!==t.length)throw new Error("Expected 32 bytes of private key");e=Fa(t)}else{if(!Sa(t))throw new TypeError("Expected valid private key");if(32!==t.length)throw new Error("Expected 32 bytes of private key");e=La(t)}if(!Ka(e))throw new Error("Expected private key: 0 < key < n");return e}function Ya(t){const e=Sa(t),r="string"==typeof t,n=(e||r)&&t.length;return e?33===n||65===n:r?66===n||130===n:t instanceof Na}function Za(t,e,r=!1){if(Ya(t))throw new TypeError("getSharedSecret: first arg must be private key");if(!Ya(e))throw new TypeError("getSharedSecret: second arg must be public key");const n=(s=e)instanceof Na?(s.assertValidity(),s):Na.fromHex(s);var s;return n.assertValidity(),n.multiply(Xa(t)).toRawBytes(r)}function Qa(t){return La(t.length>32?t.slice(0,32):t)}function tc(t){const e=Qa(t),r=ja(e,va.n);return ec(r{if((t=Da(t)).length<40||t.length>1024)throw new Error("Expected 40-1024 bytes of private key as per FIPS 186");const e=ja(La(t),va.n);if(e===pa||e===wa)throw new Error("Invalid private key");return function(t){return Ua(Ca(t))}(e)},randomBytes:(t=32)=>{if(nc.web)return nc.web.getRandomValues(new Uint8Array(t));throw new Error("The environment doesn't have randomBytes function")},randomPrivateKey:()=>sc.hashToPrivateKey(sc.randomBytes(40)),bytesToHex:_a,mod:ja,sha256:async t=>{if(nc.web){const e=await nc.web.subtle.digest("SHA-256",t.buffer);return new Uint8Array(e)}throw new Error("The environment doesn't have sha256 function")},hmacSha256:async(t,...e)=>{if(nc.web){const r=await nc.web.subtle.importKey("raw",t,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),n=Ia(...e),s=await nc.web.subtle.sign("HMAC",r,n);return new Uint8Array(s)}throw new Error("The environment doesn't have hmac-sha256 function")},sha256Sync:void 0,hmacSha256Sync:void 0,precompute(t=8,e=Na.BASE){const r=e===Na.BASE?e:new Na(e.x,e.y);return r._setWindowSize(t),r.multiply(ma),r}};var ic,oc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},ac=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};sc.hmacSha256Sync=function(t,...e){return ee(Ur("sha256",t,ae(e)))};class cc{constructor(t){ic.set(this,void 0),Qo.assertArgument(32===ce(t),"invalid private key length","privateKey","[REDACTED]"),oc(this,ic,ie(t),"f")}get privateKey(){return ac(this,ic,"f")}get publicKey(){return cc.computePublicKey(ac(this,ic,"f"))}get compressedPublicKey(){return cc.computePublicKey(ac(this,ic,"f"),!0)}sign(t){Qo.assertArgument(32===ce(t),"invalid digest length","digest",t);const[e,r]=rc(ee(t),ee(ac(this,ic,"f")),{recovered:!0,canonical:!0}),n=Oa.fromHex(e);return da.from({r:vt("0x"+n.r.toString(16),32),s:vt("0x"+n.s.toString(16),32),v:r?28:27}).freeze()}computeShardSecret(t){const e=cc.computePublicKey(t);return ie(Za(ee(ac(this,ic,"f")),e))}static computePublicKey(t,e){let r=Qo.getBytes(t,"key");if(32===r.length){return ie(function(t,e=!1){return Na.fromPrivateKey(t).toRawBytes(e)}(r,!!e))}if(64===r.length){const t=new Uint8Array(65);t[0]=4,t.set(r,1),r=t}return ie(Na.fromHex(r).toRawBytes(e))}static recoverPublicKey(t,e){const r=da.from(e),n=Oa.fromCompact(ee(ae([r.r,r.s]))).toDERRawBytes(),s=function(t,e,r,n=!1){return Na.fromSignature(t,e,r).toRawBytes(n)}(ee(t),n,r.yParity);return null!=s?ie(s):Qo.throwArgumentError("invalid signautre for digest","signature",e)}static _addPoints(t,e,r){const n=Na.fromHex(cc.computePublicKey(t).substring(2)),s=Na.fromHex(cc.computePublicKey(e).substring(2));return"0x"+n.add(s).toHex(!!r)}}function lc(t,e){return{address:as(t),storageKeys:(e||[]).map(((t,e)=>{if(32!==ce(t))throw new Error("");return t.toLowerCase()}))}}function uc(t){if(Array.isArray(t))return t.map(((t,e)=>{if(Array.isArray(t)){if(t.length>2)throw new Error("");return lc(t[0],t[1])}return lc(t.address,t.storageKeys)}));const e=Object.keys(t).map((e=>{const r=t[e].reduce(((t,e)=>(t[e]=!0,t)),{});return lc(e,Object.keys(r).sort())}));return e.sort(((t,e)=>t.address.localeCompare(e.address))),e}ic=new WeakMap;const hc=new A("@ethersproject/transactions@6.0.0-beta.1");var fc,dc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},pc=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const wc=BigInt(0);function gc(t,e){const r=hc.getBigInt(t,"value"),n=Et(r);return n.length>32&&hc.throwArgumentError("value too large",`tx.${e}`,r),n}function mc(t){return uc(t).map((t=>[t.address,t.storageKeys]))}function yc(t,e){const r=[gc(t.nonce||0,"nonce"),gc(t.gasPrice||0,"gasPrice"),gc(t.gasLimit||0,"gasLimit"),null!=t.to?as(t.to):"0x",gc(t.value||0,"value"),t.data||"0x"];let n=wc;if(null!=t.chainId)n=hc.getBigInt(t.chainId,"tx.chainId"),e&&null!=e.networkV&&e.legacyChainId!==n&&hc.throwArgumentError("tx.chainId/sig.v mismatch","sig",e);else if(e){const t=e.legacyChainId;null!=t&&(n=t)}if(!e)return n!==wc&&(r.push(Et(n)),r.push("0x"),r.push("0x")),fs(r);let s=BigInt(27+e.yParity);return n!==wc?s=da.getChainIdV(n,e.v):BigInt(e.v)!==s&&hc.throwArgumentError("tx.chainId/sig.v mismatch","sig",e),r.push(Et(s)),r.push(Et(e.r)),r.push(Et(e.s)),fs(r)}function bc(t,e){const r=[gc(t.chainId||0,"chainId"),gc(t.nonce||0,"nonce"),gc(t.maxPriorityFeePerGas||0,"maxPriorityFeePerGas"),gc(t.maxFeePerGas||0,"maxFeePerGas"),gc(t.gasLimit||0,"gasLimit"),null!=t.to?as(t.to):"0x",gc(t.value||0,"value"),t.data||"0x",mc(t.accessList||[])];return e&&(r.push(gc(e.yParity,"yParity")),r.push(Et(e.r)),r.push(Et(e.s))),ae(["0x02",fs(r)])}function vc(t,e){const r=[gc(t.chainId||0,"chainId"),gc(t.nonce||0,"nonce"),gc(t.gasPrice||0,"gasPrice"),gc(t.gasLimit||0,"gasLimit"),null!=t.to?as(t.to):"0x",gc(t.value||0,"value"),t.data||"0x",mc(t.accessList||[])];return e&&(r.push(gc(e.yParity,"recoveryParam")),r.push(Et(e.r)),r.push(Et(e.s))),ae(["0x01",fs(r)])}class Ec{constructor(){fc.set(this,void 0),dc(this,fc,{type:null,to:null,nonce:0,gasLimit:BigInt(0),gasPrice:null,maxPriorityFeePerGas:null,maxFeePerGas:null,data:"0x",value:BigInt(0),chainId:BigInt(0),sig:null,accessList:null},"f")}get type(){return a(pc(this,fc,"f"),"type")}get typeName(){switch(this.type){case 0:return"legacy";case 1:return"eip-2930";case 2:return"eip-1559"}return null}set type(t){switch(t){case null:c(pc(this,fc,"f"),"type",null);break;case 0:case"legacy":c(pc(this,fc,"f"),"type",0);break;case 1:case"berlin":case"eip-2930":c(pc(this,fc,"f"),"type",1);break;case 2:case"london":case"eip-1559":c(pc(this,fc,"f"),"type",2);break;default:throw new Error("unsupported transaction type")}}get to(){return a(pc(this,fc,"f"),"to")}set to(t){c(pc(this,fc,"f"),"to",null==t?null:as(t))}get nonce(){return a(pc(this,fc,"f"),"nonce")}set nonce(t){c(pc(this,fc,"f"),"nonce",hc.getNumber(t,"value"))}get gasLimit(){return a(pc(this,fc,"f"),"gasLimit")}set gasLimit(t){c(pc(this,fc,"f"),"gasLimit",hc.getBigInt(t))}get gasPrice(){return a(pc(this,fc,"f"),"gasPrice")}set gasPrice(t){c(pc(this,fc,"f"),"gasPrice",null==t?null:hc.getBigInt(t))}get maxPriorityFeePerGas(){return a(pc(this,fc,"f"),"maxPriorityFeePerGas")}set maxPriorityFeePerGas(t){c(pc(this,fc,"f"),"maxPriorityFeePerGas",null==t?null:hc.getBigInt(t))}get maxFeePerGas(){return a(pc(this,fc,"f"),"maxFeePerGas")}set maxFeePerGas(t){c(pc(this,fc,"f"),"maxFeePerGas",null==t?null:hc.getBigInt(t))}get data(){return a(pc(this,fc,"f"),"data")}set data(t){c(pc(this,fc,"f"),"data",ie(t))}get value(){return a(pc(this,fc,"f"),"value")}set value(t){c(pc(this,fc,"f"),"value",hc.getBigInt(t))}get chainId(){return a(pc(this,fc,"f"),"chainId")}set chainId(t){c(pc(this,fc,"f"),"chainId",hc.getBigInt(t))}get signature(){return a(pc(this,fc,"f"),"sig")||null}set signature(t){c(pc(this,fc,"f"),"sig",null==t?null:da.from(t))}get accessList(){return a(pc(this,fc,"f"),"accessList")||null}set accessList(t){c(pc(this,fc,"f"),"accessList",null==t?null:uc(t))}get hash(){if(null==this.signature)throw new Error("cannot hash unsigned transaction; maybe you meant .unsignedHash");return nn(this.serialized)}get unsignedHash(){return nn(this.unsignedSerialized)}get from(){return null==this.signature?null:""}get fromPublicKey(){return null==this.signature?null:""}isSigned(){return null!=this.signature}get serialized(){if(null==this.signature)throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized");const t=this.inferTypes();if(1!==t.length)throw new Error("cannot determine transaction type; specify type manually");switch(t[0]){case 0:return yc(this,this.signature);case 1:return vc(this,this.signature);case 2:return bc(this,this.signature)}throw new Error("unsupported type")}get unsignedSerialized(){if(null!=this.signature)throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized");const t=this.inferTypes();if(1!==t.length)throw new Error("cannot determine transaction type; specify type manually");switch(t[0]){case 0:return yc(this);case 1:return vc(this);case 2:return bc(this)}throw new Error("unsupported type")}inferTypes(){const t=null!=this.gasPrice,e=null!=this.maxFeePerGas||null!=this.maxPriorityFeePerGas,r=null!=this.accessList;if(this.maxFeePerGas&&this.maxPriorityFeePerGas&&this.maxFeePerGas(Object.freeze(t.storageKeys),Object.freeze(t)))))),Object.freeze(pc(this,fc,"f")),this}isFrozen(){return Object.isFrozen(pc(this,fc,"f"))}static from(t){if("string"==typeof t){const e=ee(t);if(e[0]>=127)return Ec.from({});switch(e[0]){case 1:case 2:return Ec.from(function(t){throw new Error("@TODO")}(e.slice(1)))}throw new Error("unsupported transaction type")}const e=new Ec;return null!=t.type&&(e.type=t.type),null!=t.to&&(e.to=t.to),null!=t.nonce&&(e.nonce=t.nonce),null!=t.gasLimit&&(e.gasLimit=t.gasLimit),null!=t.gasPrice&&(e.gasPrice=t.gasPrice),null!=t.maxPriorityFeePerGas&&(e.maxPriorityFeePerGas=t.maxPriorityFeePerGas),null!=t.maxFeePerGas&&(e.maxFeePerGas=t.maxFeePerGas),null!=t.data&&(e.data=t.data),null!=t.value&&(e.value=t.value),null!=t.chainId&&(e.chainId=t.chainId),null!=t.signature&&(e.signature=da.from(t.signature)),null!=t.accessList&&(e.accessList=t.accessList),e}}fc=new WeakMap;var Tc,kc,Ac=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Nc=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function Pc(t){return null==t?null:t}function xc(t){return null==t?null:t.toString()}class Oc{constructor(t,e,n){r(this,{gasPrice:Pc(t),maxFeePerGas:Pc(e),maxPriorityFeePerGas:Pc(n)})}toJSON(){const{gasPrice:t,maxFeePerGas:e,maxPriorityFeePerGas:r}=this;return{_type:"FeeData",gasPrice:xc(t),maxFeePerGas:xc(e),maxPriorityFeePerGas:xc(r)}}}class Ic{constructor(t,e){Tc.set(this,void 0),null==e&&(e=Uc),Ac(this,Tc,Object.freeze(t.transactions.map((t=>{if("string"!=typeof t&&t.provider!==e)throw new Error("provider mismatch");return t}))),"f"),r(this,{provider:e,hash:Pc(t.hash),number:t.number,timestamp:t.timestamp,parentHash:t.parentHash,nonce:t.nonce,difficulty:t.difficulty,gasLimit:t.gasLimit,gasUsed:t.gasUsed,miner:t.miner,extraData:t.extraData,baseFeePerGas:Pc(t.baseFeePerGas)})}get transactions(){return Nc(this,Tc,"f")}toJSON(){const{baseFeePerGas:t,difficulty:e,extraData:r,gasLimit:n,gasUsed:s,hash:i,miner:o,nonce:a,number:c,parentHash:l,timestamp:u,transactions:h}=this;return{_type:"Block",baseFeePerGas:xc(t),difficulty:xc(e),extraData:r,gasLimit:xc(n),gasUsed:xc(s),hash:i,miner:o,nonce:a,number:c,parentHash:l,timestamp:u,transactions:h}}[(Tc=new WeakMap,Symbol.iterator)](){let t=0;return{next:()=>t{if(e!==t.provider)throw new Error("provider mismatch");return t}))),"f"),r(this,{provider:e,to:t.to,from:t.from,contractAddress:t.contractAddress,hash:t.hash,index:t.index,blockHash:t.blockHash,blockNumber:t.blockNumber,logsBloom:t.logsBloom,gasUsed:t.gasUsed,cumulativeGasUsed:t.cumulativeGasUsed,gasPrice:t.effectiveGasPrice||t.gasPrice,byzantium:t.byzantium,status:t.status,root:t.root})}get logs(){return Nc(this,kc,"f")}toJSON(){const{to:t,from:e,contractAddress:r,hash:n,index:s,blockHash:i,blockNumber:o,logsBloom:a,logs:c,byzantium:l,status:u,root:h}=this;return{_type:"TransactionReceipt",blockHash:i,blockNumber:o,byzantium:l,contractAddress:r,cumulativeGasUsed:xc(this.cumulativeGasUsed),from:e,gasPrice:xc(this.gasPrice),gasUsed:xc(this.gasUsed),hash:n,index:s,logs:c,logsBloom:a,root:h,status:u,to:t}}get length(){return this.logs.length}[(kc=new WeakMap,Symbol.iterator)](){let t=0;return{next:()=>tthis.hash(t))),new Ic(r,e)}blockWithTransactions(t,e){throw new Error}transactionRequest(t,e){return jc(this,Lc,"f").transactionRequest(t)}transactionResponse(t,e){null==(t=Object.assign({},t)).data&&null!=t.input&&(t.data=t.input),null==t.gasLimit&&t.gas&&(t.gasLimit=t.gas),t=jc(this,Lc,"f").transactionResponse(t);const r=da.fromTransaction(t.r,t.s,t.v);return t.signature=r,null==t.chainId&&(t.chainId=r.legacyChainId),new _c(t,e)}log(t,e){const r=this.object({address:this.address,blockHash:this.hash,blockNumber:this.number,data:this.data,index:this.number,removed:this.boolean,topics:this.topics,transactionHash:this.hash,transactionIndex:this.number},{index:["logIndex"]})(t);return new Sc(r,e)}receipt(t,e){const r=this.object({blockHash:this.hash,blockNumber:this.number,contractAddress:this.allowNull(this.address),cumulativeGasUsed:this.bigNumber,from:this.address,gasUsed:this.bigNumber,logs:this.arrayOf((t=>this.log(t,e))),logsBloom:this.data,root:this.allowNull(this.data),status:this.allowNull(this.number),to:this.address,gasPrice:this.allowNull(this.bigNumber),hash:this.hash,index:this.number,type:this.allowNull(this.number,0)},{hash:["transactionHash"],gasPrice:["effectiveGasPrice"],index:["transactionIndex"]})(t);if(null!=r.root)if(r.root.length<=4){const t=parseInt(r.root);if(0!==t&&1!==t)return Bo.throwError("invalid alt-root-status","BAD_DATA",{value:r.root});if(null!=r.status&&r.status!==t)return Bo.throwError("alt-root-status/status mismatch","BAD_DATA",{value:{root:r.root,status:r.status}});r.status=t,delete r.root}else if(!Xt(r.root,32))return Bo.throwError("invalid receipt root hash","BAD_DATA",{value:r.root});return new Rc(r,e)}topics(t){return jc(this,Lc,"f").topics(t)}filter(t){return jc(this,Lc,"f").filter(t)}filterLog(t){return console.log("ME",t),null}transaction(t){throw new Error}accessList(t){return uc(t)}allowFalsish(t,e){return r=>r?t.call(this,r):e}allowNull(t,e){return r=>null==r?e:t.call(this,r)}arrayOf(t){return e=>{if(!Array.isArray(e))throw new Error("not an array");return e.map((e=>t.call(this,e)))}}bigNumber(t){return Bo.getBigInt(t,"value")}uint256(t){const e=this.bigNumber(t);return(e<0||e>Gc)&&Bo.throwArgumentError("invalid uint256","value",t),e}boolean(t){switch(t){case!0:case"true":return!0;case!1:case"false":return!1}return Bo.throwArgumentError(`invalid boolean; ${JSON.stringify(t)}`,"value",t)}_hexstring(t){return null==t&&(t=!1),function(e){if(Xt(e,t))return e.toLowerCase();throw new Error("bad hexstring")}}data(t){return null==ce(t)&&Bo.throwArgumentError("","value",t),t}hash(t){return 32!==ce(t)&&Bo.throwArgumentError("","value",t),jc(this,Lc,"f").data(t)}number(t){return Bo.getNumber(t)}object(t,e){return r=>{const n={};for(const s in t){let i=s;if(e&&s in e&&!(i in r))for(const t of e[s])if(t in r){i=t;break}try{const e=t[s].call(this,r[i]);void 0!==e&&(n[s]=e)}catch(t){const e=t instanceof Error?t.message:"not-an-error";Bo.throwError(`invalid value for value.${s} (${e})`,"BAD_DATA",{value:r})}}return n}}storageSlot(t){return vt(Bo.getBigInt(t),32)}}Lc=new WeakMap,Dc=new WeakMap;class zc{constructor(t){r(this,{name:t})}clone(){return new zc(this.name)}validate(t){return this}}class Hc extends zc{constructor(t=0,e){super(`org.ethers.plugins.gas-cost#${t||0}`);const n={effectiveBlock:t};function s(t,r){let s=(e||{})[t];null==s&&(s=r),"number"!=typeof s&&Bo.throwArgumentError(`invalud value for ${t}`,"costs",e),n[t]=s}s("txBase",21e3),s("txCreate",32e3),s("txDataZero",4),s("txDataNonzero",16),s("txAccessListStorageKey",1900),s("txAccessListAddress",2400),r(this,n)}clone(){return new Hc(this.effectiveBlock,this)}}class Vc extends zc{constructor(t,e){super("org.ethers.plugins.ens"),r(this,{address:t||"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",targetNetwork:null==e?1:e})}clone(){return new Vc(this.address,this.targetNetwork)}validate(t){return t.formatter.address(this.address),this}}class Kc extends zc{constructor(t){super("org.ethers.plugins.max-priority-fee"),r(this,{priorityFee:Bo.getBigInt(t)})}async getPriorityFee(t){return this.priorityFee}clone(){return new Kc(this.priorityFee)}}var Jc,qc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Xc=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Yc=new Map,Zc=new Wc;class Qc{constructor(t,e,r){Jc.set(this,void 0);const n=Bo.getBigInt(e);null==r&&(r=Zc);const s=new Map;qc(this,Jc,{name:t,chainId:n,formatter:r,plugins:s},"f")}toJSON(){return{name:this.name,chainId:this.chainId}}get name(){return a(Xc(this,Jc,"f"),"name")}set name(t){c(Xc(this,Jc,"f"),"name",t)}get chainId(){return a(Xc(this,Jc,"f"),"chainId")}set chainId(t){c(Xc(this,Jc,"f"),"chainId",Bo.getBigInt(t,"chainId"))}get formatter(){return a(Xc(this,Jc,"f"),"formatter")}set formatter(t){c(Xc(this,Jc,"f"),"formatter",t)}get plugins(){return Array.from(Xc(this,Jc,"f").plugins.values())}attachPlugin(t){if(this.isFrozen())throw new Error("frozen");if(Xc(this,Jc,"f").plugins.get(t.name))throw new Error(`cannot replace existing plugin: ${t.name} `);return Xc(this,Jc,"f").plugins.set(t.name,t.validate(this)),this}getPlugin(t){return Xc(this,Jc,"f").plugins.get(t)||null}getPlugins(t){return this.plugins.filter((e=>e.name.split("#")[0]===t))}clone(){const t=new Qc(this.name,this.chainId,this.formatter);return this.plugins.forEach((e=>{t.attachPlugin(e.clone())})),t}freeze(){return Object.freeze(Xc(this,Jc,"f")),this}isFrozen(){return Object.isFrozen(Xc(this,Jc,"f"))}computeIntrinsicGas(t){const e=this.getPlugin("org.ethers.gas-cost")||new Hc;let r=e.txBase;if(null==t.to&&(r+=e.txCreate),t.data)for(let n=2;n{this._poll(t,ml(this,ol,"f"))}),"f")}async _poll(t,e){throw new Error("sub-classes must override this")}start(){ml(this,al,"f").call(this,-2),ml(this,ol,"f").on("block",ml(this,al,"f"))}stop(){ml(this,ol,"f").off("block",ml(this,al,"f"))}pause(t){this.stop()}resume(){this.start()}}ol=new WeakMap,al=new WeakMap;class El extends vl{constructor(t,e){super(t),cl.set(this,void 0),gl(this,cl,yl(e),"f")}async _poll(t,e){throw console.log(ml(this,cl,"f")),new Error("@TODO")}}cl=new WeakMap;class Tl extends vl{constructor(t,e){super(t),ll.set(this,void 0),gl(this,ll,e,"f")}async _poll(t,e){const r=await e.getTransactionReceipt(ml(this,ll,"f"));r&&e.emit(ml(this,ll,"f"),r)}}ll=new WeakMap;class kl{constructor(t,e){ul.add(this),hl.set(this,void 0),fl.set(this,void 0),dl.set(this,void 0),pl.set(this,void 0),gl(this,hl,t,"f"),gl(this,fl,yl(e),"f"),gl(this,dl,ml(this,ul,"m",wl).bind(this),"f"),gl(this,pl,-2,"f")}start(){-2===ml(this,pl,"f")&&ml(this,hl,"f").getBlockNumber().then((t=>{gl(this,pl,t,"f")})),ml(this,hl,"f").on("block",ml(this,dl,"f"))}stop(){ml(this,hl,"f").off("block",ml(this,dl,"f"))}pause(t){this.stop(),t&&gl(this,pl,-2,"f")}resume(){this.start()}}hl=new WeakMap,fl=new WeakMap,dl=new WeakMap,pl=new WeakMap,ul=new WeakSet,wl=async function(t){if(-2===ml(this,pl,"f"))return;const e=yl(ml(this,fl,"f"));e.fromBlock=ml(this,pl,"f")+1,e.toBlock=t,gl(this,pl,t,"f");const r=await ml(this,hl,"f").getLogs(e);for(const t of r)ml(this,hl,"f").emit(ml(this,fl,"f"),t)};var Al,Nl,Pl,xl,Ol,Il,Sl,Rl,_l,Cl,Bl,Fl,Ul,Ll,Dl,Ml=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},jl=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Gl=BigInt(2);function $l(t,e){return t+":"+JSON.stringify(e,((t,e)=>{if("bigint"==typeof e)return`bigint:${e.toString()}`;if("string"==typeof e)return e.toLowerCase();if("object"==typeof e&&!Array.isArray(e)){const t=Object.keys(e);return t.sort(),t.reduce(((t,r)=>(t[r]=e[r],t)),{})}return e}))}class Wl{constructor(t){r(this,{name:t})}start(){}stop(){}pause(t){}resume(){}}function zl(t){return(t=Array.from(new Set(t).values())).sort(),t}async function Hl(t,e){if(null==t)throw new Error("invalid event");if(Array.isArray(t)&&(t={topics:t}),"string"==typeof t)switch(t){case"block":case"pending":case"debug":case"network":return{type:t,tag:t}}if(Xt(t,32)){const e=t.toLowerCase();return{type:"transaction",tag:$l("tx",{hash:e}),hash:e}}if(t.orphan){const e=t;return{type:"orphan",tag:$l("orphan",e),filter:(r=e,JSON.parse(JSON.stringify(r)))}}var r;if(t.address||t.topics){const r=t,n={topics:(r.topics||[]).map((t=>null==t?null:Array.isArray(t)?zl(t.map((t=>t.toLowerCase()))):t.toLowerCase()))};if(r.address){const t=[],s=[],i=r=>{Xt(r)?t.push(r):s.push((async()=>{t.push(await Ts(r,e))})())};Array.isArray(r.address)?r.address.forEach(i):i(r.address),s.length&&await Promise.all(s),n.address=zl(t.map((t=>t.toLowerCase())))}return{filter:n,tag:$l("event",n),type:"event"}}return Bo.throwArgumentError("unknown ProviderEvent","event",t)}function Vl(){return(new Date).getTime()}class Kl{constructor(t){if(Al.add(this),Nl.set(this,void 0),Pl.set(this,void 0),xl.set(this,void 0),Ol.set(this,void 0),Il.set(this,void 0),Sl.set(this,void 0),Rl.set(this,void 0),_l.set(this,void 0),Cl.set(this,void 0),"any"===t)Ml(this,Il,!0,"f"),Ml(this,Ol,null,"f");else if(t){const e=Qc.from(t);Ml(this,Il,!1,"f"),Ml(this,Ol,Promise.resolve(e),"f"),setTimeout((()=>{this.emit("network",e,null)}),0)}else Ml(this,Il,!1,"f"),Ml(this,Ol,null,"f");Ml(this,Sl,new Map,"f"),Ml(this,Nl,new Map,"f"),Ml(this,Pl,new Map,"f"),Ml(this,xl,null,"f"),Ml(this,Rl,0,"f"),Ml(this,_l,new Map,"f"),Ml(this,Cl,!1,"f")}get plugins(){return Array.from(jl(this,Pl,"f").values())}attachPlugin(t){if(jl(this,Pl,"f").get(t.name))throw new Error(`cannot replace existing plugin: ${t.name} `);return jl(this,Pl,"f").set(t.name,t.validate(this)),this}getPlugin(t){return jl(this,Pl,"f").get(t)||null}set disableCcipRead(t){Ml(this,Cl,!!t,"f")}get disableCcipRead(){return jl(this,Cl,"f")}async ccipReadFetch(t,e,r){if(this.disableCcipRead||0===r.length||null==t.to)return null;const n=t.to.toLowerCase(),s=e.toLowerCase(),i=[];for(let e=0;e=400&&u.statusCode<500)return Bo.throwError(`response not found during CCIP fetch: ${l}`,"OFFCHAIN_FAULT",{reason:"404_MISSING_RESOURCE",transaction:t,info:{url:o,errorMessage:l}});i.push(l)}return Bo.throwError(`error encountered during CCIP fetch: ${i.map((t=>JSON.stringify(t))).join(", ")}`,"OFFCHAIN_FAULT",{reason:"500_SERVER_ERROR",transaction:t,info:{urls:r,errorMessages:i}})}_wrapTransaction(t,e,r){return t}_detectNetwork(){return Bo.throwError("sub-classes must implement this","UNSUPPORTED_OPERATION",{operation:"_detectNetwork"})}async _perform(t){return Bo.throwError(`unsupported method: ${t.method}`,"UNSUPPORTED_OPERATION",{operation:t.method,info:t})}async getBlockNumber(){return Bo.getNumber(await jl(this,Al,"m",Bl).call(this,{method:"getBlockNumber"}),"%response")}async _getAddress(t){return"string"==typeof t?t:await t.getAddress()}async _getBlockTag(t){const e=await this.getNetwork();if("number"==typeof t&&Number.isSafeInteger(t)&&t<0){let r=await this.getBlockNumber();return r+=t,r<0&&(r=0),e.formatter.blockTag(r)}return e.formatter.blockTag(t)}async getNetwork(){if(null==jl(this,Ol,"f")){const t=this._detectNetwork().then((t=>(this.emit("network",t,null),t)),(e=>{throw jl(this,Ol,"f")===t&&Ml(this,Ol,null,"f"),e}));return Ml(this,Ol,t,"f"),await t}const t=jl(this,Ol,"f"),[e,r]=await Promise.all([t,this._detectNetwork()]);return e.chainId!==r.chainId&&(jl(this,Il,"f")?(this.emit("network",r,e),jl(this,Ol,"f")===t&&Ml(this,Ol,Promise.resolve(r),"f")):Bo.throwError(`network changed: ${e.chainId} => ${r.chainId} `,"NETWORK_ERROR",{event:"changed"})),e.clone().freeze()}async getFeeData(){const{block:e,gasPrice:r}=await t({block:this.getBlock("latest"),gasPrice:(async()=>{try{const t=await jl(this,Al,"m",Bl).call(this,{method:"getGasPrice"});return Bo.getBigInt(t,"%response")}catch(t){}return null})()});let n=null,s=null;if(e&&e.baseFeePerGas){s=BigInt("1500000000");const t=(await this.getNetwork()).getPlugin("org.ethers.plugins.max-priority-fee");t&&(s=await t.getPriorityFee(this)),n=e.baseFeePerGas*Gl+s}return new Oc(r,n,s)}async _getTransaction(e){const r=await this.getNetwork(),n=Object.assign({},e,await t({to:e.to?Ts(e.to,this):void 0,from:e.from?Ts(e.from,this):void 0}));return r.formatter.transactionRequest(n)}async estimateGas(t){const e=await this._getTransaction(t);return Bo.getBigInt(await jl(this,Al,"m",Bl).call(this,{method:"estimateGas",transaction:e}),"%response")}async call(e){const{tx:r,blockTag:n}=await t({tx:this._getTransaction(e),blockTag:this._getBlockTag(e.blockTag)});return jl(this,Al,"m",Fl).call(this,r,n,e.enableCcipRead?0:-1)}async getBalanceOf(e,r){const{address:n,blockTag:s}=await t({address:Ts(e),blockTag:this._getBlockTag(r)});return Bo.getBigInt(await jl(this,Al,"m",Bl).call(this,{method:"getBalance",address:n,blockTag:s}),"%response")}async getTransactionCountOf(e,r){const{address:n,blockTag:s}=await t({address:Ts(e),blockTag:this._getBlockTag(r)});return Bo.getNumber(await jl(this,Al,"m",Bl).call(this,{method:"getTransactionCount",address:n,blockTag:s}),"%response")}async getCode(e,r){const{address:n,blockTag:s}=await t({address:Ts(e),blockTag:this._getBlockTag(r)});return ie(await jl(this,Al,"m",Bl).call(this,{method:"getCode",address:n,blockTag:s}))}async getStorageAt(e,r,n){const s=Bo.getBigInt(r),{address:i,blockTag:o}=await t({address:Ts(e),blockTag:this._getBlockTag(n)});return ie(await jl(this,Al,"m",Bl).call(this,{method:"getStorageAt",address:i,position:s,blockTag:o}))}async broadcastTransaction(t){throw new Error}async getBlock(t){const e=(await this.getNetwork()).formatter,r=await jl(this,Al,"m",Ul).call(this,t,!1);return null==r?null:e.block(r,this)}async getBlockWithTransactions(t){const e=(await this.getNetwork()).formatter,r=jl(this,Al,"m",Ul).call(this,t,!0);return null==r?null:e.blockWithTransactions(r,this)}async getTransaction(t){const e=(await this.getNetwork()).formatter,r=await jl(this,Al,"m",Bl).call(this,{method:"getTransaction",hash:t});return e.transactionResponse(r,this)}async getTransactionReceipt(t){const e=(await this.getNetwork()).formatter,r=await jl(this,Al,"m",Bl).call(this,{method:"getTransactionReceipt",hash:t});if(null==r)return null;if(null==r.gasPrice&&null==r.effectiveGasPrice){const e=await jl(this,Al,"m",Bl).call(this,{method:"getTransaction",hash:t});r.effectiveGasPrice=e.gasPrice}return e.receipt(r,this)}async _getFilter(e){const r={};e.address&&(Array.isArray(e.address)?r.address=Promise.all(e.address.map((t=>Ts(t,this)))):r.address=Ts(e.address,this));const n=t=>{null!=e[t]&&(r[t]=this._getBlockTag(e[t]))};n("fromBlock"),n("toBlock");const s=await t(r);if(Array.isArray(s.address)&&s.address.sort(),e.blockHash){if(e.fromBlock||e.toBlock)throw new Error("invalid filter");s.blockHash=e.blockHash}return s}async getLogs(e){const{network:r,filter:n}=await t({network:this.getNetwork(),filter:this._getFilter(e)});return(await jl(this,Al,"m",Bl).call(this,{method:"getLogs",filter:n})).map((t=>r.formatter.log(t,this)))}_getProvider(t){return Bo.throwError("provider cannot connect to target network","UNSUPPORTED_OPERATION",{operation:"_getProvider()"})}async getResolver(t){return await Zo.fromName(this,t)}async getAvatar(t){const e=await this.getResolver(t);return e?await e.getAvatar():null}async resolveName(t){if("string"!=typeof t){const e=await t.getAddress();return null==e?Bo.throwArgumentError("Addressable returned no address","name",t):e}{const e=await this.getResolver(t);if(e)return await e.getAddress()}return null}async lookupAddress(t){throw new Error}async waitForTransaction(t,e=1,r){return 0===e?this.getTransactionReceipt(t):new Promise((async(n,s)=>{let i=null;const o=async r=>{try{const s=await this.getTransactionReceipt(t);if(null!=s&&r-s.blockNumber+1>=e)return n(s),this.off("block",o),void(i&&(clearTimeout(i),i=null))}catch(t){console.log("EEE",t)}this.once("block",o)};null!=r&&(i=setTimeout((()=>{null!=i&&(i=null,this.off("block",o),s(Bo.makeError("timeout","TIMEOUT",{})))}),r)),o(await this.getBlockNumber())}))}async waitForBlock(t){throw new Error}_clearTimeout(t){const e=jl(this,_l,"f").get(t);e&&(e.timer&&clearTimeout(e.timer),jl(this,_l,"f").delete(t))}_setTimeout(t,e=0){var r,n;const s=(Ml(this,Rl,(n=jl(this,Rl,"f"),r=n++,n),"f"),r),i=()=>{jl(this,_l,"f").delete(s),t()};if(this.paused)jl(this,_l,"f").set(s,{timer:null,func:i,time:e});else{const t=setTimeout(i,e);jl(this,_l,"f").set(s,{timer:t,func:i,time:Vl()})}return s}_forEachSubscriber(t){for(const e of jl(this,Nl,"f").values())t(e.subscriber)}_getSubscriber(t){switch(t.type){case"debug":case"network":return new Wl(t.type);case"block":return new bl(this);case"event":return new kl(this,t.filter);case"transaction":return new Tl(this,t.hash);case"orphan":return new El(this,t.filter)}throw new Error(`unsupported event: ${t.type}`)}_recoverSubscriber(t,e){for(const r of jl(this,Nl,"f").values())if(r.subscriber===t){r.started&&r.subscriber.stop(),r.subscriber=e,r.started&&e.start(),null!=jl(this,xl,"f")&&e.pause(jl(this,xl,"f"));break}}async on(t,e){const r=await jl(this,Al,"m",Dl).call(this,t);return r.listeners.push({listener:e,once:!1}),r.started||(r.subscriber.start(),r.started=!0,null!=jl(this,xl,"f")&&r.subscriber.pause(jl(this,xl,"f"))),this}async once(t,e){const r=await jl(this,Al,"m",Dl).call(this,t);return r.listeners.push({listener:e,once:!0}),r.started||(r.subscriber.start(),r.started=!0,null!=jl(this,xl,"f")&&r.subscriber.pause(jl(this,xl,"f"))),this}async emit(t,...e){const r=await jl(this,Al,"m",Ll).call(this,t,e);if(!r)return!1;const n=r.listeners.length;return r.listeners=r.listeners.filter((({listener:r,once:n})=>{const s=new o(this,n?null:r,t);return setTimeout((()=>{r.call(this,...e,s)}),0),!n})),n>0}async listenerCount(t){if(t){const e=await jl(this,Al,"m",Ll).call(this,t);return e?e.listeners.length:0}let e=0;for(const{listeners:t}of jl(this,Nl,"f").values())e+=t.length;return e}async listeners(t){if(t){const e=await jl(this,Al,"m",Ll).call(this,t);return e?e.listeners.map((({listener:t})=>t)):[]}let e=[];for(const{listeners:t}of jl(this,Nl,"f").values())e=e.concat(t.map((({listener:t})=>t)));return e}async off(t,e){const r=await jl(this,Al,"m",Ll).call(this,t);if(!r)return this;if(e){const t=r.listeners.map((({listener:t})=>t)).indexOf(e);t>=0&&r.listeners.splice(t,1)}return e&&0!==r.listeners.length||(r.started&&r.subscriber.stop(),jl(this,Nl,"f").delete(r.tag)),this}async removeAllListeners(t){if(t){const{tag:e,started:r,subscriber:n}=await jl(this,Al,"m",Dl).call(this,t);r&&n.stop(),jl(this,Nl,"f").delete(e)}else for(const[t,{started:e,subscriber:r}]of jl(this,Nl,"f"))e&&r.stop(),jl(this,Nl,"f").delete(t);return this}async addListener(t,e){return await this.on(t,e)}async removeListener(t,e){return this.off(t,e)}async shutdown(){this.removeAllListeners();for(const t of jl(this,_l,"f").keys())this._clearTimeout(t)}get paused(){return null!=jl(this,xl,"f")}pause(t){if(null!=jl(this,xl,"f")){if(jl(this,xl,"f")==!!t)return;return Bo.throwError("cannot change pause type; resume first","UNSUPPORTED_OPERATION",{operation:"pause"})}this._forEachSubscriber((e=>e.pause(t))),Ml(this,xl,!!t,"f");for(const t of jl(this,_l,"f").values())t.timer&&clearTimeout(t.timer),t.time=Vl()-t.time}resume(){if(null!=jl(this,xl,"f")){this._forEachSubscriber((t=>t.resume())),Ml(this,xl,null,"f");for(const t of jl(this,_l,"f").values()){let e=t.time;e<0&&(e=0),t.time=Vl(),setTimeout(t.func,e)}}}}function Jl(t,e){try{const r=ql(t,e);if(r)return ri(r)}catch(t){}return null}function ql(t,e){if("0x"===t)return null;try{const r=Bo.getNumber(le(t,e,e+32)),n=Bo.getNumber(le(t,r,r+32));return le(t,r+32,r+32+n)}catch(t){}return null}function Xl(t){const e=Et(t);if(e.length>32)throw new Error("internal; should not happen");const r=new Uint8Array(32);return r.set(e,32-e.length),r}function Yl(t){if(t.length%32==0)return t;const e=new Uint8Array(32*Math.ceil(t.length/32));return e.set(t),e}Nl=new WeakMap,Pl=new WeakMap,xl=new WeakMap,Ol=new WeakMap,Il=new WeakMap,Sl=new WeakMap,Rl=new WeakMap,_l=new WeakMap,Cl=new WeakMap,Al=new WeakSet,Bl=async function(t){const e=$l(t.method,t);let r=jl(this,Sl,"f").get(e);return r||(r=this._perform(t),jl(this,Sl,"f").set(e,r),setTimeout((()=>{jl(this,Sl,"f").get(e)===r&&jl(this,Sl,"f").delete(e)}),250)),await r},Fl=async function t(e,r,n){n>=10&&Bo.throwError("CCIP read exceeded maximum redirections","OFFCHAIN_FAULT",{reason:"TOO_MANY_REDIRECTS",transaction:Object.assign({},e,{blockTag:r,enableCcipRead:!0})});const s=e;try{return ie(await this._perform({method:"call",transaction:s,blockTag:r}))}catch(e){if(!this.disableCcipRead&&u(e)&&n>=0&&"latest"===r&&null!=s.to&&"0x556f1830"===le(e.data,0,4)){const i=e.data,o=await Ts(s.to,this);let a;try{a=function(t){const e={sender:"",urls:[],calldata:"",selector:"",extraData:"",errorArgs:[]};if(ce(t)<160)throw new Error("insufficient OffchainLookup data");const r=le(t,0,32);if(le(r,0,12)!==le(tu,0,12))throw new Error("corrupt OffchainLookup sender");e.sender=le(r,12);try{const r=[],n=Bo.getNumber(le(t,32,64)),s=Bo.getNumber(le(t,n,n+32)),i=le(t,n+32);for(let t=0;te[t])),e}(le(e.data,4))}catch(t){return Bo.throwError(t.message,"OFFCHAIN_FAULT",{reason:"BAD_DATA",transaction:s,info:{data:i}})}if(a.sender.toLowerCase()!==o.toLowerCase())return Bo.throwError("CCIP Read sender mismatch","CALL_EXCEPTION",{data:i,transaction:s,errorSignature:"OffchainLookup(address,string[],bytes,bytes4,bytes)",errorName:"OffchainLookup",errorArgs:a.errorArgs});const c=await this.ccipReadFetch(s,a.calldata,a.urls);return null==c?Bo.throwError("CCIP Read failed to fetch data","OFFCHAIN_FAULT",{reason:"FETCH_FAILED",transaction:s,info:{data:e.data,errorArgs:a.errorArgs}}):jl(this,Al,"m",t).call(this,{to:o,data:ae([a.selector,Ql([c,a.extraData])])},r,n+1)}throw e}},Ul=async function(t,e){const r=(await this.getNetwork()).formatter;return Xt(t,32)?await jl(this,Al,"m",Bl).call(this,{method:"getBlock",blockHash:t,includeTransactions:e}):await jl(this,Al,"m",Bl).call(this,{method:"getBlock",blockTag:r.blockTag(t),includeTransactions:e})},Ll=async function(t,e){let r=await Hl(t,this);return"event"===r.type&&e&&e.length>0&&!0===e[0].removed&&(r=await Hl({orphan:"drop-log",log:e[0]},this)),jl(this,Nl,"f").get(r.tag)||null},Dl=async function(t){const e=await Hl(t,this),r=e.tag;let n=jl(this,Nl,"f").get(r);if(!n){n={subscriber:this._getSubscriber(e),tag:r,addressableMap:new WeakMap,nameMap:new Map,started:!1,listeners:[]},jl(this,Nl,"f").set(r,n)}return n};const Zl=new Uint8Array([]);function Ql(t){const e=[];let r=0;for(let n=0;nnull==t?Bo.throwArgumentError("transaction to ENS name not configured","tx.to",n.to):t))),null!=n.from){const t=n.from;n.from=Promise.all([this.getAddress(),this.resolveName(t)]).then((([t,e])=>e&&t.toLowerCase()===e.toLowerCase()?t:Bo.throwArgumentError("transaction from mismatch","tx.from",e)))}return null==n.nonce&&(n.nonce=this.getTransactionCount()),n=t(n),null==n.gasLimit&&(n.gasLimit=r.estimateGas(n)),n=t(n),await t(n)}async resolveName(t){const e=au(this,eu,"m",ru).call(this,"resolveName");return await e.resolveName(t)}async sendTransaction(t){const e=au(this,eu,"m",ru).call(this,"sendTransaction"),r=Ec.from(await this.populateTransaction(t));return await e.broadcastTransaction(await this.signTransaction(r))}}eu=new WeakSet,ru=function(t){return this.provider?this.provider:Bo.throwError("missing provider","UNSUPPORTED_OPERATION",{operation:t})},nu=async function(t){const e=[];if(null!=(t=Object.assign({},t)).from){const r=t.from;e.push(Promise.all([this.getAddress(),this.resolveName(r)]).then((([e,r])=>{r&&e.toLowerCase()===r.toLowerCase()||Bo.throwArgumentError("transaction from mismatch","tx.from",r),t.from=e})))}return await Promise.all(e),t};class uu extends lu{constructor(t,e){super(e),su.add(this),r(this,{address:t})}async getAddress(){return this.address}connect(t){return new uu(this.address,t)}async signTransaction(t){au(this,su,"m",iu).call(this,"transactions","signTransaction")}async signMessage(t){au(this,su,"m",iu).call(this,"messages","signMessage")}async signTypedData(t,e,r){au(this,su,"m",iu).call(this,"typed-data","signTypedData")}}su=new WeakSet,iu=function(t,e){return Bo.throwError(`VoidSigner cannot sign ${t}`,"UNSUPPORTED_OPERATION",{operation:e})};class hu extends lu{constructor(t){super(t.provider),ou.set(this,void 0),cu(this,ou,t,"f")}async getAddress(){return await au(this,ou,"f").getAddress()}connect(t){return new hu(au(this,ou,"f").connect(t))}async signTransaction(t){return await au(this,ou,"f").signTransaction(t)}async sendTransaction(t){return await au(this,ou,"f").sendTransaction(t)}async signMessage(t){return await au(this,ou,"f").signMessage(t)}async signTypedData(t,e,r){return await au(this,ou,"f").signTypedData(t,e,r)}}ou=new WeakMap;const fu=new Set;function du(t){fu.has(t)||(fu.add(t),console.log("========= NOTICE ========="),console.log(`Request-Rate Exceeded for ${t} (this message will not be repeated)`),console.log(""),console.log("The default API keys for each service are provided as a highly-throttled,"),console.log("community resource for low-traffic projects and early prototyping."),console.log(""),console.log("While your application will continue to function, we highly recommended"),console.log("signing up for your own API keys to improve performance, increase your"),console.log("request rate/limit and enable other perks, such as metrics and advanced APIs."),console.log(""),console.log("For more details: https://docs.ethers.io/api-keys/"),console.log("=========================="))}var pu,wu,gu,mu,yu,bu,vu,Eu,Tu=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},ku=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Au{constructor(t){pu.add(this),wu.set(this,void 0),gu.set(this,void 0),mu.set(this,void 0),yu.set(this,void 0),Tu(this,wu,t,"f"),Tu(this,gu,null,"f"),Tu(this,mu,ku(this,pu,"m",bu).bind(this),"f"),Tu(this,yu,null,"f")}_subscribe(t){throw new Error("subclasses must override this")}_emitResults(t,e){throw new Error("subclasses must override this")}_recover(t){throw new Error("subclasses must override this")}start(){ku(this,pu,"m",bu).call(this,-2)}stop(){ku(this,pu,"m",vu).call(this),ku(this,wu,"f").off("block",ku(this,mu,"f"))}pause(t){t&&ku(this,pu,"m",vu).call(this),ku(this,wu,"f").off("block",ku(this,mu,"f"))}resume(){this.start()}}wu=new WeakMap,gu=new WeakMap,mu=new WeakMap,yu=new WeakMap,pu=new WeakSet,bu=async function(t){try{null==ku(this,gu,"f")&&Tu(this,gu,this._subscribe(ku(this,wu,"f")),"f");const t=await ku(this,gu,"f");if(null==t)return void ku(this,wu,"f")._recoverSubscriber(this,this._recover(ku(this,wu,"f")));const e=await ku(this,wu,"f").getNetwork();if(ku(this,yu,"f")||Tu(this,yu,e,"f"),ku(this,yu,"f").chainId!==e.chainId)throw new Error("chaid changed");const r=await ku(this,wu,"f").send("eth_getFilterChanges",[t]);await this._emitResults(ku(this,wu,"f"),r)}catch(t){console.log("@TODO",t)}ku(this,wu,"f").once("block",ku(this,mu,"f"))},vu=function(){const t=ku(this,gu,"f");t&&(Tu(this,gu,null,"f"),t.then((t=>{ku(this,wu,"f").send("eth_uninstallFilter",[t])})))};class Nu extends Au{constructor(t,e){var r;super(t),Eu.set(this,void 0),Tu(this,Eu,(r=e,JSON.parse(JSON.stringify(r))),"f")}_recover(t){return new kl(t,ku(this,Eu,"f"))}async _subscribe(t){const e=await t.send("eth_newFilter",[ku(this,Eu,"f")]);return console.log("____SUB",e),e}async _emitResults(t,e){const r=await t.getNetwork();for(const n of e){const e=r.formatter.log(n,t);t.emit(ku(this,Eu,"f"),e)}}}Eu=new WeakMap;class Pu extends Au{async _subscribe(t){return await t.send("eth_newPendingTransactionFilter",[])}async _emitResults(t,e){const r=await t.getNetwork();for(const n of e)t.emit("pending",r.formatter.hash(n))}}var xu,Ou,Iu,Su,Ru=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},_u=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Cu="bigint,boolean,function,number,string,symbol".split(/,/g);function Bu(t){if(null==t||Cu.indexOf(typeof t)>=0)return t;if("function"==typeof t.getAddress)return t;if(Array.isArray(t))return t.map(Bu);if("object"==typeof t)return Object.keys(t).reduce(((e,r)=>(e[r]=t[r],e)),{});throw new Error(`should not happen: ${t} (${typeof t})`)}function Fu(t){return t?t.toLowerCase():t}const Uu={polling:!1,batchMaxSize:1<<20,batchStallTime:250};class Lu{constructor(t,e){r(this,{provider:t,address:e})}connect(t){return Bo.throwError("cannot reconnect JsonRpcSigner","UNSUPPORTED_OPERATION",{operation:"signer.connect"})}async getAddress(){return this.address}async getNetwork(){return await this.provider.getNetwork()}async getFeeData(){return await this.provider.getFeeData()}async estimateGas(t){return await this.provider.estimateGas(t)}async call(t){return await this.provider.call(t)}async resolveName(t){return await this.provider.resolveName(t)}async getBalance(t){return await this.provider.getBalanceOf(this.address)}async getTransactionCount(t){return await this.provider.getTransactionCountOf(this.address)}async sendUncheckedTransaction(t){const e=Bu(t),r=[];if(e.from){const n=e.from;r.push((async()=>{const r=await Ts(n,this.provider);null!=r&&r.toLowerCase()===this.address.toLowerCase()||Bo.throwArgumentError("from address mismatch","transaction",t),e.from=r})())}else e.from=this.address;if(null==e.gasLimit&&r.push((async()=>{e.gasLimit=await this.provider.estimateGas(Object.assign(Object.assign({},e),{from:this.address}))})()),null!=e.to){const t=e.to;r.push((async()=>{e.to=await Ts(t,this.provider)})())}r.length&&await Promise.all(r);const n=this.provider.getRpcTransaction(e);return this.provider.send("eth_sendTransaction",[n])}async sendTransaction(t){const e=await this.provider.getBlockNumber(),r=await this.sendUncheckedTransaction(t);return await new Promise(((t,n)=>{const s=async n=>{const i=await this.provider.getTransaction(r);null==i?this.provider._setTimeout((()=>{s(4e3)}),n):t(this.provider._wrapTransaction(i,r,e))};s(1e3)}))}async signTransaction(t){const e=Bu(t);if(e.from){const r=await Ts(e.from,this.provider);if(null==r||r.toLowerCase()!==this.address.toLowerCase())return Bo.throwArgumentError("from address mismatch","transaction",t);e.from=r}else e.from=this.address;const r=this.provider.getRpcTransaction(e);return await this.provider.send("eth_sign_Transaction",[r])}async signMessage(t){const e="string"==typeof t?Zs(t):t;return await this.provider.send("personal_sign",[ie(e),this.address.toLowerCase()])}async signTypedData(t,e,r){const n=Bu(r),s=await to.resolveNames(t,e,n,(async t=>{const e=await Ts(t);return null==e?Bo.throwArgumentError("TypedData does not support null address","value",t):e}));return await this.provider.send("eth_signTypedData_v4",[this.address.toLowerCase(),JSON.stringify(to.getPayload(s.domain,e,s.value))])}async unlock(t){return this.provider.send("personal_unlockAccount",[this.address.toLowerCase(),t,null])}async _legacySignMessage(t){const e="string"==typeof t?Zs(t):t;return await this.provider.send("eth_sign",[this.address.toLowerCase(),ie(e)])}}class Du extends Kl{constructor(t){super(t),xu.set(this,void 0),Ou.set(this,void 0),Ru(this,xu,1,"f"),Ru(this,Ou,Object.assign({},Uu),"f")}_getOptions(t){return _u(this,Ou,"f")[t]}_setOptions(t){for(const e in t){const r=e,n=t[r];if(typeof n!=typeof _u(this,Ou,"f")[r])return Bo.throwArgumentError("invalid option value",`options.${r}`,n)}for(const e in t){const r=e;_u(this,Ou,"f")[r]=t[r]}}prepareRequest(t,e){var r,n;return{method:t,params:e,id:(Ru(this,xu,(n=_u(this,xu,"f"),r=n++,n),"f"),r),jsonrpc:"2.0"}}async send(t,e){throw new Error("sub-class must implement this")}async getSigner(t=0){const e=await this.getNetwork(),r=await this.send("eth_accounts",[]);if("number"==typeof t){if(t>r.length)throw new Error("no such account");return new Lu(this,r[t])}t=e.formatter.address(t);for(const t of r)if(e.formatter.address(t)===t)return new Lu(this,t);throw new Error("invalid account")}async _detectNetwork(){return Qc.from(Bo.getBigInt(await this._perform({method:"chainId"})))}_getSubscriber(t){return"pending"===t.type?new Pu(this):"event"===t.type?new Nu(this,t.filter):"orphan"===t.type&&"drop-log"===t.filter.orphan?new Wl("orphan"):super._getSubscriber(t)}getRpcTransaction(t){const e={};return["chainId","gasLimit","gasPrice","type","maxFeePerGas","maxPriorityFeePerGas","nonce","value"].forEach((r=>{if(null==t[r])return;let n=r;"gasLimit"===r&&(n="gas"),e[n]=oe(t[r])})),["from","to","data"].forEach((r=>{null!=t[r]&&(e[r]=ie(t[r]))})),t.accessList&&(e.accessList=uc(t.accessList)),e}getRpcRequest(t){switch(t.method){case"chainId":return{method:"eth_chainId",args:[]};case"getBlockNumber":return{method:"eth_blockNumber",args:[]};case"getGasPrice":return{method:"eth_gasPrice",args:[]};case"getBalance":return{method:"eth_getBalance",args:[Fu(t.address),t.blockTag]};case"getTransactionCount":return{method:"eth_getTransactionCount",args:[Fu(t.address),t.blockTag]};case"getCode":return{method:"eth_getCode",args:[Fu(t.address),t.blockTag]};case"getStorageAt":return{method:"eth_getStorageAt",args:[Fu(t.address),"0x"+t.position.toString(16),t.blockTag]};case"sendTransaction":return{method:"eth_sendRawTransaction",args:[t.signedTransaction]};case"getBlock":if("blockTag"in t)return{method:"eth_getBlockByNumber",args:[t.blockTag,!!t.includeTransactions]};if("blockHash"in t)return{method:"eth_getBlockByHash",args:[t.blockHash,!!t.includeTransactions]};break;case"getTransaction":return{method:"eth_getTransactionByHash",args:[t.hash]};case"getTransactionReceipt":return{method:"eth_getTransactionReceipt",args:[t.hash]};case"call":return{method:"eth_call",args:[this.getRpcTransaction(t.transaction),t.blockTag]};case"estimateGas":return{method:"eth_estimateGas",args:[this.getRpcTransaction(t.transaction)]};case"getLogs":return t.filter&&null!=t.filter.address&&(Array.isArray(t.filter.address)?t.filter.address=t.filter.address.map(Fu):t.filter.address=Fu(t.filter.address)),{method:"eth_getLogs",args:[t.filter]}}return null}getRpcError(t,e,r){if("eth_call"===t){const t=Gu(r);return t?Bo.makeError("execution reverted during JSON-RPC call","CALL_EXCEPTION",{data:t.data,transaction:e[0]}):Bo.makeError("missing revert data during JSON-RPC call","CALL_EXCEPTION",{data:"0x",transaction:e[0],info:{error:r}})}const n=JSON.stringify(function(t){const e=[];return $u(t,e),e}(r));return n.match(/insufficient funds|base fee exceeds gas limit/)?Bo.makeError("insufficient funds for intrinsic transaction cost","INSUFFICIENT_FUNDS",{transaction:e[0]}):n.match(/nonce/)&&n.match(/too low/)?Bo.makeError("nonce has already been used","NONCE_EXPIRED",{transaction:e[0]}):n.match(/replacement transaction/)&&n.match(/underpriced/)?Bo.makeError("replacement fee too low","REPLACEMENT_UNDERPRICED",{transaction:e[0]}):n.match(/only replay-protected/)?Bo.makeError("legacy pre-eip-155 transactions not supported","UNSUPPORTED_OPERATION",{operation:t,info:{transaction:e[0]}}):"estimateGas"===t&&n.match(/gas required exceeds allowance|always failing transaction|execution reverted/)?Bo.makeError("cannot estimate gas; transaction may fail or may require manual gas limit","UNPREDICTABLE_GAS_LIMIT",{transaction:e[0]}):r}async _perform(t){if("call"===t.method||"estimateGas"===t.method){let e=t.transaction;if(e&&null!=e.type&&Bo.getBigInt(e.type)&&null==e.maxFeePerGas&&null==e.maxPriorityFeePerGas){const r=await this.getFeeData();null==r.maxFeePerGas&&null==r.maxPriorityFeePerGas&&(t=Object.assign({},t,{transaction:Object.assign({},e,{type:void 0})}))}}const e=this.getRpcRequest(t);if(null!=e){this.emit("debug",{type:"sendRequest",request:e});try{const t=await this.send(e.method,e.args);return this.emit("debug",{type:"getResponse",result:t}),t}catch(t){throw this.emit("debug",{type:"getError",error:t}),this.getRpcError(e.method,e.args,t)}}return super._perform(t)}}xu=new WeakMap,Ou=new WeakMap;class Mu extends Du{constructor(t,e){null==t&&(t="http://localhost:8545"),super(e),Iu.set(this,void 0),Su.set(this,void 0),"string"==typeof t?Ru(this,Iu,{request:new Io(t)},"f"):(Ru(this,Iu,Object.assign({},t),"f"),_u(this,Iu,"f").request=_u(this,Iu,"f").request.clone()),Ru(this,Su,4e3,"f")}async send(t,e){var r;r=e,e=JSON.parse(JSON.stringify(r));const n=Object.assign({},_u(this,Iu,"f"));n.request=n.request.clone(),n.request.body=this.prepareRequest(t,e);const s=(await Co(n)).bodyJson;return"error"in s?Bo.throwError("error from JSON-RPC","UNKNOWN_ERROR",{result:s}):s.result}get pollingInterval(){return _u(this,Su,"f")}set pollingInterval(t){if(!Number.isInteger(t)||t<0)throw new Error("invalid interval");Ru(this,Su,t,"f"),this._forEachSubscriber((t=>{(function(t){return t&&"number"==typeof t.pollingInterval})(t)&&(t.pollingInterval=_u(this,Su,"f"))}))}}Iu=new WeakMap,Su=new WeakMap;class ju extends Mu{constructor(t,e){super(t,e),r(this,{network:e})}async _detectNetwork(){return this.network}}function Gu(t){if(null==t)return null;if("string"==typeof t.message&&t.message.match("reverted")&&Xt(t.data))return{message:t.message,data:t.data};if("object"==typeof t){for(const e in t){const r=Gu(t[e]);if(r)return r}return null}if("string"==typeof t)try{return Gu(JSON.parse(t))}catch(t){}return null}function $u(t,e){if(null!=t){if("string"==typeof t.message&&e.push(t.message),"object"==typeof t)for(const r in t)$u(t[r],e);if("string"==typeof t)try{return $u(JSON.parse(t),e)}catch(t){}}}const Wu="9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972";class zu extends ju{constructor(t="homestead",e){const n=Qc.from(t);null==e&&(e=Wu);super(zu.getConnection(n,e),n),r(this,{apiKey:e}),super._setOptions({polling:!0})}_getProvider(t){try{return new zu(t,this.apiKey)}catch(t){}return super._getProvider(t)}static getConnection(t,e){null==e&&(e=Wu);const r=new Io(`https://${function(t){switch(t){case"homestead":return"rpc.ankr.com/eth";case"matic":return"rpc.ankr.com/polygon";case"arbitrum":return"rpc.ankr.com/arbitrum"}return Bo.throwArgumentError("unsupported network","network",t)}(t.name)}/${e}`);r.allowGzip=!0;return{request:r,throttleRetry:async(t,r,n)=>(e===Wu&&du("AnkrProvider"),!0)}}isCommunityResource(){return this.apiKey===Wu}}const Hu="_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC";class Vu extends ju{constructor(t="homestead",e){const n=Qc.from(t);null==e&&(e=Hu),super(Vu.getConnection(n,e),n),r(this,{apiKey:e})}_getProvider(t){try{return new Vu(t,this.apiKey)}catch(t){}return super._getProvider(t)}isCommunityResource(){return this.apiKey===Hu}static getConnection(t,e){null==e&&(e=Hu);const r=new Io(`https://${function(t){switch(t){case"homestead":return"eth-mainnet.alchemyapi.io";case"ropsten":return"eth-ropsten.alchemyapi.io";case"rinkeby":return"eth-rinkeby.alchemyapi.io";case"goerli":return"eth-goerli.alchemyapi.io";case"kovan":return"eth-kovan.alchemyapi.io";case"matic":return"polygon-mainnet.g.alchemy.com";case"maticmum":return"polygon-mumbai.g.alchemy.com";case"arbitrum":return"arb-mainnet.g.alchemy.com";case"arbitrum-rinkeby":return"arb-rinkeby.g.alchemy.com";case"optimism":return"opt-mainnet.g.alchemy.com";case"optimism-kovan":return"opt-kovan.g.alchemy.com"}return Bo.throwArgumentError("unsupported network","network",t)}(t.name)}/v2/${e}`);r.allowGzip=!0;return{request:r,throttleRetry:async(t,r,n)=>(e===Hu&&du("alchemy"),!0)}}}class Ku extends ju{constructor(t="homestead"){const e=Qc.from(t);if("homestead"!==e.name)return Bo.throwArgumentError("unsupported network","network",t);super("https://cloudflare-eth.com/",e)}}const Ju="org.ethers.plugins.etherscan";class qu extends zc{constructor(t,e){super(Ju),r(this,{baseUrl:t,communityApiKey:e})}clone(){return new qu(this.baseUrl,this.communityApiKey)}}class Xu extends Kl{constructor(t,e){super();const n=Qc.from(t);if(null==e){const t=n.getPlugin(Ju);e=t?t.communityApiKey:"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB"}r(this,{apiKey:e,network:n}),this.getBaseUrl()}getBaseUrl(){const t=this.network.getPlugin(Ju);if(t)return t.baseUrl;switch(this.network.name){case"homestead":return"https://api.etherscan.io";case"ropsten":return"https://api-ropsten.etherscan.io";case"rinkeby":return"https://api-rinkeby.etherscan.io";case"kovan":return"https://api-kovan.etherscan.io";case"goerli":return"https://api-goerli.etherscan.io"}return Bo.throwArgumentError("unsupported network","network",this.network)}getUrl(t,e){const r=Object.keys(e).reduce(((t,r)=>{const n=e[r];return null!=n&&(t+=`&${r}=${n}`),t}),""),n=this.apiKey?`&apikey=${this.apiKey}`:"";return`${this.getBaseUrl()}/api?module=${t}${r}${n}`}getPostUrl(){return`${this.getBaseUrl()}/api`}getPostData(t,e){return e.module=t,e.apikey=this.apiKey,e}async detectNetwork(){return this.network}async fetch(t,e,r){const n=r?this.getPostUrl():this.getUrl(t,e),s=r?this.getPostData(t,e):null,i=new Io(n),o={request:i,throttleSlotInterval:1e3,processResponse:async(e,r)=>{const n=r.hasBody()?JSON.parse(ri(r.body)):{},s=("string"==typeof n.result?n.result:"").toLowerCase().indexOf("rate limit")>=0;return"proxy"===t?n&&0==n.status&&"NOTOK"==n.message&&s&&r.throwThrottleError(n.result):s&&r.throwThrottleError(n.result),r}};s&&(i.setHeader("content-type","application/x-www-form-urlencoded; charset=UTF-8"),i.body=Object.keys(s).map((t=>`${t}=${s[t]}`)).join("&"));const a=await Co(o);if(!a.hasBody())throw new Error;const c=JSON.parse(ri(a.body));if("proxy"===t){if("2.0"!=c.jsonrpc){const t=new Error("invalid response");throw t.result=JSON.stringify(c),t}if(c.error){const t=new Error(c.error.message||"unknown error");throw c.error.code&&(t.code=c.error.code),c.error.data&&(t.data=c.error.data),t}return c.result}if(0==c.status&&("No records found"===c.message||"No transactions found"===c.message))return c.result;if(1!=c.status||"OK"!=c.message){const t=new Error("invalid response");throw t.result=JSON.stringify(c),t}return c.result}_getTransactionPostData(t){const e={};for(let r in t){if(null==t[r])continue;let n=t[r];"type"===r&&0===n||(n={type:!0,gasLimit:!0,gasPrice:!0,maxFeePerGs:!0,maxPriorityFeePerGas:!0,nonce:!0,value:!0}[r]?oe(ie(n)):"accessList"===r?"["+this.network.formatter.accessList(n).map((t=>`{address:"${t.address}",storageKeys:["${t.storageKeys.join('","')}"]}`)).join(",")+"]":ie(n),e[r]=n)}return e}_checkError(t,e,r){throw e}async _detectNetwork(){return this.network}async _perform(t){switch(t.method){case"chainId":return this.network.chainId;case"getBlockNumber":return this.fetch("proxy",{action:"eth_blockNumber"});case"getGasPrice":return this.fetch("proxy",{action:"eth_gasPrice"});case"getBalance":return this.fetch("account",{action:"balance",address:t.address,tag:t.blockTag});case"getTransactionCount":return this.fetch("proxy",{action:"eth_getTransactionCount",address:t.address,tag:t.blockTag});case"getCode":return this.fetch("proxy",{action:"eth_getCode",address:t.address,tag:t.blockTag});case"getStorageAt":return this.fetch("proxy",{action:"eth_getStorageAt",address:t.address,position:t.position,tag:t.blockTag});case"sendTransaction":return this.fetch("proxy",{action:"eth_sendRawTransaction",hex:t.signedTransaction},!0).catch((e=>this._checkError(t,e,t.signedTransaction)));case"getBlock":return"blockTag"in t?this.fetch("proxy",{action:"eth_getBlockByNumber",tag:t.blockTag,boolean:t.includeTransactions?"true":"false"}):Bo.throwError("getBlock by blockHash not supported by Etherscan","UNSUPPORTED_OPERATION",{operation:"getBlock(blockHash)"});case"getTransaction":return this.fetch("proxy",{action:"eth_getTransactionByHash",txhash:t.hash});case"getTransactionReceipt":return this.fetch("proxy",{action:"eth_getTransactionReceipt",txhash:t.hash});case"call":{if("latest"!==t.blockTag)throw new Error("EtherscanProvider does not support blockTag for call");const e=this._getTransactionPostData(t.transaction);e.module="proxy",e.action="eth_call";try{return await this.fetch("proxy",e,!0)}catch(e){return this._checkError(t,e,t.transaction)}}case"estimateGas":{const e=this._getTransactionPostData(t.transaction);e.module="proxy",e.action="eth_estimateGas";try{return await this.fetch("proxy",e,!0)}catch(e){return this._checkError(t,e,t.transaction)}}}return super._perform(t)}async getNetwork(){return this.network}async getEtherPrice(){return"homestead"!==this.network.name?0:parseFloat((await this.fetch("stats",{action:"ethprice"})).ethusd)}isCommunityResource(){const t=this.network.getPlugin(Ju);return t?t.communityApiKey===this.apiKey:"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB"===this.apiKey}}const Yu="84842078b09946638c03157f83405213";class Zu extends ju{constructor(t="homestead",e,n){const s=Qc.from(t);null==e&&(e=Yu),null==n&&(n=null);super(Zu.getConnection(s,e,n),s),r(this,{projectId:e,projectSecret:n})}_getProvider(t){try{return new Zu(t,this.projectId,this.projectSecret)}catch(t){}return super._getProvider(t)}static getConnection(t,e,r){null==e&&(e=Yu),null==r&&(r=null);const n=new Io(`https://${function(t){switch(t){case"homestead":return"mainnet.infura.io";case"ropsten":return"ropsten.infura.io";case"rinkeby":return"rinkeby.infura.io";case"kovan":return"kovan.infura.io";case"goerli":return"goerli.infura.io";case"matic":return"polygon-mainnet.infura.io";case"maticmum":return"polygon-mumbai.infura.io";case"optimism":return"optimism-mainnet.infura.io";case"optimism-kovan":return"optimism-kovan.infura.io";case"arbitrum":return"arbitrum-mainnet.infura.io";case"arbitrum-rinkeby":return"arbitrum-rinkeby.infura.io"}return Bo.throwArgumentError("unsupported network","network",t)}(t.name)}/v3/${e}`);n.allowGzip=!0,r&&n.setCredentials("",r);return{request:n,throttleRetry:async(t,r,n)=>(e===Yu&&du("InfuraProvider"),!0)}}isCommunityResource(){return this.projectId===Yu}}const Qu={homestead:"6004bcd10040261633ade990",ropsten:"6004bd4d0040261633ade991",rinkeby:"6004bda20040261633ade994",goerli:"6004bd860040261633ade992"};function th(t,e,r,n){n=!!n;let s=!1,i=e;return null==i?(i=Qu[t.name],null==i&&Bo.throwArgumentError("network does not support default applicationId","applicationId",e),n=!0,s=!0):i===Qu[t.name]&&(n=!0,s=!0),null==r&&(r=null),{applicationId:i,applicationSecretKey:r,community:s,loadBalancer:n}}class eh extends ju{constructor(t="homestead",e,n,s){const i=Qc.from(t),{applicationId:o,applicationSecretKey:a,loadBalancer:c}=th(i,e,n,s);super(eh.getConnection(i,o,a,c),i),r(this,{applicationId:o,applicationSecretKey:a,loadBalancer:c})}static getConnection(t,e,r,n){const{applicationId:s,applicationSecretKey:i,community:o,loadBalancer:a}=th(t,e,r,n);let c=`https://${function(t){switch(t){case"homestead":return"eth-mainnet.gateway.pokt.network";case"ropsten":return"eth-ropsten.gateway.pokt.network";case"rinkeby":return"eth-rinkeby.gateway.pokt.network";case"goerli":return"eth-goerli.gateway.pokt.network"}return Bo.throwArgumentError("unsupported network","network",t)}(t.name)}/v1/`;a&&(c+="lb/"),c+=s;const l=new Io(c);l.allowGzip=!0,i&&l.setCredentials("",i);return{request:l,throttleRetry:async(t,e,r)=>(o&&du("PocketProvider"),!0)}}isCommunityResource(){return this.applicationId===Qu[this.network.name]}}var rh,nh,sh,ih,oh,ah,ch,lh,uh=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},hh=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const fh=BigInt("1"),dh=BigInt("2");function ph(){return(new Date).getTime()}const wh={stallTimeout:400,priority:1,weight:1},gh={blockNumber:-2,requests:0,lateResponses:0,errorResponses:0,outOfSync:-1,unsupportedEvents:0,rollingDuration:0,score:0,_network:null,_updateNumber:null,_totalTime:0};function mh(t,e,r){switch(r.method){case"chainId":case"getGasPrice":case"getBalance":case"estimateGas":return Bo.getBigInt(e).toString();case"getBlockNumber":case"getTransactionCount":return Bo.getNumber(e).toString();case"getCode":case"getStorageAt":case"call":return ie(e);case"getBlock":return r.includeTransactions?JSON.stringify(t.formatter.blockWithTransactions(e)):JSON.stringify(t.formatter.block(e));case"getTransaction":return JSON.stringify(t.formatter.transactionResponse(e));case"getTransactionReceipt":return JSON.stringify(t.formatter.receipt(e));case"getLogs":return JSON.stringify(e.map((e=>t.formatter.log(e))))}return Bo.throwError("unsupported method","UNSUPPORTED_OPERATION",{operation:`_perform(${JSON.stringify(r.method)})`})}function yh(t,e){const r=new Map;for(const{result:t,normal:n,weight:s}of e){const e=r.get(n)||{result:t,weight:0};e.weight+=s,r.set(n,e)}let n,s=0;for(const{weight:e,result:i}of r.values())e>=t&&e>s&&(s=e,n=i);return n}class bh extends Kl{constructor(t,e){super(e),rh.add(this),nh.set(this,void 0),sh.set(this,void 0),uh(this,nh,t.map((t=>t instanceof Kl?Object.assign({provider:t},wh,gh):Object.assign({},wh,t,gh))),"f"),uh(this,sh,null,"f"),this.quorum=2,this.eventQuorum=1,this.eventWorkers=1,this.quorum>hh(this,nh,"f").reduce(((t,e)=>t+e.weight),0)&&Bo.throwArgumentError("quorum exceed provider wieght","quorum",this.quorum)}async _detectNetwork(){return Qc.from(Bo.getBigInt(await this._perform({method:"chainId"}))).freeze()}_getSubscriber(t){throw new Error("@TODO")}async _perform(t){await hh(this,rh,"m",ah).call(this);const e=new Set;for(let r=0;r0;e--){const r=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[r],t[r]=n}}(e),e.sort(((t,e)=>e.priority-t.priority));for(const r of e)if(-1===t.indexOf(r))return r;return null},oh=function(t,e){const r=hh(this,rh,"m",ih).call(this,Array.from(t).map((t=>t.config)));if(null==r)return null;const n={},s={config:r,result:n,didBump:!1,done:!1,perform:null,staller:null},i=ph();return s.perform=(async()=>{try{r.requests++,n.result=await r.provider._perform(e)}catch(t){r.errorResponses++,n.error=t}s.done&&r.lateResponses++;const t=ph()-i;r._totalTime+=t,r.rollingDuration=.95*r.rollingDuration+.05*t,s.perform=null})(),s.staller=(async()=>{var t;await(t=r.stallTimeout,new Promise((e=>{setTimeout(e,t)}))),s.staller=null})(),t.add(s),s},ah=async function(){let t=hh(this,sh,"f");if(!t){const e=[];hh(this,nh,"f").forEach((t=>{e.push(async function(t,e){for(;t.blockNumber<0||t.blockNumber{const e=await t.provider.getBlockNumber();e>t.blockNumber&&(t.blockNumber=e),t._updateNumber=null})()),await t._updateNumber,t.outOfSync++}(t,0)),e.push((async()=>{t._network=await t.provider.getNetwork()})())})),uh(this,sh,t=(async()=>{await Promise.all(e);let t=null;for(const e of hh(this,nh,"f")){const r=e._network;null==t?t=r.chainId:r.chainId!==t&&Bo.throwError("cannot mix providers on different networks","UNSUPPORTED_OPERATION",{operation:"new FallbackProvider"})}})(),"f")}await t},ch=async function(t,e){const r=[];for(const n of t)if("result"in n.result){const t=n.result.result;r.push({result:t,normal:mh(n.config._network,t,e),weight:n.config.weight})}if(!(r.reduce(((t,e)=>t+e.weight),0)BigInt(t.result)));e.sort(((t,e)=>tt?1:0));const r=e.length/2;return e.length%2?e[r]:(e[r-1]+e[r]+fh)/dh}(r);case"getBlock":return"blockTag"in e&&"pending"===e.blockTag?r[0].result:yh(this.quorum,r);case"chainId":case"getBalance":case"getTransactionCount":case"getCode":case"getStorageAt":case"getTransaction":case"getTransactionReceipt":case"getLogs":case"call":return yh(this.quorum,r)}return Bo.throwError("unsupported method","UNSUPPORTED_OPERATION",{operation:`_perform(${JSON.stringify(e.method)})`})}},lh=async function t(e,r){if(0===e.size)throw new Error("no runners?!");const n=[];let s=0;for(const t of e)t.perform&&n.push(t.perform),t.staller?n.push(t.staller):t.didBump||(t.didBump=!0,s++);const i=await hh(this,rh,"m",ch).call(this,e,r);if(void 0!==i){if(i instanceof Error)throw i;return i}for(let t=0;t(Ch(this,Eh,"f")._register(t,this),t))),"f")}stop(){Ch(this,kh,"f").then((t=>{Ch(this,Eh,"f").send("eth_unsubscribe",[t])})),_h(this,kh,null,"f")}pause(t){t||Bo.throwError("preserve logs while paused not supported by SocketSubscriber yet","UNSUPPORTED_OPERATION",{operation:"pause(false)"}),_h(this,Ah,!!t,"f")}resume(){_h(this,Ah,null,"f")}_handleMessage(t){if(null!=Ch(this,kh,"f")&&null===Ch(this,Ah,"f")){let e=Ch(this,Nh,"f");e=null==e?this._emit(Ch(this,Eh,"f"),t):e.then((async()=>{await this._emit(Ch(this,Eh,"f"),t)})),_h(this,Nh,e.then((()=>{Ch(this,Nh,"f")===e&&_h(this,Nh,null,"f")})),"f")}}async _emit(t,e){throw new Error("sub-classes must implemente this; _emit")}}Eh=new WeakMap,Th=new WeakMap,kh=new WeakMap,Ah=new WeakMap,Nh=new WeakMap;class Fh extends Bh{constructor(t){super(t,["newHeads"])}async _emit(t,e){t.emit("block",parseInt(e.number))}}class Uh extends Bh{constructor(t){super(t,["newPendingTransactions"])}async _emit(t,e){t.emit("pending",e)}}class Lh extends Bh{constructor(t,e){super(t,["logs",e]),Ph.set(this,void 0),xh.set(this,void 0),_h(this,Ph,JSON.stringify(e),"f"),_h(this,xh,t.getNetwork().then((t=>t.formatter)),"f")}get logFilter(){return JSON.parse(Ch(this,Ph,"f"))}async _emit(t,e){const r=await Ch(this,xh,"f");t.emit(Ch(this,Ph,"f"),r.log(e,t))}}Ph=new WeakMap,xh=new WeakMap;class Dh extends Du{constructor(t){super(t),Oh.set(this,void 0),Ih.set(this,void 0),Sh.set(this,void 0),Rh.set(this,void 0),_h(this,Oh,new Map,"f"),_h(this,Ih,!1,"f"),_h(this,Sh,new Map,"f"),_h(this,Rh,new Map,"f")}_getSubscriber(t){switch(t.type){case"close":return new Wl("close");case"block":return new Fh(this);case"pending":return new Uh(this);case"event":return new Lh(this,t.filter);case"orphan":if("drop-log"===t.filter.orphan)return new Wl("drop-log")}return super._getSubscriber(t)}_register(t,e){Ch(this,Sh,"f").set(t,e);const r=Ch(this,Rh,"f").get(t);if(r){for(const t of r)e._handleMessage(t);Ch(this,Rh,"f").delete(t)}}async send(t,e){const r=this.prepareRequest(t,e),n=new Promise(((t,e)=>{Ch(this,Oh,"f").set(r.id,{payload:r,resolve:t,reject:e})}));return Ch(this,Ih,"f")&&await this._write(JSON.stringify(r)),await n}async _start(){if(!Ch(this,Ih,"f")){_h(this,Ih,!0,"f");for(const{payload:t}of Ch(this,Oh,"f").values())await this._write(JSON.stringify(t))}}async _processMessage(t){const e=JSON.parse(t);if("id"in e){const t=Ch(this,Oh,"f").get(e.id);if(!t)return void console.log("Weird... Response for not a thing we sent");if(Ch(this,Oh,"f").delete(e.id),"error"in e){const{message:r,code:n,data:s}=e.error,i=Bo.makeError(r||"unkonwn error","SERVER_ERROR",{request:`ws:${JSON.stringify(t.payload)}`,info:{code:n,data:s}});t.reject(i)}else t.resolve(e.result)}else if("eth_subscription"===e.method){const t=e.params.subscription,r=Ch(this,Sh,"f").get(t);if(r)r._handleMessage(e.params.result);else{let r=Ch(this,Rh,"f").get(t);null==r&&(r=[],Ch(this,Rh,"f").set(t,r)),r.push(e.params.result)}}}async _write(t){throw new Error("sub-classes must override this")}}Oh=new WeakMap,Ih=new WeakMap,Sh=new WeakMap,Rh=new WeakMap;var Mh,jh=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Gh=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class $h extends Dh{constructor(t,e){super(e),Mh.set(this,void 0),jh(this,Mh,"string"==typeof t?new vh(t):t,"f"),this.websocket.onopen=()=>{this._start()},this.websocket.onmessage=t=>{this._processMessage(t.data)}}get websocket(){return Gh(this,Mh,"f")}async _write(t){this.websocket.send(t)}}Mh=new WeakMap;const Wh=function(t){function e(e,r,n){const s=function(){const s=new t(e,r);if(null!=n.ensNetwork&&s.attachPlugin(new Vc(null,n.ensNetwork)),n.priorityFee&&s.attachPlugin(new Kc(n.priorityFee)),n.etherscan){const{url:t,apiKey:e}=n.etherscan;s.attachPlugin(new qu(t,e))}return s.attachPlugin(new Hc),s};t.register(e,s),t.register(r,s),n.altNames&&n.altNames.forEach((e=>{t.register(e,s)}))}return e("homestead",1,{ensNetwork:1,altNames:["mainnet"]}),e("ropsten",3,{ensNetwork:3}),e("rinkeby",4,{ensNetwork:4}),e("goerli",5,{ensNetwork:5}),e("kovan",42,{ensNetwork:42}),e("classic",61,{}),e("classicKotti",6,{}),e("xdai",100,{ensNetwork:1}),e("matic",137,{ensNetwork:1,priorityFee:35e9,etherscan:{apiKey:"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7",url:"https://api.polygonscan.com/"}}),e("maticMumbai",80001,{priorityFee:35e9,etherscan:{apiKey:"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7",url:"https://api-testnet.polygonscan.com/"}}),e("bnb",56,{ensNetwork:1,etherscan:{apiKey:"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9",url:"http://api.bscscan.com"}}),e("bnbt",97,{etherscan:{apiKey:"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9",url:"http://api-testnet.bscscan.com"}}),t}(Qc),zh=void 0;var Hh,Vh,Kh=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Jh=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class qh extends Sc{constructor(t,e,n){super(t,t.provider);r(this,{args:e.decodeEventLog(n,t.data,t.topics),fragment:n,interface:e})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}class Xh extends Rc{constructor(t,e,r){super(r,e),Hh.set(this,void 0),Kh(this,Hh,t,"f")}get logs(){return super.logs.map((t=>{const e=t.topics.length?Jh(this,Hh,"f").getEvent(t.topics[0]):null;return e?new qh(t,Jh(this,Hh,"f"),e):t}))}}Hh=new WeakMap;class Yh extends _c{constructor(t,e,r){super(r,e),Vh.set(this,void 0),Kh(this,Vh,t,"f")}async wait(t){const e=await super.wait();return null==e?null:new Xh(Jh(this,Vh,"f"),this.provider,e)}}Vh=new WeakMap;class Zh extends o{constructor(t,e,n,s,i){super(t,e,n);const o=new qh(i,t.interface,s);r(this,{args:t.interface.decodeEventLog(s,o.data,o.topics),fragment:s,log:o})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}async getBlock(){return await this.log.getBlock()}async getTransaction(){return await this.log.getTransaction()}async getTransactionReceipt(){return await this.log.getTransactionReceipt()}}const Qh=new A("@ethersproject/contract@6.0.0-beta.1");var tf,ef=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},rf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function nf(t){return t&&"function"==typeof t.resolveName}class sf{constructor(t,e,n){if(tf.set(this,void 0),r(this,{fragment:e}),e.inputs.lengtht.walkAsync(n[e],((t,e)=>"address"===t?Ts(e,i):e)))));return t.interface.encodeFilterTopics(e,r)}(),"f")}getTopicFilter(){return rf(this,tf,"f")}}function of(t,e){return null==t?null:"function"==typeof t[e]?t:t.provider&&"function"==typeof t.provider[e]?t.provider:null}async function af(t){const e=function(t){const e={};t.to&&(e.to=t.to),t.from&&(e.from=t.from),t.data&&(e.data=ie(t.data));const r="chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value".split(/,/);for(const n in r)n in t&&null!=t[n]&&(e[n]=Bo.getBigInt(t[n],`request.${n}`));const n="type,nonce".split(/,/);for(const r in n)r in t&&null!=t[r]&&(e[r]=Bo.getNumber(t[r],`request.${r}`));return t.accessList&&(e.accessList=uc(t.accessList)),"blockTag"in t&&(e.blockTag=t.blockTag),"enableCcipRead"in t&&(e.enableCcipReadEnabled=!!t.enableCcipRead),"customData"in t&&(e.customData=t.customData),e}(Ss.dereference(t,"overrides"));return e.to?Qh.throwArgumentError("cannot override to","overrides.to",e.to):e.data&&Qh.throwArgumentError("cannot override data","overrides.data",e.data),e.from&&(e.from=await Ts(e.from)),e}tf=new WeakMap;class cf extends(function(){return Function}()){constructor(t,e){super(),r(this,{name:t.interface.getFunctionName(e),_contract:t,_key:e});return new Proxy(this,{apply:async(t,e,r)=>t.getFragment(...r).constant?await t.staticCall(...r):await t.send(...r)})}get fragment(){return this._contract.interface.getFunction(this._key)}getFragment(...t){return this._contract.interface.getFunction(this._key,t)}async populateTransaction(...e){const r=this.getFragment(...e);let n={};if(r.inputs.length+1===e.length&&(n=await af(e.pop())),r.inputs.length!==e.length)throw new Error("internal error: fragment inputs doesn't match arguments; should not happen");const s=await async function(t,e,r){const n=of(t,"resolveName"),s=nf(n)?n:null;return await Promise.all(e.map(((t,e)=>t.walkAsync(r[e],((t,e)=>"address"===t?Ts(e,s):e)))))}(this._contract.runner,r.inputs,e);return Object.assign({},n,await t({to:this._contract.getAddress(),data:this._contract.interface.encodeFunctionData(r,s)}))}async staticCall(...t){const e=await this.staticCallResult(...t);return 1===e.length?e[0]:e}async send(...t){const e=of(this._contract.runner,"sendTransaction");if(!(r=e)||"function"!=typeof r.sendTransaction)return Qh.throwError("contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});var r;const n=await e.sendTransaction(await this.populateTransaction(...t)),s=of(this._contract.runner,"getLogs");return new Yh(this._contract.interface,s,n)}async estimateGas(...t){const e=of(this._contract.runner,"estimateGas");return(r=e)&&"function"==typeof r.estimateGas?await e.estimateGas(await this.populateTransaction(...t)):Qh.throwError("contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"});var r}async staticCallResult(...t){const e=of(this._contract.runner,"call");if(!(r=e)||"function"!=typeof r.call)return Qh.throwError("contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});var r;const n=this.getFragment(...t),s=await this.populateTransaction(...t);let i="0x";try{i=await e.call(s)}catch(t){if(u(t))throw this._contract.interface.makeError(n,t.data,s);throw t}return this._contract.interface.decodeFunctionResult(n,i)}}class lf extends(function(){return Function}()){constructor(t,e){return super(),r(this,{name:t.interface.getEventName(e),_contract:t,_key:e}),new Proxy(this,{apply:async(e,r,n)=>new sf(t,e.getFragment(...n),n)})}get fragment(){return this._contract.interface.getEvent(this._key)}getFragment(...t){return this._contract.interface.getEvent(this._key,t)}}const uf=Symbol.for("_ethersInternal_contract"),hf=new WeakMap;function ff(t){return hf.get(t[uf])}async function df(t,e){let r,n;if(Array.isArray(e))r=t.interface.getEvent(e[0]),n=e;else if("string"==typeof e)r=t.interface.getEvent(e),n=[t.interface.getEventTopic(r)];else if((s=e)&&"object"==typeof s&&"getTopicFilter"in s&&"function"==typeof s.getTopicFilter&&s.fragment)r=e.fragment,n=await e.getTopicFilter();else{if(!("fragment"in e))throw console.log(e),new Error("TODO");r=e.fragment,n=[t.interface.getEventTopic(r)]}var s;n=n.map((t=>{return null==t?null:Array.isArray(t)?(e=t.map((t=>t.toLowerCase())),(e=Array.from(new Set(e).values())).sort(),e):t.toLowerCase();var e}));return{fragment:r,tag:n.map((t=>null==t?"null":Array.isArray(t)?t.join("|"):t)).join("&"),topics:n}}async function pf(t,e){const{subs:r}=ff(t);return r.get((await df(t,e)).tag)||null}async function wf(t,e){const r=of(t.runner,"on"),n=of(t.runner,"off");if(!r||r!==n||(!(s=r)||"function"!=typeof s.on||"function"!=typeof s.off))return Qh.throwError("contract runner does not support subscribing","UNSUPPORTED_OPERATION",{operation:"on"});var s;const{fragment:i,tag:o,topics:a}=await df(t,e),{addr:c,subs:l}=ff(t);let u=l.get(o);if(!u){const n={address:c||t,topics:a},s=r=>{const n=new Zh(t,null,e,i,r);mf(t,e,n.args,n)};let h=!1;u={tag:o,listeners:[],start:()=>{h||(r.on(n,s),h=!0)},stop:()=>{h&&(r.off(n,s),h=!1)}},l.set(o,u)}return u}let gf=Promise.resolve();async function mf(t,e,r,n){try{await gf}catch(t){}const s=async function(t,e,r,n){await gf;const s=await pf(t,e);if(!s)return!1;const i=s.listeners.length;return s.listeners=s.listeners.filter((({listener:s,once:i})=>{const o=r.slice();return n&&o.push(new Zh(t,i?null:s,e,n.fragment,n.log)),setTimeout((()=>{s.call(t,...o)}),0),!i})),i>0}(t,e,r,n);return gf=s,await s}const yf=["then"];class bf{constructor(t,e,n=null,s){let i;r(this,{target:t,runner:n,interface:mo.from(e)}),Object.defineProperty(this,uf,{value:{}});let o=null,a=null;if(s){const t=of(n,"getLogs");a=new Yh(this.interface,t,s)}let c=new Map;if("string"==typeof t)if(Xt(t))o=t,i=Promise.resolve(t);else{const e=of(n,"resolveName");if(!nf(e))throw Qh.makeError("contract runner does not support name resolution","UNSUPPORTED_OPERATION",{operation:"resolveName"});i=e.resolveName(t).then((t=>{if(null==t)throw new Error("TODO");return ff(this).addr=t,t}))}else i=t.getAddress().then((t=>{if(null==t)throw new Error("TODO");return ff(this).addr=t,t}));var l,u;l=this,u={addrPromise:i,addr:o,deployTx:a,subs:c},hf.set(l[uf],u);const h=new Proxy({},{get:(t,e,r)=>{if(yf.indexOf(e)>=0)return Reflect.get(t,e,r);const n=String(e),s=this.getEvent(n);if(s)return s;throw new Error(`unknown contract event: ${n}`)}});return r(this,{filters:h}),new Proxy(this,{get:(t,e,r)=>{if(e in t||yf.indexOf(e)>=0)return Reflect.get(t,e,r);const n=String(e),s=t.getFunction(n);if(s)return s;throw new Error(`unknown contract method: ${n}`)}})}async getAddress(){return await ff(this).addrPromise}deploymentTransaction(){return ff(this).deployTx}getFunction(t){return"string"!=typeof t&&(t=t.format()),new cf(this,t)}getEvent(t){return"string"!=typeof t&&(t=t.format()),new lf(this,t)}async queryFilter(t,e=0,r="latest"){const{addr:n,addrPromise:s}=ff(this),i=n||await s,{fragment:o,topics:a}=await df(this,t),c={address:i,topics:a,fromBlock:e,toBlock:r},l=of(this.runner,"getLogs");return(u=l)&&"function"==typeof u.getLogs?(await l.getLogs(c)).map((t=>new qh(t,this.interface,o))):Qh.throwError("contract runner does not support querying","UNSUPPORTED_OPERATION",{operation:"getLogs"});var u}async on(t,e){const r=await wf(this,t);return r.listeners.push({listener:e,once:!1}),r.start(),this}async once(t,e){const r=await wf(this,t);return r.listeners.push({listener:e,once:!0}),r.start(),this}async emit(t,...e){return await mf(this,t,e,null)}async listenerCount(t){if(t){const e=await pf(this,t);return e?e.listeners.length:0}const{subs:e}=ff(this);let r=0;for(const{listeners:t}of e.values())r+=t.length;return r}async listeners(t){if(t){const e=await pf(this,t);return e?e.listeners.map((({listener:t})=>t)):[]}const{subs:e}=ff(this);let r=[];for(const{listeners:t}of e.values())r=r.concat(t.map((({listener:t})=>t)));return r}async off(t,e){const r=await pf(this,t);if(!r)return this;if(e){const t=r.listeners.map((({listener:t})=>t)).indexOf(e);t>=0&&r.listeners.splice(t,1)}return null!=e&&0!==r.listeners.length||(r.stop(),ff(this).subs.delete(r.tag)),this}async removeAllListeners(t){if(t){const e=await pf(this,t);if(!e)return this;e.stop(),ff(this).subs.delete(e.tag)}else{const{subs:t}=ff(this);for(const{tag:e,stop:r}of t.values())r(),t.delete(e)}return this}async addListener(t,e){return await this.on(t,e)}async removeListener(t,e){return await this.off(t,e)}static buildClass(t){return class extends bf{constructor(e,r=null){super(e,t,r)}}}static from(t,e,r=null){return new this(t,e,r)}}class vf extends(function(){return bf}()){}function Ef(t){return as(nn("0x"+cc.computePublicKey(t,!1).substring(4)).substring(26))}const Tf=" !#$%&'()*+,-./<=>?@[]^_`{|}~",kf=/^[a-z]*$/i;function Af(t,e){let r=97;return t.reduce(((t,n)=>(n===e?r++:n.match(kf)?t.push(String.fromCharCode(r)+n):(r=97,t.push(n)),t)),[])}function Nf(t){if("0"!==t[0])throw TypeError("unsupported auwl data");return function(t,e){for(let r=Tf.length-1;r>=0;r--)t=t.split(Tf[r]).join(e.substring(2*r,2*r+2));const r=[],n=t.replace(/(:|([0-9])|([A-Z][a-z]*))/g,((t,e,n,s)=>{if(n)for(let t=parseInt(n);t>=0;t--)r.push(";");else r.push(e.toLowerCase());return""}));if(n)throw new Error(`leftovers: ${JSON.stringify(n)}`);return Af(Af(r,";"),":")}(t.substring(1+2*Tf.length),t.substring(1,1+2*Tf.length))}const Pf=new A("@ethersproject/wordlists@6.0.0-beta.1");class xf{constructor(t){r(this,{locale:t})}split(t){return t.toLowerCase().split(/ +/g)}join(t){return t.join(" ")}}var Of,If,Sf,Rf,_f,Cf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Bf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Ff extends xf{constructor(t,e,r){super(t),Of.add(this),If.set(this,void 0),Sf.set(this,void 0),Rf.set(this,void 0),Cf(this,If,e,"f"),Cf(this,Sf,r,"f"),Cf(this,Rf,null,"f")}get _data(){return Bf(this,If,"f")}_decodeWords(){return Nf(Bf(this,If,"f"))}getWord(t){const e=Bf(this,Of,"m",_f).call(this);return(t<0||t>=e.length)&&Pf.throwArgumentError(`invalid word index: ${t}`,"index",t),e[t]}getWordIndex(t){return Bf(this,Of,"m",_f).call(this).indexOf(t)}}If=new WeakMap,Sf=new WeakMap,Rf=new WeakMap,Of=new WeakSet,_f=function(){if(null==Bf(this,Rf,"f")){const t=this._decodeWords();if(Ni(t.join("\n")+"\n")!==Bf(this,Sf,"f"))throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);Cf(this,Rf,t,"f")}return Bf(this,Rf,"f")};const Uf=new class extends Ff{constructor(){super("en","0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO","0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60")}},Lf=new A("@ethersproject/wallet@6.0.0-beta.1"),Df=Object.freeze({en:Uf});var Mf,jf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Gf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class $f extends Ff{constructor(t,e,r,n){super(t,e,n),Mf.set(this,void 0),jf(this,Mf,r,"f")}get _accent(){return Gf(this,Mf,"f")}_decodeWords(){return function(t,e){let r=Nf(t).join(",");return e.split(/,/g).forEach((t=>{const e=t.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);if(!e)throw new Error("internal error parsing accents");let n=0;const s=function(t,e){const r=(1<=t;){const e=s>>i-t;s&=(1<(0==--s[n]&&(e=String.fromCharCode(e.charCodeAt(0),i),n++),e)))})),r.split(",")}(this._data,this._accent)}}function Wf(t){return(1<24)&&Lf.throwArgumentError("invalid mnemonic length","mnemonic","[ REDACTED ]");const n=ee(new Uint8Array(Math.ceil(11*r.length/8)));let s=0;for(let t=0;t>3]|=1<<7-s%8),s++}const i=32*r.length/3,o=Wf(r.length/3);return(ee(Yn(n.slice(0,i/8)))[0]&o)!==(n[n.length-1]&o)&&Lf.throwArgumentError("invalid mnemonic checksum","mnemonic","[ REDACTED ]"),ie(n.slice(0,i/8))}function Hf(t,e=Uf){(t.length%4||t.length<16||t.length>32)&&Lf.throwArgumentError("invalid entropy size","entropy","[ REDACTED ]"),null==e&&(e=Uf);const r=[0];let n=11;for(let e=0;e8?(r[r.length-1]<<=8,r[r.length-1]|=t[e],n-=8):(r[r.length-1]<<=n,r[r.length-1]|=t[e]>>8-n,r.push(t[e]&((1<<8-n)-1&255)),n+=3);const s=t.length/4,i=parseInt(Yn(t).substring(2,4),16)&Wf(s);return r[r.length-1]<<=s,r[r.length-1]|=i>>8-s,e.join(r.map((t=>e.getWord(t))))}Mf=new WeakMap;const Vf={};class Kf{constructor(t,e,n,s,i){null==s&&(s=""),null==i&&(i=Uf),Lf.assertPrivate(t,Vf,"Mnemonic"),r(this,{phrase:n,password:s,wordlist:i,entropy:e})}computeSeed(){const t=Zs("mnemonic"+this.password,Ks.NFKD);return xn(Zs(this.phrase,Ks.NFKD),t,2048,64,"sha512")}static fromPhrase(t,e,r){const n=zf(t,r);return t=Hf(Lf.getBytes(n),r),new Kf(Vf,n,t,e,r)}static fromEntropy(t,e,r){const n=Lf.getBytes(t,"entropy"),s=Hf(n,r);return new Kf(Vf,ie(n),s,e,r)}static entropyToPhrase(t,e){return Hf(Lf.getBytes(t,"entropy"),e)}static phraseToEntropy(t,e){return zf(t,e)}static isValidMnemonic(t,e){try{return zf(t,e),!0}catch(t){}return!1}}var Jf,qf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Xf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Yf extends lu{constructor(t,e){super(e),Jf.set(this,void 0),qf(this,Jf,t,"f");r(this,{address:Ef(this.signingKey.publicKey)})}get signingKey(){return Xf(this,Jf,"f")}get privateKey(){return this.signingKey.privateKey}async getAddress(){return this.address}connect(t){return new Yf(Xf(this,Jf,"f"),t)}async signTransaction(e){const r=Object.assign({},e,await t({to:e.to?Ts(e.to,this.provider):void 0,from:e.from?Ts(e.from,this.provider):void 0}));null!=r.from&&(as(r.from)!==this.address&&Lf.throwArgumentError("transaction from address mismatch","tx.from",e.from),delete r.from);const n=Ec.from(r);return n.signature=this.signingKey.sign(n.unsignedHash),n.serialized}async signMessage(t){return this.signingKey.sign(Ci(t)).serialized}async signTypedData(t,e,r){const n=await to.resolveNames(t,e,r,(async t=>{if(null==this.provider)return Lf.throwError("cannot resolve ENS names without a provider","UNSUPPORTED_OPERATION",{operation:"resolveName",info:{name:t}});const e=await this.provider.resolveName(t);return null==e?Lf.throwError("unconfigured ENS name","UNCONFIGURED_NAME",{value:t}):e}));return this.signingKey.sign(to.hash(n.domain,e,n.value)).serialized}}Jf=new WeakMap;var Zf,Qf,td,ed=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)},rd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r};const nd="m/44'/60'/0'/0/0",sd=new Uint8Array([66,105,116,99,111,105,110,32,115,101,101,100]),id=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141");function od(t,e){let r="";for(;t;)r="0123456789abcdef"[t%16]+r,t=Math.trunc(t/16);for(;r.length<2*e;)r="0"+r;return"0x"+r}function ad(t){const e=Lf.getBytes(t);return Jt(ae([e,le(Yn(Yn(e)),0,4)]))}const cd={};function ld(t,e,r,n){const s=new Uint8Array(37);if(2147483648&t){if(null==n)return Lf.throwError("cannot derive child of neutered node","UNSUPPORTED_OPERATION",{operation:"deriveChild"});s.set(ee(n),1)}else s.set(ee(r));for(let e=24;e>=0;e-=8)s[33+(e>>3)]=t>>24-e&255;const i=ee(Ur("sha512",e,s));return{IL:i.slice(0,32),IR:i.slice(32)}}function ud(t,e){const r=e.split("/");if(0===r.length||"m"===r[0]&&0!==t.depth)throw new Error("invalid path - "+e);"m"===r[0]&&r.shift();let n=t;for(let t=0;t=2147483648)throw new Error("invalid path index - "+e);n=n.deriveChild(2147483648+t)}else{if(!e.match(/^[0-9]+$/))throw new Error("invalid path component - "+e);{const t=parseInt(e);if(t>=2147483648)throw new Error("invalid path index - "+e);n=n.deriveChild(t)}}}return n}class hd extends Yf{constructor(t,e,n,s,i,o,a,c,l){super(e,l),Lf.assertPrivate(t,cd,"HDNodeWallet"),r(this,{publicKey:e.compressedPublicKey});r(this,{parentFingerprint:n,fingerprint:le(kn(Yn(this.publicKey)),0,4),chainCode:s,path:i,index:o,depth:a}),r(this,{mnemonic:c})}connect(t){return new hd(cd,this.signingKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,this.mnemonic,t)}get extendedKey(){if(this.depth>=256)throw new Error("Depth too large!");return ad(ae(["0x0488ADE4",od(this.depth,1),this.parentFingerprint,od(this.index,4),this.chainCode,ae(["0x00",this.privateKey])]))}hasPath(){return null!=this.path}neuter(){return new fd(cd,this.address,this.publicKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,this.provider)}deriveChild(t){const e=Lf.getNumber(t,"index");if(e>4294967295)throw new Error("invalid index - "+String(e));let r=this.path;r&&(r+="/"+(2147483647&e),2147483648&e&&(r+="'"));const{IR:n,IL:s}=ld(e,this.chainCode,this.publicKey,this.privateKey),i=new cc(vt((yt(s)+BigInt(this.privateKey))%id,32));return new hd(cd,i,this.fingerprint,ie(n),r,e,this.depth+1,this.mnemonic,this.provider)}derivePath(t){return ud(this,t)}static fromSeed(t){return ed(hd,Zf,"m",Qf).call(hd,t,null)}static fromPhrase(t,e="",r=nd,n=Uf){r||(r=nd);const s=Kf.fromPhrase(t,e,n);return ed(hd,Zf,"m",Qf).call(hd,s.computeSeed(),s).derivePath(r)}static fromMnemonic(t,e=nd){return e||(e=nd),ed(hd,Zf,"m",Qf).call(hd,t.computeSeed(),t).derivePath(e)}static fromExtendedKey(t){const e=ee(qt(t));82===e.length&&ad(e.slice(0,78))===t||Lf.throwArgumentError("invalid extended key","extendedKey","[ REDACTED ]");const r=e[4],n=ie(e.slice(5,9)),s=parseInt(ie(e.slice(9,13)).substring(2),16),i=ie(e.slice(13,45)),o=e.slice(45,78);switch(ie(e.slice(0,4))){case"0x0488b21e":case"0x043587cf":{const t=ie(o);return new fd(cd,Ef(t),t,n,i,null,s,r,null)}case"0x0488ade4":case"0x04358394 ":if(0!==o[0])break;return new hd(cd,new cc(o.slice(1)),n,i,null,s,r,null,null)}return Lf.throwArgumentError("invalid extended key prefix","extendedKey","[ REDACTED ]")}static createRandom(t="",e=nd,r=Uf){e||(e=nd);const n=Kf.fromEntropy(Rn(16),t,r);return ed(hd,Zf,"m",Qf).call(hd,n.computeSeed(),n).derivePath(e)}}Zf=hd,Qf=function(t,e){const r=Lf.getBytes(t,"seed");if(r.length<16||r.length>64)throw new Error("invalid seed");const n=ee(Ur("sha512",sd,r)),s=new cc(ie(n.slice(0,32)));return new hd(cd,s,"0x00000000",ie(n.slice(32)),"m",0,0,e,null)};class fd extends uu{constructor(t,e,n,s,i,o,a,c,l){super(e,l),Lf.assertPrivate(t,cd,"HDNodeVoidWallet"),r(this,{publicKey:n});r(this,{publicKey:n,fingerprint:le(kn(Yn(n)),0,4),parentFingerprint:s,chainCode:i,path:o,index:a,depth:c})}connect(t){return new fd(cd,this.address,this.publicKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,t)}get extendedKey(){if(this.depth>=256)throw new Error("Depth too large!");return ad(ae(["0x0488B21E",od(this.depth,1),this.parentFingerprint,od(this.index,4),this.chainCode,this.publicKey]))}hasPath(){return null!=this.path}deriveChild(t){const e=Lf.getNumber(t,"index");if(e>4294967295)throw new Error("invalid index - "+String(e));let r=this.path;r&&(r+="/"+(2147483647&e),2147483648&e&&(r+="'"));const{IR:n,IL:s}=ld(e,this.chainCode,this.publicKey,null),i=cc._addPoints(s,this.publicKey,!0),o=Ef(i);return new fd(cd,o,i,this.fingerprint,ie(n),r,e,this.depth+1,this.provider)}derivePath(t){return ud(this,t)}}class dd{constructor(t,e="",r="m/44'/60'/0'/0",n=Uf){td.set(this,void 0),rd(this,td,hd.fromPhrase(t,e,r,n),"f")}getSigner(t=0){return ed(this,td,"f").deriveChild(t)}}function pd(t){const e=Lf.getNumber(t,"index");return(e<0||e>=2147483648)&&Lf.throwArgumentError("invalid account index","index",e),`m/44'/60'/${e}'/0/0`} +/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */td=new WeakMap;var wd,gd,md,yd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},bd=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const vd={16:10,24:12,32:14},Ed=[1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145],Td=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],kd=[82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125],Ad=[3328402341,4168907908,4000806809,4135287693,4294111757,3597364157,3731845041,2445657428,1613770832,33620227,3462883241,1445669757,3892248089,3050821474,1303096294,3967186586,2412431941,528646813,2311702848,4202528135,4026202645,2992200171,2387036105,4226871307,1101901292,3017069671,1604494077,1169141738,597466303,1403299063,3832705686,2613100635,1974974402,3791519004,1033081774,1277568618,1815492186,2118074177,4126668546,2211236943,1748251740,1369810420,3521504564,4193382664,3799085459,2883115123,1647391059,706024767,134480908,2512897874,1176707941,2646852446,806885416,932615841,168101135,798661301,235341577,605164086,461406363,3756188221,3454790438,1311188841,2142417613,3933566367,302582043,495158174,1479289972,874125870,907746093,3698224818,3025820398,1537253627,2756858614,1983593293,3084310113,2108928974,1378429307,3722699582,1580150641,327451799,2790478837,3117535592,0,3253595436,1075847264,3825007647,2041688520,3059440621,3563743934,2378943302,1740553945,1916352843,2487896798,2555137236,2958579944,2244988746,3151024235,3320835882,1336584933,3992714006,2252555205,2588757463,1714631509,293963156,2319795663,3925473552,67240454,4269768577,2689618160,2017213508,631218106,1269344483,2723238387,1571005438,2151694528,93294474,1066570413,563977660,1882732616,4059428100,1673313503,2008463041,2950355573,1109467491,537923632,3858759450,4260623118,3218264685,2177748300,403442708,638784309,3287084079,3193921505,899127202,2286175436,773265209,2479146071,1437050866,4236148354,2050833735,3362022572,3126681063,840505643,3866325909,3227541664,427917720,2655997905,2749160575,1143087718,1412049534,999329963,193497219,2353415882,3354324521,1807268051,672404540,2816401017,3160301282,369822493,2916866934,3688947771,1681011286,1949973070,336202270,2454276571,201721354,1210328172,3093060836,2680341085,3184776046,1135389935,3294782118,965841320,831886756,3554993207,4068047243,3588745010,2345191491,1849112409,3664604599,26054028,2983581028,2622377682,1235855840,3630984372,2891339514,4092916743,3488279077,3395642799,4101667470,1202630377,268961816,1874508501,4034427016,1243948399,1546530418,941366308,1470539505,1941222599,2546386513,3421038627,2715671932,3899946140,1042226977,2521517021,1639824860,227249030,260737669,3765465232,2084453954,1907733956,3429263018,2420656344,100860677,4160157185,470683154,3261161891,1781871967,2924959737,1773779408,394692241,2579611992,974986535,664706745,3655459128,3958962195,731420851,571543859,3530123707,2849626480,126783113,865375399,765172662,1008606754,361203602,3387549984,2278477385,2857719295,1344809080,2782912378,59542671,1503764984,160008576,437062935,1707065306,3622233649,2218934982,3496503480,2185314755,697932208,1512910199,504303377,2075177163,2824099068,1841019862,739644986],Nd=[2781242211,2230877308,2582542199,2381740923,234877682,3184946027,2984144751,1418839493,1348481072,50462977,2848876391,2102799147,434634494,1656084439,3863849899,2599188086,1167051466,2636087938,1082771913,2281340285,368048890,3954334041,3381544775,201060592,3963727277,1739838676,4250903202,3930435503,3206782108,4149453988,2531553906,1536934080,3262494647,484572669,2923271059,1783375398,1517041206,1098792767,49674231,1334037708,1550332980,4098991525,886171109,150598129,2481090929,1940642008,1398944049,1059722517,201851908,1385547719,1699095331,1587397571,674240536,2704774806,252314885,3039795866,151914247,908333586,2602270848,1038082786,651029483,1766729511,3447698098,2682942837,454166793,2652734339,1951935532,775166490,758520603,3000790638,4004797018,4217086112,4137964114,1299594043,1639438038,3464344499,2068982057,1054729187,1901997871,2534638724,4121318227,1757008337,0,750906861,1614815264,535035132,3363418545,3988151131,3201591914,1183697867,3647454910,1265776953,3734260298,3566750796,3903871064,1250283471,1807470800,717615087,3847203498,384695291,3313910595,3617213773,1432761139,2484176261,3481945413,283769337,100925954,2180939647,4037038160,1148730428,3123027871,3813386408,4087501137,4267549603,3229630528,2315620239,2906624658,3156319645,1215313976,82966005,3747855548,3245848246,1974459098,1665278241,807407632,451280895,251524083,1841287890,1283575245,337120268,891687699,801369324,3787349855,2721421207,3431482436,959321879,1469301956,4065699751,2197585534,1199193405,2898814052,3887750493,724703513,2514908019,2696962144,2551808385,3516813135,2141445340,1715741218,2119445034,2872807568,2198571144,3398190662,700968686,3547052216,1009259540,2041044702,3803995742,487983883,1991105499,1004265696,1449407026,1316239930,504629770,3683797321,168560134,1816667172,3837287516,1570751170,1857934291,4014189740,2797888098,2822345105,2754712981,936633572,2347923833,852879335,1133234376,1500395319,3084545389,2348912013,1689376213,3533459022,3762923945,3034082412,4205598294,133428468,634383082,2949277029,2398386810,3913789102,403703816,3580869306,2297460856,1867130149,1918643758,607656988,4049053350,3346248884,1368901318,600565992,2090982877,2632479860,557719327,3717614411,3697393085,2249034635,2232388234,2430627952,1115438654,3295786421,2865522278,3633334344,84280067,33027830,303828494,2747425121,1600795957,4188952407,3496589753,2434238086,1486471617,658119965,3106381470,953803233,334231800,3005978776,857870609,3151128937,1890179545,2298973838,2805175444,3056442267,574365214,2450884487,550103529,1233637070,4289353045,2018519080,2057691103,2399374476,4166623649,2148108681,387583245,3664101311,836232934,3330556482,3100665960,3280093505,2955516313,2002398509,287182607,3413881008,4238890068,3597515707,975967766],Pd=[1671808611,2089089148,2006576759,2072901243,4061003762,1807603307,1873927791,3310653893,810573872,16974337,1739181671,729634347,4263110654,3613570519,2883997099,1989864566,3393556426,2191335298,3376449993,2106063485,4195741690,1508618841,1204391495,4027317232,2917941677,3563566036,2734514082,2951366063,2629772188,2767672228,1922491506,3227229120,3082974647,4246528509,2477669779,644500518,911895606,1061256767,4144166391,3427763148,878471220,2784252325,3845444069,4043897329,1905517169,3631459288,827548209,356461077,67897348,3344078279,593839651,3277757891,405286936,2527147926,84871685,2595565466,118033927,305538066,2157648768,3795705826,3945188843,661212711,2999812018,1973414517,152769033,2208177539,745822252,439235610,455947803,1857215598,1525593178,2700827552,1391895634,994932283,3596728278,3016654259,695947817,3812548067,795958831,2224493444,1408607827,3513301457,0,3979133421,543178784,4229948412,2982705585,1542305371,1790891114,3410398667,3201918910,961245753,1256100938,1289001036,1491644504,3477767631,3496721360,4012557807,2867154858,4212583931,1137018435,1305975373,861234739,2241073541,1171229253,4178635257,33948674,2139225727,1357946960,1011120188,2679776671,2833468328,1374921297,2751356323,1086357568,2408187279,2460827538,2646352285,944271416,4110742005,3168756668,3066132406,3665145818,560153121,271589392,4279952895,4077846003,3530407890,3444343245,202643468,322250259,3962553324,1608629855,2543990167,1154254916,389623319,3294073796,2817676711,2122513534,1028094525,1689045092,1575467613,422261273,1939203699,1621147744,2174228865,1339137615,3699352540,577127458,712922154,2427141008,2290289544,1187679302,3995715566,3100863416,339486740,3732514782,1591917662,186455563,3681988059,3762019296,844522546,978220090,169743370,1239126601,101321734,611076132,1558493276,3260915650,3547250131,2901361580,1655096418,2443721105,2510565781,3828863972,2039214713,3878868455,3359869896,928607799,1840765549,2374762893,3580146133,1322425422,2850048425,1823791212,1459268694,4094161908,3928346602,1706019429,2056189050,2934523822,135794696,3134549946,2022240376,628050469,779246638,472135708,2800834470,3032970164,3327236038,3894660072,3715932637,1956440180,522272287,1272813131,3185336765,2340818315,2323976074,1888542832,1044544574,3049550261,1722469478,1222152264,50660867,4127324150,236067854,1638122081,895445557,1475980887,3117443513,2257655686,3243809217,489110045,2662934430,3778599393,4162055160,2561878936,288563729,1773916777,3648039385,2391345038,2493985684,2612407707,505560094,2274497927,3911240169,3460925390,1442818645,678973480,3749357023,2358182796,2717407649,2306869641,219617805,3218761151,3862026214,1120306242,1756942440,1103331905,2578459033,762796589,252780047,2966125488,1425844308,3151392187,372911126],xd=[1667474886,2088535288,2004326894,2071694838,4075949567,1802223062,1869591006,3318043793,808472672,16843522,1734846926,724270422,4278065639,3621216949,2880169549,1987484396,3402253711,2189597983,3385409673,2105378810,4210693615,1499065266,1195886990,4042263547,2913856577,3570689971,2728590687,2947541573,2627518243,2762274643,1920112356,3233831835,3082273397,4261223649,2475929149,640051788,909531756,1061110142,4160160501,3435941763,875846760,2779116625,3857003729,4059105529,1903268834,3638064043,825316194,353713962,67374088,3351728789,589522246,3284360861,404236336,2526454071,84217610,2593830191,117901582,303183396,2155911963,3806477791,3958056653,656894286,2998062463,1970642922,151591698,2206440989,741110872,437923380,454765878,1852748508,1515908788,2694904667,1381168804,993742198,3604373943,3014905469,690584402,3823320797,791638366,2223281939,1398011302,3520161977,0,3991743681,538992704,4244381667,2981218425,1532751286,1785380564,3419096717,3200178535,960056178,1246420628,1280103576,1482221744,3486468741,3503319995,4025428677,2863326543,4227536621,1128514950,1296947098,859002214,2240123921,1162203018,4193849577,33687044,2139062782,1347481760,1010582648,2678045221,2829640523,1364325282,2745433693,1077985408,2408548869,2459086143,2644360225,943212656,4126475505,3166494563,3065430391,3671750063,555836226,269496352,4294908645,4092792573,3537006015,3452783745,202118168,320025894,3974901699,1600119230,2543297077,1145359496,387397934,3301201811,2812801621,2122220284,1027426170,1684319432,1566435258,421079858,1936954854,1616945344,2172753945,1330631070,3705438115,572679748,707427924,2425400123,2290647819,1179044492,4008585671,3099120491,336870440,3739122087,1583276732,185277718,3688593069,3772791771,842159716,976899700,168435220,1229577106,101059084,606366792,1549591736,3267517855,3553849021,2897014595,1650632388,2442242105,2509612081,3840161747,2038008818,3890688725,3368567691,926374254,1835907034,2374863873,3587531953,1313788572,2846482505,1819063512,1448540844,4109633523,3941213647,1701162954,2054852340,2930698567,134748176,3132806511,2021165296,623210314,774795868,471606328,2795958615,3031746419,3334885783,3907527627,3722280097,1953799400,522133822,1263263126,3183336545,2341176845,2324333839,1886425312,1044267644,3048588401,1718004428,1212733584,50529542,4143317495,235803164,1633788866,892690282,1465383342,3115962473,2256965911,3250673817,488449850,2661202215,3789633753,4177007595,2560144171,286339874,1768537042,3654906025,2391705863,2492770099,2610673197,505291324,2273808917,3924369609,3469625735,1431699370,673740880,3755965093,2358021891,2711746649,2307489801,218961690,3217021541,3873845719,1111672452,1751693520,1094828930,2576986153,757954394,252645662,2964376443,1414855848,3149649517,370555436],Od=[1374988112,2118214995,437757123,975658646,1001089995,530400753,2902087851,1273168787,540080725,2910219766,2295101073,4110568485,1340463100,3307916247,641025152,3043140495,3736164937,632953703,1172967064,1576976609,3274667266,2169303058,2370213795,1809054150,59727847,361929877,3211623147,2505202138,3569255213,1484005843,1239443753,2395588676,1975683434,4102977912,2572697195,666464733,3202437046,4035489047,3374361702,2110667444,1675577880,3843699074,2538681184,1649639237,2976151520,3144396420,4269907996,4178062228,1883793496,2403728665,2497604743,1383856311,2876494627,1917518562,3810496343,1716890410,3001755655,800440835,2261089178,3543599269,807962610,599762354,33778362,3977675356,2328828971,2809771154,4077384432,1315562145,1708848333,101039829,3509871135,3299278474,875451293,2733856160,92987698,2767645557,193195065,1080094634,1584504582,3178106961,1042385657,2531067453,3711829422,1306967366,2438237621,1908694277,67556463,1615861247,429456164,3602770327,2302690252,1742315127,2968011453,126454664,3877198648,2043211483,2709260871,2084704233,4169408201,0,159417987,841739592,504459436,1817866830,4245618683,260388950,1034867998,908933415,168810852,1750902305,2606453969,607530554,202008497,2472011535,3035535058,463180190,2160117071,1641816226,1517767529,470948374,3801332234,3231722213,1008918595,303765277,235474187,4069246893,766945465,337553864,1475418501,2943682380,4003061179,2743034109,4144047775,1551037884,1147550661,1543208500,2336434550,3408119516,3069049960,3102011747,3610369226,1113818384,328671808,2227573024,2236228733,3535486456,2935566865,3341394285,496906059,3702665459,226906860,2009195472,733156972,2842737049,294930682,1206477858,2835123396,2700099354,1451044056,573804783,2269728455,3644379585,2362090238,2564033334,2801107407,2776292904,3669462566,1068351396,742039012,1350078989,1784663195,1417561698,4136440770,2430122216,775550814,2193862645,2673705150,1775276924,1876241833,3475313331,3366754619,270040487,3902563182,3678124923,3441850377,1851332852,3969562369,2203032232,3868552805,2868897406,566021896,4011190502,3135740889,1248802510,3936291284,699432150,832877231,708780849,3332740144,899835584,1951317047,4236429990,3767586992,866637845,4043610186,1106041591,2144161806,395441711,1984812685,1139781709,3433712980,3835036895,2664543715,1282050075,3240894392,1181045119,2640243204,25965917,4203181171,4211818798,3009879386,2463879762,3910161971,1842759443,2597806476,933301370,1509430414,3943906441,3467192302,3076639029,3776767469,2051518780,2631065433,1441952575,404016761,1942435775,1408749034,1610459739,3745345300,2017778566,3400528769,3110650942,941896748,3265478751,371049330,3168937228,675039627,4279080257,967311729,135050206,3635733660,1683407248,2076935265,3576870512,1215061108,3501741890],Id=[1347548327,1400783205,3273267108,2520393566,3409685355,4045380933,2880240216,2471224067,1428173050,4138563181,2441661558,636813900,4233094615,3620022987,2149987652,2411029155,1239331162,1730525723,2554718734,3781033664,46346101,310463728,2743944855,3328955385,3875770207,2501218972,3955191162,3667219033,768917123,3545789473,692707433,1150208456,1786102409,2029293177,1805211710,3710368113,3065962831,401639597,1724457132,3028143674,409198410,2196052529,1620529459,1164071807,3769721975,2226875310,486441376,2499348523,1483753576,428819965,2274680428,3075636216,598438867,3799141122,1474502543,711349675,129166120,53458370,2592523643,2782082824,4063242375,2988687269,3120694122,1559041666,730517276,2460449204,4042459122,2706270690,3446004468,3573941694,533804130,2328143614,2637442643,2695033685,839224033,1973745387,957055980,2856345839,106852767,1371368976,4181598602,1033297158,2933734917,1179510461,3046200461,91341917,1862534868,4284502037,605657339,2547432937,3431546947,2003294622,3182487618,2282195339,954669403,3682191598,1201765386,3917234703,3388507166,0,2198438022,1211247597,2887651696,1315723890,4227665663,1443857720,507358933,657861945,1678381017,560487590,3516619604,975451694,2970356327,261314535,3535072918,2652609425,1333838021,2724322336,1767536459,370938394,182621114,3854606378,1128014560,487725847,185469197,2918353863,3106780840,3356761769,2237133081,1286567175,3152976349,4255350624,2683765030,3160175349,3309594171,878443390,1988838185,3704300486,1756818940,1673061617,3403100636,272786309,1075025698,545572369,2105887268,4174560061,296679730,1841768865,1260232239,4091327024,3960309330,3497509347,1814803222,2578018489,4195456072,575138148,3299409036,446754879,3629546796,4011996048,3347532110,3252238545,4270639778,915985419,3483825537,681933534,651868046,2755636671,3828103837,223377554,2607439820,1649704518,3270937875,3901806776,1580087799,4118987695,3198115200,2087309459,2842678573,3016697106,1003007129,2802849917,1860738147,2077965243,164439672,4100872472,32283319,2827177882,1709610350,2125135846,136428751,3874428392,3652904859,3460984630,3572145929,3593056380,2939266226,824852259,818324884,3224740454,930369212,2801566410,2967507152,355706840,1257309336,4148292826,243256656,790073846,2373340630,1296297904,1422699085,3756299780,3818836405,457992840,3099667487,2135319889,77422314,1560382517,1945798516,788204353,1521706781,1385356242,870912086,325965383,2358957921,2050466060,2388260884,2313884476,4006521127,901210569,3990953189,1014646705,1503449823,1062597235,2031621326,3212035895,3931371469,1533017514,350174575,2256028891,2177544179,1052338372,741876788,1606591296,1914052035,213705253,2334669897,1107234197,1899603969,3725069491,2631447780,2422494913,1635502980,1893020342,1950903388,1120974935],Sd=[2807058932,1699970625,2764249623,1586903591,1808481195,1173430173,1487645946,59984867,4199882800,1844882806,1989249228,1277555970,3623636965,3419915562,1149249077,2744104290,1514790577,459744698,244860394,3235995134,1963115311,4027744588,2544078150,4190530515,1608975247,2627016082,2062270317,1507497298,2200818878,567498868,1764313568,3359936201,2305455554,2037970062,1047239e3,1910319033,1337376481,2904027272,2892417312,984907214,1243112415,830661914,861968209,2135253587,2011214180,2927934315,2686254721,731183368,1750626376,4246310725,1820824798,4172763771,3542330227,48394827,2404901663,2871682645,671593195,3254988725,2073724613,145085239,2280796200,2779915199,1790575107,2187128086,472615631,3029510009,4075877127,3802222185,4107101658,3201631749,1646252340,4270507174,1402811438,1436590835,3778151818,3950355702,3963161475,4020912224,2667994737,273792366,2331590177,104699613,95345982,3175501286,2377486676,1560637892,3564045318,369057872,4213447064,3919042237,1137477952,2658625497,1119727848,2340947849,1530455833,4007360968,172466556,266959938,516552836,0,2256734592,3980931627,1890328081,1917742170,4294704398,945164165,3575528878,958871085,3647212047,2787207260,1423022939,775562294,1739656202,3876557655,2530391278,2443058075,3310321856,547512796,1265195639,437656594,3121275539,719700128,3762502690,387781147,218828297,3350065803,2830708150,2848461854,428169201,122466165,3720081049,1627235199,648017665,4122762354,1002783846,2117360635,695634755,3336358691,4234721005,4049844452,3704280881,2232435299,574624663,287343814,612205898,1039717051,840019705,2708326185,793451934,821288114,1391201670,3822090177,376187827,3113855344,1224348052,1679968233,2361698556,1058709744,752375421,2431590963,1321699145,3519142200,2734591178,188127444,2177869557,3727205754,2384911031,3215212461,2648976442,2450346104,3432737375,1180849278,331544205,3102249176,4150144569,2952102595,2159976285,2474404304,766078933,313773861,2570832044,2108100632,1668212892,3145456443,2013908262,418672217,3070356634,2594734927,1852171925,3867060991,3473416636,3907448597,2614737639,919489135,164948639,2094410160,2997825956,590424639,2486224549,1723872674,3157750862,3399941250,3501252752,3625268135,2555048196,3673637356,1343127501,4130281361,3599595085,2957853679,1297403050,81781910,3051593425,2283490410,532201772,1367295589,3926170974,895287692,1953757831,1093597963,492483431,3528626907,1446242576,1192455638,1636604631,209336225,344873464,1015671571,669961897,3375740769,3857572124,2973530695,3747192018,1933530610,3464042516,935293895,3454686199,2858115069,1863638845,3683022916,4085369519,3292445032,875313188,1080017571,3279033885,621591778,1233856572,2504130317,24197544,3017672716,3835484340,3247465558,2220981195,3060847922,1551124588,1463996600],Rd=[4104605777,1097159550,396673818,660510266,2875968315,2638606623,4200115116,3808662347,821712160,1986918061,3430322568,38544885,3856137295,718002117,893681702,1654886325,2975484382,3122358053,3926825029,4274053469,796197571,1290801793,1184342925,3556361835,2405426947,2459735317,1836772287,1381620373,3196267988,1948373848,3764988233,3385345166,3263785589,2390325492,1480485785,3111247143,3780097726,2293045232,548169417,3459953789,3746175075,439452389,1362321559,1400849762,1685577905,1806599355,2174754046,137073913,1214797936,1174215055,3731654548,2079897426,1943217067,1258480242,529487843,1437280870,3945269170,3049390895,3313212038,923313619,679998e3,3215307299,57326082,377642221,3474729866,2041877159,133361907,1776460110,3673476453,96392454,878845905,2801699524,777231668,4082475170,2330014213,4142626212,2213296395,1626319424,1906247262,1846563261,562755902,3708173718,1040559837,3871163981,1418573201,3294430577,114585348,1343618912,2566595609,3186202582,1078185097,3651041127,3896688048,2307622919,425408743,3371096953,2081048481,1108339068,2216610296,0,2156299017,736970802,292596766,1517440620,251657213,2235061775,2933202493,758720310,265905162,1554391400,1532285339,908999204,174567692,1474760595,4002861748,2610011675,3234156416,3693126241,2001430874,303699484,2478443234,2687165888,585122620,454499602,151849742,2345119218,3064510765,514443284,4044981591,1963412655,2581445614,2137062819,19308535,1928707164,1715193156,4219352155,1126790795,600235211,3992742070,3841024952,836553431,1669664834,2535604243,3323011204,1243905413,3141400786,4180808110,698445255,2653899549,2989552604,2253581325,3252932727,3004591147,1891211689,2487810577,3915653703,4237083816,4030667424,2100090966,865136418,1229899655,953270745,3399679628,3557504664,4118925222,2061379749,3079546586,2915017791,983426092,2022837584,1607244650,2118541908,2366882550,3635996816,972512814,3283088770,1568718495,3499326569,3576539503,621982671,2895723464,410887952,2623762152,1002142683,645401037,1494807662,2595684844,1335535747,2507040230,4293295786,3167684641,367585007,3885750714,1865862730,2668221674,2960971305,2763173681,1059270954,2777952454,2724642869,1320957812,2194319100,2429595872,2815956275,77089521,3973773121,3444575871,2448830231,1305906550,4021308739,2857194700,2516901860,3518358430,1787304780,740276417,1699839814,1592394909,2352307457,2272556026,188821243,1729977011,3687994002,274084841,3594982253,3613494426,2701949495,4162096729,322734571,2837966542,1640576439,484830689,1202797690,3537852828,4067639125,349075736,3342319475,4157467219,4255800159,1030690015,1155237496,2951971274,1757691577,607398968,2738905026,499347990,3794078908,1011452712,227885567,2818666809,213114376,3034881240,1455525988,3414450555,850817237,1817998408,3092726480],_d=[0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795],Cd=[0,185469197,370938394,487725847,741876788,657861945,975451694,824852259,1483753576,1400783205,1315723890,1164071807,1950903388,2135319889,1649704518,1767536459,2967507152,3152976349,2801566410,2918353863,2631447780,2547432937,2328143614,2177544179,3901806776,3818836405,4270639778,4118987695,3299409036,3483825537,3535072918,3652904859,2077965243,1893020342,1841768865,1724457132,1474502543,1559041666,1107234197,1257309336,598438867,681933534,901210569,1052338372,261314535,77422314,428819965,310463728,3409685355,3224740454,3710368113,3593056380,3875770207,3960309330,4045380933,4195456072,2471224067,2554718734,2237133081,2388260884,3212035895,3028143674,2842678573,2724322336,4138563181,4255350624,3769721975,3955191162,3667219033,3516619604,3431546947,3347532110,2933734917,2782082824,3099667487,3016697106,2196052529,2313884476,2499348523,2683765030,1179510461,1296297904,1347548327,1533017514,1786102409,1635502980,2087309459,2003294622,507358933,355706840,136428751,53458370,839224033,957055980,605657339,790073846,2373340630,2256028891,2607439820,2422494913,2706270690,2856345839,3075636216,3160175349,3573941694,3725069491,3273267108,3356761769,4181598602,4063242375,4011996048,3828103837,1033297158,915985419,730517276,545572369,296679730,446754879,129166120,213705253,1709610350,1860738147,1945798516,2029293177,1239331162,1120974935,1606591296,1422699085,4148292826,4233094615,3781033664,3931371469,3682191598,3497509347,3446004468,3328955385,2939266226,2755636671,3106780840,2988687269,2198438022,2282195339,2501218972,2652609425,1201765386,1286567175,1371368976,1521706781,1805211710,1620529459,2105887268,1988838185,533804130,350174575,164439672,46346101,870912086,954669403,636813900,788204353,2358957921,2274680428,2592523643,2441661558,2695033685,2880240216,3065962831,3182487618,3572145929,3756299780,3270937875,3388507166,4174560061,4091327024,4006521127,3854606378,1014646705,930369212,711349675,560487590,272786309,457992840,106852767,223377554,1678381017,1862534868,1914052035,2031621326,1211247597,1128014560,1580087799,1428173050,32283319,182621114,401639597,486441376,768917123,651868046,1003007129,818324884,1503449823,1385356242,1333838021,1150208456,1973745387,2125135846,1673061617,1756818940,2970356327,3120694122,2802849917,2887651696,2637442643,2520393566,2334669897,2149987652,3917234703,3799141122,4284502037,4100872472,3309594171,3460984630,3545789473,3629546796,2050466060,1899603969,1814803222,1730525723,1443857720,1560382517,1075025698,1260232239,575138148,692707433,878443390,1062597235,243256656,91341917,409198410,325965383,3403100636,3252238545,3704300486,3620022987,3874428392,3990953189,4042459122,4227665663,2460449204,2578018489,2226875310,2411029155,3198115200,3046200461,2827177882,2743944855],Bd=[0,218828297,437656594,387781147,875313188,958871085,775562294,590424639,1750626376,1699970625,1917742170,2135253587,1551124588,1367295589,1180849278,1265195639,3501252752,3720081049,3399941250,3350065803,3835484340,3919042237,4270507174,4085369519,3102249176,3051593425,2734591178,2952102595,2361698556,2177869557,2530391278,2614737639,3145456443,3060847922,2708326185,2892417312,2404901663,2187128086,2504130317,2555048196,3542330227,3727205754,3375740769,3292445032,3876557655,3926170974,4246310725,4027744588,1808481195,1723872674,1910319033,2094410160,1608975247,1391201670,1173430173,1224348052,59984867,244860394,428169201,344873464,935293895,984907214,766078933,547512796,1844882806,1627235199,2011214180,2062270317,1507497298,1423022939,1137477952,1321699145,95345982,145085239,532201772,313773861,830661914,1015671571,731183368,648017665,3175501286,2957853679,2807058932,2858115069,2305455554,2220981195,2474404304,2658625497,3575528878,3625268135,3473416636,3254988725,3778151818,3963161475,4213447064,4130281361,3599595085,3683022916,3432737375,3247465558,3802222185,4020912224,4172763771,4122762354,3201631749,3017672716,2764249623,2848461854,2331590177,2280796200,2431590963,2648976442,104699613,188127444,472615631,287343814,840019705,1058709744,671593195,621591778,1852171925,1668212892,1953757831,2037970062,1514790577,1463996600,1080017571,1297403050,3673637356,3623636965,3235995134,3454686199,4007360968,3822090177,4107101658,4190530515,2997825956,3215212461,2830708150,2779915199,2256734592,2340947849,2627016082,2443058075,172466556,122466165,273792366,492483431,1047239e3,861968209,612205898,695634755,1646252340,1863638845,2013908262,1963115311,1446242576,1530455833,1277555970,1093597963,1636604631,1820824798,2073724613,1989249228,1436590835,1487645946,1337376481,1119727848,164948639,81781910,331544205,516552836,1039717051,821288114,669961897,719700128,2973530695,3157750862,2871682645,2787207260,2232435299,2283490410,2667994737,2450346104,3647212047,3564045318,3279033885,3464042516,3980931627,3762502690,4150144569,4199882800,3070356634,3121275539,2904027272,2686254721,2200818878,2384911031,2570832044,2486224549,3747192018,3528626907,3310321856,3359936201,3950355702,3867060991,4049844452,4234721005,1739656202,1790575107,2108100632,1890328081,1402811438,1586903591,1233856572,1149249077,266959938,48394827,369057872,418672217,1002783846,919489135,567498868,752375421,209336225,24197544,376187827,459744698,945164165,895287692,574624663,793451934,1679968233,1764313568,2117360635,1933530610,1343127501,1560637892,1243112415,1192455638,3704280881,3519142200,3336358691,3419915562,3907448597,3857572124,4075877127,4294704398,3029510009,3113855344,2927934315,2744104290,2159976285,2377486676,2594734927,2544078150],Fd=[0,151849742,303699484,454499602,607398968,758720310,908999204,1059270954,1214797936,1097159550,1517440620,1400849762,1817998408,1699839814,2118541908,2001430874,2429595872,2581445614,2194319100,2345119218,3034881240,3186202582,2801699524,2951971274,3635996816,3518358430,3399679628,3283088770,4237083816,4118925222,4002861748,3885750714,1002142683,850817237,698445255,548169417,529487843,377642221,227885567,77089521,1943217067,2061379749,1640576439,1757691577,1474760595,1592394909,1174215055,1290801793,2875968315,2724642869,3111247143,2960971305,2405426947,2253581325,2638606623,2487810577,3808662347,3926825029,4044981591,4162096729,3342319475,3459953789,3576539503,3693126241,1986918061,2137062819,1685577905,1836772287,1381620373,1532285339,1078185097,1229899655,1040559837,923313619,740276417,621982671,439452389,322734571,137073913,19308535,3871163981,4021308739,4104605777,4255800159,3263785589,3414450555,3499326569,3651041127,2933202493,2815956275,3167684641,3049390895,2330014213,2213296395,2566595609,2448830231,1305906550,1155237496,1607244650,1455525988,1776460110,1626319424,2079897426,1928707164,96392454,213114376,396673818,514443284,562755902,679998e3,865136418,983426092,3708173718,3557504664,3474729866,3323011204,4180808110,4030667424,3945269170,3794078908,2507040230,2623762152,2272556026,2390325492,2975484382,3092726480,2738905026,2857194700,3973773121,3856137295,4274053469,4157467219,3371096953,3252932727,3673476453,3556361835,2763173681,2915017791,3064510765,3215307299,2156299017,2307622919,2459735317,2610011675,2081048481,1963412655,1846563261,1729977011,1480485785,1362321559,1243905413,1126790795,878845905,1030690015,645401037,796197571,274084841,425408743,38544885,188821243,3613494426,3731654548,3313212038,3430322568,4082475170,4200115116,3780097726,3896688048,2668221674,2516901860,2366882550,2216610296,3141400786,2989552604,2837966542,2687165888,1202797690,1320957812,1437280870,1554391400,1669664834,1787304780,1906247262,2022837584,265905162,114585348,499347990,349075736,736970802,585122620,972512814,821712160,2595684844,2478443234,2293045232,2174754046,3196267988,3079546586,2895723464,2777952454,3537852828,3687994002,3234156416,3385345166,4142626212,4293295786,3841024952,3992742070,174567692,57326082,410887952,292596766,777231668,660510266,1011452712,893681702,1108339068,1258480242,1343618912,1494807662,1715193156,1865862730,1948373848,2100090966,2701949495,2818666809,3004591147,3122358053,2235061775,2352307457,2535604243,2653899549,3915653703,3764988233,4219352155,4067639125,3444575871,3294430577,3746175075,3594982253,836553431,953270745,600235211,718002117,367585007,484830689,133361907,251657213,2041877159,1891211689,1806599355,1654886325,1568718495,1418573201,1335535747,1184342925];function Ud(t){const e=[];for(let r=0;r>2,bd(this,md,"f")[i][t%4]=s[t],bd(this,gd,"f")[e-i][t%4]=s[t];let o,a=0,c=n;for(;c>16&255]<<24^Td[o>>8&255]<<16^Td[255&o]<<8^Td[o>>24&255]^Ed[a]<<24,a+=1,8!=n)for(let t=1;t>8&255]<<8^Td[o>>16&255]<<16^Td[o>>24&255]<<24;for(let t=n/2+1;t>2,i=c%4,bd(this,md,"f")[t][i]=s[l],bd(this,gd,"f")[e-t][i]=s[l++],c++}for(let t=1;t>24&255]^Cd[o>>16&255]^Bd[o>>8&255]^Fd[255&o]}get key(){return bd(this,wd,"f").slice()}encrypt(t){if(16!=t.length)throw new TypeError("invalid plaintext size (must be 16 bytes)");const e=bd(this,md,"f").length-1,r=[0,0,0,0];let n=Ud(t);for(let t=0;t<4;t++)n[t]^=bd(this,md,"f")[0][t];for(let t=1;t>24&255]^Nd[n[(e+1)%4]>>16&255]^Pd[n[(e+2)%4]>>8&255]^xd[255&n[(e+3)%4]]^bd(this,md,"f")[t][e];n=r.slice()}const s=new Uint8Array(16);let i=0;for(let t=0;t<4;t++)i=bd(this,md,"f")[e][t],s[4*t]=255&(Td[n[t]>>24&255]^i>>24),s[4*t+1]=255&(Td[n[(t+1)%4]>>16&255]^i>>16),s[4*t+2]=255&(Td[n[(t+2)%4]>>8&255]^i>>8),s[4*t+3]=255&(Td[255&n[(t+3)%4]]^i);return s}decrypt(t){if(16!=t.length)throw new TypeError("invalid ciphertext size (must be 16 bytes)");const e=bd(this,gd,"f").length-1,r=[0,0,0,0];let n=Ud(t);for(let t=0;t<4;t++)n[t]^=bd(this,gd,"f")[0][t];for(let t=1;t>24&255]^Id[n[(e+3)%4]>>16&255]^Sd[n[(e+2)%4]>>8&255]^Rd[255&n[(e+1)%4]]^bd(this,gd,"f")[t][e];n=r.slice()}const s=new Uint8Array(16);let i=0;for(let t=0;t<4;t++)i=bd(this,gd,"f")[e][t],s[4*t]=255&(kd[n[t]>>24&255]^i>>24),s[4*t+1]=255&(kd[n[(t+3)%4]>>16&255]^i>>16),s[4*t+2]=255&(kd[n[(t+2)%4]>>8&255]^i>>8),s[4*t+3]=255&(kd[255&n[(t+1)%4]]^i);return s}}wd=new WeakMap,gd=new WeakMap,md=new WeakMap;class Dd{constructor(t,e,r){if(r&&!(this instanceof r))throw new Error(`${t} must be instantiated with "new"`);Object.defineProperties(this,{aes:{enumerable:!0,value:new Ld(e)},name:{enumerable:!0,value:t}})}}var Md,jd,Gd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},$d=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Wd extends Dd{constructor(t,e){if(super("ECC",t,Wd),Md.set(this,void 0),jd.set(this,void 0),e){if(e.length%16)throw new TypeError("invalid iv size (must be 16 bytes)");Gd(this,Md,new Uint8Array(e),"f")}else Gd(this,Md,new Uint8Array(16),"f");Gd(this,jd,this.iv,"f")}get iv(){return new Uint8Array($d(this,Md,"f"))}encrypt(t){if(t.length%16)throw new TypeError("invalid plaintext size (must be multiple of 16 bytes)");const e=new Uint8Array(t.length);for(let r=0;rNumber.MAX_SAFE_INTEGER)throw new TypeError("invalid counter initial integer value");for(let e=15;e>=0;--e)Jd(this,Vd,"f")[e]=t%256,t=Math.floor(t/256)}setCounterBytes(t){if(16!==t.length)throw new TypeError("invalid counter initial Uint8Array value length");Jd(this,Vd,"f").set(t)}increment(){for(let t=15;t>=0;t--){if(255!==Jd(this,Vd,"f")[t]){Jd(this,Vd,"f")[t]++;break}Jd(this,Vd,"f")[t]=0}}encrypt(t){var e,r;const n=new Uint8Array(t);for(let t=0;t16)throw new TypeError("PKCS#7 padding byte out of range");const r=t.length-e;for(let n=0;n{setTimeout((()=>{e()}),t)}))}var ip,op=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},ap=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function cp(t){try{if(!t||!Xt(t.privateKey,32))return null;const e=t.privateKey;return cc.computePublicKey(e)!==t.publicKey?null:new cc(e)}catch(t){console.log(t)}return null}function lp(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))}class up extends Yf{constructor(t,e){let r=null,n=null;if("string"==typeof t&&(r=new cc(t)),null==r){const e=function(t){try{if(!t||!t.signingKey)return null;const e=cp(t.signingKey);return null==e||Ef(e.publicKey)!==t.address||t.mnemonic&&hd.fromMnemonic(t.mnemonic).privateKey!==e.privateKey?null:t}catch(t){console.log(t)}return null}(t);e&&(r=e.signingKey,n=e.mnemonic||null)}if(null==r){const e=function(t){try{return null==t||"string"!=typeof t.phrase||"string"!=typeof t.password||null==t.wordlist?null:hd.fromPhrase(t.phrase,t.password,null,t.wordlist)}catch(t){console.log(t)}return null}(t);e&&(r=e.signingKey,n=e.mnemonic||null)}null==r&&(r=cp(t)),null==r&&Lf.throwArgumentError("invalid key","key","[ REDACTED ]"),super(r,e),ip.set(this,void 0),op(this,ip,n,"f")}get mnemonic(){return ap(this,ip,"f")}connect(t){return new up(this,t)}async encrypt(t,e,r){throw new Error("TODO")}encryptSync(t,e){throw new Error("TODO")}static async fromEncryptedJson(t,e,r){let n=null;if(ep(t))n=await async function(t,e,r){const n=JSON.parse(t),s=Yd(e),i=np(n);if("pbkdf2"===i.name){r&&(r(0),await sp(0));const{salt:t,count:e,dkLen:o,algorithm:a}=i,c=xn(s,t,e,o,a);return r&&(r(1),await sp(0)),rp(n,c)}if("scrypt"===i.name){const{salt:t,N:e,r:o,p:a,dkLen:c}=i;return rp(n,await Wn(s,t,e,o,a,c,r))}throw new Error("unreachable")}(t,e,r);else{if(!Qd(t))return Lf.throwArgumentError("invalid JSON wallet","json","[ REDACTED ]");r&&(r(0),await lp(0)),n=tp(t,e),r&&(r(1),await lp(0))}const s=new up(n.privateKey);return s.address!==n.address&&Lf.throwArgumentError("address/privateKey mismatch","json","[ REDACTED ]"),s}static fromEncryptedJsonSync(t,e){let r=null;if(ep(t))r=function(t,e){const r=JSON.parse(t),n=Yd(e),s=np(r);if("pbkdf2"===s.name){const{salt:t,count:e,dkLen:i,algorithm:o}=s;return rp(r,xn(n,t,e,i,o))}if("scrypt"===s.name){const{salt:t,N:e,r:i,p:o,dkLen:a}=s;return rp(r,zn(n,t,e,i,o,a))}throw new Error("unreachable")}(t,e);else{if(!Qd(t))return Lf.throwArgumentError("invalid JSON wallet","json","[ REDACTED ]");r=tp(t,e)}const n=new up(r.privateKey);return n.address!==r.address&&Lf.throwArgumentError("address/privateKey mismatch","json","[ REDACTED ]"),n}static createRandom(t,e,r){return new up(Kf.fromEntropy(Rn(16),e,r),t)}static fromMnemonic(t,e){return new up(t,e)}static fromPhrase(t,e,r="",n){return new up(Kf.fromPhrase(t,r,n),e)}}ip=new WeakMap;const hp="ethers@6.0.0-beta.1";var fp=Object.freeze({__proto__:null,Interface:mo,getAddress:as,getIcapAddress:cs,getCreateAddress:ys,getCreate2Address:bs,isAddressable:vs,isAddress:Es,resolveAddress:Ts,arrayify:ee,decodeBase64:ne,encodeBase64:se,isHexString:Xt,isBytesLike:Yt,concat:ae,dataLength:ce,dataSlice:le,stripZerosLeft:ue,hexlify:ie,quantity:oe,zeroPadLeft:fe,zeroPadRight:de,BaseContract:bf,Contract:vf,ContractEventPayload:Zh,ContractTransactionReceipt:Xh,ContractTransactionResponse:Yh,EventLog:qh,computeHmac:Ur,keccak256:nn,ripemd160:kn,sha256:Yn,sha512:Zn,pbkdf2:xn,scrypt:Wn,scryptSync:zn,randomBytes:Rn,lock:Qn,id:Ni,isValidName:Ii,namehash:Si,dnsEncode:Ri,messagePrefix:_i,hashMessage:Ci,TypedDataEncoder:to,FixedFormat:Mt,FixedNumber:jt,formatFixed:Lt,parseFixed:Dt,fromTwos:At,toTwos:Nt,mask:Pt,toArray:Et,toBigInt:yt,toHex:vt,toNumber:bt,decodeBase58:qt,encodeBase58:Jt,defineProperties:r,resolveProperties:t,getStore:a,setStore:c,AbstractProvider:Kl,UnmanagedSubscriber:Wl,AbstractSigner:lu,VoidSigner:uu,WrappedSigner:hu,showThrottleMessage:du,EnsResolver:Zo,Formatter:Wc,NetworkPlugin:zc,GasCostPlugin:Hc,EnsPlugin:Vc,MaxPriorityFeePlugin:Kc,Network:Wh,Block:Ic,FeeData:Oc,Log:Sc,TransactionReceipt:Rc,TransactionResponse:_c,dummyProvider:Uc,FallbackProvider:bh,JsonRpcProvider:Mu,JsonRpcSigner:Lu,StaticJsonRpcProvider:ju,AlchemyProvider:Vu,AnkrProvider:zu,CloudflareProvider:Ku,EtherscanProvider:Xu,InfuraProvider:Zu,PocketProvider:eh,IpcSocketProvider:undefined,SocketProvider:Dh,WebSocketProvider:$h,encodeRlp:fs,decodeRlp:ms,Signature:da,SigningKey:cc,formatBytes32String:si,parseBytes32String:ii,nameprep:gi,_toEscapedUtf8String:ti,toUtf8Bytes:Zs,toUtf8CodePoints:ni,toUtf8String:ri,get UnicodeNormalizationForm(){return Ks},Utf8ErrorFuncs:Xs,get Utf8ErrorReason(){return Js},Transaction:Ec,computeAddress:Ef,defaultPath:nd,getAccountPath:pd,HDNodeWallet:hd,HDNodeVoidWallet:fd,HDNodeWalletManager:dd,Mnemonic:Kf,Wallet:up,fetchData:Co,FetchRequest:Io,FetchResponse:ko,Wordlist:xf,WordlistOwl:Ff,WordlistOwlA:$f,wordlists:Df,version:"ethers@6.0.0-beta.1"});export{Kl as AbstractProvider,lu as AbstractSigner,Vu as AlchemyProvider,zu as AnkrProvider,bf as BaseContract,Ic as Block,Ku as CloudflareProvider,vf as Contract,Zh as ContractEventPayload,Xh as ContractTransactionReceipt,Yh as ContractTransactionResponse,Vc as EnsPlugin,Zo as EnsResolver,Xu as EtherscanProvider,qh as EventLog,bh as FallbackProvider,Oc as FeeData,Io as FetchRequest,ko as FetchResponse,Mt as FixedFormat,jt as FixedNumber,Wc as Formatter,Hc as GasCostPlugin,fd as HDNodeVoidWallet,hd as HDNodeWallet,dd as HDNodeWalletManager,Zu as InfuraProvider,mo as Interface,zh as IpcSocketProvider,Mu as JsonRpcProvider,Lu as JsonRpcSigner,Sc as Log,Kc as MaxPriorityFeePlugin,Kf as Mnemonic,Wh as Network,zc as NetworkPlugin,eh as PocketProvider,da as Signature,cc as SigningKey,Dh as SocketProvider,ju as StaticJsonRpcProvider,Ec as Transaction,Rc as TransactionReceipt,_c as TransactionResponse,to as TypedDataEncoder,Ks as UnicodeNormalizationForm,Wl as UnmanagedSubscriber,Xs as Utf8ErrorFuncs,Js as Utf8ErrorReason,uu as VoidSigner,up as Wallet,$h as WebSocketProvider,xf as Wordlist,Ff as WordlistOwl,$f as WordlistOwlA,hu as WrappedSigner,ti as _toEscapedUtf8String,ee as arrayify,Ef as computeAddress,Ur as computeHmac,ae as concat,ce as dataLength,le as dataSlice,qt as decodeBase58,ne as decodeBase64,ms as decodeRlp,nd as defaultPath,r as defineProperties,Ri as dnsEncode,Uc as dummyProvider,Jt as encodeBase58,se as encodeBase64,fs as encodeRlp,fp as ethers,Co as fetchData,si as formatBytes32String,Lt as formatFixed,At as fromTwos,pd as getAccountPath,as as getAddress,bs as getCreate2Address,ys as getCreateAddress,cs as getIcapAddress,a as getStore,Ci as hashMessage,ie as hexlify,Ni as id,Es as isAddress,vs as isAddressable,Yt as isBytesLike,Xt as isHexString,Ii as isValidName,nn as keccak256,Qn as lock,Pt as mask,_i as messagePrefix,Si as namehash,gi as nameprep,ii as parseBytes32String,Dt as parseFixed,xn as pbkdf2,oe as quantity,Rn as randomBytes,Ts as resolveAddress,t as resolveProperties,kn as ripemd160,Wn as scrypt,zn as scryptSync,c as setStore,Yn as sha256,Zn as sha512,du as showThrottleMessage,ue as stripZerosLeft,Et as toArray,yt as toBigInt,vt as toHex,bt as toNumber,Nt as toTwos,Zs as toUtf8Bytes,ni as toUtf8CodePoints,ri as toUtf8String,hp as version,Df as wordlists,fe as zeroPadLeft,de as zeroPadRight}; +//# sourceMappingURL=ethers.min.js.map diff --git a/packages/ethers/dist/ethers.min.js.map b/packages/ethers/dist/ethers.min.js.map new file mode 100644 index 000000000..4623aaf9a --- /dev/null +++ b/packages/ethers/dist/ethers.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ethers.min.js","sources":["../../properties/lib/properties.js","../../properties/lib/events.js","../../properties/lib/storage.js","../../logger/lib/errors.js","../../logger/lib/logger.js","../../logger/lib/_version.js","../../abi/lib/_version.js","../../abi/lib/logger.js","../../abi/lib/fragments.js","../../math/lib/_version.js","../../math/lib/logger.js","../../math/lib/convert.js","../../math/lib/maths.js","../../math/lib/fixednumber.js","../../math/lib/base58.js","../../bytes/lib/check.js","../../bytes/lib/_version.js","../../bytes/lib/logger.js","../../bytes/lib/array.js","../../bytes/lib/base64.js","../../bytes/lib/hex.js","../../bytes/lib/data.js","../../bytes/lib/pad.js","../../abi/lib/coders/abstract-coder.js","../../../node_modules/@noble/hashes/esm/utils.js","../../../node_modules/@noble/hashes/esm/hmac.js","../../../node_modules/@noble/hashes/esm/pbkdf2.js","../../../node_modules/@noble/hashes/esm/_sha2.js","../../../node_modules/@noble/hashes/esm/sha256.js","../../../node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/@noble/hashes/esm/sha512.js","../../crypto/lib/_version.js","../../crypto/lib/logger.js","../../crypto/lib/crypto-browser.js","../../crypto/lib/hmac.js","../../../node_modules/@noble/hashes/esm/sha3.js","../../crypto/lib/keccak.js","../../../node_modules/@noble/hashes/esm/ripemd160.js","../../crypto/lib/ripemd160.js","../../crypto/lib/pbkdf2.js","../../crypto/lib/random.js","../../../node_modules/@noble/hashes/esm/scrypt.js","../../crypto/lib/scrypt.js","../../crypto/lib/sha2.js","../../crypto/lib/index.js","../../address/lib/_version.js","../../address/lib/logger.js","../../address/lib/address.js","../../rlp/lib/_version.js","../../rlp/lib/logger.js","../../rlp/lib/encode.js","../../rlp/lib/decode.js","../../address/lib/contract-address.js","../../address/lib/checks.js","../../abi/lib/typed.js","../../abi/lib/coders/address.js","../../abi/lib/coders/anonymous.js","../../abi/lib/coders/array.js","../../abi/lib/coders/boolean.js","../../abi/lib/coders/bytes.js","../../abi/lib/coders/fixed-bytes.js","../../abi/lib/coders/null.js","../../abi/lib/coders/number.js","../../strings/lib/_version.js","../../strings/lib/logger.js","../../strings/lib/utf8.js","../../strings/lib/bytes32.js","../../strings/lib/idna.js","../../abi/lib/coders/string.js","../../abi/lib/coders/tuple.js","../../abi/lib/abi-coder.js","../../hash/lib/id.js","../../hash/lib/_version.js","../../hash/lib/logger.js","../../hash/lib/namehash.js","../../hash/lib/message.js","../../hash/lib/typed-data.js","../../abi/lib/interface.js","../../web/lib/_version.js","../../web/lib/logger.js","../../web/lib/response.js","../../web/lib/get-url-browser.js","../../web/lib/request.js","../../web/lib/fetch-data.js","../../providers/lib/_version.js","../../providers/lib/logger.js","../../providers/lib/ens-resolver.js","../../signing-key/lib/_version.js","../../signing-key/lib/logger.js","../../signing-key/lib/signature.js","../../../node_modules/@noble/secp256k1/lib/esm/index.js","../../signing-key/lib/signing-key.js","../../transactions/lib/accesslist.js","../../transactions/lib/_version.js","../../transactions/lib/logger.js","../../transactions/lib/transaction.js","../../providers/lib/provider.js","../../providers/lib/formatter.js","../../providers/lib/plugins-network.js","../../providers/lib/network.js","../../providers/lib/subscriber-polling.js","../../providers/lib/abstract-provider.js","../../providers/lib/abstract-signer.js","../../providers/lib/community.js","../../providers/lib/subscriber-filterid.js","../../providers/lib/provider-jsonrpc.js","../../providers/lib/provider-ankr.js","../../providers/lib/provider-alchemy.js","../../providers/lib/provider-cloudflare.js","../../providers/lib/provider-etherscan.js","../../providers/lib/provider-infura.js","../../providers/lib/provider-pocket.js","../../providers/lib/provider-fallback.js","../../providers/lib/shuffle.js","../../providers/lib/ws-browser.js","../../providers/lib/provider-socket.js","../../providers/lib/provider-websocket.js","../../providers/lib/common-networks.js","../../providers/lib/provider-ipcsocket-browser.js","../../contract/lib/wrappers.js","../../contract/lib/_version.js","../../contract/lib/logger.js","../../contract/lib/contract.js","../../wallet/lib/address.js","../../wordlists/lib/decode-owl.js","../../wordlists/lib/_version.js","../../wordlists/lib/logger.js","../../wordlists/lib/wordlist.js","../../wordlists/lib/wordlist-owl.js","../../wordlists/lib/lang-en.js","../../wallet/lib/logger.js","../../wallet/lib/_version.js","../../wordlists/lib/wordlists-en.js","../../wordlists/lib/wordlist-owla.js","../../wordlists/lib/decode-owla.js","../../wordlists/lib/bit-reader.js","../../wallet/lib/mnemonic.js","../../wallet/lib/base-wallet.js","../../wallet/lib/hdwallet.js","../../../node_modules/aes-js/lib/aes.js","../../../node_modules/aes-js/lib/mode.js","../../../node_modules/aes-js/lib/mode-cbc.js","../../../node_modules/aes-js/lib/mode-cfb.js","../../../node_modules/aes-js/lib/mode-ctr.js","../../wallet/lib/utils.js","../../wallet/lib/json-crowdsale.js","../../../node_modules/aes-js/lib/padding.js","../../../node_modules/aes-js/lib/mode-ofb.js","../../wallet/lib/json-keystore.js","../../wallet/lib/wallet.js","../lib/_version.js"],"sourcesContent":["//import type { BigNumber, BigNumberish } from \"./big-number\";\n//import type { Bytes, BytesLike } from \"./bytes\";\n//import type { Signature, SignatureLike } from \"./signature\";\n/*\nexport type Loose = T extends BigNumber ? BigNumberish:\n T extends number ? BigNumberish:\n T extends Bytes ? BytesLike:\n T extends Signature ? SignatureLike:\n T;\nexport type LooseObject = { [P in keyof T]?: Loose; };\n*/\n//export type Deferrable = T | Promise;\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\n/*\nexport type Frozen = Readonly<{\n [ P in keyof T ]: T[P] extends Freezable ? Frozen: T[P];\n}>;\n\nexport interface Freezable {\n clone(): T;\n freeze(): Frozen;\n isFrozen(): boolean;\n}\n*/\n/*\nconst _data: WeakMap = new WeakMap();\n\nexport class Data implements Freezable {\n #props: {\n data: Uint8Array\n };\n\n [ index: number ]: number;\n\n constructor(lengthOrData: number | Uint8Array) {\n if (typeof(lengthOrData) === \"number\") {\n _data[this] = new Uint8Array(lengthOrData);\n } else {\n _data[this] = lengthOrData;\n }\n\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return Reflect.get(target, prop, receiver); }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n throw new Error(\"\");\n }\n return data[index];\n },\n\n set: (target, prop, value, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return false; }\n\n if (value < 0 || value > 255 || value % 1) { return false; }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n return false;\n }\n\n data[index] = value;\n\n return true;\n },\n });\n }\n\n toString(): string {\n return this.slice().toString();\n }\n\n slice(): Uint8Array {\n return _data.get(this).slice();\n }\n\n clone(): Data {\n return new Data(this.slice());\n }\n\n freeze(): Frozen {\n //Object.freeze(this.#props);\n return this;\n }\n\n isFrozen(): boolean {\n return Object.isFrozen(this.#props);\n }\n}\nconst d = new Data(4);\nconsole.log(d.toString());\nd[0] = 45;\nconsole.log(d.toString());\n*/\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\nexport function defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n/*\nexport type IsCancelled = () => Promise;\n\nexport function createPromise(resolve: (isCancelled: IsCancelled, (result: T) => void) => void, reject: (error: Error) => void, isCancelled: IsCancelled): CancellablePromise {\n let cancelled = false;\n\n const promise = new Promise((resolve, reject) => {\n \n });\n\n (>promise).cancel = function() {\n cancelled = true;\n };\n\n return (>promise);\n}\n*/\n/*\nexport class A implements Freezable {\n foo: number;\n constructor(foo: number) {\n this.foo = foo;\n }\n freeze(): Frozen {\n Object.freeze(this);\n return this;\n }\n clone(): A {\n return new A(this.foo);\n }\n}\n\nexport class B implements Freezable {\n a: A;\n constructor(a: A) {\n this.a = a;\n }\n freeze(): Frozen {\n this.a.freeze();\n Object.freeze(this);\n return this;\n }\n clone(): B {\n return new B(this.a);\n }\n}\n\nexport function test() {\n const a = new A(123);\n const b = new B(a);\n b.a = new A(234);\n const b2 = b.freeze();\n b2.a.foo = 123; // = a;\n}\n*/\nfunction checkType(value, type) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n throw new Error(\"invalid value for type\");\n}\nexport function defineProperties(target, values, types, defaults) {\n for (let key in values) {\n let value = values[key];\n const fallback = (defaults ? defaults[key] : undefined);\n if (fallback !== undefined) {\n value = fallback;\n }\n else {\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type);\n }\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","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 _EventPayload_listener;\nimport { defineProperties } from \"./properties.js\";\nexport class EventPayload {\n constructor(emitter, listener, filter) {\n _EventPayload_listener.set(this, void 0);\n __classPrivateFieldSet(this, _EventPayload_listener, listener, \"f\");\n defineProperties(this, { emitter, filter });\n }\n async removeListener() {\n if (__classPrivateFieldGet(this, _EventPayload_listener, \"f\") == null) {\n return;\n }\n await this.emitter.off(this.filter, __classPrivateFieldGet(this, _EventPayload_listener, \"f\"));\n }\n}\n_EventPayload_listener = new WeakMap();\n//# sourceMappingURL=events.js.map","export function getStore(store, key) {\n return store[key];\n}\nexport function setStore(store, key, value) {\n if (Object.isFrozen(store)) {\n throw new Error(\"frozen object is immuatable; cannot set \" + key);\n }\n store[key] = value;\n}\n//# sourceMappingURL=storage.js.map","//export type TransactionReceipt {\n//}\n/**\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, errors.CALL_EXCEPTION)) {\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/*\nexport function isContractCallException(error: any): error is ContractCallExceptionError {\n return isError(error, \"CALL_EXCEPTION\") && (error).method;\n}\n*/\n//# sourceMappingURL=errors.js.map","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 _Logger_instances, _Logger_assertIntRange, _Logger_getBytes, _Logger_log;\nimport { version } from \"./_version.js\";\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\n;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nlet _globalLogger = null;\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\nfunction defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true, writable: false, value,\n });\n}\n/*\nenum Censor {\n OFF = 0,\n ON = 1,\n PERMANENT = 2\n};\nlet _censor = Censor.OFF;\n*/\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n// The type of error to use for various error codes\nconst ErrorConstructors = {};\nErrorConstructors.INVALID_ARGUMENT = TypeError;\nErrorConstructors.NUMERIC_FAULT = RangeError;\nErrorConstructors.BUFFER_OVERRUN = RangeError;\nexport class Logger {\n constructor(version) {\n _Logger_instances.add(this);\n defineReadOnly(this, \"version\", version || \"_\");\n }\n makeError(message, code, info) {\n // Errors are being censored\n //if (_censor === Censor.ON || _censor === Censor.PERMANENT) {\n // return this.makeError(\"censored error\", code, { });\n //}\n {\n const details = [];\n if (info) {\n for (const key in info) {\n const value = (info[key]);\n try {\n details.push(key + \"=\" + JSON.stringify(value));\n }\n catch (error) {\n details.push(key + \"=[could not serialize object]\");\n }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${this.version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n const create = ErrorConstructors[code] || Error;\n const error = (new create(message));\n defineReadOnly(error, \"code\", code);\n if (info) {\n for (const key in info) {\n defineReadOnly(error, key, (info[key]));\n }\n }\n return error;\n }\n throwError(message, code, info) {\n throw this.makeError(message, code, info);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, \"INVALID_ARGUMENT\", {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, info) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code || \"UNKNOWN_ERROR\", info);\n }\n assertArgument(condition, message, name, value) {\n return this.assert(condition, message, \"INVALID_ARGUMENT\", {\n argument: name,\n value\n });\n }\n assertIntegerArgument(name, value, lower, upper) {\n let message = null;\n if (typeof (value) !== \"number\") {\n message = \"expected a number\";\n }\n else if (!Number.isInteger(value)) {\n message = \"invalid integer\";\n }\n else if ((lower != null && value < lower) || (upper != null && value > upper)) {\n message = \"value is out of range\";\n }\n if (message) {\n this.throwArgumentError(message, name, value);\n }\n }\n assertSafeUint53(value, message) {\n this.assertArgument((typeof (value) === \"number\"), \"invalid number\", \"value\", value);\n if (message == null) {\n message = \"value not safe\";\n }\n const operation = \"assertSafeInteger\";\n this.assert((value >= 0 && value < 0x1fffffffffffff), message, \"NUMERIC_FAULT\", {\n operation, fault: \"out-of-safe-range\", value\n });\n this.assert((value % 1) === 0, message, \"NUMERIC_FAULT\", {\n operation, fault: \"non-integer\", value\n });\n }\n assertNormalize(form) {\n if (_normalizeForms.indexOf(form) === -1) {\n this.throwError(\"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n }\n }\n assertPrivate(givenGuard, guard, className = \"\") {\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n this.throwError(`private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n }\n assertArgumentCount(count, expectedCount, message = \"\") {\n if (message) {\n message = \": \" + message;\n }\n this.assert((count >= expectedCount), \"missing arguemnt\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n this.assert((count >= expectedCount), \"too many arguemnts\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n }\n assertInt53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", -maxValue);\n }\n assertUint53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", 0);\n }\n assertInteger(value, operation = \"unknown\", min = 0, max = maxValue) {\n //this.#assertIntRange(\"Int53\", value, operation || \"unknown\", 0);\n }\n getBytes(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, false);\n }\n getBytesCopy(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, true);\n }\n getNumber(value, name) {\n switch (typeof (value)) {\n case \"bigint\":\n if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return Number(value);\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return value;\n case \"string\":\n try {\n return this.getNumber(BigInt(value), name);\n }\n catch (e) {\n this.throwArgumentError(`invalid numeric string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid numeric value\", name || \"value\", value);\n }\n getBigInt(value, name) {\n switch (typeof (value)) {\n case \"bigint\": return value;\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return BigInt(value);\n case \"string\":\n try {\n return BigInt(value);\n }\n catch (e) {\n this.throwArgumentError(`invalid BigNumberish string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid BigNumberish value\", name || \"value\", value);\n }\n debug(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.DEBUG, args);\n }\n info(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.INFO, args);\n }\n warn(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.WARNING, args);\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n}\n_Logger_instances = new WeakSet(), _Logger_assertIntRange = function _Logger_assertIntRange(name, value, operation, minValue) {\n if (typeof (value) !== \"number\" || isNaN(value)) {\n this.throwArgumentError(`invalid ${name}`, \"INVALID_ARGUMENT\", {\n name: \"value\", value\n });\n }\n let message = `invalid ${name} value`;\n let fault = null;\n if (isNaN(value)) {\n fault = \"not-a-number\";\n }\n else if (value < minValue || value > maxValue) {\n message = `unsafe ${name} value`;\n fault = \"overflow\";\n }\n else if (Math.floor(value) !== value) {\n fault = \"underflow\";\n }\n if (fault) {\n this.throwError(message, \"NUMERIC_FAULT\", {\n operation, fault, value\n });\n }\n}, _Logger_getBytes = function _Logger_getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n return this.throwArgumentError(\"invalid BytesLike value\", name || \"value\", value);\n}, _Logger_log = function _Logger_log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n};\n//static readonly Errors = ErrorCode;\nLogger.LogLevels = LogLevel;\n//const l = new Logger();\n//l.makeError(\"foo\", Logger.Errors.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", value: 3 });\n//l.makeError(\"foo\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { transaction: null });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\" });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", gii: \"5\" });\n//console.log(LogLevel);\n//# sourceMappingURL=logger.js.map","export const version = \"@ethersproject/logger@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","export const version = \"@ethersproject/abi@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _TokenString_instances, _TokenString_offset, _TokenString_tokens, _TokenString_subTokenString, _ParamType_instances, _ParamType_walkAsync;\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\n;\nexport var FormatType;\n(function (FormatType) {\n // Bare formatting, as is needed for computing a sighash of an event or function\n FormatType[\"sighash\"] = \"sighash\";\n // Human-Readable with Minimal spacing and without names (compact human-readable)\n FormatType[\"minimal\"] = \"minimal\";\n // Human-Readable with nice spacing, including all names\n FormatType[\"full\"] = \"full\";\n // JSON-format a la Solidity\n FormatType[\"json\"] = \"json\";\n})(FormatType || (FormatType = {}));\n;\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items) {\n const result = new Set();\n items.forEach((k) => result.add(k));\n return Object.freeze(result);\n}\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\nconst _kwTypes = \"constructor error event function struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\nconst _kwOther = \"tuple returns\";\n// All Keywords\nconst _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n// Single character tokens\nconst SimpleTokens = {\n \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n \",\": \"COMMA\", \"@\": \"AT\"\n};\n// Parser regexes to consume the next token\nconst regexWhitespace = new RegExp(\"^(\\\\s*)\");\nconst regexNumber = new RegExp(\"^([0-9]+)\");\nconst regexIdentifier = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\nconst regexType = new RegExp(\"^(address|bool|bytes(0-9*)|string|u?int([0-9]*))\");\nexport class TokenString {\n constructor(tokens) {\n _TokenString_instances.add(this);\n _TokenString_offset.set(this, void 0);\n _TokenString_tokens.set(this, void 0);\n __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\");\n __classPrivateFieldSet(this, _TokenString_tokens, tokens.slice(), \"f\");\n }\n get offset() { return __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n get length() { return __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length - __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n clone() { return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\")); }\n reset() { __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\"); }\n // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n popKeyword(allowed) {\n const top = this.peek();\n if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) {\n throw new Error(`expected keyword ${top.text}`);\n }\n return this.pop().text;\n }\n // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n popType(type) {\n if (this.peek().type !== type) {\n throw new Error(`expected ${type}; got ${JSON.stringify(this.peek())}`);\n }\n return this.pop().text;\n }\n // Pops and returns a \"(\" TOKENS \")\"\n popParen() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = __classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, top.match + 1);\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n popParams() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = [];\n while (__classPrivateFieldGet(this, _TokenString_offset, \"f\") < top.match - 1) {\n const link = this.peek().linkNext;\n result.push(__classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, link));\n __classPrivateFieldSet(this, _TokenString_offset, link, \"f\");\n }\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Returns the top Token, throwing if out of tokens\n peek() {\n if (__classPrivateFieldGet(this, _TokenString_offset, \"f\") >= __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length) {\n throw new Error(\"out-of-bounds\");\n }\n return __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[__classPrivateFieldGet(this, _TokenString_offset, \"f\")];\n }\n // Returns the next value, if it is a keyword in `allowed`\n peekKeyword(allowed) {\n const top = this.peekType(\"KEYWORD\");\n return (top != null && allowed.has(top)) ? top : null;\n }\n // Returns the value of the next token if it is `type`\n peekType(type) {\n if (this.length === 0) {\n return null;\n }\n const top = this.peek();\n return (top.type === type) ? top.text : null;\n }\n // Returns the next token; throws if out of tokens\n pop() {\n var _a;\n const result = this.peek();\n __classPrivateFieldSet(this, _TokenString_offset, (_a = __classPrivateFieldGet(this, _TokenString_offset, \"f\"), _a++, _a), \"f\");\n return result;\n }\n toString() {\n const tokens = [];\n for (let i = __classPrivateFieldGet(this, _TokenString_offset, \"f\"); i < __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length; i++) {\n const token = __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[i];\n tokens.push(`${token.type}:${token.text}`);\n }\n return ``;\n }\n}\n_TokenString_offset = new WeakMap(), _TokenString_tokens = new WeakMap(), _TokenString_instances = new WeakSet(), _TokenString_subTokenString = function _TokenString_subTokenString(from = 0, to = 0) {\n return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\").slice(from, to).map((t) => {\n return Object.freeze(Object.assign({}, t, {\n match: (t.match - from),\n linkBack: (t.linkBack - from),\n linkNext: (t.linkNext - from),\n }));\n return t;\n }));\n};\nexport function lex(text) {\n const tokens = [];\n const throwError = (message) => {\n const token = (offset < text.length) ? JSON.stringify(text[offset]) : \"$EOI\";\n throw new Error(`invalid token ${token} at ${offset}: ${message}`);\n };\n let brackets = [];\n let commas = [];\n let offset = 0;\n while (offset < text.length) {\n // Strip off any leading whitespace\n let cur = text.substring(offset);\n let match = cur.match(regexWhitespace);\n if (match) {\n offset += match[1].length;\n cur = text.substring(offset);\n }\n const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n tokens.push(token);\n let type = (SimpleTokens[cur[0]] || \"\");\n if (type) {\n token.type = type;\n token.text = cur[0];\n offset++;\n if (type === \"OPEN_PAREN\") {\n brackets.push(tokens.length - 1);\n commas.push(tokens.length - 1);\n }\n else if (type == \"CLOSE_PAREN\") {\n if (brackets.length === 0) {\n throwError(\"no matching open bracket\");\n }\n token.match = brackets.pop();\n (tokens[token.match]).match = tokens.length - 1;\n token.depth--;\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n }\n else if (type === \"COMMA\") {\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n commas.push(tokens.length - 1);\n }\n else if (type === \"OPEN_BRACKET\") {\n token.type = \"BRACKET\";\n }\n else if (type === \"CLOSE_BRACKET\") {\n // Remove the CLOSE_BRACKET\n let suffix = tokens.pop().text;\n if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n const value = tokens.pop().text;\n suffix = value + suffix;\n (tokens[tokens.length - 1]).value = logger.getNumber(value);\n }\n if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n throw new Error(\"missing opening bracket\");\n }\n (tokens[tokens.length - 1]).text += suffix;\n }\n continue;\n }\n match = cur.match(regexIdentifier);\n if (match) {\n token.text = match[1];\n offset += token.text.length;\n if (Keywords.has(token.text)) {\n token.type = \"KEYWORD\";\n continue;\n }\n if (token.text.match(regexType)) {\n token.type = \"TYPE\";\n continue;\n }\n token.type = \"ID\";\n continue;\n }\n match = cur.match(regexNumber);\n if (match) {\n token.text = match[1];\n token.type = \"NUMBER\";\n offset += token.text.length;\n continue;\n }\n throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`);\n }\n return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set, allowed) {\n let included = [];\n for (const key in allowed.keys()) {\n if (set.has(key)) {\n included.push(key);\n }\n }\n if (included.length > 1) {\n throw new Error(`conflicting types: ${included.join(\", \")}`);\n }\n}\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n// ...the name with an optional type, returning the name\nfunction consumeName(type, tokens) {\n if (tokens.peekKeyword(KwTypes)) {\n const keyword = tokens.pop().text;\n if (keyword !== type) {\n throw new Error(`expected ${type}, got ${keyword}`);\n }\n }\n return tokens.popType(\"ID\");\n}\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens, allowed) {\n const keywords = new Set();\n while (true) {\n const keyword = tokens.peekType(\"KEYWORD\");\n if (keyword == null || (allowed && !allowed.has(keyword))) {\n break;\n }\n tokens.pop();\n if (keywords.has(keyword)) {\n throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`);\n }\n keywords.add(keyword);\n }\n return Object.freeze(keywords);\n}\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens) {\n let modifiers = consumeKeywords(tokens, KwVisib);\n // Detect conflicting modifiers\n allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n // Process mutability states\n if (modifiers.has(\"view\")) {\n return \"view\";\n }\n if (modifiers.has(\"pure\")) {\n return \"pure\";\n }\n if (modifiers.has(\"payable\")) {\n return \"payable\";\n }\n if (modifiers.has(\"nonpayable\")) {\n return \"nonpayable\";\n }\n // Process legacy `constant` last\n if (modifiers.has(\"constant\")) {\n return \"view\";\n }\n return \"nonpayable\";\n}\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens, allowIndexed) {\n return tokens.popParams().map((t) => ParamType.fromTokens(t, allowIndexed));\n}\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens) {\n if (tokens.peekType(\"AT\")) {\n tokens.pop();\n if (tokens.peekType(\"NUMBER\")) {\n return logger.getBigInt(tokens.pop().text);\n }\n throw new Error(\"invalid gas\");\n }\n return null;\n}\nfunction consumeEoi(tokens) {\n if (tokens.length) {\n throw new Error(`unexpected tokens: ${tokens.toString()}`);\n }\n}\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nfunction verifyBasicType(type) {\n const match = type.match(regexType);\n if (!match) {\n return logger.throwArgumentError(\"invalid type\", \"type\", type);\n }\n if (type === \"uint\") {\n return \"uint256\";\n }\n if (type === \"int\") {\n return \"int256\";\n }\n if (match[2]) {\n // bytesXX\n const length = parseInt(match[2]);\n if (length === 0 || length > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"type\", type);\n }\n }\n else if (match[3]) {\n // intXX or uintXX\n const size = parseInt(match[3]);\n if (size === 0 || size > 256 || size % 8) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n }\n return type;\n}\n// Make the Fragment constructors effectively private\nconst _guard = {};\nconst internal = Symbol.for(\"_ethers_internal\");\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nexport class ParamType {\n constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) {\n _ParamType_instances.add(this);\n logger.assertPrivate(guard, _guard, \"ParamType\");\n Object.defineProperty(this, internal, { value: ParamTypeInternal });\n if (components) {\n components = Object.freeze(components.slice());\n }\n if (baseType === \"array\") {\n if (arrayLength == null || arrayChildren == null) {\n throw new Error(\"\");\n }\n }\n else if (arrayLength != null || arrayChildren != null) {\n throw new Error(\"\");\n }\n if (baseType === \"tuple\") {\n if (components == null) {\n throw new Error(\"\");\n }\n }\n else if (components != null) {\n throw new Error(\"\");\n }\n defineProperties(this, {\n name, type, baseType, indexed, components, arrayLength, arrayChildren\n });\n }\n // Format the parameter fragment\n // - sighash: \"(uint256,address)\"\n // - minimal: \"tuple(uint256,address) indexed\"\n // - full: \"tuple(uint256 foo, address bar) indexed baz\"\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n let result = {\n type: ((this.baseType === \"tuple\") ? \"tuple\" : this.type),\n name: (this.name || undefined)\n };\n if (typeof (this.indexed) === \"boolean\") {\n result.indexed = this.indexed;\n }\n if (this.isTuple()) {\n result.components = this.components.map((c) => JSON.parse(c.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.isArray()) {\n result += this.arrayChildren.format(format);\n result += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n }\n else {\n if (this.isTuple()) {\n if (format !== FormatType.sighash) {\n result += this.type;\n }\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== FormatType.sighash) {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === FormatType.full && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n static isArray(value) {\n return value && (value.baseType === \"array\");\n }\n isArray() {\n return (this.baseType === \"array\");\n }\n isTuple() {\n return (this.baseType === \"tuple\");\n }\n isIndexable() {\n return (this.indexed != null);\n }\n walk(value, process) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v) => (this.arrayChildren.walk(v, process)));\n }\n if (this.isTuple()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid tuple value\");\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v, i) => (this.components[i].walk(v, process)));\n }\n return process(this.type, value);\n }\n async walkAsync(value, process) {\n const promises = [];\n const result = [value];\n __classPrivateFieldGet(this, _ParamType_instances, \"m\", _ParamType_walkAsync).call(this, promises, value, process, (value) => {\n result[0] = value;\n });\n if (promises.length) {\n await Promise.all(promises);\n }\n return result[0];\n }\n static from(obj, allowIndexed) {\n if (ParamType.isParamType(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n return ParamType.fromTokens(lex(obj), allowIndexed);\n }\n if (obj instanceof TokenString) {\n return ParamType.fromTokens(obj, allowIndexed);\n }\n const name = obj.name;\n if (name && (typeof (name) !== \"string\" || !name.match(regexIdentifier))) {\n logger.throwArgumentError(\"invalid name\", \"obj.name\", name);\n }\n let indexed = obj.indexed;\n if (indexed != null) {\n if (!allowIndexed) {\n logger.throwArgumentError(\"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n }\n indexed = !!indexed;\n }\n let type = obj.type;\n let arrayMatch = type.match(regexArrayType);\n if (arrayMatch) {\n const arrayLength = arrayMatch[2];\n const arrayChildren = ParamType.from({\n type: arrayMatch[1],\n components: obj.components\n });\n return new ParamType(_guard, name, type, \"array\", indexed, null, arrayLength, arrayChildren);\n }\n if (type.substring(0, 5) === \"tuple(\" || type[0] === \"(\") {\n const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null;\n const tuple = new ParamType(_guard, name, type, \"tuple\", indexed, comps, null, null);\n // @TODO: use lexer to validate and normalize type\n return tuple;\n }\n type = verifyBasicType(obj.type);\n return new ParamType(_guard, name, type, type, indexed, null, null, null);\n }\n static fromObject(obj, allowIndexed) {\n throw new Error(\"@TODO\");\n }\n static fromTokens(tokens, allowIndexed) {\n let type = \"\", baseType = \"\";\n let comps = null;\n if (consumeKeywords(tokens, setify([\"tuple\"])).has(\"tuple\") || tokens.peekType(\"OPEN_PAREN\")) {\n // Tuple\n baseType = \"tuple\";\n comps = tokens.popParams().map((t) => ParamType.from(t));\n type = `tuple(${comps.map((c) => c.format()).join(\",\")})`;\n }\n else {\n // Normal\n type = verifyBasicType(tokens.popType(\"TYPE\"));\n baseType = type;\n }\n // Check for Array\n let arrayChildren = null;\n let arrayLength = null;\n while (tokens.length && tokens.peekType(\"BRACKET\")) {\n const bracket = tokens.pop(); //arrays[i];\n arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n arrayLength = bracket.value;\n type += bracket.text;\n baseType = \"array\";\n comps = null;\n }\n let indexed = null;\n const keywords = consumeKeywords(tokens, KwModifiers);\n if (keywords.has(\"indexed\")) {\n if (!allowIndexed) {\n throw new Error(\"\");\n }\n indexed = true;\n }\n const name = (tokens.peekType(\"ID\") ? tokens.pop().text : \"\");\n if (tokens.length) {\n throw new Error(\"leftover tokens\");\n }\n return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n }\n static isParamType(value) {\n return (value && value[internal] === ParamTypeInternal);\n }\n}\n_ParamType_instances = new WeakSet(), _ParamType_walkAsync = function _ParamType_walkAsync(promises, value, process, setValue) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const childType = this.arrayChildren;\n const result = value.slice();\n result.forEach((value, index) => {\n __classPrivateFieldGet(childType, _ParamType_instances, \"m\", _ParamType_walkAsync).call(childType, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n if (this.isTuple()) {\n const components = this.components;\n // Convert the object into an array\n let result;\n if (Array.isArray(value)) {\n result = value.slice();\n }\n else {\n if (value == null || typeof (value) !== \"object\") {\n throw new Error(\"invlaid tuple value\");\n }\n result = components.map((param) => {\n if (!param.name) {\n throw new Error(\"cannot use object value with unnamed components\");\n }\n if (!(param.name in value)) {\n throw new Error(`missing value for component ${param.name}`);\n }\n return value[param.name];\n });\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n result.forEach((value, index) => {\n var _a;\n __classPrivateFieldGet((_a = components[index]), _ParamType_instances, \"m\", _ParamType_walkAsync).call(_a, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n const result = process(this.type, value);\n if (result.then) {\n promises.push((async function () { setValue(await result); })());\n }\n else {\n setValue(result);\n }\n};\nexport var FragmentType;\n(function (FragmentType) {\n FragmentType[\"constructor\"] = \"constructor\";\n FragmentType[\"error\"] = \"error\";\n FragmentType[\"event\"] = \"event\";\n FragmentType[\"function\"] = \"function\";\n FragmentType[\"struct\"] = \"struct\";\n})(FragmentType || (FragmentType = {}));\n;\nexport class Fragment {\n constructor(guard, type, inputs) {\n logger.assertPrivate(guard, _guard, \"Fragment\");\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { type, inputs });\n }\n static from(obj) {\n if (typeof (obj) === \"string\") {\n return this.fromString(obj);\n }\n if (obj instanceof TokenString) {\n return this.fromTokens(obj);\n }\n if (typeof (obj) === \"object\") {\n return this.fromObject(obj);\n }\n throw new Error(`unsupported type: ${obj}`);\n }\n static fromObject(obj) {\n switch (obj.type) {\n case \"constructor\": return ConstructorFragment.fromObject(obj);\n case \"error\": return ErrorFragment.fromObject(obj);\n case \"event\": return EventFragment.fromObject(obj);\n case \"function\": return FunctionFragment.fromObject(obj);\n case \"struct\": return StructFragment.fromObject(obj);\n }\n throw new Error(\"not implemented yet\");\n }\n static fromString(text) {\n try {\n Fragment.from(JSON.parse(text));\n }\n catch (e) { }\n return Fragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const type = tokens.popKeyword(KwTypes);\n switch (type) {\n case \"constructor\": return ConstructorFragment.fromTokens(tokens);\n case \"error\": return ErrorFragment.fromTokens(tokens);\n case \"event\": return EventFragment.fromTokens(tokens);\n case \"function\": return FunctionFragment.fromTokens(tokens);\n case \"struct\": return StructFragment.fromTokens(tokens);\n }\n throw new Error(`unsupported type: ${type}`);\n }\n /*\n static fromTokens(tokens: TokenString): Fragment {\n const assertDone = () => {\n if (tokens.length) { throw new Error(`unexpected tokens: ${ tokens.toString() }`); }\n });\n\n const type = (tokens.length && tokens.peek().type === \"KEYWORD\") ? tokens.peek().text: \"unknown\";\n\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens, type === \"event\");\n\n switch (type) {\n case \"event\": case \"struct\":\n assertDone();\n }\n\n }\n */\n static isConstructor(value) {\n return (value && value.type === \"constructor\");\n }\n static isError(value) {\n return (value && value.type === \"error\");\n }\n static isEvent(value) {\n return (value && value.type === \"event\");\n }\n static isFunction(value) {\n return (value && value.type === \"function\");\n }\n static isStruct(value) {\n return (value && value.type === \"struct\");\n }\n}\nexport class NamedFragment extends Fragment {\n constructor(guard, type, name, inputs) {\n super(guard, type, inputs);\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { name });\n }\n}\nfunction joinParams(format, params) {\n return \"(\" + params.map((p) => p.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n}\nexport class ErrorFragment extends NamedFragment {\n constructor(guard, name, inputs) {\n super(guard, FragmentType.error, name, inputs);\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"error\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n return result.join(\" \");\n }\n static fromString(text) {\n return ErrorFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new ErrorFragment(_guard, name, inputs);\n }\n}\nexport class EventFragment extends NamedFragment {\n constructor(guard, name, inputs, anonymous) {\n super(guard, FragmentType.event, name, inputs);\n defineProperties(this, { anonymous });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"event\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash && this.anonymous) {\n result.push(\"anonymous\");\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return EventFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"event\", tokens);\n const inputs = consumeParams(tokens, true);\n const anonymous = !!consumeKeywords(tokens, setify([\"anonymous\"])).has(\"anonymous\");\n consumeEoi(tokens);\n return new EventFragment(_guard, name, inputs, anonymous);\n }\n}\nexport class ConstructorFragment extends Fragment {\n constructor(guard, type, inputs, payable, gas) {\n super(guard, type, inputs);\n defineProperties(this, { payable, gas });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.sighash) {\n logger.throwError(\"cannot format a constructor for sighash\", \"UNSUPPORTED_OPERATION\", {\n operation: \"format(sighash)\"\n });\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: (this.payable ? \"payable\" : \"undefined\"),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [`constructor${joinParams(format, this.inputs)}`];\n result.push((this.payable) ? \"payable\" : \"nonpayable\");\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return ConstructorFragment.fromTokens(lex(text));\n }\n static fromObject(obj) {\n throw new Error(\"TODO\");\n }\n static fromTokens(tokens) {\n consumeKeywords(tokens, setify([\"constructor\"]));\n const inputs = consumeParams(tokens);\n const payable = !!consumeKeywords(tokens, setify([\"payable\"])).has(\"payable\");\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new ConstructorFragment(_guard, FragmentType.constructor, inputs, payable, gas);\n }\n}\nexport class FunctionFragment extends NamedFragment {\n constructor(guard, name, stateMutability, inputs, outputs, gas) {\n super(guard, FragmentType.function, name, inputs);\n outputs = Object.freeze(outputs.slice());\n const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n const payable = (stateMutability === \"payable\");\n defineProperties(this, { constant, gas, outputs, payable, stateMutability });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"function\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash) {\n if (this.stateMutability !== \"nonpayable\") {\n result.push(this.stateMutability);\n }\n if (this.outputs && this.outputs.length) {\n result.push(\"returns\");\n result.push(joinParams(format, this.outputs));\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return FunctionFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"function\", tokens);\n const inputs = consumeParams(tokens);\n const mutability = consumeMutability(tokens);\n let outputs = [];\n if (consumeKeywords(tokens, setify([\"returns\"])).has(\"returns\")) {\n outputs = consumeParams(tokens);\n }\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n }\n}\nexport class StructFragment extends NamedFragment {\n format() {\n throw new Error(\"@TODO\");\n }\n static fromString(text) {\n return StructFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"struct\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new StructFragment(_guard, FragmentType.struct, name, inputs);\n }\n}\n//# sourceMappingURL=fragments.js.map","export const version = \"@ethersproject/math@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\nconst nibbles = \"0123456789abcdef\";\nconst BN_0 = BigInt(0);\n// Converts a value to a BigInt, including big endian data\nexport function toBigInt(_value) {\n if (_value instanceof Uint8Array) {\n let result = \"0x0\";\n for (const v of _value) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0x0f];\n }\n return BigInt(result);\n }\n return logger.getBigInt(_value, \"value\");\n}\nexport function toNumber(_value) {\n const value = toBigInt(_value);\n if (value < -maxValue || value > maxValue) {\n logger.throwArgumentError(\"overflow\", \"value\", _value);\n }\n return Number(value);\n}\n// Converts value to hex, optionally padding on the left to width bytes\nexport function toHex(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n let result = value.toString(16);\n if (_width == null) {\n // Ensure the value is of even length\n if (result.length % 2) {\n result = \"0\" + result;\n }\n }\n else {\n const width = logger.getNumber(_width, \"width\");\n if (width * 2 < result.length) {\n throw new Error(`value ${value} exceeds width ${width}`);\n }\n // Pad the value to the required width\n while (result.length < (width * 2)) {\n result = \"0\" + result;\n }\n }\n return \"0x\" + result;\n}\nexport function toArray(_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n if (value === BN_0) {\n return new Uint8Array([]);\n }\n let hex = value.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < result.length; i++) {\n const offset = i * 2;\n result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n }\n return result;\n}\n//# sourceMappingURL=convert.js.map","import { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n// Convert a value from a twos-compliment value\nexport function fromTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n // Top bit set; treat as a negative value\n if (value >> (width - BN_1)) {\n const mask = (BN_1 << width) - BN_1;\n return -(((~value) & mask) + BN_1);\n }\n return value;\n}\n// Convert value to a twos-compliment value\nexport function toTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n if (value < BN_0) {\n const mask = (BN_1 << width) - BN_1;\n return ((~(-value)) & mask) + BN_1;\n }\n return value;\n}\nexport function mask(_value, _bits) {\n const value = logger.getBigInt(_value, \"value\");\n const bits = logger.getBigInt(_bits, \"bits\");\n return value & ((BN_1 << bits) - BN_1);\n}\n//# sourceMappingURL=maths.js.map","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 _FixedNumber_instances, _FixedNumber_value, _FixedNumber_checkFormat;\nimport { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nimport { fromTwos, toTwos } from \"./maths.js\";\nconst _constructorGuard = {};\n//const Zero = BigInt(0);\nconst NegativeOne = BigInt(-1);\nfunction throwFault(message, fault, operation, value) {\n const params = { fault: fault, operation: operation };\n if (value !== undefined) {\n params.value = value;\n }\n return logger.throwError(message, \"NUMERIC_FAULT\", params);\n}\n// Constant to pull zeros from for multipliers\nlet zeros = \"0\";\nwhile (zeros.length < 256) {\n zeros += zeros;\n}\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getMultiplier(decimals) {\n if (typeof (decimals) !== \"number\" || decimals < 0 || decimals > 256 || decimals % 1) {\n logger.throwArgumentError(\"invalid decimal length\", \"decimals\", decimals);\n }\n return BigInt(\"1\" + zeros.substring(0, decimals));\n}\nexport function formatFixed(_value, _decimals = 0) {\n let value = logger.getBigInt(_value, \"value\");\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n const multiplierStr = String(multiplier);\n const negative = (value < 0);\n if (negative) {\n value *= NegativeOne;\n }\n let fraction = String(value % multiplier);\n // Make sure there are enough place-holders\n while (fraction.length < multiplierStr.length - 1) {\n fraction = \"0\" + fraction;\n }\n // Strip training 0\n while (fraction.length > 1 && fraction.substring(fraction.length - 1) === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n let result = String(value / multiplier);\n if (multiplierStr.length !== 1) {\n result += \".\" + fraction;\n }\n if (negative) {\n result = \"-\" + result;\n }\n return result;\n}\nexport function parseFixed(value, _decimals = 0) {\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n if (typeof (value) !== \"string\" || !value.match(/^-?[0-9.]+$/)) {\n logger.throwArgumentError(\"invalid decimal value\", \"value\", value);\n }\n // Is it negative?\n const negative = (value.substring(0, 1) === \"-\");\n if (negative) {\n value = value.substring(1);\n }\n if (value === \".\") {\n logger.throwArgumentError(\"missing value\", \"value\", value);\n }\n // Split it into a whole and fractional part\n const comps = value.split(\".\");\n if (comps.length > 2) {\n logger.throwArgumentError(\"too many decimal points\", \"value\", value);\n }\n let whole = (comps[0] || \"0\"), fraction = (comps[1] || \"0\");\n // Trim trialing zeros\n while (fraction[fraction.length - 1] === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n // Check the fraction doesn't exceed our decimals size\n if (fraction.length > String(multiplier).length - 1) {\n throwFault(\"fractional component exceeds decimals\", \"underflow\", \"parseFixed\");\n }\n // If decimals is 0, we have an empty string for fraction\n if (fraction === \"\") {\n fraction = \"0\";\n }\n // Fully pad the string with zeros to get to wei\n while (fraction.length < String(multiplier).length - 1) {\n fraction += \"0\";\n }\n const wholeValue = BigInt(whole);\n const fractionValue = BigInt(fraction);\n let wei = (wholeValue * multiplier) + fractionValue;\n if (negative) {\n wei *= NegativeOne;\n }\n return wei;\n}\nexport class FixedFormat {\n constructor(constructorGuard, signed, width, decimals) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedFormat constructor; use FixedFormat.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.signed = signed;\n this.width = width;\n this.decimals = decimals;\n this.name = (signed ? \"\" : \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n this._multiplier = getMultiplier(decimals);\n Object.freeze(this);\n }\n static from(value) {\n if (value instanceof FixedFormat) {\n return value;\n }\n if (typeof (value) === \"number\") {\n value = `fixed128x${value}`;\n }\n let signed = true;\n let width = 128;\n let decimals = 18;\n if (typeof (value) === \"string\") {\n if (value === \"fixed\") {\n // defaults...\n }\n else if (value === \"ufixed\") {\n signed = false;\n }\n else {\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n if (!match) {\n return logger.throwArgumentError(\"invalid fixed format\", \"format\", value);\n }\n signed = (match[1] !== \"u\");\n width = parseInt(match[2]);\n decimals = parseInt(match[3]);\n }\n }\n else if (value) {\n const check = (key, type, defaultValue) => {\n if (value[key] == null) {\n return defaultValue;\n }\n if (typeof (value[key]) !== type) {\n logger.throwArgumentError(\"invalid fixed format (\" + key + \" not \" + type + \")\", \"format.\" + key, value[key]);\n }\n return value[key];\n };\n signed = check(\"signed\", \"boolean\", signed);\n width = check(\"width\", \"number\", width);\n decimals = check(\"decimals\", \"number\", decimals);\n }\n if (width % 8) {\n logger.throwArgumentError(\"invalid fixed format width (not byte aligned)\", \"format.width\", width);\n }\n if (decimals > 80) {\n logger.throwArgumentError(\"invalid fixed format (decimals too large)\", \"format.decimals\", decimals);\n }\n return new FixedFormat(_constructorGuard, signed, width, decimals);\n }\n}\nexport class FixedNumber {\n constructor(constructorGuard, hex, value, format) {\n _FixedNumber_instances.add(this);\n //#hex: string;\n _FixedNumber_value.set(this, void 0);\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedNumber constructor; use FixedNumber.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.format = FixedFormat.from(format);\n //this.#hex = hex;\n __classPrivateFieldSet(this, _FixedNumber_value, value, \"f\");\n this._isFixedNumber = true;\n Object.freeze(this);\n }\n addUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a + b, this.format.decimals, this.format);\n }\n subUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a - b, this.format.decimals, this.format);\n }\n mulUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * b) / this.format._multiplier, this.format.decimals, this.format);\n }\n divUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * this.format._multiplier) / b, this.format.decimals, this.format);\n }\n floor() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (this.isNegative() && hasFraction) {\n result = result.subUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n ceiling() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (!this.isNegative() && hasFraction) {\n result = result.addUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n // @TODO: Support other rounding algorithms\n round(decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n // If we are already in range, we're done\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n if (decimals < 0 || decimals > 80 || (decimals % 1)) {\n logger.throwArgumentError(\"invalid decimal count\", \"decimals\", decimals);\n }\n if (comps[1].length <= decimals) {\n return this;\n }\n const factor = FixedNumber.from(\"1\" + zeros.substring(0, decimals), this.format);\n const bump = BUMP.toFormat(this.format);\n return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor);\n }\n isZero() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0.0\" || __classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0\");\n }\n isNegative() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\")[0] === \"-\");\n }\n toString() { return __classPrivateFieldGet(this, _FixedNumber_value, \"f\"); }\n toHexString(_width) {\n throw new Error(\"TODO\");\n /*\n return toHex();\n if (width == null) { return this.#hex; }\n\n const width = logger.getNumeric(_width);\n if (width % 8) { logger.throwArgumentError(\"invalid byte width\", \"width\", width); }\n\n const hex = BigNumber.from(this.#hex).fromTwos(this.format.width).toTwos(width).toHexString();\n return zeroPadLeft(hex, width / 8);\n */\n }\n toUnsafeFloat() { return parseFloat(this.toString()); }\n toFormat(format) {\n return FixedNumber.fromString(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), format);\n }\n static fromValue(value, decimals = 0, format = \"fixed\") {\n return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\n }\n static fromString(value, format = \"fixed\") {\n const fixedFormat = FixedFormat.from(format);\n const numeric = parseFixed(value, fixedFormat.decimals);\n if (!fixedFormat.signed && numeric < 0) {\n throwFault(\"unsigned value cannot be negative\", \"overflow\", \"value\", value);\n }\n const hex = (function () {\n if (fixedFormat.signed) {\n return toHex(toTwos(numeric, fixedFormat.width));\n }\n return toHex(numeric, fixedFormat.width / 8);\n })();\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static fromBytes(_value, format = \"fixed\") {\n const value = logger.getBytes(_value, \"value\");\n const fixedFormat = FixedFormat.from(format);\n if (value.length > fixedFormat.width / 8) {\n throw new Error(\"overflow\");\n }\n let numeric = toBigInt(value);\n if (fixedFormat.signed) {\n numeric = fromTwos(numeric, fixedFormat.width);\n }\n const hex = toHex(toTwos(numeric, (fixedFormat.signed ? 0 : 1) + fixedFormat.width));\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static from(value, format) {\n if (typeof (value) === \"string\") {\n return FixedNumber.fromString(value, format);\n }\n if (value instanceof Uint8Array) {\n return FixedNumber.fromBytes(value, format);\n }\n try {\n return FixedNumber.fromValue(value, 0, format);\n }\n catch (error) {\n // Allow NUMERIC_FAULT to bubble up\n if (error.code !== \"INVALID_ARGUMENT\") {\n throw error;\n }\n }\n return logger.throwArgumentError(\"invalid FixedNumber value\", \"value\", value);\n }\n static isFixedNumber(value) {\n return !!(value && value._isFixedNumber);\n }\n}\n_FixedNumber_value = new WeakMap(), _FixedNumber_instances = new WeakSet(), _FixedNumber_checkFormat = function _FixedNumber_checkFormat(other) {\n if (this.format.name !== other.format.name) {\n logger.throwArgumentError(\"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n }\n};\nconst ONE = FixedNumber.from(1);\nconst BUMP = FixedNumber.from(\"0.5\");\n//# sourceMappingURL=fixednumber.js.map","import { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nconst Alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nlet Lookup = null;\nfunction getAlpha(letter) {\n if (Lookup == null) {\n Lookup = {};\n for (let i = 0; i < Alphabet.length; i++) {\n Lookup[Alphabet[i]] = BigInt(i);\n }\n }\n const result = Lookup[letter];\n if (result == null) {\n logger.throwArgumentError(`invalid base58 value`, \"letter\", letter);\n }\n return result;\n}\nconst BN_0 = BigInt(0);\nconst BN_58 = BigInt(58);\nexport function encodeBase58(_value) {\n let value = toBigInt(logger.getBytes(_value));\n let result = \"\";\n while (value) {\n result = Alphabet[Number(value % BN_58)] + result;\n value /= BN_58;\n }\n return result;\n}\nexport function decodeBase58(value) {\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result *= BN_58;\n result += getAlpha(value[i]);\n }\n return toHex(result);\n}\n//# sourceMappingURL=base58.js.map","export function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/*\nfunction _isByte(value: number): boolean {\n return (typeof(value) === \"number\" && value >= 0 && value < 256 && Math.floor(value) === value);\n}\nexport function isBytes(value: any): value is Bytes {\n if (value == null) { return false; }\n\n if (value instanceof Uint8Array) { return true; }\n if (typeof(value) === \"string\") { return false; }\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n if (!_isByte(value[i])) { return false; }\n }\n return true;\n }\n\n return false;\n}\n*/\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\n//# sourceMappingURL=check.js.map","export const version = \"@ethersproject/bytes@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { isBytesLike } from \"./check.js\";\nimport { logger } from \"./logger.js\";\nlet BN_8 = null;\nlet BN_255 = null;\ntry {\n BN_8 = BigInt(\"8\");\n BN_255 = BigInt(\"255\");\n}\ncatch (error) {\n console.log(\"Unsupported bigint\", error);\n}\nfunction isHexable(value) {\n return (value && typeof (value.toHexString) === \"function\");\n}\nexport function arrayify(data) {\n if (data == null) {\n logger.throwArgumentError(\"cannot arrayify nullish\", \"data\", data);\n }\n if (typeof (data) === \"number\") {\n logger.assertUint53(data);\n const result = [];\n while (data) {\n result.unshift(data & 0xff);\n data = parseInt(String(data / 256));\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (BN_8 && typeof (data) === \"bigint\") {\n const result = [];\n while (data) {\n result.unshift(Number(data & BN_255));\n data >>= BN_8;\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (isHexable(data)) {\n return arrayify(data.toHexString());\n }\n if (typeof (data) === \"string\") {\n let hex = data;\n //if (options.allowMissingPrefix && hex.substring(0, 2) !== \"0x\") {\n // hex = \"0x\" + hex;\n //}\n if (!hex.match(/^0x[0-9a-f]*$/i)) {\n throw new RangeError(`invalid hex data string (${JSON.stringify(data)})`);\n }\n const result = [];\n for (let i = 2; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n return new Uint8Array(result);\n }\n if (data instanceof Uint8Array) {\n return new Uint8Array(data);\n }\n throw new TypeError(`cannot arrayify ${JSON.stringify(data)}`);\n}\nexport function _noCopyArrayify(data) {\n if (!isBytesLike(data)) {\n logger.throwArgumentError(\"invalid BytesLike value\", \"data\", data);\n } // @TODO: ArgumentE>\n if (data instanceof Uint8Array) {\n return data;\n }\n return arrayify(data);\n}\n//# sourceMappingURL=array.js.map","import { logger } from \"./logger.js\";\nexport function decodeBase64(textData) {\n return new Uint8Array(Buffer.from(textData, \"base64\"));\n}\n;\nexport function encodeBase64(data) {\n return Buffer.from(logger.getBytes(data, \"data\")).toString(\"base64\");\n}\n//# sourceMappingURL=base64.js.map","import { arrayify, _noCopyArrayify } from \"./array.js\";\nconst HexCharacters = \"0123456789abcdef\";\nexport function hexlify(data) {\n const bytes = _noCopyArrayify(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\nexport function quantity(value) {\n let result = hexlify(arrayify(value)).substring(2);\n while (result.substring(0, 1) === \"0\") {\n result = result.substring(1);\n }\n if (result === \"\") {\n result = \"0\";\n }\n return \"0x\" + result;\n}\n//# sourceMappingURL=hex.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { isHexString } from \"./check.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return _noCopyArrayify(data).length;\n}\nexport function dataSlice(data, start, end) {\n const bytes = _noCopyArrayify(data);\n if (end != null && end > bytes.length) {\n logger.throwError(\"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.substring(0, 2) == \"00\") {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\n//# sourceMappingURL=data.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nfunction zeroPad(data, length, left) {\n const bytes = _noCopyArrayify(data);\n if (length < bytes.length) {\n logger.throwError(\"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n }\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\nexport function zeroPadLeft(data, length) {\n return zeroPad(data, length, true);\n}\nexport function zeroPadRight(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=pad.js.map","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 _Result_instances, _Result_indices, _Result_throwError, _Writer_instances, _Writer_data, _Writer_dataLength, _Writer_writeData, _Reader_instances, _Reader_data, _Reader_offset, _Reader_coerceFunc, _Reader_peekBytes;\nimport { toArray, toBigInt, toNumber } from \"@ethersproject/math\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nexport const WordSize = 32;\nconst Padding = new Uint8Array(WordSize);\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [\"then\"];\nconst _guard = {};\nexport class Result extends Array {\n constructor(guard, items, keys) {\n logger.assertPrivate(guard, _guard, \"Result\");\n super(...items);\n _Result_instances.add(this);\n _Result_indices.set(this, void 0);\n // Name lookup table\n __classPrivateFieldSet(this, _Result_indices, new Map(), \"f\");\n if (keys) {\n keys.forEach((key, index) => {\n if (key == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _Result_indices, \"f\").has(key)) {\n (__classPrivateFieldGet(this, _Result_indices, \"f\").get(key)).push(index);\n }\n else {\n __classPrivateFieldGet(this, _Result_indices, \"f\").set(key, [index]);\n }\n });\n }\n Object.freeze(this);\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n if (typeof (prop) === \"string\") {\n if (prop.match(/^[0-9]+$/)) {\n const index = logger.getNumber(prop, \"%index\");\n if (index < 0 || index >= this.length) {\n throw new RangeError(\"out of result range\");\n }\n const item = target[index];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `index ${index}`, item);\n }\n return item;\n }\n // Pass important checks (like `then` for Promise) through\n if (prop in target || passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n // Something that could be a result keyword value\n if (!(prop in target)) {\n return target.getValue(prop);\n }\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n }\n slice(start, end) {\n if (start == null) {\n start = 0;\n }\n if (end == null) {\n end = this.length;\n }\n const result = [];\n for (let i = start; i < end; i++) {\n let value;\n try {\n value = this[i];\n }\n catch (error) {\n value = error.error;\n }\n result.push(value);\n }\n return result;\n }\n getValue(name) {\n const index = __classPrivateFieldGet(this, _Result_indices, \"f\").get(name);\n if (index != null && index.length === 1) {\n const item = this[index[0]];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `property ${JSON.stringify(name)}`, item);\n }\n return item;\n }\n throw new Error(`no named parameter: ${JSON.stringify(name)}`);\n }\n static fromItems(items, keys) {\n return new Result(_guard, items, keys);\n }\n}\n_Result_indices = new WeakMap(), _Result_instances = new WeakSet(), _Result_throwError = function _Result_throwError(name, error) {\n const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`);\n wrapped.error = error;\n throw wrapped;\n};\nexport function checkResultErrors(result) {\n // Find the first error (if any)\n const errors = [];\n const checkErrors = function (path, object) {\n if (!Array.isArray(object)) {\n return;\n }\n for (let key in object) {\n const childPath = path.slice();\n childPath.push(key);\n try {\n checkErrors(childPath, object[key]);\n }\n catch (error) {\n errors.push({ path: childPath, error: error });\n }\n }\n };\n checkErrors([], result);\n return errors;\n}\nfunction getValue(value) {\n let bytes = toArray(value);\n if (bytes.length > WordSize) {\n logger.throwError(\"value out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes,\n length: WordSize,\n offset: bytes.length\n });\n }\n if (bytes.length % WordSize) {\n bytes = arrayify(concat([Padding.slice(bytes.length % WordSize), bytes]));\n }\n return bytes;\n}\nexport class Coder {\n constructor(name, type, localName, dynamic) {\n defineProperties(this, { name, type, localName, dynamic }, {\n name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n });\n }\n _throwError(message, value) {\n return logger.throwArgumentError(message, this.localName, value);\n }\n}\nexport class Writer {\n constructor() {\n _Writer_instances.add(this);\n // An array of WordSize lengthed objects to concatenation\n _Writer_data.set(this, void 0);\n _Writer_dataLength.set(this, void 0);\n __classPrivateFieldSet(this, _Writer_data, [], \"f\");\n __classPrivateFieldSet(this, _Writer_dataLength, 0, \"f\");\n }\n get data() {\n return concat(__classPrivateFieldGet(this, _Writer_data, \"f\"));\n }\n get length() { return __classPrivateFieldGet(this, _Writer_dataLength, \"f\"); }\n appendWriter(writer) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, arrayify(writer.data));\n }\n // Arrayish item; pad on the right to *nearest* WordSize\n writeBytes(value) {\n let bytes = arrayify(value);\n const paddingOffset = bytes.length % WordSize;\n if (paddingOffset) {\n bytes = arrayify(concat([bytes, Padding.slice(paddingOffset)]));\n }\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, bytes);\n }\n // Numeric item; pad on the left *to* WordSize\n writeValue(value) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, getValue(value));\n }\n // Inserts a numeric place-holder, returning a callback that can\n // be used to asjust the value later\n writeUpdatableValue() {\n const offset = __classPrivateFieldGet(this, _Writer_data, \"f\").length;\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(Padding);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + WordSize, \"f\");\n return (value) => {\n __classPrivateFieldGet(this, _Writer_data, \"f\")[offset] = getValue(value);\n };\n }\n}\n_Writer_data = new WeakMap(), _Writer_dataLength = new WeakMap(), _Writer_instances = new WeakSet(), _Writer_writeData = function _Writer_writeData(data) {\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(data);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + data.length, \"f\");\n return data.length;\n};\nexport class Reader {\n constructor(data, coerceFunc, allowLoose) {\n _Reader_instances.add(this);\n _Reader_data.set(this, void 0);\n _Reader_offset.set(this, void 0);\n _Reader_coerceFunc.set(this, void 0);\n defineProperties(this, { allowLoose: !!allowLoose });\n __classPrivateFieldSet(this, _Reader_data, arrayify(data), \"f\");\n __classPrivateFieldSet(this, _Reader_coerceFunc, coerceFunc || Reader.coerce, \"f\");\n __classPrivateFieldSet(this, _Reader_offset, 0, \"f\");\n }\n get data() { return hexlify(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n get dataLength() { return __classPrivateFieldGet(this, _Reader_data, \"f\").length; }\n get consumed() { return __classPrivateFieldGet(this, _Reader_offset, \"f\"); }\n get bytes() { return new Uint8Array(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n // The default Coerce function\n static coerce(type, value) {\n let match = type.match(\"^u?int([0-9]+)$\");\n if (match && parseInt(match[1]) <= 48) {\n value = value.toNumber();\n }\n return value;\n }\n coerce(type, value) {\n return __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\").call(this, type, value);\n }\n // Create a sub-reader with the same underlying data, but offset\n subReader(offset) {\n return new Reader(__classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\") + offset), __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\"), this.allowLoose);\n }\n // Read bytes\n readBytes(length, loose) {\n let bytes = __classPrivateFieldGet(this, _Reader_instances, \"m\", _Reader_peekBytes).call(this, 0, length, !!loose);\n __classPrivateFieldSet(this, _Reader_offset, __classPrivateFieldGet(this, _Reader_offset, \"f\") + bytes.length, \"f\");\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n // Read a numeric values\n readValue() {\n return toBigInt(this.readBytes(WordSize));\n }\n readIndex() {\n return toNumber(this.readBytes(WordSize));\n }\n}\n_Reader_data = new WeakMap(), _Reader_offset = new WeakMap(), _Reader_coerceFunc = new WeakMap(), _Reader_instances = new WeakSet(), _Reader_peekBytes = function _Reader_peekBytes(offset, length, loose) {\n let alignedLength = Math.ceil(length / WordSize) * WordSize;\n if (__classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength > __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n if (this.allowLoose && loose && __classPrivateFieldGet(this, _Reader_offset, \"f\") + length <= __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n alignedLength = length;\n }\n else {\n logger.throwError(\"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: arrayify(__classPrivateFieldGet(this, _Reader_data, \"f\")),\n length: __classPrivateFieldGet(this, _Reader_data, \"f\").length,\n offset: __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength\n });\n }\n }\n return __classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\"), __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength);\n};\n//# sourceMappingURL=abstract-coder.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// The import here is via the package name. This is to ensure\n// that exports mapping/resolution does fall into place.\nimport { crypto } from '@noble/hashes/crypto';\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// There is almost no big endian hardware, but js typed arrays uses platform specific endianess.\n// So, just to be sure not to corrupt anything.\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xde, 0xad, 0xbe, 0xef]))\n */\nexport function bytesToHex(uint8a) {\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('deadbeef')\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 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))\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// Currently avoid insertion of polyfills with packers (browserify/webpack/etc)\n// But setTimeout is pretty slow, maybe worth to investigate howto do minimal polyfill here\nexport const nextTick = (() => {\n const nodeRequire = typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n try {\n if (nodeRequire) {\n const { setImmediate } = nodeRequire('timers');\n return () => new Promise((resolve) => setImmediate(resolve));\n }\n }\n catch (e) { }\n return () => new Promise((resolve) => setTimeout(resolve, 0));\n})();\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\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)\n continue;\n await nextTick();\n ts += diff;\n }\n}\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string') {\n throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`);\n }\n return new TextEncoder().encode(str);\n}\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!(data instanceof Uint8Array))\n throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`);\n return data;\n}\n/**\n * Concats Uint8Array-s into one; like `Buffer.concat([buf1, buf2])`\n * @example concatBytes(buf1, buf2)\n */\nexport function concatBytes(...arrays) {\n if (!arrays.every((a) => a instanceof Uint8Array))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nexport function assertNumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nexport function assertBool(b) {\n if (typeof b !== 'boolean') {\n throw new Error(`Expected boolean, not ${b}`);\n }\n}\nexport function assertBytes(bytes, ...lengths) {\n if (bytes instanceof Uint8Array && (!lengths.length || lengths.includes(bytes.length))) {\n return;\n }\n throw new TypeError(`Expected ${lengths} bytes, not ${typeof bytes} with length=${bytes.length}`);\n}\nexport function assertHash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n assertNumber(hash.outputLen);\n assertNumber(hash.blockLen);\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\nexport function checkOpts(def, _opts) {\n if (_opts !== undefined && (typeof _opts !== 'object' || !isPlainObject(_opts)))\n throw new TypeError('Options should be object or undefined');\n const opts = Object.assign(def, _opts);\n return opts;\n}\nexport function wrapConstructor(hashConstructor) {\n const hashC = (message) => hashConstructor().update(toBytes(message)).digest();\n const tmp = hashConstructor();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashConstructor();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n return new Uint8Array(crypto.node.randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n}\n","import { assertHash, Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nclass HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n assertHash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (!(this.iHash instanceof Hash))\n throw new TypeError('Expected instance of class which extends utils.Hash');\n const blockLen = (this.blockLen = this.iHash.blockLen);\n this.outputLen = this.iHash.outputLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > this.iHash.blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n 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();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n pad.fill(0);\n }\n update(buf) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length !== this.outputLen)\n throw new Error('HMAC: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\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) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\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 * 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, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n","import { hmac } from './hmac.js';\n// prettier-ignore\nimport { createView, toBytes, assertNumber, assertHash, checkOpts, asyncLoop } from './utils.js';\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash, _password, _salt, _opts) {\n assertHash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n assertNumber(c);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n if (c < 1)\n throw new Error('PBKDF2: iterations (c) should be >= 1');\n const password = toBytes(_password);\n const salt = toBytes(_salt);\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\nfunction pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW)\n prfW.destroy();\n u.fill(0);\n return DK;\n}\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n */\nexport function pbkdf2(hash, password, salt, opts) {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\nexport async function pbkdf2Async(hash, password, salt, opts) {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, (i) => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n","import { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n 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// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n const { view, buffer, blockLen, finished } = this;\n if (finished)\n throw new Error('digest() was already called');\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)\n 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) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length < this.outputLen)\n throw new Error('_Sha2: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\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++)\n 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 64bit of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n this.get().forEach((v, i) => oview.setUint32(4 * i, v, 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) {\n to || (to = new this.constructor());\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)\n to.buffer.set(buffer);\n return to;\n }\n}\n","import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\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// 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// 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 {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = IV[7] | 0;\n }\n get() {\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 set(A, B, C, D, E, F, G, H) {\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 process(view, offset) {\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)\n 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 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/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\n","const U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\nexport function fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nexport function split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nexport const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nexport const shrSH = (h, l, s) => h >>> s;\nexport const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nexport const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexport const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexport const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nexport const rotr32H = (h, l) => l;\nexport const rotr32L = (h, l) => h;\n// Left rotate for Shift in [1, 32)\nexport const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexport const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexport const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nexport function add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nexport const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexport const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexport const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexport const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexport const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexport const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n","import { SHA2 } from './_sha2.js';\nimport * as u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n)));\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = new Uint32Array(80);\nconst SHA512_W_L = new Uint32Array(80);\nexport class SHA512 extends SHA2 {\n constructor() {\n super(128, 64, 16, false);\n // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n // Also looks cleaner and easier to verify with spec.\n // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x6a09e667 | 0;\n this.Al = 0xf3bcc908 | 0;\n this.Bh = 0xbb67ae85 | 0;\n this.Bl = 0x84caa73b | 0;\n this.Ch = 0x3c6ef372 | 0;\n this.Cl = 0xfe94f82b | 0;\n this.Dh = 0xa54ff53a | 0;\n this.Dl = 0x5f1d36f1 | 0;\n this.Eh = 0x510e527f | 0;\n this.El = 0xade682d1 | 0;\n this.Fh = 0x9b05688c | 0;\n this.Fl = 0x2b3e6c1f | 0;\n this.Gh = 0x1f83d9ab | 0;\n this.Gl = 0xfb41bd6b | 0;\n this.Hh = 0x5be0cd19 | 0;\n this.Hl = 0x137e2179 | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n SHA512_W_H.fill(0);\n SHA512_W_L.fill(0);\n }\n destroy() {\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nclass SHA512_256 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x22312194 | 0;\n this.Al = 0xfc2bf72c | 0;\n this.Bh = 0x9f555fa3 | 0;\n this.Bl = 0xc84c64c2 | 0;\n this.Ch = 0x2393b86b | 0;\n this.Cl = 0x6f53b151 | 0;\n this.Dh = 0x96387719 | 0;\n this.Dl = 0x5940eabd | 0;\n this.Eh = 0x96283ee2 | 0;\n this.El = 0xa88effe3 | 0;\n this.Fh = 0xbe5e1e25 | 0;\n this.Fl = 0x53863992 | 0;\n this.Gh = 0x2b0199fc | 0;\n this.Gl = 0x2c85b8aa | 0;\n this.Hh = 0x0eb72ddc | 0;\n this.Hl = 0x81c52ca2 | 0;\n this.outputLen = 32;\n }\n}\nclass SHA384 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0xcbbb9d5d | 0;\n this.Al = 0xc1059ed8 | 0;\n this.Bh = 0x629a292a | 0;\n this.Bl = 0x367cd507 | 0;\n this.Ch = 0x9159015a | 0;\n this.Cl = 0x3070dd17 | 0;\n this.Dh = 0x152fecd8 | 0;\n this.Dl = 0xf70e5939 | 0;\n this.Eh = 0x67332667 | 0;\n this.El = 0xffc00b31 | 0;\n this.Fh = 0x8eb44a87 | 0;\n this.Fl = 0x68581511 | 0;\n this.Gh = 0xdb0c2e0d | 0;\n this.Gl = 0x64f98fa7 | 0;\n this.Hh = 0x47b5481d | 0;\n this.Hl = 0xbefa4fa4 | 0;\n this.outputLen = 48;\n }\n}\nexport const sha512 = wrapConstructor(() => new SHA512());\nexport const sha512_256 = wrapConstructor(() => new SHA512_256());\nexport const sha384 = wrapConstructor(() => new SHA384());\n","export const version = \"@ethersproject/crypto@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","/* Browser Crypto Shims */\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { pbkdf2 } from \"@noble/hashes/pbkdf2\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { sha512 } from \"@noble/hashes/sha512\";\nimport { logger } from \"./logger.js\";\nfunction getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst anyGlobal = getGlobal();\nlet crypto = anyGlobal.crypto || anyGlobal.msCrypto;\nexport function createHash(algo) {\n switch (algo) {\n case \"sha256\": return sha256.create();\n case \"sha512\": return sha512.create();\n }\n return logger.throwArgumentError(\"invalid hashing algorithm name\", \"algorithm\", algo);\n}\nexport function createHmac(_algo, key) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid hmac algorithm\", \"algorithm\", _algo);\n }\n return hmac.create(algo, key);\n}\nexport function pbkdf2Sync(password, salt, iterations, keylen, _algo) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid pbkdf2 algorithm\", \"algorithm\", _algo);\n }\n return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen });\n}\nexport function randomBytes(length) {\n if (crypto == null) {\n return logger.throwError(\"platform does not support secure random numbers\", \"UNSUPPORTED_OPERATION\", {\n operation: \"randomBytes\"\n });\n }\n if (length <= 0 || length > 1024 || (length % 1) || length != length) {\n logger.throwArgumentError(\"invalid length\", \"length\", length);\n }\n const result = new Uint8Array(length);\n crypto.getRandomValues(result);\n return result;\n}\n//# sourceMappingURL=crypto-browser.js.map","import { createHmac } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _computeHmac = function (algorithm, key, data) {\n return \"0x\" + createHmac(algorithm, key).update(data).digest(\"hex\");\n};\nlet __computeHmac = _computeHmac;\nexport function computeHmac(algorithm, _key, _data) {\n const key = logger.getBytes(_key, \"key\");\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__computeHmac(algorithm, key, data));\n}\ncomputeHmac._ = _computeHmac;\ncomputeHmac.lock = function () { locked = true; };\ncomputeHmac.register = function (func) {\n if (locked) {\n throw new Error(\"computeHmac is locked\");\n }\n __computeHmac = func;\n};\nObject.freeze(computeHmac);\n//# sourceMappingURL=hmac.js.map","import * as u64 from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapConstructorWithOpts, assertNumber, } from './utils.js';\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = u64.split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => s > 32 ? u64.rotlBH(h, l, s) : u64.rotlSH(h, l, s);\nconst rotlL = (h, l, s) => s > 32 ? u64.rotlBL(h, l, s) : u64.rotlSL(h, l, s);\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n assertNumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (this.finished)\n throw new Error('digest() was already called');\n const { blockLen, state } = 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 for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array))\n throw new Error('Keccak: invalid output buffer');\n this.finish();\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= this.blockLen)\n this.keccak();\n const take = Math.min(this.blockLen - this.posOut, len - pos);\n out.set(this.state.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n assertNumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n if (out.length < this.outputLen)\n throw new Error('Keccak: invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finish();\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = gen(0x06, 136, 256 / 8);\nexport const sha3_384 = gen(0x06, 104, 384 / 8);\nexport const sha3_512 = gen(0x06, 72, 512 / 8);\nexport const keccak_224 = gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = gen(0x01, 136, 256 / 8);\nexport const keccak_384 = gen(0x01, 104, 384 / 8);\nexport const keccak_512 = gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen !== undefined ? opts.dkLen : outputLen, true));\nexport const shake128 = genShake(0x1f, 168, 128 / 8);\nexport const shake256 = genShake(0x1f, 136, 256 / 8);\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\nexport function keccak256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","import { SHA2 } from './_sha2.js';\nimport { wrapConstructor } from './utils.js';\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\nconst Rho = new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]);\nconst Id = Uint8Array.from({ length: 16 }, (_, i) => i);\nconst Pi = Id.map((i) => (9 * i + 5) % 16);\nlet idxL = [Id];\nlet idxR = [Pi];\nfor (let i = 0; i < 4; i++)\n for (let j of [idxL, idxR])\n j.push(j[i].map((k) => Rho[k]));\nconst shifts = [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => new Uint8Array(i));\nconst shiftsL = idxL.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst shiftsR = idxR.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst Kl = new Uint32Array([0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]);\nconst Kr = new Uint32Array([0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]);\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word, shift) => (word << shift) | (word >>> (32 - shift));\n// It's called f() in spec.\nfunction f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n else if (group === 1)\n return (x & y) | (~x & z);\n else if (group === 2)\n return (x | ~y) ^ z;\n else if (group === 3)\n return (x & z) | (y & ~z);\n else\n return x ^ (y | ~z);\n}\n// Temporary buffer, not used to store anything between runs\nconst BUF = new Uint32Array(16);\nexport class RIPEMD160 extends SHA2 {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = (rotl(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = (rotl(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n BUF.fill(0);\n }\n destroy() {\n this.destroyed = true;\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0);\n }\n}\n/**\n * RIPEMD-160 - a hash function from 1990s.\n * @param message - msg that would be hashed\n */\nexport const ripemd160 = wrapConstructor(() => new RIPEMD160());\n","import { ripemd160 as noble_ripemd160 } from \"@noble/hashes/ripemd160\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _ripemd160 = function (data) {\n return noble_ripemd160(data);\n};\nlet __ripemd160 = _ripemd160;\nexport function ripemd160(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__ripemd160(data));\n}\nripemd160._ = _ripemd160;\nripemd160.lock = function () { locked = true; };\nripemd160.register = function (func) {\n if (locked) {\n throw new TypeError(\"ripemd160 is locked\");\n }\n __ripemd160 = func;\n};\nObject.freeze(ripemd160);\n//# sourceMappingURL=ripemd160.js.map","import { pbkdf2Sync } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _pbkdf2 = function (password, salt, iterations, keylen, algo) {\n return pbkdf2Sync(password, salt, iterations, keylen, algo);\n};\nlet __pbkdf2 = _pbkdf2;\nexport function pbkdf2(_password, _salt, iterations, keylen, algo) {\n const password = logger.getBytes(_password, \"password\");\n const salt = logger.getBytes(_salt, \"salt\");\n return hexlify(__pbkdf2(password, salt, iterations, keylen, algo));\n}\npbkdf2._ = _pbkdf2;\npbkdf2.lock = function () { locked = true; };\npbkdf2.register = function (func) {\n if (locked) {\n throw new Error(\"pbkdf2 is locked\");\n }\n __pbkdf2 = func;\n};\nObject.freeze(pbkdf2);\n//# sourceMappingURL=pbkdf2.js.map","import { randomBytes as crypto_random } from \"crypto\"; /*-browser*/\nlet locked = false;\nconst _randomBytes = function (length) {\n return new Uint8Array(crypto_random(length));\n};\nlet __randomBytes = _randomBytes;\nexport function randomBytes(length) {\n return __randomBytes(length);\n}\nrandomBytes._ = _randomBytes;\nrandomBytes.lock = function () { locked = true; };\nrandomBytes.register = function (func) {\n if (locked) {\n throw new Error(\"random is locked\");\n }\n __randomBytes = func;\n};\nObject.freeze(randomBytes);\n//# sourceMappingURL=random.js.map","import { sha256 } from './sha256.js';\nimport { pbkdf2 } from './pbkdf2.js';\nimport { assertNumber, asyncLoop, checkOpts, u32 } from './utils.js';\n// RFC 7914 Scrypt KDF\n// Left rotate for uint32\nconst rotl = (a, b) => (a << b) | (a >>> (32 - b));\n// The main Scrypt loop: uses Salsa extensively.\n// Six versions of the function were tried, this is the fastest one.\n// prettier-ignore\nfunction XorAndSalsa(prev, pi, input, ii, out, oi) {\n // Based on https://cr.yp.to/salsa20.html\n // Xor blocks\n let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];\n let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];\n let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];\n let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];\n let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];\n let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];\n let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];\n let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];\n // Save state to temporary variables (salsa)\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n // Main loop (salsa)\n for (let i = 0; i < 8; i += 2) {\n x04 ^= rotl(x00 + x12 | 0, 7);\n x08 ^= rotl(x04 + x00 | 0, 9);\n x12 ^= rotl(x08 + x04 | 0, 13);\n x00 ^= rotl(x12 + x08 | 0, 18);\n x09 ^= rotl(x05 + x01 | 0, 7);\n x13 ^= rotl(x09 + x05 | 0, 9);\n x01 ^= rotl(x13 + x09 | 0, 13);\n x05 ^= rotl(x01 + x13 | 0, 18);\n x14 ^= rotl(x10 + x06 | 0, 7);\n x02 ^= rotl(x14 + x10 | 0, 9);\n x06 ^= rotl(x02 + x14 | 0, 13);\n x10 ^= rotl(x06 + x02 | 0, 18);\n x03 ^= rotl(x15 + x11 | 0, 7);\n x07 ^= rotl(x03 + x15 | 0, 9);\n x11 ^= rotl(x07 + x03 | 0, 13);\n x15 ^= rotl(x11 + x07 | 0, 18);\n x01 ^= rotl(x00 + x03 | 0, 7);\n x02 ^= rotl(x01 + x00 | 0, 9);\n x03 ^= rotl(x02 + x01 | 0, 13);\n x00 ^= rotl(x03 + x02 | 0, 18);\n x06 ^= rotl(x05 + x04 | 0, 7);\n x07 ^= rotl(x06 + x05 | 0, 9);\n x04 ^= rotl(x07 + x06 | 0, 13);\n x05 ^= rotl(x04 + x07 | 0, 18);\n x11 ^= rotl(x10 + x09 | 0, 7);\n x08 ^= rotl(x11 + x10 | 0, 9);\n x09 ^= rotl(x08 + x11 | 0, 13);\n x10 ^= rotl(x09 + x08 | 0, 18);\n x12 ^= rotl(x15 + x14 | 0, 7);\n x13 ^= rotl(x12 + x15 | 0, 9);\n x14 ^= rotl(x13 + x12 | 0, 13);\n x15 ^= rotl(x14 + x13 | 0, 18);\n }\n // Write output (salsa)\n out[oi++] = (y00 + x00) | 0;\n out[oi++] = (y01 + x01) | 0;\n out[oi++] = (y02 + x02) | 0;\n out[oi++] = (y03 + x03) | 0;\n out[oi++] = (y04 + x04) | 0;\n out[oi++] = (y05 + x05) | 0;\n out[oi++] = (y06 + x06) | 0;\n out[oi++] = (y07 + x07) | 0;\n out[oi++] = (y08 + x08) | 0;\n out[oi++] = (y09 + x09) | 0;\n out[oi++] = (y10 + x10) | 0;\n out[oi++] = (y11 + x11) | 0;\n out[oi++] = (y12 + x12) | 0;\n out[oi++] = (y13 + x13) | 0;\n out[oi++] = (y14 + x14) | 0;\n out[oi++] = (y15 + x15) | 0;\n}\nfunction BlockMix(input, ii, out, oi, r) {\n // The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)\n let head = oi + 0;\n let tail = oi + 16 * r;\n for (let i = 0; i < 16; i++)\n out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; // X ← B[2r−1]\n for (let i = 0; i < r; i++, head += 16, ii += 16) {\n // We write odd & even Yi at same time. Even: 0bXXXXX0 Odd: 0bXXXXX1\n XorAndSalsa(out, tail, input, ii, out, head); // head[i] = Salsa(blockIn[2*i] ^ tail[i-1])\n if (i > 0)\n tail += 16; // First iteration overwrites tmp value in tail\n XorAndSalsa(out, head, input, (ii += 16), out, tail); // tail[i] = Salsa(blockIn[2*i+1] ^ head[i])\n }\n}\n// Common prologue and epilogue for sync/async functions\nfunction scryptInit(password, salt, _opts) {\n // Maxmem - 1GB+1KB by default\n const opts = checkOpts({\n dkLen: 32,\n asyncTick: 10,\n maxmem: 1024 ** 3 + 1024,\n }, _opts);\n const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts;\n assertNumber(N);\n assertNumber(r);\n assertNumber(p);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n assertNumber(maxmem);\n if (onProgress !== undefined && typeof onProgress !== 'function')\n throw new Error('progressCb should be function');\n const blockSize = 128 * r;\n const blockSize32 = blockSize / 4;\n if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) {\n // NOTE: we limit N to be less than 2**32 because of 32 bit variant of Integrify function\n // There is no JS engines that allows alocate more than 4GB per single Uint8Array for now, but can change in future.\n throw new Error('Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32');\n }\n if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) {\n throw new Error('Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)');\n }\n if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) {\n throw new Error('Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32');\n }\n const memUsed = blockSize * (N + p);\n if (memUsed > maxmem) {\n throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`);\n }\n // [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)\n // Since it has only one iteration there is no reason to use async variant\n const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });\n const B32 = u32(B);\n // Re-used between parallel iterations. Array(iterations) of B\n const V = u32(new Uint8Array(blockSize * N));\n const tmp = u32(new Uint8Array(blockSize));\n let blockMixCb = () => { };\n if (onProgress) {\n const totalBlockMix = 2 * N * p;\n // Invoke callback if progress changes from 10.01 to 10.02\n // Allows to draw smooth progress bar on up to 8K screen\n const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1);\n let blockMixCnt = 0;\n blockMixCb = () => {\n blockMixCnt++;\n if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))\n onProgress(blockMixCnt / totalBlockMix);\n };\n }\n return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };\n}\nfunction scryptOutput(password, dkLen, B, V, tmp) {\n const res = pbkdf2(sha256, password, B, { c: 1, dkLen });\n B.fill(0);\n V.fill(0);\n tmp.fill(0);\n return res;\n}\n/**\n * Scrypt KDF from RFC 7914.\n * @param password - pass\n * @param salt - salt\n * @param opts - parameters\n * - `N` is cpu/mem work factor (power of 2 e.g. 2**18)\n * - `r` is block size (8 is common), fine-tunes sequential memory read size and performance\n * - `p` is parallelization factor (1 is common)\n * - `dkLen` is output key length in bytes e.g. 32.\n * - `asyncTick` - (default: 10) max time in ms for which async function can block execution\n * - `maxmem` - (default: `1024 ** 3 + 1024` aka 1GB+1KB). A limit that the app could use for scrypt\n * - `onProgress` - callback function that would be executed for progress report\n * @returns Derived key\n */\nexport function scrypt(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n for (let i = 0, pos = 0; i < N - 1; i++) {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n }\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n for (let i = 0; i < N; i++) {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n }\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n/**\n * Scrypt KDF from RFC 7914.\n */\nexport async function scryptAsync(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n let pos = 0;\n await asyncLoop(N - 1, asyncTick, (i) => {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n });\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n await asyncLoop(N, asyncTick, (i) => {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n });\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n","import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from \"@noble/hashes/scrypt\";\nimport { hexlify as H } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet lockedSync = false, lockedAsync = false;\nconst _scryptAsync = async function (passwd, salt, N, r, p, dkLen, onProgress) {\n return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress });\n};\nconst _scryptSync = function (passwd, salt, N, r, p, dkLen) {\n return _nobleSync(passwd, salt, { N, r, p, dkLen });\n};\nlet __scryptAsync = _scryptAsync;\nlet __scryptSync = _scryptSync;\nexport async function scrypt(_passwd, _salt, N, r, p, dkLen, progress) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress));\n}\nscrypt._ = _scryptAsync;\nscrypt.lock = function () { lockedAsync = true; };\nscrypt.register = function (func) {\n if (lockedAsync) {\n throw new Error(\"scrypt is locked\");\n }\n __scryptAsync = func;\n};\nObject.freeze(scrypt);\nexport function scryptSync(_passwd, _salt, N, r, p, dkLen) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(__scryptSync(passwd, salt, N, r, p, dkLen));\n}\nscryptSync._ = _scryptSync;\nscryptSync.lock = function () { lockedSync = true; };\nscryptSync.register = function (func) {\n if (lockedSync) {\n throw new Error(\"scryptSync is locked\");\n }\n __scryptSync = func;\n};\nObject.freeze(scryptSync);\n//# sourceMappingURL=scrypt.js.map","import { createHash } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nconst _sha256 = function (data) {\n return createHash(\"sha256\").update(data).digest();\n};\nconst _sha512 = function (data) {\n return createHash(\"sha512\").update(data).digest();\n};\nlet __sha256 = _sha256;\nlet __sha512 = _sha512;\nlet locked256 = false, locked512 = false;\nexport function sha256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha256(data));\n}\nsha256._ = _sha256;\nsha256.lock = function () { locked256 = true; };\nsha256.register = function (func) {\n if (locked256) {\n throw new Error(\"sha256 is locked\");\n }\n __sha256 = func;\n};\nObject.freeze(sha256);\nexport function sha512(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha512(data));\n}\nsha512._ = _sha512;\nsha512.lock = function () { locked512 = true; };\nsha512.register = function (func) {\n if (locked512) {\n throw new Error(\"sha512 is locked\");\n }\n __sha512 = func;\n};\nObject.freeze(sha256);\n//# sourceMappingURL=sha2.js.map","// We import all these so we can export lock()\nimport { computeHmac } from \"./hmac.js\";\nimport { keccak256 } from \"./keccak.js\";\nimport { ripemd160 } from \"./ripemd160.js\";\nimport { pbkdf2 } from \"./pbkdf2.js\";\nimport { randomBytes } from \"./random.js\";\nimport { scrypt, scryptSync } from \"./scrypt.js\";\nimport { sha256, sha512 } from \"./sha2.js\";\nexport { computeHmac, randomBytes, keccak256, ripemd160, sha256, sha512, pbkdf2, scrypt, scryptSync };\nexport function lock() {\n computeHmac.lock();\n keccak256.lock();\n pbkdf2.lock();\n randomBytes.lock();\n ripemd160.lock();\n scrypt.lock();\n scryptSync.lock();\n sha256.lock();\n sha512.lock();\n}\n//# sourceMappingURL=index.js.map","export const version = \"@ethersproject/address@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { arrayify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\nfunction getChecksumAddress(address) {\n // if (!isHexString(address, 20)) {\n // logger.throwArgumentError(\"invalid address\", \"address\", address);\n // }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = arrayify(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nconst Base36 = (function () {\n ;\n const result = {};\n for (let i = 0; i < 36; i++) {\n const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n result[key] = BigInt(i);\n }\n return result;\n})();\nfunction fromBase36(value) {\n value = value.toLowerCase();\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result = result * BN_36 + Base36[value[i]];\n }\n return result;\n}\nexport function getAddress(address) {\n if (typeof (address) !== \"string\") {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (address.substring(0, 2) !== \"0x\") {\n address = \"0x\" + address;\n }\n const result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n logger.throwArgumentError(\"bad address checksum\", \"address\", address);\n }\n return result;\n }\n // Maybe ICAP? (we only support direct mode)\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n logger.throwArgumentError(\"bad icap checksum\", \"address\", address);\n }\n let result = fromBase36(address.substring(4)).toString(16);\n while (result.length < 40) {\n result = \"0\" + result;\n }\n return getChecksumAddress(\"0x\" + result);\n }\n return logger.throwArgumentError(\"invalid address\", \"address\", address);\n}\nexport function getIcapAddress(address) {\n //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n//# sourceMappingURL=address.js.map","export const version = \"@ethersproject/rlp@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { logger } from \"./logger.js\";\nfunction arrayifyInteger(value) {\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\nfunction _encode(object) {\n if (Array.isArray(object)) {\n let payload = [];\n object.forEach(function (child) {\n payload = payload.concat(_encode(child));\n });\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length);\n return payload;\n }\n const length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n return length.concat(payload);\n }\n const data = Array.prototype.slice.call(logger.getBytes(object, \"object\"));\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n }\n else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n const length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n return length.concat(data);\n}\nconst nibbles = \"0123456789abcdef\";\nexport function encodeRlp(object) {\n let result = \"0x\";\n for (const v of _encode(object)) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0xf];\n }\n return result;\n}\n//# sourceMappingURL=encode.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction hexlifyByte(value) {\n let result = value.toString(16);\n while (result.length < 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction unarrayifyInteger(data, offset, length) {\n let result = 0;\n for (let i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\nfunction _decodeChildren(data, offset, childOffset, length) {\n const result = [];\n while (childOffset < offset + 1 + length) {\n const decoded = _decode(data, childOffset);\n result.push(decoded.result);\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n logger.throwError(\"child data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length, offset\n });\n }\n }\n return { consumed: (1 + length), result: result };\n}\n// returns { consumed: number, result: Object }\nfunction _decode(data, offset) {\n if (data.length === 0) {\n logger.throwError(\"data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: 0, offset: 1\n });\n }\n const checkOffset = (offset) => {\n if (offset > data.length) {\n logger.throwError(\"data short segment too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: data.length, offset\n });\n }\n };\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n const lengthLength = data[offset] - 0xf7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n }\n else if (data[offset] >= 0xc0) {\n const length = data[offset] - 0xc0;\n checkOffset(offset + 1 + length);\n return _decodeChildren(data, offset, offset + 1, length);\n }\n else if (data[offset] >= 0xb8) {\n const lengthLength = data[offset] - 0xb7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result };\n }\n else if (data[offset] >= 0x80) {\n const length = data[offset] - 0x80;\n checkOffset(offset + 1 + length);\n const result = hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result };\n }\n return { consumed: 1, result: hexlifyByte(data[offset]) };\n}\nexport function decodeRlp(_data) {\n const data = logger.getBytes(_data, \"data\");\n const decoded = _decode(data, 0);\n if (decoded.consumed !== data.length) {\n logger.throwArgumentError(\"unexpected junk after rlp payload\", \"data\", _data);\n }\n return decoded.result;\n}\n//# sourceMappingURL=decode.js.map","import { concat, dataSlice } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nexport function getCreateAddress(tx) {\n const from = getAddress(tx.from);\n const nonce = logger.getBigInt(tx.nonce, \"tx.nonce\");\n let nonceHex = nonce.toString(16);\n if (nonceHex === \"0\") {\n nonceHex = \"0x\";\n }\n else if (nonceHex.length % 2) {\n nonceHex = \"0x0\" + nonceHex;\n }\n else {\n nonceHex = \"0x\" + nonceHex;\n }\n return getAddress(dataSlice(keccak256(encodeRlp([from, nonceHex])), 12));\n}\nexport function getCreate2Address(_from, _salt, _initCodeHash) {\n const from = getAddress(_from);\n const salt = logger.getBytes(_salt, \"salt\");\n const initCodeHash = logger.getBytes(_initCodeHash, \"initCodeHash\");\n if (salt.length !== 32) {\n logger.throwArgumentError(\"salt must be 32 bytes\", \"salt\", _salt);\n }\n if (initCodeHash.length !== 32) {\n logger.throwArgumentError(\"initCodeHash must be 32 bytes\", \"initCodeHash\", _initCodeHash);\n }\n return getAddress(dataSlice(keccak256(concat([\"0xff\", from, salt, initCodeHash])), 12));\n}\n//# sourceMappingURL=contract-address.js.map","import { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport function isAddressable(value) {\n return (value && typeof (value.getAddress) === \"function\");\n}\nexport function isAddress(value) {\n try {\n getAddress(value);\n return true;\n }\n catch (error) { }\n return false;\n}\n// Resolves an Ethereum address, ENS name or Addressable object,\n// throwing if the result is null; an explicit null returns null\n//export async function resolveAddress(target?: null, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: null | undefined | string | Addressable, resolver?: null | NameResolver) {\nexport async function resolveAddress(target, resolver) {\n //if (target == null) { return null; }\n if (typeof (target) === \"string\") {\n if (target.match(/^0x[0-9a-f]{40}$/i)) {\n return getAddress(target);\n }\n if (resolver == null) {\n return logger.throwError(\"ENS resolution requires a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n });\n }\n const result = await resolver.resolveName(target);\n if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n return logger.throwError(\"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n }\n return getAddress(result);\n }\n else if (isAddressable(target)) {\n const result = await target.getAddress();\n if (result == null) {\n logger.throwArgumentError(\"addressable resolved to null\", \"target\", target);\n }\n return getAddress(result);\n }\n return logger.throwArgumentError(\"unsupported addressable value\", \"target\", target);\n}\n//# sourceMappingURL=checks.js.map","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 _Typed_options;\nimport { defineProperties } from \"@ethersproject/properties\";\nconst _gaurd = {};\nfunction n(value, width) {\n let signed = false;\n if (width < 0) {\n signed = true;\n width *= -1;\n }\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `${signed ? \"\" : \"u\"}int${width}`, value, { signed, width });\n}\nfunction b(value, size) {\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `bytes${(size) ? size : \"\"}`, value, { size });\n}\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\nexport class Typed {\n constructor(gaurd, type, value, options = null) {\n _Typed_options.set(this, void 0);\n if (gaurd !== _gaurd) {\n throw new Error(\"private constructor\");\n }\n defineProperties(this, { _typedSymbol, type, value });\n __classPrivateFieldSet(this, _Typed_options, options, \"f\");\n // Check the value is valid\n this.format();\n }\n format() {\n if (this.type === \"array\") {\n throw new Error(\"\");\n }\n else if (this.type === \"dynamicArray\") {\n throw new Error(\"\");\n }\n else if (this.type === \"tuple\") {\n return `tuple(${this.value.map((v) => v.format()).join(\",\")})`;\n }\n return this.type;\n }\n defaultValue() {\n return 0;\n }\n minValue() {\n return 0;\n }\n maxValue() {\n return 0;\n }\n isBigInt() {\n return !!(this.type.match(/^u?int[0-9]+$/));\n }\n isData() {\n return (this.type.substring(0, 5) === \"bytes\");\n }\n isString() {\n return (this.type === \"string\");\n }\n get tupleName() {\n if (this.type !== \"tuple\") {\n throw TypeError(\"not a tuple\");\n }\n return __classPrivateFieldGet(this, _Typed_options, \"f\");\n }\n // Returns the length of this type as an array\n // - `null` indicates the length is unforced, it could be dynamic\n // - `-1` indicates the length is dynamic\n // - any other value indicates it is a static array and is its length\n get arrayLength() {\n if (this.type !== \"array\") {\n throw TypeError(\"not an array\");\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === true) {\n return -1;\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === false) {\n return (this.value).length;\n }\n return null;\n }\n static from(type, value) {\n return new Typed(_gaurd, type, value);\n }\n static uint8(v) { return n(v, 8); }\n static uint16(v) { return n(v, 16); }\n static uint24(v) { return n(v, 24); }\n static uint32(v) { return n(v, 32); }\n static uint40(v) { return n(v, 40); }\n static uint48(v) { return n(v, 46); }\n static uint56(v) { return n(v, 56); }\n static uint64(v) { return n(v, 64); }\n static uint72(v) { return n(v, 72); }\n static uint80(v) { return n(v, 80); }\n static uint88(v) { return n(v, 88); }\n static uint96(v) { return n(v, 96); }\n static uint104(v) { return n(v, 104); }\n static uint112(v) { return n(v, 112); }\n static uint120(v) { return n(v, 120); }\n static uint128(v) { return n(v, 128); }\n static uint136(v) { return n(v, 136); }\n static uint144(v) { return n(v, 144); }\n static uint152(v) { return n(v, 152); }\n static uint160(v) { return n(v, 160); }\n static uint168(v) { return n(v, 168); }\n static uint176(v) { return n(v, 176); }\n static uint184(v) { return n(v, 184); }\n static uint192(v) { return n(v, 192); }\n static uint200(v) { return n(v, 200); }\n static uint208(v) { return n(v, 208); }\n static uint216(v) { return n(v, 216); }\n static uint224(v) { return n(v, 224); }\n static uint232(v) { return n(v, 232); }\n static uint240(v) { return n(v, 240); }\n static uint248(v) { return n(v, 248); }\n static uint256(v) { return n(v, 256); }\n static uint(v) { return n(v, 256); }\n static int8(v) { return n(v, -8); }\n static int16(v) { return n(v, -16); }\n static int24(v) { return n(v, -24); }\n static int32(v) { return n(v, -32); }\n static int40(v) { return n(v, -40); }\n static int48(v) { return n(v, -46); }\n static int56(v) { return n(v, -56); }\n static int64(v) { return n(v, -64); }\n static int72(v) { return n(v, -72); }\n static int80(v) { return n(v, -80); }\n static int88(v) { return n(v, -88); }\n static int96(v) { return n(v, -96); }\n static int104(v) { return n(v, -104); }\n static int112(v) { return n(v, -112); }\n static int120(v) { return n(v, -120); }\n static int128(v) { return n(v, -128); }\n static int136(v) { return n(v, -136); }\n static int144(v) { return n(v, -144); }\n static int152(v) { return n(v, -152); }\n static int160(v) { return n(v, -160); }\n static int168(v) { return n(v, -168); }\n static int176(v) { return n(v, -176); }\n static int184(v) { return n(v, -184); }\n static int192(v) { return n(v, -192); }\n static int200(v) { return n(v, -200); }\n static int208(v) { return n(v, -208); }\n static int216(v) { return n(v, -216); }\n static int224(v) { return n(v, -224); }\n static int232(v) { return n(v, -232); }\n static int240(v) { return n(v, -240); }\n static int248(v) { return n(v, -248); }\n static int256(v) { return n(v, -256); }\n static int(v) { return n(v, -256); }\n static bytes(v) { return b(v); }\n static bytes1(v) { return b(v, 1); }\n static bytes2(v) { return b(v, 2); }\n static bytes3(v) { return b(v, 3); }\n static bytes4(v) { return b(v, 4); }\n static bytes5(v) { return b(v, 5); }\n static bytes6(v) { return b(v, 6); }\n static bytes7(v) { return b(v, 7); }\n static bytes8(v) { return b(v, 8); }\n static bytes9(v) { return b(v, 9); }\n static bytes10(v) { return b(v, 10); }\n static bytes11(v) { return b(v, 11); }\n static bytes12(v) { return b(v, 12); }\n static bytes13(v) { return b(v, 13); }\n static bytes14(v) { return b(v, 14); }\n static bytes15(v) { return b(v, 15); }\n static bytes16(v) { return b(v, 16); }\n static bytes17(v) { return b(v, 17); }\n static bytes18(v) { return b(v, 18); }\n static bytes19(v) { return b(v, 19); }\n static bytes20(v) { return b(v, 20); }\n static bytes21(v) { return b(v, 21); }\n static bytes22(v) { return b(v, 22); }\n static bytes23(v) { return b(v, 23); }\n static bytes24(v) { return b(v, 24); }\n static bytes25(v) { return b(v, 25); }\n static bytes26(v) { return b(v, 26); }\n static bytes27(v) { return b(v, 27); }\n static bytes28(v) { return b(v, 28); }\n static bytes29(v) { return b(v, 29); }\n static bytes30(v) { return b(v, 30); }\n static bytes31(v) { return b(v, 31); }\n static bytes32(v) { return b(v, 32); }\n static address(v) { return new Typed(_gaurd, \"address\", v); }\n static bool(v) { return new Typed(_gaurd, \"bool\", !!v); }\n static string(v) { return new Typed(_gaurd, \"string\", v); }\n static array(v, dynamic) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"array\", v, dynamic);\n }\n static tuple(v, name) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"tuple\", v, name);\n }\n static overrides(v) {\n return new Typed(_gaurd, \"overrides\", Object.assign({}, v));\n }\n static isTyped(value) {\n return (value && value._typedSymbol === _typedSymbol);\n }\n static dereference(value, type) {\n if (Typed.isTyped(value)) {\n if (value.type !== type) {\n throw new Error(`invalid type: expecetd ${type}, got ${value.type}`);\n }\n return value.value;\n }\n return value;\n }\n}\n_Typed_options = new WeakMap();\n//# sourceMappingURL=typed.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class AddressCoder extends Coder {\n constructor(localName) {\n super(\"address\", \"address\", localName, false);\n }\n defaultValue() {\n return \"0x0000000000000000000000000000000000000000\";\n }\n encode(writer, _value) {\n let value = Typed.dereference(_value, \"string\");\n try {\n value = getAddress(value);\n }\n catch (error) {\n return this._throwError(error.message, _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n return getAddress(toHex(reader.readValue(), 20));\n }\n}\n//# sourceMappingURL=address.js.map","import { Coder } from \"./abstract-coder.js\";\n// Clones the functionality of an existing Coder, but without a localName\nexport class AnonymousCoder extends Coder {\n constructor(coder) {\n super(coder.name, coder.type, \"_\", coder.dynamic);\n this.coder = coder;\n }\n defaultValue() {\n return this.coder.defaultValue();\n }\n encode(writer, value) {\n return this.coder.encode(writer, value);\n }\n decode(reader) {\n return this.coder.decode(reader);\n }\n}\n//# sourceMappingURL=anonymous.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { isError } from \"@ethersproject/logger\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\nexport function pack(writer, coders, values) {\n let arrayValues = [];\n if (Array.isArray(values)) {\n arrayValues = values;\n }\n else if (values && typeof (values) === \"object\") {\n let unique = {};\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n if (!name) {\n logger.throwError(\"cannot encode object for signature with missing names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n if (unique[name]) {\n logger.throwError(\"cannot encode object for signature with duplicate names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n unique[name] = true;\n return values[name];\n });\n }\n else {\n logger.throwArgumentError(\"invalid tuple value\", \"tuple\", values);\n }\n if (coders.length !== arrayValues.length) {\n logger.throwArgumentError(\"types/value length mismatch\", \"tuple\", values);\n }\n let staticWriter = new Writer();\n let dynamicWriter = new Writer();\n let updateFuncs = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n }\n else {\n coder.encode(staticWriter, value);\n }\n });\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\nexport function unpack(reader, coders) {\n let values = [];\n let keys = [];\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n coders.forEach((coder) => {\n let value = null;\n if (coder.dynamic) {\n let offset = reader.readIndex();\n let offsetReader = baseReader.subReader(offset);\n try {\n value = coder.decode(offsetReader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n else {\n try {\n value = coder.decode(reader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n if (value == undefined) {\n throw new Error(\"investigate\");\n }\n values.push(value);\n keys.push(coder.localName || null);\n });\n return Result.fromItems(values, keys);\n}\nexport class ArrayCoder extends Coder {\n constructor(coder, length, localName) {\n const type = (coder.type + \"[\" + (length >= 0 ? length : \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n defineProperties(this, { coder, length });\n }\n defaultValue() {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n const result = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"array\");\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n let count = this.length;\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n logger.assertArgumentCount(value.length, count, \"coder array\" + (this.localName ? (\" \" + this.localName) : \"\"));\n let coders = [];\n for (let i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return pack(writer, coders, value);\n }\n decode(reader) {\n let count = this.length;\n if (count === -1) {\n count = reader.readIndex();\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n if (count * WordSize > reader.dataLength) {\n logger.throwError(\"insufficient data length\", \"BUFFER_OVERRUN\", {\n buffer: reader.bytes,\n offset: count * WordSize,\n length: reader.dataLength\n });\n }\n }\n let coders = [];\n for (let i = 0; i < count; i++) {\n coders.push(new AnonymousCoder(this.coder));\n }\n return reader.coerce(this.name, unpack(reader, coders));\n }\n}\n//# sourceMappingURL=array.js.map","import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class BooleanCoder extends Coder {\n constructor(localName) {\n super(\"bool\", \"bool\", localName, false);\n }\n defaultValue() {\n return false;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"bool\");\n return writer.writeValue(value ? 1 : 0);\n }\n decode(reader) {\n return reader.coerce(this.type, !reader.readValue());\n }\n}\n//# sourceMappingURL=boolean.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class DynamicBytesCoder extends Coder {\n constructor(type, localName) {\n super(type, type, localName, true);\n }\n defaultValue() {\n return \"0x\";\n }\n encode(writer, value) {\n value = arrayify(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n decode(reader) {\n return reader.readBytes(reader.readIndex(), true);\n }\n}\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"bytes\", localName);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(super.decode(reader)));\n }\n}\n//# sourceMappingURL=bytes.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class FixedBytesCoder extends Coder {\n constructor(size, localName) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n defineProperties(this, { size }, { size: \"number\" });\n }\n defaultValue() {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n encode(writer, _value) {\n let data = arrayify(Typed.dereference(_value, this.type));\n if (data.length !== this.size) {\n this._throwError(\"incorrect data length\", _value);\n }\n return writer.writeBytes(data);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));\n }\n}\n//# sourceMappingURL=fixed-bytes.js.map","import { Coder } from \"./abstract-coder.js\";\nconst Empty = new Uint8Array([]);\nexport class NullCoder extends Coder {\n constructor(localName) {\n super(\"null\", \"\", localName, false);\n }\n defaultValue() {\n return null;\n }\n encode(writer, value) {\n if (value != null) {\n this._throwError(\"not null\", value);\n }\n return writer.writeBytes(Empty);\n }\n decode(reader) {\n reader.readBytes(0);\n return reader.coerce(this.name, null);\n }\n}\n//# sourceMappingURL=null.js.map","import { fromTwos, mask, toTwos } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\nexport class NumberCoder extends Coder {\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n defineProperties(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n }\n defaultValue() {\n return 0;\n }\n encode(writer, _value) {\n let value = logger.getBigInt(Typed.dereference(_value, this.type));\n // Check bounds are safe for encoding\n let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n if (this.signed) {\n let bounds = mask(maxUintValue, (this.size * 8) - 1);\n if (value > bounds || value < -(bounds + BN_1)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n }\n else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n value = mask(toTwos(value, this.size * 8), this.size * 8);\n if (this.signed) {\n value = toTwos(fromTwos(value, this.size * 8), 8 * WordSize);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n let value = mask(reader.readValue(), this.size * 8);\n if (this.signed) {\n value = fromTwos(value, this.size * 8);\n }\n return reader.coerce(this.name, value);\n }\n}\n//# sourceMappingURL=number.js.map","export const version = \"@ethersproject/strings@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push((badCodepoint != null) ? badCodepoint : -1);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n const bytes = logger.getBytes(_bytes, \"bytes\");\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.assertNormalize(form);\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return new Uint8Array(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","import { zeroPadRight } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8.js\";\nexport function formatBytes32String(text) {\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error(\"bytes32 string must be less than 32 bytes\");\n }\n // Zero-pad (implicitly null-terminates)\n return zeroPadRight(bytes, 32);\n}\nexport function parseBytes32String(_bytes) {\n const data = logger.getBytes(_bytes, \"bytes\");\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error(\"invalid bytes32 - not 32 bytes long\");\n }\n if (data[31] !== 0) {\n throw new Error(\"invalid bytes32 string - no null terminator\");\n }\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n//# sourceMappingURL=bytes32.js.map","import { logger } from \"./logger.js\";\nimport { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from \"./utf8.js\";\nfunction bytes2(data) {\n if ((data.length % 4) !== 0) {\n throw new Error(\"should not happen; bad data\");\n }\n let result = [];\n for (let i = 0; i < data.length; i += 4) {\n result.push(parseInt(data.substring(i, i + 4), 16));\n }\n return result;\n}\nfunction createTable(data, _func) {\n const func = _func || function (value) { return [parseInt(value, 16)]; };\n let lo = 0;\n let result = {};\n data.split(\",\").forEach((pair) => {\n let comps = pair.split(\":\");\n lo += parseInt(comps[0], 16);\n result[lo] = func(comps[1]);\n });\n return result;\n}\nfunction createRangeTable(data) {\n let hi = 0;\n return data.split(\",\").map((v) => {\n let comps = v.split(\"-\");\n if (comps.length === 1) {\n comps[1] = \"0\";\n }\n else if (comps[1] === \"\") {\n comps[1] = \"1\";\n }\n let lo = hi + parseInt(comps[0], 16);\n hi = parseInt(comps[1], 16);\n return { l: lo, h: hi };\n });\n}\nfunction matchMap(value, ranges) {\n let lo = 0;\n for (let i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n lo += range.l;\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n if (range.e && range.e.indexOf(value - lo) !== -1) {\n continue;\n }\n return range;\n }\n }\n return null;\n}\nconst Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n// @TODO: Make this relative...\nconst Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map((v) => parseInt(v, 16));\nconst Table_B_2_ranges = [\n { h: 25, s: 32, l: 65 },\n { h: 30, s: 32, e: [23], l: 127 },\n { h: 54, s: 1, e: [48], l: 64, d: 2 },\n { h: 14, s: 1, l: 57, d: 2 },\n { h: 44, s: 1, l: 17, d: 2 },\n { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\n { h: 16, s: 1, l: 68, d: 2 },\n { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\n { h: 26, s: 32, e: [17], l: 435 },\n { h: 22, s: 1, l: 71, d: 2 },\n { h: 15, s: 80, l: 40 },\n { h: 31, s: 32, l: 16 },\n { h: 32, s: 1, l: 80, d: 2 },\n { h: 52, s: 1, l: 42, d: 2 },\n { h: 12, s: 1, l: 55, d: 2 },\n { h: 40, s: 1, e: [38], l: 15, d: 2 },\n { h: 14, s: 1, l: 48, d: 2 },\n { h: 37, s: 48, l: 49 },\n { h: 148, s: 1, l: 6351, d: 2 },\n { h: 88, s: 1, l: 160, d: 2 },\n { h: 15, s: 16, l: 704 },\n { h: 25, s: 26, l: 854 },\n { h: 25, s: 32, l: 55915 },\n { h: 37, s: 40, l: 1247 },\n { h: 25, s: -119711, l: 53248 },\n { h: 25, s: -119763, l: 52 },\n { h: 25, s: -119815, l: 52 },\n { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\n { h: 25, s: -119919, l: 52 },\n { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\n { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\n { h: 25, s: -120075, l: 52 },\n { h: 25, s: -120127, l: 52 },\n { h: 25, s: -120179, l: 52 },\n { h: 25, s: -120231, l: 52 },\n { h: 25, s: -120283, l: 52 },\n { h: 25, s: -120335, l: 52 },\n { h: 24, s: -119543, e: [17], l: 56 },\n { h: 24, s: -119601, e: [17], l: 58 },\n { h: 24, s: -119659, e: [17], l: 58 },\n { h: 24, s: -119717, e: [17], l: 58 },\n { h: 24, s: -119775, e: [17], l: 58 }\n];\nconst Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nconst Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nconst Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\nconst Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\nfunction flatten(values) {\n return values.reduce((accum, value) => {\n value.forEach((value) => { accum.push(value); });\n return accum;\n }, []);\n}\nexport function _nameprepTableA1(codepoint) {\n return !!matchMap(codepoint, Table_A_1_ranges);\n}\nexport function _nameprepTableB2(codepoint) {\n const range = matchMap(codepoint, Table_B_2_ranges);\n if (range) {\n if (range.s == null) {\n throw new Error(\"should not happenl bad range\");\n }\n return [codepoint + range.s];\n }\n const codes = Table_B_2_lut_abs[codepoint];\n if (codes) {\n return codes;\n }\n const shift = Table_B_2_lut_rel[codepoint];\n if (shift) {\n return [codepoint + shift[0]];\n }\n const complex = Table_B_2_complex[codepoint];\n if (complex) {\n return complex;\n }\n return null;\n}\nexport function _nameprepTableC(codepoint) {\n return !!matchMap(codepoint, Table_C_ranges);\n}\nexport function nameprep(value) {\n // This allows platforms with incomplete normalize to bypass\n // it for very basic names which the built-in toLowerCase\n // will certainly handle correctly\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\n return value.toLowerCase();\n }\n // Get the code points (keeping the current normalization)\n let codes = toUtf8CodePoints(value);\n codes = flatten(codes.map((code) => {\n // Substitute Table B.1 (Maps to Nothing)\n if (Table_B_1_flags.indexOf(code) >= 0) {\n return [];\n }\n if (code >= 0xfe00 && code <= 0xfe0f) {\n return [];\n }\n // Substitute Table B.2 (Case Folding)\n let codesTableB2 = _nameprepTableB2(code);\n if (codesTableB2) {\n return codesTableB2;\n }\n // No Substitution\n return [code];\n }));\n // Normalize using form KC\n codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC);\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n codes.forEach((code) => {\n if (_nameprepTableC(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_PROHIBITED\", \"value\", value);\n }\n });\n // Prohibit Unassigned Code Points (Table A.1)\n codes.forEach((code) => {\n if (_nameprepTableA1(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_UNASSIGNED\", \"value\", value);\n }\n });\n // IDNA extras\n let name = _toUtf8String(codes);\n // IDNA: 4.2.3.1\n if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n logger.throwArgumentError(\"invalid hyphen\", \"value\", value);\n }\n // IDNA: 4.2.4\n if (name.length > 63) {\n logger.throwArgumentError(\"too long\", \"value\", value);\n }\n return name;\n}\n//# sourceMappingURL=idna.js.map","import { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, _value) {\n return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nimport { pack, unpack } from \"./array.js\";\nexport class TupleCoder extends Coder {\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n defineProperties(this, { coders: Object.freeze(coders.slice()) });\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"tuple\");\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return reader.coerce(this.name, unpack(reader, this.coders));\n }\n}\n//# sourceMappingURL=tuple.js.map","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 _AbiCoder_instances, _AbiCoder_getCoder;\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n//import { arrayify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nimport { Reader, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nexport class AbiCoder {\n constructor(coerceFunc) {\n _AbiCoder_instances.add(this);\n defineProperties(this, { coerceFunc }, {}, { coerceFunc: null });\n }\n getDefaultValue(types) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n encode(types, values) {\n logger.assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n const writer = new Writer();\n coder.encode(writer, values);\n return writer.data;\n }\n decode(types, data, loose) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(new Reader(data, this.coerceFunc, loose));\n }\n}\n_AbiCoder_instances = new WeakSet(), _AbiCoder_getCoder = function _AbiCoder_getCoder(param) {\n if (param.isArray()) {\n return new ArrayCoder(__classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, param.arrayChildren), param.arrayLength, param.name);\n }\n if (param.isTuple()) {\n return new TupleCoder(param.components.map((c) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, c)), param.name);\n }\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n logger.throwArgumentError(\"invalid \" + match[1] + \" bit length\", \"param\", param);\n }\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"param\", param);\n }\n return new FixedBytesCoder(size, param.name);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", param.type);\n};\nexport const defaultAbiCoder = new AbiCoder();\n//# sourceMappingURL=abi-coder.js.map","import { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport function id(value) {\n return keccak256(toUtf8Bytes(value));\n}\n//# sourceMappingURL=id.js.map","export const version = \"@ethersproject/hash@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { nameprep, toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\nconst Partition = new RegExp(\"^((.*)\\\\.)?([^.]+)$\");\nexport function isValidName(name) {\n try {\n const comps = name.split(\".\");\n for (let i = 0; i < comps.length; i++) {\n if (nameprep(comps[i]).length === 0) {\n throw new Error(\"empty\");\n }\n }\n return true;\n }\n catch (error) { }\n return false;\n}\nexport function namehash(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name; not a string\", \"name\", name);\n }\n let current = name;\n let result = Zeros;\n while (current.length) {\n const partition = current.match(Partition);\n if (partition == null || partition[2] === \"\") {\n return logger.throwArgumentError(\"invalid ENS name; missing component\", \"name\", name);\n }\n const label = toUtf8Bytes(nameprep(partition[3]));\n result = keccak256(concat([result, keccak256(label)]));\n current = partition[2] || \"\";\n }\n return hexlify(result);\n}\nexport function dnsEncode(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid DNS name; not a string\", \"name\", name);\n }\n if (name === \"\") {\n return \"0x00\";\n }\n // @TODO: should we enforce the 255 octet limit?\n return concat(name.split(\".\").map((comp) => {\n if (comp === \"\") {\n logger.throwArgumentError(\"invalid DNS name; missing component\", \"name\", name);\n }\n // We jam in an _ prefix to fill in with the length later\n // Note: Nameprep throws if the component is over 63 bytes\n const bytes = toUtf8Bytes(\"_\" + nameprep(comp));\n bytes[0] = bytes.length - 1;\n return bytes;\n })) + \"00\";\n}\n//# sourceMappingURL=namehash.js.map","import { concat } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport const messagePrefix = \"\\x19Ethereum Signed Message:\\n\";\nexport function hashMessage(message) {\n if (typeof (message) === \"string\") {\n message = toUtf8Bytes(message);\n }\n return keccak256(concat([\n toUtf8Bytes(messagePrefix),\n toUtf8Bytes(String(message.length)),\n message\n ]));\n}\n//# sourceMappingURL=message.js.map","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 _TypedDataEncoder_instances, _TypedDataEncoder_types, _TypedDataEncoder_fullTypes, _TypedDataEncoder_encoderCache, _TypedDataEncoder_getEncoder;\n//import { TypedDataDomain, TypedDataField } from \"@ethersproject/providerabstract-signer\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { mask, toHex, toTwos } from \"@ethersproject/math\";\nimport { id } from \"./id.js\";\nimport { logger } from \"./logger.js\";\nconst padding = new Uint8Array(32);\npadding.fill(0);\nconst BN__1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n;\n;\nfunction hexPadRight(value) {\n const bytes = arrayify(value);\n const padOffset = bytes.length % 32;\n if (padOffset) {\n return concat([bytes, padding.slice(padOffset)]);\n }\n return hexlify(bytes);\n}\nconst hexTrue = toHex(BN_1, 32);\nconst hexFalse = toHex(BN_0, 32);\nconst domainFieldTypes = {\n name: \"string\",\n version: \"string\",\n chainId: \"uint256\",\n verifyingContract: \"address\",\n salt: \"bytes32\"\n};\nconst domainFieldNames = [\n \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\nfunction checkString(key) {\n return function (value) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);\n }\n return value;\n };\n}\nconst domainChecks = {\n name: checkString(\"name\"),\n version: checkString(\"version\"),\n chainId: function (value) {\n return logger.getBigInt(value, \"domain.chainId\");\n },\n verifyingContract: function (value) {\n try {\n return getAddress(value).toLowerCase();\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n },\n salt: function (value) {\n const bytes = logger.getBytes(value, \"domain.salt\");\n if (bytes.length !== 32) {\n logger.throwArgumentError(`invalid domain value \"salt\"`, \"domain.salt\", value);\n }\n return hexlify(bytes);\n }\n};\nfunction getBaseEncoder(type) {\n // intXX and uintXX\n {\n const match = type.match(/^(u?)int(\\d*)$/);\n if (match) {\n const signed = (match[1] === \"\");\n const width = parseInt(match[2] || \"256\");\n if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n const boundsUpper = mask(BN_MAX_UINT256, signed ? (width - 1) : width);\n const boundsLower = signed ? ((boundsUpper + BN_1) * BN__1) : BN_0;\n return function (_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < boundsLower || value > boundsUpper) {\n logger.throwArgumentError(`value out-of-bounds for ${type}`, \"value\", value);\n }\n return toHex(toTwos(value, 256), 32);\n };\n }\n }\n // bytesXX\n {\n const match = type.match(/^bytes(\\d+)$/);\n if (match) {\n const width = parseInt(match[1]);\n if (width === 0 || width > 32 || match[1] !== String(width)) {\n logger.throwArgumentError(\"invalid bytes width\", \"type\", type);\n }\n return function (value) {\n const bytes = arrayify(value);\n if (bytes.length !== width) {\n logger.throwArgumentError(`invalid length for ${type}`, \"value\", value);\n }\n return hexPadRight(value);\n };\n }\n }\n switch (type) {\n case \"address\": return function (value) {\n return zeroPadLeft(getAddress(value), 32);\n };\n case \"bool\": return function (value) {\n return ((!value) ? hexFalse : hexTrue);\n };\n case \"bytes\": return function (value) {\n return keccak256(value);\n };\n case \"string\": return function (value) {\n return id(value);\n };\n }\n return null;\n}\nfunction encodeType(name, fields) {\n return `${name}(${fields.map(({ name, type }) => (type + \" \" + name)).join(\",\")})`;\n}\nexport class TypedDataEncoder {\n constructor(types) {\n _TypedDataEncoder_instances.add(this);\n _TypedDataEncoder_types.set(this, void 0);\n _TypedDataEncoder_fullTypes.set(this, void 0);\n _TypedDataEncoder_encoderCache.set(this, void 0);\n __classPrivateFieldSet(this, _TypedDataEncoder_types, JSON.stringify(types), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_fullTypes, new Map(), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_encoderCache, new Map(), \"f\");\n // Link struct types to their direct child structs\n const links = new Map();\n // Link structs to structs which contain them as a child\n const parents = new Map();\n // Link all subtypes within a given struct\n const subtypes = new Map();\n Object.keys(types).forEach((type) => {\n links.set(type, new Set());\n parents.set(type, []);\n subtypes.set(type, new Set());\n });\n for (const name in types) {\n const uniqueNames = new Set();\n for (const field of types[name]) {\n // Check each field has a unique name\n if (uniqueNames.has(field.name)) {\n logger.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, \"types\", types);\n }\n uniqueNames.add(field.name);\n // Get the base type (drop any array specifiers)\n const baseType = (field.type.match(/^([^\\x5b]*)(\\x5b|$)/))[1] || null;\n if (baseType === name) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Is this a base encoding type?\n const encoder = getBaseEncoder(baseType);\n if (encoder) {\n continue;\n }\n if (!parents.has(baseType)) {\n logger.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Add linkage\n parents.get(baseType).push(name);\n links.get(name).add(baseType);\n }\n }\n // Deduce the primary type\n const primaryTypes = Array.from(parents.keys()).filter((n) => (parents.get(n).length === 0));\n if (primaryTypes.length === 0) {\n logger.throwArgumentError(\"missing primary type\", \"types\", types);\n }\n else if (primaryTypes.length > 1) {\n logger.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(\", \")}`, \"types\", types);\n }\n defineProperties(this, { primaryType: primaryTypes[0] });\n // Check for circular type references\n function checkCircular(type, found) {\n if (found.has(type)) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, \"types\", types);\n }\n found.add(type);\n for (const child of links.get(type)) {\n if (!parents.has(child)) {\n continue;\n }\n // Recursively check children\n checkCircular(child, found);\n // Mark all ancestors as having this decendant\n for (const subtype of found) {\n subtypes.get(subtype).add(child);\n }\n }\n found.delete(type);\n }\n checkCircular(this.primaryType, new Set());\n // Compute each fully describe type\n for (const [name, set] of subtypes) {\n const st = Array.from(set);\n st.sort();\n __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\"));\n }\n }\n get types() {\n return JSON.parse(__classPrivateFieldGet(this, _TypedDataEncoder_types, \"f\"));\n }\n getEncoder(type) {\n let encoder = __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").get(type);\n if (!encoder) {\n encoder = __classPrivateFieldGet(this, _TypedDataEncoder_instances, \"m\", _TypedDataEncoder_getEncoder).call(this, type);\n __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").set(type, encoder);\n }\n return encoder;\n }\n encodeType(name) {\n const result = __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(name);\n if (!result) {\n return logger.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, \"name\", name);\n }\n return result;\n }\n encodeData(type, value) {\n return this.getEncoder(type)(value);\n }\n hashStruct(name, value) {\n return keccak256(this.encodeData(name, value));\n }\n encode(value) {\n return this.encodeData(this.primaryType, value);\n }\n hash(value) {\n return this.hashStruct(this.primaryType, value);\n }\n _visit(type, value, callback) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return callback(type, value);\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const length = parseInt(match[3]);\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n return value.map((v) => this._visit(subtype, v, callback));\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n return fields.reduce((accum, { name, type }) => {\n accum[name] = this._visit(type, value[name], callback);\n return accum;\n }, {});\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n }\n visit(value, callback) {\n return this._visit(this.primaryType, value, callback);\n }\n static from(types) {\n return new TypedDataEncoder(types);\n }\n static getPrimaryType(types) {\n return TypedDataEncoder.from(types).primaryType;\n }\n static hashStruct(name, types, value) {\n return TypedDataEncoder.from(types).hashStruct(name, value);\n }\n static hashDomain(domain) {\n const domainFields = [];\n for (const name in domain) {\n const type = domainFieldTypes[name];\n if (!type) {\n logger.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, \"domain\", domain);\n }\n domainFields.push({ name, type });\n }\n domainFields.sort((a, b) => {\n return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n });\n return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n }\n static encode(domain, types, value) {\n return concat([\n \"0x1901\",\n TypedDataEncoder.hashDomain(domain),\n TypedDataEncoder.from(types).hash(value)\n ]);\n }\n static hash(domain, types, value) {\n return keccak256(TypedDataEncoder.encode(domain, types, value));\n }\n // Replaces all address types with ENS names with their looked up address\n static async resolveNames(domain, types, value, resolveName) {\n // Make a copy to isolate it from the object passed in\n domain = Object.assign({}, domain);\n // Look up all ENS names\n const ensCache = {};\n // Do we need to look up the domain's verifyingContract?\n if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n ensCache[domain.verifyingContract] = \"0x\";\n }\n // We are going to use the encoder to visit all the base values\n const encoder = TypedDataEncoder.from(types);\n // Get a list of all the addresses\n encoder.visit(value, (type, value) => {\n if (type === \"address\" && !isHexString(value, 20)) {\n ensCache[value] = \"0x\";\n }\n return value;\n });\n // Lookup each name\n for (const name in ensCache) {\n ensCache[name] = await resolveName(name);\n }\n // Replace the domain verifyingContract if needed\n if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n domain.verifyingContract = ensCache[domain.verifyingContract];\n }\n // Replace all ENS names with their address\n value = encoder.visit(value, (type, value) => {\n if (type === \"address\" && ensCache[value]) {\n return ensCache[value];\n }\n return value;\n });\n return { domain, value };\n }\n static getPayload(domain, types, value) {\n // Validate the domain fields\n TypedDataEncoder.hashDomain(domain);\n // Derive the EIP712Domain Struct reference type\n const domainValues = {};\n const domainTypes = [];\n domainFieldNames.forEach((name) => {\n const value = domain[name];\n if (value == null) {\n return;\n }\n domainValues[name] = domainChecks[name](value);\n domainTypes.push({ name, type: domainFieldTypes[name] });\n });\n const encoder = TypedDataEncoder.from(types);\n const typesWithDomain = Object.assign({}, types);\n if (typesWithDomain.EIP712Domain) {\n logger.throwArgumentError(\"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n }\n else {\n typesWithDomain.EIP712Domain = domainTypes;\n }\n // Validate the data structures and types\n encoder.encode(value);\n return {\n types: typesWithDomain,\n domain: domainValues,\n primaryType: encoder.primaryType,\n message: encoder.visit(value, (type, value) => {\n // bytes\n if (type.match(/^bytes(\\d*)/)) {\n return hexlify(logger.getBytes(value));\n }\n // uint or int\n if (type.match(/^u?int/)) {\n return logger.getBigInt(value).toString();\n }\n switch (type) {\n case \"address\":\n return value.toLowerCase();\n case \"bool\":\n return !!value;\n case \"string\":\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid string`, \"value\", value);\n }\n return value;\n }\n return logger.throwArgumentError(\"unsupported type\", \"type\", type);\n })\n };\n }\n}\n_TypedDataEncoder_types = new WeakMap(), _TypedDataEncoder_fullTypes = new WeakMap(), _TypedDataEncoder_encoderCache = new WeakMap(), _TypedDataEncoder_instances = new WeakSet(), _TypedDataEncoder_getEncoder = function _TypedDataEncoder_getEncoder(type) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return encoder;\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const subEncoder = this.getEncoder(subtype);\n const length = parseInt(match[3]);\n return (value) => {\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n let result = value.map(subEncoder);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(subtype)) {\n result = result.map(keccak256);\n }\n return keccak256(concat(result));\n };\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n const encodedType = id(__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(type));\n return (value) => {\n const values = fields.map(({ name, type }) => {\n const result = this.getEncoder(type)(value[name]);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(type)) {\n return keccak256(result);\n }\n return result;\n });\n values.unshift(encodedType);\n return concat(values);\n };\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n};\n//# sourceMappingURL=typed-data.js.map","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 _Interface_instances, _Interface_errors, _Interface_events, _Interface_functions, _Interface_abiCoder, _Interface_getFunction, _Interface_getEvent;\nimport { arrayify, concat, dataSlice, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { defaultAbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport { ConstructorFragment, ErrorFragment, EventFragment, FormatType, Fragment, FunctionFragment, ParamType } from \"./fragments.js\";\nimport { logger } from \"./logger.js\";\nimport { Typed } from \"./typed.js\";\nexport { checkResultErrors, Result };\nexport class LogDescription {\n constructor(fragment, topic, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, signature, topic, args\n });\n }\n}\nexport class TransactionDescription {\n constructor(fragment, selector, args, value) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector, value\n });\n }\n}\nexport class ErrorDescription {\n constructor(fragment, selector, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector\n });\n }\n}\nexport class Indexed {\n constructor(hash) {\n defineProperties(this, { hash, _isIndexed: true });\n }\n static isIndexed(value) {\n return !!(value && value._isIndexed);\n }\n}\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons = {\n \"0\": \"generic panic\",\n \"1\": \"assert(false)\",\n \"17\": \"arithmetic overflow\",\n \"18\": \"division or modulo by zero\",\n \"33\": \"enum overflow\",\n \"34\": \"invalid encoded storage byte array accessed\",\n \"49\": \"out-of-bounds array access; popping on an empty array\",\n \"50\": \"out-of-bounds access of an array or bytesN\",\n \"65\": \"out of memory\",\n \"81\": \"uninitialized function\",\n};\nconst BuiltinErrors = {\n \"0x08c379a0\": {\n signature: \"Error(string)\",\n name: \"Error\",\n inputs: [\"string\"],\n reason: (message) => {\n return `reverted with reason string ${JSON.stringify(message)}`;\n }\n },\n \"0x4e487b71\": {\n signature: \"Panic(uint256)\",\n name: \"Panic\",\n inputs: [\"uint256\"],\n reason: (code) => {\n let reason = \"unknown panic code\";\n if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n reason = PanicReasons[code.toString()];\n }\n return `reverted with panic code 0x${code.toString(16)} (${reason})`;\n }\n }\n};\nexport class Interface {\n constructor(fragments) {\n _Interface_instances.add(this);\n _Interface_errors.set(this, void 0);\n _Interface_events.set(this, void 0);\n _Interface_functions.set(this, void 0);\n // #structs: Map;\n _Interface_abiCoder.set(this, void 0);\n let abi = [];\n if (typeof (fragments) === \"string\") {\n abi = JSON.parse(fragments);\n }\n else {\n abi = fragments;\n }\n __classPrivateFieldSet(this, _Interface_functions, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_errors, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_events, new Map(), \"f\");\n // this.#structs = new Map();\n defineProperties(this, {\n fragments: Object.freeze(abi.map((f) => Fragment.from(f)).filter((f) => (f != null))),\n });\n __classPrivateFieldSet(this, _Interface_abiCoder, this.getAbiCoder(), \"f\");\n // Add all fragments by their signature\n this.fragments.forEach((fragment) => {\n let bucket;\n switch (fragment.type) {\n case \"constructor\":\n if (this.deploy) {\n logger.warn(\"duplicate definition - constructor\");\n return;\n }\n //checkNames(fragment, \"input\", fragment.inputs);\n defineProperties(this, { deploy: fragment });\n return;\n case \"function\":\n //checkNames(fragment, \"input\", fragment.inputs);\n //checkNames(fragment, \"output\", (fragment).outputs);\n bucket = __classPrivateFieldGet(this, _Interface_functions, \"f\");\n break;\n case \"event\":\n //checkNames(fragment, \"input\", fragment.inputs);\n bucket = __classPrivateFieldGet(this, _Interface_events, \"f\");\n break;\n case \"error\":\n bucket = __classPrivateFieldGet(this, _Interface_errors, \"f\");\n break;\n default:\n return;\n }\n const signature = fragment.format();\n if (bucket.has(signature)) {\n logger.warn(\"duplicate definition - \" + signature);\n return;\n }\n bucket.set(signature, fragment);\n });\n // If we do not have a constructor add a default\n if (!this.deploy) {\n defineProperties(this, {\n deploy: ConstructorFragment.fromString(\"constructor()\")\n });\n }\n }\n // @TODO: multi sig?\n format(format) {\n if (!format) {\n format = FormatType.full;\n }\n if (format === FormatType.sighash) {\n logger.throwArgumentError(\"interface does not support formatting sighash\", \"format\", format);\n }\n const abi = this.fragments.map((f) => f.format(format));\n // We need to re-bundle the JSON fragments a bit\n if (format === FormatType.json) {\n return JSON.stringify(abi.map((j) => JSON.parse(j)));\n }\n return abi;\n }\n getAbiCoder() {\n return defaultAbiCoder;\n }\n getFunctionName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, null, false)).name;\n }\n getFunction(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, values || null, true);\n }\n getEventName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, null, false)).name;\n }\n getEvent(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, values || null, true);\n }\n // Find a function definition by any means necessary (unless it is ambiguous)\n getError(key, values) {\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_errors, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching error\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_errors, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching error\", \"name\", key);\n }\n else if (matching.length > 1) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching errors\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_errors, \"f\").get(ErrorFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching error\", \"signature\", key);\n }\n // Get the 4-byte selector used by Solidity to identify a function\n getSelector(fragment) {\n /*\n if (typeof(fragment) === \"string\") {\n const matches: Array = [ ];\n\n try { matches.push(this.getFunction(fragment)); } catch (error) { }\n try { matches.push(this.getError(fragment)); } catch (_) { }\n\n if (matches.length === 0) {\n logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n } else if (matches.length > 1) {\n logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n }\n\n fragment = matches[0];\n }\n */\n return dataSlice(id(fragment.format()), 0, 4);\n }\n // Get the 32-byte topic hash used by Solidity to identify an event\n getEventTopic(fragment) {\n //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n return id(fragment.format());\n }\n _decodeParams(params, data) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(params, data);\n }\n _encodeParams(params, values) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(params, values);\n }\n encodeDeploy(values) {\n return this._encodeParams(this.deploy.inputs, values || []);\n }\n decodeErrorResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match error ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n encodeErrorResult(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the data for a function call (e.g. tx.data)\n decodeFunctionData(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match function ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n // Encode the data for a function call (e.g. tx.data)\n encodeFunctionData(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the result from a function call (e.g. from eth_call)\n decodeFunctionResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n let message = \"invalid length for result data\";\n const bytes = arrayify(data);\n if ((bytes.length % 32) === 0) {\n try {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.outputs, bytes);\n }\n catch (error) {\n message = \"could not decode result data\";\n }\n }\n // Call returned data with no error, but the data is junk\n return logger.throwError(message, \"BAD_DATA\", {\n value: hexlify(bytes),\n info: { method: fragment.name, signature: fragment.format() }\n });\n }\n makeError(fragment, _data, tx) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n const data = logger.getBytes(_data);\n let args = undefined;\n if (tx) {\n try {\n args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, tx.data || \"0x\");\n }\n catch (error) {\n console.log(error);\n }\n }\n let errorArgs = undefined;\n let errorName = undefined;\n let errorSignature = undefined;\n let reason = \"unknown reason\";\n if (data.length === 0) {\n reason = \"missing error reason\";\n }\n else if ((data.length % 32) === 4) {\n const selector = hexlify(data.slice(0, 4));\n const builtin = BuiltinErrors[selector];\n if (builtin) {\n try {\n errorName = builtin.name;\n errorSignature = builtin.signature;\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(builtin.inputs, data.slice(4));\n reason = builtin.reason(...errorArgs);\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n else {\n reason = \"unknown custom error\";\n try {\n const error = this.getError(selector);\n errorName = error.name;\n errorSignature = error.format();\n reason = `custom error: ${errorSignature}`;\n try {\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(error.inputs, data.slice(4));\n }\n catch (error) {\n reason = `custom error: ${errorSignature} (coult not decode error data)`;\n }\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n }\n return logger.makeError(\"call revert exception\", \"CALL_EXCEPTION\", {\n data: hexlify(data), transaction: null,\n method: fragment.name, signature: fragment.format(), args,\n errorArgs, errorName, errorSignature, reason\n });\n }\n // Encode the result for a function call (e.g. for eth_call)\n encodeFunctionResult(functionFragment, values) {\n if (typeof (functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n return hexlify(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(functionFragment.outputs, values || []));\n }\n /*\n spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> {\n const promises: Array> = [ ];\n const process = function(type: ParamType, value: any): any {\n if (type.baseType === \"array\") {\n return descend(type.child\n }\n if (type. === \"address\") {\n }\n };\n \n const descend = function (inputs: Array, values: ReadonlyArray) {\n if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n \n };\n \n const result: Array = [ ];\n values.forEach((value, index) => {\n if (value == null) {\n topics.push(null);\n } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n } else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n } else {\n topics.push(encodeTopic(param, value));\n }\n });\n }\n */\n // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n encodeFilterTopics(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (values.length > eventFragment.inputs.length) {\n logger.throwError(\"too many arguments for \" + eventFragment.format(), \"UNEXPECTED_ARGUMENT\", {\n count: values.length,\n expectedCount: eventFragment.inputs.length\n });\n }\n const topics = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n const encodeTopic = (param, value) => {\n if (param.type === \"string\") {\n return id(value);\n }\n else if (param.type === \"bytes\") {\n return keccak256(hexlify(value));\n }\n // Check addresses are valid\n if (param.type === \"address\") {\n __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([\"address\"], [value]);\n }\n return zeroPadLeft(hexlify(value), 32);\n //@TOOD should probably be return toHex(value, 32)\n };\n values.forEach((value, index) => {\n const param = eventFragment.inputs[index];\n if (!param.indexed) {\n if (value != null) {\n logger.throwArgumentError(\"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n }\n return;\n }\n if (value == null) {\n topics.push(null);\n }\n else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n }\n else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n }\n else {\n topics.push(encodeTopic(param, value));\n }\n });\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n return topics;\n }\n encodeEventLog(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n const topics = [];\n const dataTypes = [];\n const dataValues = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n if (values.length !== eventFragment.inputs.length) {\n logger.throwArgumentError(\"event arguments/values mismatch\", \"values\", values);\n }\n eventFragment.inputs.forEach((param, index) => {\n const value = values[index];\n if (param.indexed) {\n if (param.type === \"string\") {\n topics.push(id(value));\n }\n else if (param.type === \"bytes\") {\n topics.push(keccak256(value));\n }\n else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n // @TODO\n throw new Error(\"not implemented\");\n }\n else {\n topics.push(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([param.type], [value]));\n }\n }\n else {\n dataTypes.push(param);\n dataValues.push(value);\n }\n });\n return {\n data: __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(dataTypes, dataValues),\n topics: topics\n };\n }\n // Decode a filter for the event and the search criteria\n decodeEventLog(eventFragment, data, topics) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (topics != null && !eventFragment.anonymous) {\n const eventTopic = this.getEventTopic(eventFragment);\n if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== eventTopic) {\n logger.throwArgumentError(\"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n }\n topics = topics.slice(1);\n }\n const indexed = [];\n const nonIndexed = [];\n const dynamic = [];\n eventFragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n indexed.push(ParamType.fromObject({ type: \"bytes32\", name: param.name }));\n dynamic.push(true);\n }\n else {\n indexed.push(param);\n dynamic.push(false);\n }\n }\n else {\n nonIndexed.push(param);\n dynamic.push(false);\n }\n });\n const resultIndexed = (topics != null) ? __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(indexed, concat(topics)) : null;\n const resultNonIndexed = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(nonIndexed, data, true);\n //const result: (Array & { [ key: string ]: any }) = [ ];\n const values = [];\n const keys = [];\n let nonIndexedIndex = 0, indexedIndex = 0;\n eventFragment.inputs.forEach((param, index) => {\n let value = null;\n if (param.indexed) {\n if (resultIndexed == null) {\n value = new Indexed(null);\n }\n else if (dynamic[index]) {\n value = new Indexed(resultIndexed[indexedIndex++]);\n }\n else {\n try {\n value = resultIndexed[indexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n }\n else {\n try {\n value = resultNonIndexed[nonIndexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n values.push(value);\n keys.push(param.name || null);\n });\n return Result.fromItems(values, keys);\n }\n // Given a transaction, find the matching function fragment (if any) and\n // determine all its properties and call parameters\n parseTransaction(tx) {\n const data = logger.getBytes(tx.data, \"tx.data\");\n const value = logger.getBigInt((tx.value != null) ? tx.value : 0, \"tx.value\");\n const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, data.slice(4));\n return new TransactionDescription(fragment, this.getSelector(fragment), args, value);\n }\n // @TODO\n //parseCallResult(data: BytesLike): ??\n // Given an event log, find the matching event fragment (if any) and\n // determine all its properties and values\n parseLog(log) {\n const fragment = this.getEvent(log.topics[0]);\n if (!fragment || fragment.anonymous) {\n return null;\n }\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n // Probably not, because just because it is the only event in the ABI does\n // not mean we have the full ABI; maybe just a fragment?\n return new LogDescription(fragment, this.getEventTopic(fragment), this.decodeEventLog(fragment, log.data, log.topics));\n }\n parseError(data) {\n const hexData = hexlify(data);\n const fragment = this.getError(dataSlice(hexData, 0, 4));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, dataSlice(hexData, 4));\n return new ErrorDescription(fragment, this.getSelector(fragment), args);\n }\n static from(value) {\n // Already an Interface, which is immutable\n if (value instanceof Interface) {\n return value;\n }\n // JSON\n if (typeof (value) === \"string\") {\n return new Interface(JSON.parse(value));\n }\n // Maybe an interface from an older version, or from a symlinked copy\n if (typeof (value.format) === \"function\") {\n return new Interface(value.format(FormatType.json));\n }\n // Array of fragments\n return new Interface(value);\n }\n}\n_Interface_errors = new WeakMap(), _Interface_events = new WeakMap(), _Interface_functions = new WeakMap(), _Interface_abiCoder = new WeakMap(), _Interface_instances = new WeakSet(), _Interface_getFunction = function _Interface_getFunction(key, values, forceUnique) {\n // Selector\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_functions, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching function\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_functions, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n const lastValue = (values.length > 0) ? values[values.length - 1] : null;\n let valueLength = values.length;\n let allowOptions = true;\n if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n allowOptions = false;\n valueLength--;\n }\n // Remove all matches that don't have a compatible length. The args\n // may contain an overrides, so the match may have n or n - 1 parameters\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs.length;\n if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // We are past the inputs\n if (j >= inputs.length) {\n if (values[j].type === \"overrides\") {\n continue;\n }\n matching.splice(i, 1);\n break;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n // We found a single matching signature with an overrides, but the\n // last value is something that cannot possibly be an options\n if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n const lastArg = values[values.length - 1];\n if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== \"object\") {\n matching.splice(0, 1);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching function\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n logger.throwArgumentError(`multiple matching functions (i.e. ${matchStr})`, \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_functions, \"f\").get(FunctionFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching function\", \"signature\", key);\n}, _Interface_getEvent = function _Interface_getEvent(key, values, forceUnique) {\n // EventTopic\n if (isHexString(key)) {\n const eventTopic = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_events, \"f\").values()) {\n if (eventTopic === this.getEventTopic(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching event\", \"eventTopic\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_events, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n // Remove all matches that don't have a compatible length.\n for (let i = matching.length - 1; i >= 0; i--) {\n if (matching[i].inputs.length < values.length) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching event\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching events\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_events, \"f\").get(EventFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching event\", \"signature\", key);\n};\n//# sourceMappingURL=interface.js.map","export const version = \"@ethersproject/web@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _FetchResponse_props, _FetchResponse_error;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties, getStore } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\n;\nexport class FetchResponse {\n constructor(statusCode, statusMessage, headers, body, request) {\n _FetchResponse_props.set(this, void 0);\n _FetchResponse_error.set(this, void 0);\n __classPrivateFieldSet(this, _FetchResponse_props, {\n statusCode,\n statusMessage,\n headers: Object.freeze(Object.assign({}, Object.keys(headers).reduce((accum, k) => {\n accum[k.toLowerCase()] = headers[k];\n return accum;\n }, {}))),\n body: ((body == null) ? null : new Uint8Array(body)),\n request: (request || null),\n }, \"f\");\n __classPrivateFieldSet(this, _FetchResponse_error, { message: \"\" }, \"f\");\n }\n toString() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return ``;\n }\n get statusCode() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusCode\"); }\n get statusMessage() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusMessage\"); }\n get headers() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"headers\"); }\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? null : new Uint8Array(body);\n }\n get bodyText() {\n try {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? \"\" : toUtf8String(body);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid UTF-8 data\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyText\", info: { response: this }\n });\n }\n }\n get bodyJson() {\n try {\n return JSON.parse(this.bodyText);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid JSON\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyJson\", info: { response: this }\n });\n }\n }\n [(_FetchResponse_props = new WeakMap(), _FetchResponse_error = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n makeServerError(message, error) {\n let statusMessage;\n if (!message) {\n message = `${this.statusCode} ${this.statusMessage}`;\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${message})`;\n }\n else {\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${this.statusCode} ${this.statusMessage}; ${message})`;\n }\n const response = new FetchResponse(599, statusMessage, this.headers, this.body, getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\") || undefined);\n __classPrivateFieldSet(response, _FetchResponse_error, { message, error }, \"f\");\n return response;\n }\n throwThrottleError(message, stall) {\n if (stall == null) {\n stall = 1000;\n }\n if (typeof (stall) !== \"number\" || !Number.isInteger(stall) || stall < 0) {\n logger.throwArgumentError(\"invalid stall timeout\", \"stall\", stall);\n }\n const error = new Error(message || \"throttling requests\");\n defineProperties(error, { stall, throttle: true });\n throw error;\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n hasBody() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body != null);\n }\n get request() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\"); }\n ok() {\n return (__classPrivateFieldGet(this, _FetchResponse_error, \"f\").message === \"\" && this.statusCode >= 200 && this.statusCode < 300);\n }\n assertOk() {\n if (this.ok()) {\n return;\n }\n let { message, error } = __classPrivateFieldGet(this, _FetchResponse_error, \"f\");\n if (message === \"\") {\n message = `server response ${this.statusCode} ${this.statusMessage}`;\n }\n logger.throwError(message, \"SERVER_ERROR\", {\n request: (this.request || \"unknown request\"), response: this, error\n });\n }\n}\n//# sourceMappingURL=response.js.map","import { logger } from \"./logger.js\";\nimport { FetchResponse } from \"./response.js\";\nexport async function getUrl(req, timeout) {\n const protocol = req.url.split(\":\")[0].toLowerCase();\n if (protocol !== \"http\" && protocol !== \"https\") {\n logger.throwError(`unsupported protocol ${protocol}`, \"UNSUPPORTED_OPERATION\", {\n info: { protocol },\n operation: \"request\"\n });\n }\n if (req.credentials && !req.allowInsecureAuthentication) {\n logger.throwError(\"insecure authorized connections unsupported\", \"UNSUPPORTED_OPERATION\", {\n operation: \"request\"\n });\n }\n const init = {\n method: req.method,\n headers: new Headers(Array.from(req)),\n body: req.body || undefined,\n };\n const resp = await fetch(req.url, init);\n const headers = {};\n resp.headers.forEach((value, key) => {\n headers[key.toLowerCase()] = value;\n });\n const body = new Uint8Array(await resp.arrayBuffer());\n return new FetchResponse(resp.status, resp.statusText, headers, body, req);\n}\n//# sourceMappingURL=get-url-browser.js.map","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 _FetchRequest_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nfunction check(value, type, name) {\n if (typeof (value) !== type) {\n throw new Error(`invalid ${name}`);\n }\n return value;\n}\nexport class FetchRequest {\n constructor(url) {\n _FetchRequest_props.set(this, void 0);\n __classPrivateFieldSet(this, _FetchRequest_props, {\n allowInsecure: false,\n gzip: false,\n headers: {},\n method: \"\",\n timeout: 300,\n url: check(url, \"string\", \"url\")\n }, \"f\");\n }\n // URL\n get url() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\"); }\n set url(url) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\", check(url, \"string\", \"url\"));\n }\n // Body\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body == null) {\n return null;\n }\n if (this.isFrozen()) {\n return new Uint8Array(body);\n }\n return body;\n }\n set body(body) {\n if (body == null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", undefined);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", undefined);\n }\n else if (typeof (body) === \"string\") {\n // @TODO: utf8-check\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(body));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"text/plain\");\n }\n else if (body instanceof Uint8Array) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", body);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/octet-stream\");\n }\n else if (typeof (body) === \"object\") {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(JSON.stringify(body)));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/json\");\n }\n else {\n throw new Error(\"invalid body\");\n }\n }\n hasBody() {\n return (getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\") != null);\n }\n // Method (default: GET with no body, POST with a body)\n get method() {\n const method = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\");\n if (method) {\n return method.toUpperCase();\n }\n if (this.body) {\n return \"POST\";\n }\n return \"GET\";\n }\n set method(method) {\n if (method == null) {\n method = \"\";\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\", check(method, \"string\", \"method\"));\n }\n // Headers (automatically fills content-type if not explicitly set)\n get headers() {\n const headers = Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\"));\n const bodyType = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\");\n if (this.credentials) { /* TODO */ }\n ;\n if (this.allowGzip) {\n headers[\"accept-encoding\"] = \"gzip\";\n }\n if (headers[\"content-type\"] == null && bodyType) {\n headers[\"content-type\"] = bodyType;\n }\n if (this.body) {\n headers[\"content-length\"] = String(this.body.length);\n }\n return Object.freeze(headers);\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n setHeader(key, value) {\n const headers = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\");\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", headers);\n headers[check(key, \"string\", \"key\").toLowerCase()] = String(value);\n }\n clearHeaders() {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", {});\n }\n [(_FetchRequest_props = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n // Configure an Authorization header\n get credentials() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\") || null;\n }\n setCredentials(username, password) {\n if (username.match(/:/)) {\n logger.throwArgumentError(\"invalid basic authentication username\", \"username\", \"[REDACTED]\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\", `${username}:${password}`);\n // @TODO:\n //const auth = username + \":\" + password;\n //this.setHeader(\"authorization\", \"Basic \" + base64Encode(toUtf8Bytes(auth)))\n //this.setHeader(\"authorization\", \"Basic TODO:\" + auth);\n }\n // Configure the request to allow gzipped responses\n get allowGzip() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\");\n }\n set allowGzip(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\", !!value);\n }\n // Allow credentials to be sent over an insecure (non-HTTPS) channel\n get allowInsecureAuthentication() {\n return !!getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\");\n }\n set allowInsecureAuthentication(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\", check(value, \"boolean\", \"allowInsecureAuthentication\"));\n }\n // Timeout (seconds)\n get timeout() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\"); }\n set timeout(timeout) {\n timeout = check(timeout, \"number\", \"timeout\");\n if (timeout <= 0) {\n throw new Error(\"invalid timerout\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\", timeout);\n }\n redirect(location) {\n // Redirection; for now we only support absolute locataions\n const current = this.url.split(\":\")[0].toLowerCase();\n const target = location.split(\":\")[0].toLowerCase();\n if (this.method !== \"GET\" || (current === \"https\" && target === \"http\") ||\n !location.match(/^https?:$/)) {\n return logger.throwError(`unsupported redirect`, \"UNSUPPORTED_OPERATION\", {\n operation: `redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(location)})`\n });\n }\n // Create a copy of this request, with a new URL\n const req = new FetchRequest(location);\n req.method = \"GET\";\n req.allowGzip = this.allowGzip;\n req.timeout = this.timeout;\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"body\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\"));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Do not forward credentials unless on the same domain; only absolute\n //req.allowInsecure = false;\n // paths are currently supported; may want a way to specify to forward?\n //setStore(req.#props, \"creds\", getStore(this.#pros, \"creds\"));\n return req;\n }\n clone() {\n const clone = new FetchRequest(this.url);\n // Preserve \"default method\" (i.e. null)\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"method\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\"));\n // Preserve \"default body\" with type, copying the Uint8Array is present\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"body\", (body == null) ? undefined : new Uint8Array(body));\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Preserve \"default headers\"\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n // Credentials is readonly, so we copy internally\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"creds\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\"));\n if (this.allowGzip) {\n clone.allowGzip = true;\n }\n clone.timeout = this.timeout;\n if (this.allowInsecureAuthentication) {\n clone.allowInsecureAuthentication = true;\n }\n return clone;\n }\n freeze() {\n // Copy the body so any changes to previous access do not modify it\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body != null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", new Uint8Array(body));\n }\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\").headers);\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n }\n}\n//# sourceMappingURL=request.js.map","import { decodeBase64 } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { getUrl } from \"./get-url.js\"; /*-browser*/\nimport { logger } from \"./logger.js\";\nimport { FetchRequest } from \"./request.js\";\nimport { FetchResponse } from \"./response.js\";\nasync function delay(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\n// @TODO: Add option for global preflightRequest?\nfunction getTime() { return (new Date()).getTime(); }\nfunction unpercent(value) {\n value = value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => {\n return String.fromCharCode(parseInt(code, 16));\n });\n return toUtf8Bytes(value);\n}\nlet lockGateways = false;\nlet ipfsGateway = \"https:/\\/gateway.ipfs.io/\";\nlet arGateway = \"https:/\\/gateway.ar.io/\";\nexport async function fetchData(connection) {\n const conn = (typeof (connection) === \"string\") ? {\n request: new FetchRequest(connection)\n } : (connection instanceof FetchRequest) ? {\n request: connection\n } : Object.assign({}, connection);\n if (conn.request == null) {\n return logger.throwArgumentError(\"missing request\", \"connection\", connection);\n }\n let req = conn.request.clone().freeze();\n switch (conn.request.url.split(\":\")[0]) {\n case \"data\": {\n const match = req.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i);\n if (match) {\n try {\n const headers = {\n \"content-type\": (match[1] ? match[1] : \"text/plain\")\n };\n const body = (match[2] ? decodeBase64(match[3]) : unpercent(match[3]));\n return new FetchResponse(200, \"OK\", headers, body, req.clone());\n }\n catch (error) {\n return new FetchResponse(400, \"BAD REQUEST (invalid base64 encoded data)\", {}, null, req.clone());\n }\n }\n return new FetchResponse(500, \"INTERNAL SERVER ERROR (unsupported dara URI)\", {}, null, req.clone());\n }\n case \"ipfs\":\n case \"ipns\":\n case \"ar\":\n throw new Error(\"not implemented yet\");\n console.log(\"FF\", arGateway, ipfsGateway);\n case \"http\":\n case \"https\":\n break;\n default:\n throw new Error(\"unsupported scheme\");\n }\n const attempts = (conn.throttleLimit != null) ? conn.throttleLimit : 12;\n if (!Number.isInteger(attempts) || attempts < 1) {\n return logger.throwArgumentError(\"invalid throttleLimit\", \"connection\", connection);\n }\n const slotInterval = (conn.throttleSlotInterval != null) ? conn.throttleSlotInterval : 100;\n //logger.assertInteger(slotInterval, \"connection.throttleSlotInterval\", connection.throttleSlotInterval);\n if (!Number.isInteger(slotInterval) || attempts < 0) {\n return logger.throwArgumentError(\"invalid throttleSlotInterval\", \"connection\", connection);\n }\n const retryFunc = (conn.throttleRetry != null) ? conn.throttleRetry : null;\n if (retryFunc && typeof (retryFunc) !== \"function\") {\n return logger.throwArgumentError(\"invalid throttleRetry callback\", \"connection\", connection);\n }\n const preflightRequest = conn.preflightRequest || null;\n if (preflightRequest && typeof (preflightRequest) !== \"function\") {\n return logger.throwArgumentError(\"invalid preflightRequest callback\", \"connection\", connection);\n }\n const processResponse = conn.processResponse || null;\n if (processResponse && typeof (processResponse) !== \"function\") {\n return logger.throwArgumentError(\"invalid processResponse callback\", \"connection\", connection);\n }\n // Start time of this fetch (for timeouts)\n const t0 = getTime();\n let response = null;\n for (let a = 0; a < attempts; a++) {\n let request = req.clone();\n if (preflightRequest) {\n request = (await preflightRequest(request.freeze())).clone();\n }\n const remainingTime = getTime() - t0;\n if (remainingTime < 0) {\n return logger.throwError(\"timeout\", \"TIMEOUT\", { operation: \"request\", request });\n }\n response = await getUrl(request, remainingTime);\n // Retry logic (server forced)\n if (a < attempts) {\n if (response.statusCode === 301 || response.statusCode === 302) {\n // Try following the redirect; the request will through if the\n // type of redirect is not supported\n try {\n req = request.redirect(response.headers.location || \"\");\n continue;\n }\n catch (error) { }\n ;\n // Things won't get any better on another attempt; abort\n return response;\n }\n else if (response.statusCode === 429) {\n if (retryFunc == null || (await retryFunc(request.freeze(), response, a))) {\n const retryAfter = response.headers[\"retry-after\"];\n if (typeof (retryAfter) === \"string\" && retryAfter.match(/^[1-9][0-9]*$/)) {\n await delay(parseInt(retryAfter));\n }\n else {\n await delay(slotInterval * Math.trunc(Math.random() * Math.pow(2, a)));\n }\n continue;\n }\n }\n }\n // Optional post-processing response; also allows trapping\n // HTTP status errors and doing \"something different\",\n // including any further throttling.\n if (processResponse) {\n try {\n return await processResponse(request, response);\n }\n catch (error) {\n // response.throwThrottleError\n if (error.throttle && typeof (error.stall) === \"number\") {\n if (a < attempts) {\n await delay(error.stall);\n continue;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\", error);\n }\n // Something went wrong during processing; throw a 5xx server error\n response.makeServerError(\"error in post-processing function\", error).assertOk();\n }\n }\n return response;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\");\n}\nfetchData.lock = function () {\n lockGateways = true;\n};\n// @TODO: Allow a master Gateway function\nfetchData.setGateway = function (gateway) {\n};\nfetchData.setIpfsGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setIpfsGateway\"\n });\n }\n ipfsGateway = gateway;\n};\nfetchData.setArGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setArGateway\"\n });\n }\n arGateway = gateway;\n};\n//# sourceMappingURL=fetch-data.js.map","export const version = \"@ethersproject/providers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _a, _EnsResolver_supports2544, _EnsResolver_getResolver;\nimport { concat, dataSlice, hexlify, zeroPadLeft } from \"@ethersproject/bytes\";\nimport { dnsEncode, namehash } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { encodeBase58, toArray, toNumber } from \"@ethersproject/math\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData } from \"@ethersproject/web\";\nimport { logger } from \"./logger.js\";\nconst BN_1 = BigInt(1);\nconst Empty = new Uint8Array([]);\nconst HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n const offset = toNumber(dataSlice(result, start, start + 32));\n const length = toNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n}\nfunction parseString(result, start) {\n try {\n const bytes = parseBytes(result, start);\n if (bytes != null) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(Empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\n// @TODO: This should use the fetch-data:ipfs gateway\n// Trim off the ipfs:// prefix and return the default gateway URL\nfunction getIpfsLink(link) {\n if (link.match(/^ipfs:\\/\\/ipfs\\//i)) {\n link = link.substring(12);\n }\n else if (link.match(/^ipfs:\\/\\//i)) {\n link = link.substring(7);\n }\n else {\n logger.throwArgumentError(\"unsupported IPFS format\", \"link\", link);\n }\n return `https:/\\/gateway.ipfs.io/ipfs/${link}`;\n}\n;\n;\nexport class MulticoinProviderPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n validate(proivder) {\n return this;\n }\n supportsCoinType(coinType) {\n return false;\n }\n async encodeAddress(coinType, address) {\n throw new Error(\"unsupported coin\");\n }\n async decodeAddress(coinType, data) {\n throw new Error(\"unsupported coin\");\n }\n}\nconst BasicMulticoinPluginId = \"org.ethers.provider-prugins.basicmulticoin\";\nexport class BasicMulticoinProviderPlugin extends MulticoinProviderPlugin {\n constructor() {\n super(BasicMulticoinPluginId);\n }\n}\nconst matcherIpfs = new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\");\nconst matchers = [\n new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n new RegExp(\"^(data):(.*)$\", \"i\"),\n matcherIpfs,\n new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\nexport class EnsResolver {\n constructor(provider, address, name) {\n // For EIP-2544 names, the ancestor that provided the resolver\n _EnsResolver_supports2544.set(this, void 0);\n defineProperties(this, { provider, address, name });\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n }\n async supportsWildcard() {\n if (!__classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\")) {\n // supportsInterface(bytes4 = selector(\"resolve(bytes,bytes)\"))\n __classPrivateFieldSet(this, _EnsResolver_supports2544, this.provider.call({\n to: this.address,\n data: \"0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000\"\n }).then((result) => {\n return (logger.getBigInt(result) === BN_1);\n }).catch((error) => {\n if (error.code === \"CALL_EXCEPTION\") {\n return false;\n }\n // Rethrow the error: link is down, etc. Let future attempts retry.\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n throw error;\n }), \"f\");\n }\n return await __classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\");\n }\n async _fetch(selector, parameters = \"0x\") {\n // e.g. keccak256(\"addr(bytes32,uint256)\")\n const addrData = concat([selector, namehash(this.name), parameters]);\n const tx = {\n to: this.address,\n enableCcipRead: true,\n data: addrData\n };\n // Wildcard support; use EIP-2544 to resolve the request\n let wrapped = false;\n if (await this.supportsWildcard()) {\n wrapped = true;\n // selector(\"resolve(bytes,bytes)\")\n tx.data = concat([\"0x9061b923\", encodeBytes([dnsEncode(this.name), addrData])]);\n }\n try {\n let data = await this.provider.call(tx);\n if ((logger.getBytes(data).length % 32) === 4) {\n return logger.throwError(\"resolver threw error\", \"CALL_EXCEPTION\", {\n transaction: tx, data\n });\n }\n if (wrapped) {\n return parseBytes(data, 0);\n }\n return data;\n }\n catch (error) {\n if (error.code !== \"CALL_EXCEPTION\") {\n throw error;\n }\n }\n return null;\n }\n async getAddress(coinType = 60) {\n if (coinType === 60) {\n try {\n // keccak256(\"addr(bytes32)\")\n const result = await this._fetch(\"0x3b3b57de\");\n // No address\n if (result === \"0x\" || result === HashZero) {\n return null;\n }\n const network = await this.provider.getNetwork();\n return network.formatter.callAddress(result);\n }\n catch (error) {\n if (error.code === \"CALL_EXCEPTION\") {\n return null;\n }\n throw error;\n }\n }\n let coinPlugin = null;\n for (const plugin of this.provider.plugins) {\n if (!(plugin instanceof MulticoinProviderPlugin)) {\n continue;\n }\n if (plugin.supportsCoinType(coinType)) {\n coinPlugin = plugin;\n break;\n }\n }\n if (coinPlugin == null) {\n return null;\n }\n // keccak256(\"addr(bytes32,uint256\")\n const data = parseBytes((await this._fetch(\"0xf1cb7e06\", numPad(coinType))) || \"0x\", 0);\n // No address\n if (data == null || data === \"0x\") {\n return null;\n }\n // Compute the address\n const address = await coinPlugin.encodeAddress(coinType, data);\n if (address != null) {\n return address;\n }\n return logger.throwError(`invalid coin data`, \"UNSUPPORTED_OPERATION\", {\n operation: `getAddress(${coinType})`,\n info: { coinType, data }\n });\n }\n async getText(key) {\n // The key encoded as parameter to fetchBytes\n let keyBytes = toUtf8Bytes(key);\n // The nodehash consumes the first slot, so the string pointer targets\n // offset 64, with the length at offset 64 and data starting at offset 96\n const calldata = logger.getBytes(concat([numPad(64), numPad(keyBytes.length), keyBytes]));\n const hexBytes = parseBytes((await this._fetch(\"0x59d1d43c\", bytesPad(calldata))) || \"0x\", 0);\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n return toUtf8String(hexBytes);\n }\n async getContentHash() {\n // keccak256(\"contenthash()\")\n const hexBytes = parseBytes((await this._fetch(\"0xbc1c58d1\")) || \"0x\", 0);\n // No contenthash\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key)\n const ipfs = hexBytes.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipfs) {\n const scheme = (ipfs[1] === \"e3010170\") ? \"ipfs\" : \"ipns\";\n const length = parseInt(ipfs[4], 16);\n if (ipfs[5].length === length * 2) {\n return `${scheme}:/\\/${encodeBase58(\"0x\" + ipfs[2])}`;\n }\n }\n // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/);\n if (swarm && swarm[1].length === 64) {\n return `bzz:/\\/${swarm[1]}`;\n }\n return logger.throwError(`invalid or unsupported content hash data`, \"UNSUPPORTED_OPERATION\", {\n operation: \"getContentHash()\",\n info: { data: hexBytes }\n });\n }\n async getAvatar() {\n return (await this._getAvatar()).url;\n }\n async _getAvatar() {\n const linkage = [{ type: \"name\", value: this.name }];\n try {\n // test data for ricmoo.eth\n //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n const avatar = await this.getText(\"avatar\");\n if (avatar == null) {\n linkage.push({ type: \"!avatar\", value: \"\" });\n throw new Error(\"!avatar\");\n }\n linkage.push({ type: \"avatar\", value: avatar });\n for (let i = 0; i < matchers.length; i++) {\n const match = avatar.match(matchers[i]);\n if (match == null) {\n continue;\n }\n const scheme = match[1].toLowerCase();\n switch (scheme) {\n case \"https\":\n case \"data\":\n linkage.push({ type: \"url\", value: avatar });\n return { linkage, url: avatar };\n case \"ipfs\": {\n const url = getIpfsLink(avatar);\n linkage.push({ type: \"ipfs\", value: avatar });\n linkage.push({ type: \"url\", value: url });\n return { linkage, url };\n }\n case \"erc721\":\n case \"erc1155\": {\n // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n const selector = (scheme === \"erc721\") ? \"0xc87b56dd\" : \"0x0e89341c\";\n linkage.push({ type: scheme, value: avatar });\n // The owner of this name\n const owner = await this.getAddress();\n if (owner == null) {\n linkage.push({ type: \"!owner\", value: \"\" });\n throw new Error(\"!owner\");\n }\n const comps = (match[2] || \"\").split(\"/\");\n if (comps.length !== 2) {\n linkage.push({ type: `!${scheme}caip`, value: (match[2] || \"\") });\n throw new Error(\"!caip\");\n }\n const formatter = (await this.provider.getNetwork()).formatter;\n const addr = formatter.address(comps[0]);\n const tokenId = numPad(comps[1]);\n // Check that this account owns the token\n if (scheme === \"erc721\") {\n // ownerOf(uint256 tokenId)\n const tokenOwner = formatter.callAddress(await this.provider.call({\n to: addr, data: concat([\"0x6352211e\", tokenId])\n }));\n if (owner !== tokenOwner) {\n linkage.push({ type: \"!owner\", value: tokenOwner });\n throw new Error(\"!owner\");\n }\n linkage.push({ type: \"owner\", value: tokenOwner });\n }\n else if (scheme === \"erc1155\") {\n // balanceOf(address owner, uint256 tokenId)\n const balance = logger.getBigInt(await this.provider.call({\n to: addr, data: concat([\"0x00fdd58e\", zeroPadLeft(owner, 32), tokenId])\n }));\n if (!balance) {\n linkage.push({ type: \"!balance\", value: \"0\" });\n throw new Error(\"!balance\");\n }\n linkage.push({ type: \"balance\", value: balance.toString() });\n }\n // Call the token contract for the metadata URL\n const tx = {\n to: comps[0],\n data: concat([selector, tokenId])\n };\n let metadataUrl = parseString(await this.provider.call(tx), 0);\n if (metadataUrl == null) {\n linkage.push({ type: \"!metadata-url\", value: \"\" });\n throw new Error(\"!metadata-url\");\n }\n linkage.push({ type: \"metadata-url-base\", value: metadataUrl });\n // ERC-1155 allows a generic {id} in the URL\n if (scheme === \"erc1155\") {\n metadataUrl = metadataUrl.replace(\"{id}\", hexlify(tokenId).substring(2));\n linkage.push({ type: \"metadata-url-expanded\", value: metadataUrl });\n }\n // Transform IPFS metadata links\n if (metadataUrl.match(/^ipfs:/i)) {\n metadataUrl = getIpfsLink(metadataUrl);\n }\n linkage.push({ type: \"metadata-url\", value: metadataUrl });\n // Get the token metadata\n let metadata = {};\n const response = await fetchData(metadataUrl);\n try {\n metadata = response.bodyJson;\n }\n catch (error) {\n try {\n linkage.push({ type: \"!metadata\", value: response.bodyText });\n }\n catch (error) {\n const bytes = response.body;\n if (bytes) {\n linkage.push({ type: \"!metadata\", value: hexlify(bytes) });\n }\n throw error;\n }\n throw error;\n }\n if (!metadata) {\n linkage.push({ type: \"!metadata\", value: \"\" });\n throw new Error(\"!metadata\");\n }\n linkage.push({ type: \"metadata\", value: JSON.stringify(metadata) });\n // Pull the image URL out\n let imageUrl = metadata.image;\n if (typeof (imageUrl) !== \"string\") {\n linkage.push({ type: \"!imageUrl\", value: \"\" });\n throw new Error(\"!imageUrl\");\n }\n if (imageUrl.match(/^(https:\\/\\/|data:)/i)) {\n // Allow\n }\n else {\n // Transform IPFS link to gateway\n const ipfs = imageUrl.match(matcherIpfs);\n if (ipfs == null) {\n linkage.push({ type: \"!imageUrl-ipfs\", value: imageUrl });\n throw new Error(\"!imageUrl-ipfs\");\n }\n linkage.push({ type: \"imageUrl-ipfs\", value: imageUrl });\n imageUrl = getIpfsLink(imageUrl);\n }\n linkage.push({ type: \"url\", value: imageUrl });\n return { linkage, url: imageUrl };\n }\n }\n }\n }\n catch (error) {\n console.log(\"EE\", error);\n }\n return { linkage, url: null };\n }\n static async fromName(provider, name) {\n let currentName = name;\n while (true) {\n if (currentName === \"\" || currentName === \".\") {\n return null;\n }\n // Optimization since the eth node cannot change and does\n // not have a wildcar resolver\n if (name !== \"eth\" && currentName === \"eth\") {\n return null;\n }\n // Check the current node for a resolver\n const addr = await __classPrivateFieldGet(EnsResolver, _a, \"m\", _EnsResolver_getResolver).call(EnsResolver, provider, currentName);\n // Found a resolver!\n if (addr != null) {\n const resolver = new EnsResolver(provider, addr, name);\n // Legacy resolver found, using EIP-2544 so it isn't safe to use\n if (currentName !== name && !(await resolver.supportsWildcard())) {\n return null;\n }\n return resolver;\n }\n // Get the parent node\n currentName = currentName.split(\".\").slice(1).join(\".\");\n }\n }\n}\n_a = EnsResolver, _EnsResolver_supports2544 = new WeakMap(), _EnsResolver_getResolver = async function _EnsResolver_getResolver(provider, name) {\n const network = await provider.getNetwork();\n const ensPlugin = network.getPlugin(\"org.ethers.plugins.ens\");\n // No ENS...\n if (!ensPlugin) {\n return logger.throwError(\"network does not support ENS\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getResolver\", info: { network: network.name }\n });\n }\n try {\n // keccak256(\"resolver(bytes32)\")\n const addrData = await provider.call({\n to: ensPlugin.address,\n data: concat([\"0x0178b8bf\" + namehash(name)]),\n enableCcipRead: true\n });\n const addr = network.formatter.callAddress(addrData);\n if (addr === dataSlice(HashZero, 0, 20)) {\n return null;\n }\n return addr;\n }\n catch (error) {\n // ENS registry cannot throw errors on resolver(bytes32),\n // so probably a link error\n throw error;\n }\n return null;\n};\n//# sourceMappingURL=ens-resolver.js.map","export const version = \"@ethersproject/signing-key@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _Signature_props;\nimport { toHex } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { arrayify, concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\n// Constants\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27);\nconst BN_28 = BigInt(28);\nconst BN_35 = BigInt(35);\nconst BN_255 = BigInt(255);\nconst BN_MASK_255 = (BN_1 << BN_255) - BN_1;\nconst _guard = {};\nconst Zero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nexport class Signature {\n constructor(guard, r, s, v) {\n _Signature_props.set(this, void 0);\n logger.assertPrivate(guard, _guard, \"Signature\");\n __classPrivateFieldSet(this, _Signature_props, { r, s, v, networkV: null }, \"f\");\n }\n get r() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\"); }\n set r(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\", hexlify(value));\n }\n get s() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\"); }\n set s(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n else if (arrayify(value)[0] & 0x80) {\n logger.throwArgumentError(\"non-canonical s\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\", hexlify(value));\n }\n get v() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\"); }\n set v(value) {\n const v = logger.getNumber(value, \"value\");\n if (v !== 27 && v !== 28) {\n throw new Error(\"@TODO\");\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\", v);\n }\n get networkV() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\"); }\n get legacyChainId() {\n const v = this.networkV;\n if (v == null) {\n return null;\n }\n return Signature.getChainId(v);\n }\n get vs() {\n // The EIP-2098 compact representation\n const vs = arrayify(this.s);\n if (this.yParity) {\n vs[0] |= 0x80;\n }\n return hexlify(vs);\n }\n get yParity() {\n if (this.v === 27) {\n return 0;\n }\n return 1;\n /*\n // When v is 0 or 1 it is the recid directly\n if (this.v.isZero()) { return 0; }\n if (this.v.eq(1)) { return 1; }\n\n // Otherwise, odd (e.g. 27) is 0 and even (e.g. 28) is 1\n return this.v.and(1).isZero() ? 1: 0;\n */\n }\n get serialized() {\n return concat([this.r, this.s, (this.yParity ? \"0x1c\" : \"0x1b\")]);\n }\n [(_Signature_props = new WeakMap(), Symbol.for('nodejs.util.inspect.custom'))]() {\n return `Signature { r: \"${this.r}\", s: \"${this.s}\", yParity: ${this.yParity}, networkV: ${this.networkV} }`;\n }\n clone() {\n if (getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\")) {\n logger.throwError(\"cannot clone EIP-155 signatures\", \"UNSUPPORTED_OPERATION\", {\n operation: \"clone\"\n });\n }\n const { r, s, v } = __classPrivateFieldGet(this, _Signature_props, \"f\");\n return new Signature(_guard, r, s, v);\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n }\n toJSON() {\n const { r, s, v, networkV } = this;\n return {\n _type: \"signature\",\n networkV: ((networkV != null) ? networkV.toString() : null),\n r, s, v,\n };\n }\n static create() {\n return new Signature(_guard, Zero, Zero, 27);\n }\n // Get the chain ID from an EIP-155 v\n static getChainId(v) {\n const bv = logger.getBigInt(v, \"v\");\n // The v is not an EIP-155 v, so it is the unspecified chain ID\n if ((bv == BN_27) || (bv == BN_28)) {\n return BN_0;\n }\n // Bad value for an EIP-155 v\n if (bv < BN_35) {\n logger.throwArgumentError(\"invalid EIP-155 v\", \"v\", v);\n }\n return (bv - BN_35) / BN_2;\n }\n // Get the EIP-155 v transformed for a given chainId\n static getChainIdV(chainId, v) {\n return (logger.getBigInt(chainId) * BN_2) + BigInt(35 + v - 27);\n }\n // Convert an EIP-155 v into a normalized v\n static getNormalizedV(v) {\n const bv = logger.getBigInt(v);\n if (bv == BN_0) {\n return 27;\n }\n if (bv == BN_1) {\n return 28;\n }\n // Otherwise, EIP-155 v means odd is 27 and even is 28\n return (bv & BN_1) ? 27 : 28;\n }\n static fromTransaction(r, s, _v) {\n const v = logger.getBigInt(_v, \"v\");\n const sig = Signature.from({ r, s, v });\n setStore(__classPrivateFieldGet(sig, _Signature_props, \"f\"), \"networkV\", v);\n return sig.freeze();\n }\n static from(sig) {\n const throwError = (message) => {\n return logger.throwArgumentError(message, \"signature\", sig);\n };\n if (typeof (sig) === \"string\") {\n if (dataLength(sig) !== 65) {\n throwError(\"invlaid raw signature length\");\n }\n const r = dataSlice(sig, 0, 32);\n const s = dataSlice(sig, 32, 64);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = Signature.getNormalizedV(dataSlice(sig, 64, 65));\n return new Signature(_guard, r, s, v);\n }\n if (sig instanceof Signature) {\n return sig.clone();\n }\n const r = sig.r;\n if (r == null) {\n throwError(\"missing r\");\n }\n if (!isHexString(r, 32)) {\n throwError(\"invalid r\");\n }\n const s = (function (s, vs) {\n if (s) {\n if (!isHexString(s, 32)) {\n throwError(\"invalid s\");\n }\n return s;\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return toHex(BigInt(vs) & BN_MASK_255, 32);\n }\n return throwError(\"missing s\");\n })(sig.s, sig.vs);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = (function (v, vs, yParity) {\n if (v) {\n return Signature.getNormalizedV(v);\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return ((arrayify(vs)[0] & 0x80) ? 28 : 27);\n }\n if (yParity) {\n switch (yParity) {\n case 0: return 27;\n case 1: return 28;\n }\n return throwError(\"invalid yParity\");\n }\n //if (chainId) { return BigNumber.from(chainId).and(1).sub(27); } // @TODO: check this\n return throwError(\"missing v\");\n })(sig.v, sig.vs, sig.yParity);\n // @TODO: check vs, chainId, yParity\n const result = new Signature(_guard, r, s, v);\n if (sig.yParity && sig.yParity !== result.yParity) {\n }\n if (sig.vs && sig.vs !== result.vs) {\n }\n //if (sig.chainId && sig.chainId !== result.chainId) {\n //}\n return result;\n }\n}\n//# sourceMappingURL=signature.js.map","/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nimport nodeCrypto from 'crypto';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _3n = BigInt(3);\nconst _8n = BigInt(8);\nconst POW_2_256 = _2n ** BigInt(256);\nconst CURVE = {\n a: _0n,\n b: BigInt(7),\n P: POW_2_256 - _2n ** BigInt(32) - BigInt(977),\n n: POW_2_256 - BigInt('432420386565659656852420866394968145599'),\n h: _1n,\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n};\nexport { CURVE };\nfunction weistrass(x) {\n const { a, b } = CURVE;\n const x2 = mod(x * x);\n const x3 = mod(x2 * x);\n return mod(x3 + a * x + b);\n}\nconst USE_ENDOMORPHISM = CURVE.a === _0n;\nclass JacobianPoint {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('JacobianPoint#fromAffine: expected Point');\n }\n return new JacobianPoint(p.x, p.y, _1n);\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return JacobianPoint.toAffineBatch(points).map(JacobianPoint.fromAffine);\n }\n equals(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n return U1 === U2 && S1 === S2;\n }\n negate() {\n return new JacobianPoint(this.x, mod(-this.y), this.z);\n }\n double() {\n const { x: X1, y: Y1, z: Z1 } = this;\n const A = mod(X1 ** _2n);\n const B = mod(Y1 ** _2n);\n const C = mod(B ** _2n);\n const D = mod(_2n * (mod((X1 + B) ** _2n) - A - C));\n const E = mod(_3n * A);\n const F = mod(E ** _2n);\n const X3 = mod(F - _2n * D);\n const Y3 = mod(E * (D - X3) - _8n * C);\n const Z3 = mod(_2n * Y1 * Z1);\n return new JacobianPoint(X3, Y3, Z3);\n }\n add(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n if (X2 === _0n || Y2 === _0n)\n return this;\n if (X1 === _0n || Y1 === _0n)\n return other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n const H = mod(U2 - U1);\n const r = mod(S2 - S1);\n if (H === _0n) {\n if (r === _0n) {\n return this.double();\n }\n else {\n return JacobianPoint.ZERO;\n }\n }\n const HH = mod(H ** _2n);\n const HHH = mod(H * HH);\n const V = mod(U1 * HH);\n const X3 = mod(r ** _2n - HHH - _2n * V);\n const Y3 = mod(r * (V - X3) - S1 * HHH);\n const Z3 = mod(Z1 * Z2 * H);\n return new JacobianPoint(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiplyUnsafe(scalar) {\n let n = normalizeScalar(scalar);\n const G = JacobianPoint.BASE;\n const P0 = JacobianPoint.ZERO;\n if (n === _0n)\n return P0;\n if (n === _1n)\n return this;\n if (!USE_ENDOMORPHISM) {\n let p = P0;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n let { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let k1p = P0;\n let k2p = P0;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n return k1p.add(k2p);\n }\n precomputeWindow(W) {\n const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1;\n const points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(JacobianPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = JacobianPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = JacobianPoint.ZERO;\n let f = JacobianPoint.ZERO;\n const windows = 1 + (USE_ENDOMORPHISM ? 128 / W : 256 / W);\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n if (wbits === 0) {\n let pr = precomputes[offset];\n if (window % 2)\n pr = pr.negate();\n f = f.add(pr);\n }\n else {\n let cached = precomputes[offset + Math.abs(wbits) - 1];\n if (wbits < 0)\n cached = cached.negate();\n p = p.add(cached);\n }\n }\n return { p, f };\n }\n multiply(scalar, affinePoint) {\n let n = normalizeScalar(scalar);\n let point;\n let fake;\n if (USE_ENDOMORPHISM) {\n const { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let { p: k1p, f: f1p } = this.wNAF(k1, affinePoint);\n let { p: k2p, f: f2p } = this.wNAF(k2, affinePoint);\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(n, affinePoint);\n point = p;\n fake = f;\n }\n return JacobianPoint.normalizeZ([point, fake])[0];\n }\n toAffine(invZ = invert(this.z)) {\n const { x, y, z } = this;\n const iz1 = invZ;\n const iz2 = mod(iz1 * iz1);\n const iz3 = mod(iz2 * iz1);\n const ax = mod(x * iz2);\n const ay = mod(y * iz3);\n const zz = mod(z * iz1);\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return new Point(ax, ay);\n }\n}\nJacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n);\nJacobianPoint.ZERO = new JacobianPoint(_0n, _1n, _0n);\nconst pointPrecomputes = new WeakMap();\nexport class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n static fromCompressedHex(bytes) {\n const isShort = bytes.length === 32;\n const x = bytesToNumber(isShort ? bytes : bytes.subarray(1));\n if (!isValidFieldElement(x))\n throw new Error('Point is not on curve');\n const y2 = weistrass(x);\n let y = sqrtMod(y2);\n const isYOdd = (y & _1n) === _1n;\n if (isShort) {\n if (isYOdd)\n y = mod(-y);\n }\n else {\n const isFirstByteOdd = (bytes[0] & 1) === 1;\n if (isFirstByteOdd !== isYOdd)\n y = mod(-y);\n }\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromUncompressedHex(bytes) {\n const x = bytesToNumber(bytes.subarray(1, 33));\n const y = bytesToNumber(bytes.subarray(33, 65));\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n const len = bytes.length;\n const header = bytes[0];\n if (len === 32 || (len === 33 && (header === 0x02 || header === 0x03))) {\n return this.fromCompressedHex(bytes);\n }\n if (len === 65 && header === 0x04)\n return this.fromUncompressedHex(bytes);\n throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${len}`);\n }\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normalizePrivateKey(privateKey));\n }\n static fromSignature(msgHash, signature, recovery) {\n msgHash = ensureBytes(msgHash);\n const h = truncateHash(msgHash);\n const { r, s } = normalizeSignature(signature);\n if (recovery !== 0 && recovery !== 1) {\n throw new Error('Cannot recover signature: invalid recovery bit');\n }\n if (h === _0n)\n throw new Error('Cannot recover signature: msgHash cannot be 0');\n const prefix = recovery & 1 ? '03' : '02';\n const R = Point.fromHex(prefix + numTo32bStr(r));\n const { n } = CURVE;\n const rinv = invert(r, n);\n const u1 = mod(-h * rinv, n);\n const u2 = mod(s * rinv, n);\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2);\n if (!Q)\n throw new Error('Cannot recover signature: point at infinify');\n Q.assertValidity();\n return Q;\n }\n toRawBytes(isCompressed = false) {\n return hexToBytes(this.toHex(isCompressed));\n }\n toHex(isCompressed = false) {\n const x = numTo32bStr(this.x);\n if (isCompressed) {\n const prefix = this.y & _1n ? '03' : '02';\n return `${prefix}${x}`;\n }\n else {\n return `04${x}${numTo32bStr(this.y)}`;\n }\n }\n toHexX() {\n return this.toHex(true).slice(2);\n }\n toRawX() {\n return this.toRawBytes(true).slice(1);\n }\n assertValidity() {\n const msg = 'Point is not on elliptic curve';\n const { x, y } = this;\n if (!isValidFieldElement(x) || !isValidFieldElement(y))\n throw new Error(msg);\n const left = mod(y * y);\n const right = weistrass(x);\n if (mod(left - right) !== _0n)\n throw new Error(msg);\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(this.x, mod(-this.y));\n }\n double() {\n return JacobianPoint.fromAffine(this).double().toAffine();\n }\n add(other) {\n return JacobianPoint.fromAffine(this).add(JacobianPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return JacobianPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n multiplyAndAddUnsafe(Q, a, b) {\n const P = JacobianPoint.fromAffine(this);\n const aP = P.multiply(a);\n const bQ = JacobianPoint.fromAffine(Q).multiplyUnsafe(b);\n const sum = aP.add(bQ);\n return sum.equals(JacobianPoint.ZERO) ? undefined : sum.toAffine();\n }\n}\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _0n);\nfunction sliceDER(s) {\n return Number.parseInt(s[0], 16) >= 8 ? '00' + s : s;\n}\nfunction parseDERInt(data) {\n if (data.length < 2 || data[0] !== 0x02) {\n throw new Error(`Invalid signature integer tag: ${bytesToHex(data)}`);\n }\n const len = data[1];\n const res = data.subarray(2, len + 2);\n if (!len || res.length !== len) {\n throw new Error(`Invalid signature integer: wrong length`);\n }\n if (res[0] === 0x00 && res[1] <= 0x7f) {\n throw new Error('Invalid signature integer: trailing length');\n }\n return { data: bytesToNumber(res), left: data.subarray(len + 2) };\n}\nfunction parseDERSignature(data) {\n if (data.length < 2 || data[0] != 0x30) {\n throw new Error(`Invalid signature tag: ${bytesToHex(data)}`);\n }\n if (data[1] !== data.length - 2) {\n throw new Error('Invalid signature: incorrect length');\n }\n const { data: r, left: sBytes } = parseDERInt(data.subarray(2));\n const { data: s, left: rBytesLeft } = parseDERInt(sBytes);\n if (rBytesLeft.length) {\n throw new Error(`Invalid signature: left bytes after parsing: ${bytesToHex(rBytesLeft)}`);\n }\n return { r, s };\n}\nexport class Signature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromCompact(hex) {\n const arr = isUint8a(hex);\n const name = 'Signature.fromCompact';\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`${name}: Expected string or Uint8Array`);\n const str = arr ? bytesToHex(hex) : hex;\n if (str.length !== 128)\n throw new Error(`${name}: Expected 64-byte hex`);\n return new Signature(hexToNumber(str.slice(0, 64)), hexToNumber(str.slice(64, 128)));\n }\n static fromDER(hex) {\n const arr = isUint8a(hex);\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`Signature.fromDER: Expected string or Uint8Array`);\n const { r, s } = parseDERSignature(arr ? hex : hexToBytes(hex));\n return new Signature(r, s);\n }\n static fromHex(hex) {\n return this.fromDER(hex);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isWithinCurveOrder(r))\n throw new Error('Invalid Signature: r must be 0 < r < n');\n if (!isWithinCurveOrder(s))\n throw new Error('Invalid Signature: s must be 0 < s < n');\n }\n hasHighS() {\n const HALF = CURVE.n >> _1n;\n return this.s > HALF;\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, CURVE.n - this.s) : this;\n }\n toDERRawBytes(isCompressed = false) {\n return hexToBytes(this.toDERHex(isCompressed));\n }\n toDERHex(isCompressed = false) {\n const sHex = sliceDER(numberToHexUnpadded(this.s));\n if (isCompressed)\n return sHex;\n const rHex = sliceDER(numberToHexUnpadded(this.r));\n const rLen = numberToHexUnpadded(rHex.length / 2);\n const sLen = numberToHexUnpadded(sHex.length / 2);\n const length = numberToHexUnpadded(rHex.length / 2 + sHex.length / 2 + 4);\n return `30${length}02${rLen}${rHex}02${sLen}${sHex}`;\n }\n toRawBytes() {\n return this.toDERRawBytes();\n }\n toHex() {\n return this.toDERHex();\n }\n toCompactRawBytes() {\n return hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n}\nfunction concatBytes(...arrays) {\n if (!arrays.every(isUint8a))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nfunction isUint8a(bytes) {\n return bytes instanceof Uint8Array;\n}\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\nfunction bytesToHex(uint8a) {\n if (!(uint8a instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\nfunction numTo32bStr(num) {\n if (num > POW_2_256)\n throw new Error('Expected number < 2^256');\n return num.toString(16).padStart(64, '0');\n}\nfunction numTo32b(num) {\n return hexToBytes(numTo32bStr(num));\n}\nfunction numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n}\nfunction hexToNumber(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToNumber: expected string, got ' + typeof hex);\n }\n return BigInt(`0x${hex}`);\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex' + hex.length);\n const array = new Uint8Array(hex.length / 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)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\nfunction bytesToNumber(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nfunction ensureBytes(hex) {\n return hex instanceof Uint8Array ? Uint8Array.from(hex) : hexToBytes(hex);\n}\nfunction normalizeScalar(num) {\n if (typeof num === 'number' && Number.isSafeInteger(num) && num > 0)\n return BigInt(num);\n if (typeof num === 'bigint' && isWithinCurveOrder(num))\n return num;\n throw new TypeError('Expected valid private scalar: 0 < scalar < curve.n');\n}\nfunction mod(a, b = CURVE.P) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction sqrtMod(x) {\n const { P } = CURVE;\n const _6n = BigInt(6);\n const _11n = BigInt(11);\n const _22n = BigInt(22);\n const _23n = BigInt(23);\n const _44n = BigInt(44);\n const _88n = BigInt(88);\n const b2 = (x * x * x) % P;\n const b3 = (b2 * b2 * x) % P;\n const b6 = (pow2(b3, _3n) * b3) % P;\n const b9 = (pow2(b6, _3n) * b3) % P;\n const b11 = (pow2(b9, _2n) * b2) % P;\n const b22 = (pow2(b11, _11n) * b11) % P;\n const b44 = (pow2(b22, _22n) * b22) % P;\n const b88 = (pow2(b44, _44n) * b44) % P;\n const b176 = (pow2(b88, _88n) * b88) % P;\n const b220 = (pow2(b176, _44n) * b44) % P;\n const b223 = (pow2(b220, _3n) * b3) % P;\n const t1 = (pow2(b223, _23n) * b22) % P;\n const t2 = (pow2(t1, _6n) * b2) % P;\n return pow2(t2, _2n);\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, p = CURVE.P) {\n const scratch = new Array(nums.length);\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = acc;\n return mod(acc * num, p);\n }, _1n);\n const inverted = invert(lastMultiplied, p);\n nums.reduceRight((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = mod(acc * scratch[i], p);\n return mod(acc * num, p);\n }, inverted);\n return scratch;\n}\nconst divNearest = (a, b) => (a + b / _2n) / b;\nconst POW_2_128 = _2n ** BigInt(128);\nfunction splitScalarEndo(k) {\n const { n } = CURVE;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\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)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalarEndo: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n}\nfunction truncateHash(hash) {\n const { n } = CURVE;\n const byteLength = hash.length;\n const delta = byteLength * 8 - 256;\n let h = bytesToNumber(hash);\n if (delta > 0)\n h = h >> BigInt(delta);\n if (h >= n)\n h -= n;\n return h;\n}\nclass HmacDrbg {\n constructor() {\n this.v = new Uint8Array(32).fill(1);\n this.k = new Uint8Array(32).fill(0);\n this.counter = 0;\n }\n hmac(...values) {\n return utils.hmacSha256(this.k, ...values);\n }\n hmacSync(...values) {\n if (typeof utils.hmacSha256Sync !== 'function')\n throw new Error('utils.hmacSha256Sync is undefined, you need to set it');\n const res = utils.hmacSha256Sync(this.k, ...values);\n if (res instanceof Promise)\n throw new Error('To use sync sign(), ensure utils.hmacSha256 is sync');\n return res;\n }\n incr() {\n if (this.counter >= 1000) {\n throw new Error('Tried 1,000 k values for sign(), all were invalid');\n }\n this.counter += 1;\n }\n async reseed(seed = new Uint8Array()) {\n this.k = await this.hmac(this.v, Uint8Array.from([0x00]), seed);\n this.v = await this.hmac(this.v);\n if (seed.length === 0)\n return;\n this.k = await this.hmac(this.v, Uint8Array.from([0x01]), seed);\n this.v = await this.hmac(this.v);\n }\n reseedSync(seed = new Uint8Array()) {\n this.k = this.hmacSync(this.v, Uint8Array.from([0x00]), seed);\n this.v = this.hmacSync(this.v);\n if (seed.length === 0)\n return;\n this.k = this.hmacSync(this.v, Uint8Array.from([0x01]), seed);\n this.v = this.hmacSync(this.v);\n }\n async generate() {\n this.incr();\n this.v = await this.hmac(this.v);\n return this.v;\n }\n generateSync() {\n this.incr();\n this.v = this.hmacSync(this.v);\n return this.v;\n }\n}\nfunction isWithinCurveOrder(num) {\n return _0n < num && num < CURVE.n;\n}\nfunction isValidFieldElement(num) {\n return _0n < num && num < CURVE.P;\n}\nfunction kmdToSig(kBytes, m, d) {\n const k = bytesToNumber(kBytes);\n if (!isWithinCurveOrder(k))\n return;\n const { n } = CURVE;\n const q = Point.BASE.multiply(k);\n const r = mod(q.x, n);\n if (r === _0n)\n return;\n const s = mod(invert(k, n) * mod(m + d * r, n), n);\n if (s === _0n)\n return;\n const sig = new Signature(r, s);\n const recovery = (q.x === sig.r ? 0 : 2) | Number(q.y & _1n);\n return { sig, recovery };\n}\nfunction normalizePrivateKey(key) {\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else if (typeof key === 'number' && Number.isSafeInteger(key) && key > 0) {\n num = BigInt(key);\n }\n else if (typeof key === 'string') {\n if (key.length !== 64)\n throw new Error('Expected 32 bytes of private key');\n num = hexToNumber(key);\n }\n else if (isUint8a(key)) {\n if (key.length !== 32)\n throw new Error('Expected 32 bytes of private key');\n num = bytesToNumber(key);\n }\n else {\n throw new TypeError('Expected valid private key');\n }\n if (!isWithinCurveOrder(num))\n throw new Error('Expected private key: 0 < key < n');\n return num;\n}\nfunction normalizePublicKey(publicKey) {\n if (publicKey instanceof Point) {\n publicKey.assertValidity();\n return publicKey;\n }\n else {\n return Point.fromHex(publicKey);\n }\n}\nfunction normalizeSignature(signature) {\n if (signature instanceof Signature) {\n signature.assertValidity();\n return signature;\n }\n try {\n return Signature.fromDER(signature);\n }\n catch (error) {\n return Signature.fromCompact(signature);\n }\n}\nexport function getPublicKey(privateKey, isCompressed = false) {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n}\nexport function recoverPublicKey(msgHash, signature, recovery, isCompressed = false) {\n return Point.fromSignature(msgHash, signature, recovery).toRawBytes(isCompressed);\n}\nfunction isPub(item) {\n const arr = isUint8a(item);\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === 33 || len === 65;\n if (str)\n return len === 66 || len === 130;\n if (item instanceof Point)\n return true;\n return false;\n}\nexport function getSharedSecret(privateA, publicB, isCompressed = false) {\n if (isPub(privateA))\n throw new TypeError('getSharedSecret: first arg must be private key');\n if (!isPub(publicB))\n throw new TypeError('getSharedSecret: second arg must be public key');\n const b = normalizePublicKey(publicB);\n b.assertValidity();\n return b.multiply(normalizePrivateKey(privateA)).toRawBytes(isCompressed);\n}\nfunction bits2int(bytes) {\n const slice = bytes.length > 32 ? bytes.slice(0, 32) : bytes;\n return bytesToNumber(slice);\n}\nfunction bits2octets(bytes) {\n const z1 = bits2int(bytes);\n const z2 = mod(z1, CURVE.n);\n return int2octets(z2 < _0n ? z1 : z2);\n}\nfunction int2octets(num) {\n if (typeof num !== 'bigint')\n throw new Error('Expected bigint');\n const hex = numTo32bStr(num);\n return hexToBytes(hex);\n}\nfunction initSigArgs(msgHash, privateKey, extraEntropy) {\n if (msgHash == null)\n throw new Error(`sign: expected valid message hash, not \"${msgHash}\"`);\n const h1 = ensureBytes(msgHash);\n const d = normalizePrivateKey(privateKey);\n const seedArgs = [int2octets(d), bits2octets(h1)];\n if (extraEntropy != null) {\n if (extraEntropy === true)\n extraEntropy = utils.randomBytes(32);\n const e = ensureBytes(extraEntropy);\n if (e.length !== 32)\n throw new Error('sign: Expected 32 bytes of extra data');\n seedArgs.push(e);\n }\n const seed = concatBytes(...seedArgs);\n const m = bits2int(h1);\n return { seed, m, d };\n}\nfunction finalizeSig(recSig, opts) {\n let { sig, recovery } = recSig;\n const { canonical, der, recovered } = Object.assign({ canonical: true, der: true }, opts);\n if (canonical && sig.hasHighS()) {\n sig = sig.normalizeS();\n recovery ^= 1;\n }\n const hashed = der ? sig.toDERRawBytes() : sig.toCompactRawBytes();\n return recovered ? [hashed, recovery] : hashed;\n}\nasync function sign(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n await drbg.reseed(seed);\n while (!(sig = kmdToSig(await drbg.generate(), m, d)))\n await drbg.reseed();\n return finalizeSig(sig, opts);\n}\nfunction signSync(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n drbg.reseedSync(seed);\n while (!(sig = kmdToSig(drbg.generateSync(), m, d)))\n drbg.reseedSync();\n return finalizeSig(sig, opts);\n}\nexport { sign, signSync };\nconst vopts = { strict: true };\nexport function verify(signature, msgHash, publicKey, opts = vopts) {\n let sig;\n try {\n sig = normalizeSignature(signature);\n msgHash = ensureBytes(msgHash);\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n if (opts.strict && sig.hasHighS())\n return false;\n const h = truncateHash(msgHash);\n if (h === _0n)\n return false;\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const { n } = CURVE;\n const sinv = invert(s, n);\n const u1 = mod(h * sinv, n);\n const u2 = mod(r * sinv, n);\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2);\n if (!R)\n return false;\n const v = mod(R.x, n);\n return v === r;\n}\nasync function taggedHash(tag, ...messages) {\n const tagB = new Uint8Array(tag.split('').map((c) => c.charCodeAt(0)));\n const tagH = await utils.sha256(tagB);\n const h = await utils.sha256(concatBytes(tagH, tagH, ...messages));\n return bytesToNumber(h);\n}\nasync function createChallenge(x, P, message) {\n const rx = numTo32b(x);\n const t = await taggedHash('BIP0340/challenge', rx, P.toRawX(), message);\n return mod(t, CURVE.n);\n}\nfunction hasEvenY(point) {\n return (point.y & _1n) === _0n;\n}\nclass SchnorrSignature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n if (bytes.length !== 64)\n throw new TypeError(`SchnorrSignature.fromHex: expected 64 bytes, not ${bytes.length}`);\n const r = bytesToNumber(bytes.subarray(0, 32));\n const s = bytesToNumber(bytes.subarray(32, 64));\n return new SchnorrSignature(r, s);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isValidFieldElement(r) || !isWithinCurveOrder(s))\n throw new Error('Invalid signature');\n }\n toHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n toRawBytes() {\n return hexToBytes(this.toHex());\n }\n}\nfunction schnorrGetPublicKey(privateKey) {\n return Point.fromPrivateKey(privateKey).toRawX();\n}\nasync function schnorrSign(message, privateKey, auxRand = utils.randomBytes()) {\n if (message == null)\n throw new TypeError(`sign: Expected valid message, not \"${message}\"`);\n const { n } = CURVE;\n const m = ensureBytes(message);\n const d0 = normalizePrivateKey(privateKey);\n const rand = ensureBytes(auxRand);\n if (rand.length !== 32)\n throw new TypeError('sign: Expected 32 bytes of aux randomness');\n const P = Point.fromPrivateKey(d0);\n const d = hasEvenY(P) ? d0 : n - d0;\n const t0h = await taggedHash('BIP0340/aux', rand);\n const t = d ^ t0h;\n const k0h = await taggedHash('BIP0340/nonce', numTo32b(t), P.toRawX(), m);\n const k0 = mod(k0h, n);\n if (k0 === _0n)\n throw new Error('sign: Creation of signature failed. k is zero');\n const R = Point.fromPrivateKey(k0);\n const k = hasEvenY(R) ? k0 : n - k0;\n const e = await createChallenge(R.x, P, m);\n const sig = new SchnorrSignature(R.x, mod(k + e * d, n)).toRawBytes();\n const isValid = await schnorrVerify(sig, m, P.toRawX());\n if (!isValid)\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\nasync function schnorrVerify(signature, message, publicKey) {\n const raw = signature instanceof SchnorrSignature;\n let sig;\n try {\n sig = raw ? signature : SchnorrSignature.fromHex(signature);\n if (raw)\n sig.assertValidity();\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n const m = ensureBytes(message);\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const e = await createChallenge(r, P, m);\n const R = Point.BASE.multiplyAndAddUnsafe(P, normalizePrivateKey(s), mod(-e, CURVE.n));\n if (!R || !hasEvenY(R) || R.x !== r)\n return false;\n return true;\n}\nexport const schnorr = {\n Signature: SchnorrSignature,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n};\nPoint.BASE._setWindowSize(8);\nconst crypto = {\n node: nodeCrypto,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nexport const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normalizePrivateKey(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n hashToPrivateKey: (hash) => {\n hash = ensureBytes(hash);\n if (hash.length < 40 || hash.length > 1024)\n throw new Error('Expected 40-1024 bytes of private key as per FIPS 186');\n const num = mod(bytesToNumber(hash), CURVE.n);\n if (num === _0n || num === _1n)\n throw new Error('Invalid private key');\n return numTo32b(num);\n },\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return Uint8Array.from(randomBytes(bytesLength));\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => {\n return utils.hashToPrivateKey(utils.randomBytes(40));\n },\n bytesToHex,\n mod,\n sha256: async (message) => {\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-256', message.buffer);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHash } = crypto.node;\n return Uint8Array.from(createHash('sha256').update(message).digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha256 function\");\n }\n },\n hmacSha256: async (key, ...messages) => {\n if (crypto.web) {\n const ckey = await crypto.web.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n const message = concatBytes(...messages);\n const buffer = await crypto.web.subtle.sign('HMAC', ckey, message);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHmac } = crypto.node;\n const hash = createHmac('sha256', key);\n messages.forEach((m) => hash.update(m));\n return Uint8Array.from(hash.digest());\n }\n else {\n throw new Error(\"The environment doesn't have hmac-sha256 function\");\n }\n },\n sha256Sync: undefined,\n hmacSha256Sync: undefined,\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point === Point.BASE ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_3n);\n return cached;\n },\n};\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 _SigningKey_privateKey;\nimport * as secp256k1 from \"@noble/secp256k1\";\nimport { arrayify, concat, dataLength, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac } from \"@ethersproject/crypto\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"./signature.js\";\nimport { logger } from \"./logger.js\";\n// Make noble-secp256k1 sync\nsecp256k1.utils.hmacSha256Sync = function (key, ...messages) {\n return arrayify(computeHmac(\"sha256\", key, concat(messages)));\n};\nexport class SigningKey {\n constructor(privateKey) {\n _SigningKey_privateKey.set(this, void 0);\n logger.assertArgument((dataLength(privateKey) === 32), \"invalid private key length\", \"privateKey\", \"[REDACTED]\");\n __classPrivateFieldSet(this, _SigningKey_privateKey, hexlify(privateKey), \"f\");\n }\n get privateKey() { return __classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"); }\n get publicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")); }\n get compressedPublicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"), true); }\n sign(digest) {\n logger.assertArgument((dataLength(digest) === 32), \"invalid digest length\", \"digest\", digest);\n const [sigDer, recid] = secp256k1.signSync(arrayify(digest), arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), {\n recovered: true,\n canonical: true\n });\n const sig = secp256k1.Signature.fromHex(sigDer);\n return Signature.from({\n r: toHex(\"0x\" + sig.r.toString(16), 32),\n s: toHex(\"0x\" + sig.s.toString(16), 32),\n v: (recid ? 0x1c : 0x1b)\n }).freeze();\n }\n computeShardSecret(other) {\n const pubKey = SigningKey.computePublicKey(other);\n return hexlify(secp256k1.getSharedSecret(arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), pubKey));\n }\n static computePublicKey(key, compressed) {\n let bytes = logger.getBytes(key, \"key\");\n if (bytes.length === 32) {\n const pubKey = secp256k1.getPublicKey(bytes, !!compressed);\n return hexlify(pubKey);\n }\n if (bytes.length === 64) {\n const pub = new Uint8Array(65);\n pub[0] = 0x04;\n pub.set(bytes, 1);\n bytes = pub;\n }\n const point = secp256k1.Point.fromHex(bytes);\n return hexlify(point.toRawBytes(compressed));\n }\n static recoverPublicKey(digest, signature) {\n const sig = Signature.from(signature);\n const der = secp256k1.Signature.fromCompact(arrayify(concat([sig.r, sig.s]))).toDERRawBytes();\n const pubKey = secp256k1.recoverPublicKey(arrayify(digest), der, sig.yParity);\n if (pubKey != null) {\n return hexlify(pubKey);\n }\n return logger.throwArgumentError(\"invalid signautre for digest\", \"signature\", signature);\n }\n static _addPoints(p0, p1, compressed) {\n const pub0 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p0).substring(2));\n const pub1 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p1).substring(2));\n return \"0x\" + pub0.add(pub1).toHex(!!compressed);\n }\n}\n_SigningKey_privateKey = new WeakMap();\n/*\nconst key = new SigningKey(\"0x1234567890123456789012345678901234567890123456789012345678901234\");\nconsole.log(key);\nconsole.log(key.sign(\"0x1234567890123456789012345678901234567890123456789012345678901234\"));\n{\n const privKey = \"0x1234567812345678123456781234567812345678123456781234567812345678\";\n const signingKey = new SigningKey(privKey);\n console.log(\"0\", signingKey, signingKey.publicKey, signingKey.publicKeyCompressed);\n\n let pubKey = SigningKey.computePublicKey(privKey);\n let pubKeyComp = SigningKey.computePublicKey(privKey, true);\n let pubKeyRaw = \"0x\" + SigningKey.computePublicKey(privKey).substring(4);\n console.log(\"A\", pubKey, pubKeyComp);\n\n let a = SigningKey.computePublicKey(pubKey);\n let b = SigningKey.computePublicKey(pubKey, true);\n console.log(\"B\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyComp);\n b = SigningKey.computePublicKey(pubKeyComp, true);\n console.log(\"C\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyRaw);\n b = SigningKey.computePublicKey(pubKeyRaw, true);\n console.log(\"D\", a, b);\n\n const digest = \"0x1122334411223344112233441122334411223344112233441122334411223344\";\n const sig = signingKey.sign(digest);\n console.log(\"SS\", sig, sig.r, sig.s, sig.yParity);\n\n console.log(\"R\", SigningKey.recoverPublicKey(digest, sig));\n}\n*/\n//# sourceMappingURL=signing-key.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { dataLength } from \"@ethersproject/bytes\";\nfunction accessSetify(addr, storageKeys) {\n return {\n address: getAddress(addr),\n storageKeys: (storageKeys || []).map((storageKey, index) => {\n if (dataLength(storageKey) !== 32) {\n //logger.throwArgumentError(\"invalid access list storageKey\", `accessList[${ addr }>\n throw new Error(\"\");\n }\n return storageKey.toLowerCase();\n })\n };\n}\nexport function accessListify(value) {\n if (Array.isArray(value)) {\n return value.map((set, index) => {\n if (Array.isArray(set)) {\n if (set.length > 2) {\n //logger.throwArgumentError(\"access list expected to be [ address, storageKeys[>\n throw new Error(\"\");\n }\n return accessSetify(set[0], set[1]);\n }\n return accessSetify(set.address, set.storageKeys);\n });\n }\n const result = Object.keys(value).map((addr) => {\n const storageKeys = value[addr].reduce((accum, storageKey) => {\n accum[storageKey] = true;\n return accum;\n }, {});\n return accessSetify(addr, Object.keys(storageKeys).sort());\n });\n result.sort((a, b) => (a.address.localeCompare(b.address)));\n return result;\n}\n//# sourceMappingURL=accesslist.js.map","export const version = \"@ethersproject/transactions@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _Transaction_props;\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toArray } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"./accesslist.js\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nfunction formatNumber(_value, name) {\n const value = logger.getBigInt(_value, \"value\");\n const result = toArray(value);\n if (result.length > 32) {\n logger.throwArgumentError(`value too large`, `tx.${name}`, value);\n }\n return result;\n}\nfunction formatAccessList(value) {\n return accessListify(value).map((set) => [set.address, set.storageKeys]);\n}\nfunction _parseLegacy(data) {\n return {};\n}\nfunction _serializeLegacy(tx, sig) {\n const fields = [\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n ];\n let chainId = BN_0;\n if (tx.chainId != null) {\n // A chainId was provided; if non-zero we'll use EIP-155\n chainId = logger.getBigInt(tx.chainId, \"tx.chainId\");\n // We have a chainId in the tx and an EIP-155 v in the signature,\n // make sure they agree with each other\n if (sig && sig.networkV != null && sig.legacyChainId !== chainId) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n }\n else if (sig) {\n // No chainId provided, but the signature is signing with EIP-155; derive chainId\n const legacy = sig.legacyChainId;\n if (legacy != null) {\n chainId = legacy;\n }\n }\n // Requesting an unsigned transaction\n if (!sig) {\n // We have an EIP-155 transaction (chainId was specified and non-zero)\n if (chainId !== BN_0) {\n fields.push(toArray(chainId));\n fields.push(\"0x\");\n fields.push(\"0x\");\n }\n return encodeRlp(fields);\n }\n // We pushed a chainId and null r, s on for hashing only; remove those\n let v = BigInt(27 + sig.yParity);\n if (chainId !== BN_0) {\n v = Signature.getChainIdV(chainId, sig.v);\n }\n else if (BigInt(sig.v) !== v) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n fields.push(toArray(v));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n return encodeRlp(fields);\n}\nfunction _parseEip1559(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip1559(tx, sig) {\n // If there is an explicit gasPrice, make sure it matches the\n // EIP-1559 fees; otherwise they may not understand what they\n // think they are setting in terms of fee.\n //if (tx.gasPrice != null) {\n // if (tx.gasPrice !== (tx.maxFeePerGas || BN_0)) {\n // logger.throwArgumentError(\"mismatch EIP-1559 gasPrice != maxFeePerGas\", \"tx\", tx);\n // }\n //}\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n formatNumber(tx.maxFeePerGas || 0, \"maxFeePerGas\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"yParity\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x02\", encodeRlp(fields)]);\n}\nfunction _parseEip2930(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip2930(tx, sig) {\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"recoveryParam\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x01\", encodeRlp(fields)]);\n}\nexport class Transaction {\n constructor() {\n _Transaction_props.set(this, void 0);\n __classPrivateFieldSet(this, _Transaction_props, {\n type: null,\n to: null,\n nonce: 0,\n gasLimit: BigInt(0),\n gasPrice: null,\n maxPriorityFeePerGas: null,\n maxFeePerGas: null,\n data: \"0x\",\n value: BigInt(0),\n chainId: BigInt(0),\n sig: null,\n accessList: null\n }, \"f\");\n }\n // A type of null indicates the type will be populated automatically\n get type() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\"); }\n get typeName() {\n switch (this.type) {\n case 0: return \"legacy\";\n case 1: return \"eip-2930\";\n case 2: return \"eip-1559\";\n }\n return null;\n }\n set type(value) {\n switch (value) {\n case null:\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", null);\n break;\n case 0:\n case \"legacy\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 0);\n break;\n case 1:\n case \"berlin\":\n case \"eip-2930\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 1);\n break;\n case 2:\n case \"london\":\n case \"eip-1559\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 2);\n break;\n default:\n throw new Error(`unsupported transaction type`);\n }\n }\n /*\n detectType(): number {\n const hasFee = (this.maxFeePerGas != null) || (this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n const hasLegacy = (this.gasPrice != null);\n\n if (hasLegacy) {\n if (hasFee) {\n throw new Error(\"cannot mix legacy and london properties\");\n }\n if (hasAccessList) { return 1; }\n return 0;\n }\n\n return 2;\n }\n */\n get to() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\"); }\n set to(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\", (value == null) ? null : getAddress(value));\n }\n get nonce() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\"); }\n set nonce(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\", logger.getNumber(value, \"value\")); }\n get gasLimit() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\"); }\n set gasLimit(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\", logger.getBigInt(value)); }\n get gasPrice() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\"); }\n set gasPrice(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxPriorityFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\"); }\n set maxPriorityFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\"); }\n set maxFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get data() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\"); }\n set data(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\", hexlify(value)); }\n get value() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\"); }\n set value(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\", logger.getBigInt(value));\n }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\", logger.getBigInt(value)); }\n get signature() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\") || null; }\n set signature(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\", (value == null) ? null : Signature.from(value));\n }\n get accessList() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\") || null; }\n set accessList(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\", (value == null) ? null : accessListify(value));\n }\n get hash() {\n if (this.signature == null) {\n throw new Error(\"cannot hash unsigned transaction; maybe you meant .unsignedHash\");\n }\n return keccak256(this.serialized);\n }\n get unsignedHash() {\n return keccak256(this.unsignedSerialized);\n }\n get from() {\n if (this.signature == null) {\n return null;\n }\n // use ecomputeAddress(this.fromPublicKey);\n return \"\";\n }\n get fromPublicKey() {\n if (this.signature == null) {\n return null;\n }\n // use ecrecover\n return \"\";\n }\n isSigned() {\n return this.signature != null;\n }\n get serialized() {\n if (this.signature == null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this, this.signature);\n case 1:\n return _serializeEip2930(this, this.signature);\n case 2:\n return _serializeEip1559(this, this.signature);\n }\n throw new Error(\"unsupported type\");\n }\n get unsignedSerialized() {\n if (this.signature != null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this);\n case 1:\n return _serializeEip2930(this);\n case 2:\n return _serializeEip1559(this);\n }\n throw new Error(\"unsupported type\");\n }\n // Validates properties and lists possible types this transaction adheres to\n inferTypes() {\n // Checks that there are no conflicting properties set\n const hasGasPrice = this.gasPrice != null;\n const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n //if (hasGasPrice && hasFee) {\n // throw new Error(\"transaction cannot have gasPrice and maxFeePerGas\");\n //}\n if (!!this.maxFeePerGas && !!this.maxPriorityFeePerGas) {\n if (this.maxFeePerGas < this.maxPriorityFeePerGas) {\n throw new Error(\"priorityFee cannot be more than maxFee\");\n }\n }\n //if (this.type === 2 && hasGasPrice) {\n // throw new Error(\"eip-1559 transaction cannot have gasPrice\");\n //}\n if ((this.type === 0 || this.type === 1) && hasFee) {\n throw new Error(\"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas\");\n }\n if (this.type === 0 && hasAccessList) {\n throw new Error(\"legacy transaction cannot have accessList\");\n }\n const types = [];\n // Explicit type\n if (this.type != null) {\n types.push(this.type);\n }\n else {\n if (hasFee) {\n types.push(2);\n }\n else if (hasGasPrice) {\n types.push(1);\n if (!hasAccessList) {\n types.push(0);\n }\n }\n else if (hasAccessList) {\n types.push(1);\n types.push(2);\n }\n else {\n types.push(0);\n types.push(1);\n types.push(2);\n }\n }\n types.sort();\n return types;\n }\n clone() {\n return Transaction.from(this);\n }\n freeze() {\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").sig = (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig.clone().freeze());\n }\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").accessList = Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList.map((set) => {\n Object.freeze(set.storageKeys);\n return Object.freeze(set);\n }));\n }\n Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n }\n static from(tx) {\n if (typeof (tx) === \"string\") {\n const payload = arrayify(tx);\n if (payload[0] >= 0x7f) { // @TODO: > vs >= ??\n return Transaction.from(_parseLegacy(payload));\n }\n switch (payload[0]) {\n case 1: return Transaction.from(_parseEip2930(payload.slice(1)));\n case 2: return Transaction.from(_parseEip1559(payload.slice(1)));\n }\n throw new Error(\"unsupported transaction type\");\n }\n const result = new Transaction();\n if (tx.type != null) {\n result.type = tx.type;\n }\n if (tx.to != null) {\n result.to = tx.to;\n }\n if (tx.nonce != null) {\n result.nonce = tx.nonce;\n }\n if (tx.gasLimit != null) {\n result.gasLimit = tx.gasLimit;\n }\n if (tx.gasPrice != null) {\n result.gasPrice = tx.gasPrice;\n }\n if (tx.maxPriorityFeePerGas != null) {\n result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas;\n }\n if (tx.maxFeePerGas != null) {\n result.maxFeePerGas = tx.maxFeePerGas;\n }\n if (tx.data != null) {\n result.data = tx.data;\n }\n if (tx.value != null) {\n result.value = tx.value;\n }\n if (tx.chainId != null) {\n result.chainId = tx.chainId;\n }\n if (tx.signature != null) {\n result.signature = Signature.from(tx.signature);\n }\n if (tx.accessList != null) {\n result.accessList = tx.accessList;\n }\n // Should these be checked?? Should from be allowed if there is no signature?\n // from?: null | A;\n // hash?: null | string;\n return result;\n }\n}\n_Transaction_props = new WeakMap();\n//# sourceMappingURL=transaction.js.map","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 _Block_transactions, _TransactionReceipt_logs;\n//import { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\n// -----------------------\nfunction getValue(value) {\n if (value == null) {\n return null;\n }\n return value;\n}\nfunction toJson(value) {\n if (value == null) {\n return null;\n }\n return value.toString();\n}\n// @TODO? implements Required\nexport class FeeData {\n constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) {\n defineProperties(this, {\n gasPrice: getValue(gasPrice),\n maxFeePerGas: getValue(maxFeePerGas),\n maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n });\n }\n toJSON() {\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this;\n return {\n _type: \"FeeData\",\n gasPrice: toJson(gasPrice),\n maxFeePerGas: toJson(maxFeePerGas),\n maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n };\n }\n}\n;\nexport function copyRequest(req) {\n const result = {};\n // These could be addresses, ENS names or Addressables\n if (req.to) {\n result.to = req.to;\n }\n if (req.from) {\n result.from = req.from;\n }\n if (req.data) {\n result.data = hexlify(req.data);\n }\n const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value\".split(/,/);\n for (const key in bigIntKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getBigInt(req[key], `request.${key}`);\n }\n const numberKeys = \"type,nonce\".split(/,/);\n for (const key in numberKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getNumber(req[key], `request.${key}`);\n }\n if (req.accessList) {\n result.accessList = accessListify(req.accessList);\n }\n if (\"blockTag\" in req) {\n result.blockTag = req.blockTag;\n }\n if (\"enableCcipRead\" in req) {\n result.enableCcipReadEnabled = !!req.enableCcipRead;\n }\n if (\"customData\" in req) {\n result.customData = req.customData;\n }\n return result;\n}\n;\nexport class Block {\n constructor(block, provider) {\n _Block_transactions.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _Block_transactions, Object.freeze(block.transactions.map((tx) => {\n if (typeof (tx) !== \"string\" && tx.provider !== provider) {\n throw new Error(\"provider mismatch\");\n }\n return tx;\n })), \"f\");\n ;\n defineProperties(this, {\n provider,\n hash: getValue(block.hash),\n number: block.number,\n timestamp: block.timestamp,\n parentHash: block.parentHash,\n nonce: block.nonce,\n difficulty: block.difficulty,\n gasLimit: block.gasLimit,\n gasUsed: block.gasUsed,\n miner: block.miner,\n extraData: block.extraData,\n baseFeePerGas: getValue(block.baseFeePerGas)\n });\n }\n get transactions() { return __classPrivateFieldGet(this, _Block_transactions, \"f\"); }\n //connect(provider: Provider): Block {\n // return new Block(this, provider);\n //}\n toJSON() {\n const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, nonce, number, parentHash, timestamp, transactions } = this;\n return {\n _type: \"Block\",\n baseFeePerGas: toJson(baseFeePerGas),\n difficulty: toJson(difficulty),\n extraData,\n gasLimit: toJson(gasLimit),\n gasUsed: toJson(gasUsed),\n hash, miner, nonce, number, parentHash, timestamp,\n transactions,\n };\n }\n [(_Block_transactions = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return {\n value: this.transactions[index++], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get length() { return this.transactions.length; }\n get date() {\n if (this.timestamp == null) {\n return null;\n }\n return new Date(this.timestamp * 1000);\n }\n async getTransaction(index) {\n const tx = this.transactions[index];\n if (tx == null) {\n throw new Error(\"no such tx\");\n }\n if (typeof (tx) === \"string\") {\n return (await this.provider.getTransaction(tx));\n }\n else {\n return tx;\n }\n }\n isMined() { return !!this.hash; }\n isLondon() { return !!this.baseFeePerGas; }\n orphanedEvent() {\n if (!this.isMined()) {\n throw new Error(\"\");\n }\n return createOrphanedBlockFilter(this);\n }\n}\nexport class Log {\n constructor(log, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n const topics = Object.freeze(log.topics.slice());\n defineProperties(this, {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n removed: log.removed,\n address: log.address,\n data: log.data,\n topics,\n index: log.index,\n transactionIndex: log.transactionIndex,\n });\n }\n //connect(provider: Provider): Log {\n // return new Log(this, provider);\n //}\n toJSON() {\n const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this;\n return {\n _type: \"log\",\n address, blockHash, blockNumber, data, index,\n removed, topics, transactionHash, transactionIndex\n };\n }\n async getBlock() {\n return (await this.provider.getBlock(this.blockHash));\n }\n async getTransaction() {\n return (await this.provider.getTransaction(this.transactionHash));\n }\n async getTransactionReceipt() {\n return (await this.provider.getTransactionReceipt(this.transactionHash));\n }\n removedEvent() {\n return createRemovedLogFilter(this);\n }\n}\nexport class TransactionReceipt {\n constructor(tx, provider) {\n _TransactionReceipt_logs.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _TransactionReceipt_logs, Object.freeze(tx.logs.map((log) => {\n if (provider !== log.provider) {\n //return log.connect(provider);\n throw new Error(\"provider mismatch\");\n }\n return log;\n })), \"f\");\n defineProperties(this, {\n provider,\n to: tx.to,\n from: tx.from,\n contractAddress: tx.contractAddress,\n hash: tx.hash,\n index: tx.index,\n blockHash: tx.blockHash,\n blockNumber: tx.blockNumber,\n logsBloom: tx.logsBloom,\n gasUsed: tx.gasUsed,\n cumulativeGasUsed: tx.cumulativeGasUsed,\n gasPrice: (tx.effectiveGasPrice || tx.gasPrice),\n byzantium: tx.byzantium,\n status: tx.status,\n root: tx.root\n });\n }\n get logs() { return __classPrivateFieldGet(this, _TransactionReceipt_logs, \"f\"); }\n //connect(provider: Provider): TransactionReceipt {\n // return new TransactionReceipt(this, provider);\n //}\n toJSON() {\n const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, byzantium, status, root } = this;\n return {\n _type: \"TransactionReceipt\",\n blockHash, blockNumber, byzantium, contractAddress,\n cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n from,\n gasPrice: toJson(this.gasPrice),\n gasUsed: toJson(this.gasUsed),\n hash, index, logs, logsBloom, root, status, to\n };\n }\n get length() { return this.logs.length; }\n [(_TransactionReceipt_logs = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return { value: this.logs[index++], done: false };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get fee() {\n return this.gasUsed * this.gasPrice;\n }\n async getBlock() {\n const block = await this.provider.getBlock(this.blockHash);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n const tx = await this.provider.getTransaction(this.hash);\n if (tx == null) {\n throw new Error(\"TODO\");\n }\n return tx;\n }\n async confirmations() {\n return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n }\n removedEvent() {\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transction cannot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"reorderedEvent(other)\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\n;\nexport class TransactionResponse {\n constructor(tx, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null;\n this.blockHash = (tx.blockHash != null) ? tx.blockHash : null;\n this.hash = tx.hash;\n this.index = tx.index;\n this.type = tx.type;\n this.from = tx.from;\n this.to = tx.to || null;\n this.gasLimit = tx.gasLimit;\n this.nonce = tx.nonce;\n this.data = tx.data;\n this.value = tx.value;\n this.gasPrice = tx.gasPrice;\n this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null;\n this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null;\n this.chainId = tx.chainId;\n this.signature = tx.signature;\n this.accessList = (tx.accessList != null) ? tx.accessList : null;\n }\n //connect(provider: Provider): TransactionResponse {\n // return new TransactionResponse(this, provider);\n //}\n toJSON() {\n const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList } = this;\n return {\n _type: \"TransactionReceipt\",\n accessList, blockNumber, blockHash,\n chainId: toJson(this.chainId),\n data, from,\n gasLimit: toJson(this.gasLimit),\n gasPrice: toJson(this.gasPrice),\n hash,\n maxFeePerGas: toJson(this.maxFeePerGas),\n maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n nonce, signature, to, index, type,\n value: toJson(this.value),\n };\n }\n async getBlock() {\n let blockNumber = this.blockNumber;\n if (blockNumber == null) {\n const tx = await this.getTransaction();\n if (tx) {\n blockNumber = tx.blockNumber;\n }\n }\n if (blockNumber == null) {\n return null;\n }\n const block = this.provider.getBlock(blockNumber);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n return this.provider.getTransaction(this.hash);\n }\n async wait(confirms) {\n return this.provider.waitForTransaction(this.hash, confirms);\n }\n isMined() {\n return (this.blockHash != null);\n }\n isLegacy() {\n return (this.type === 0);\n }\n isBerlin() {\n return (this.type === 1);\n }\n isLondon() {\n return (this.type === 2);\n }\n removedEvent() {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\nfunction createOrphanedBlockFilter(block) {\n return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\nfunction createReorderedTransactionFilter(tx, other) {\n return { orphan: \"reorder-transaction\", tx, other };\n}\nfunction createRemovedTransactionFilter(tx) {\n return { orphan: \"drop-transaction\", tx };\n}\nfunction createRemovedLogFilter(log) {\n return { orphan: \"drop-log\", log: {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n address: log.address,\n data: log.data,\n topics: Object.freeze(log.topics.slice()),\n index: log.index\n } };\n}\nfunction fail() {\n throw new Error(\"this provider should not be used\");\n}\nclass DummyProvider {\n async getNetwork() { return fail(); }\n async getFeeData() { return fail(); }\n async estimateGas(tx) { return fail(); }\n async call(tx) { return fail(); }\n async resolveName(name) { return fail(); }\n // State\n async getBlockNumber() { return fail(); }\n // Account\n async getBalanceOf(address, blockTag) {\n return fail();\n }\n async getTransactionCountOf(address, blockTag) {\n return fail();\n }\n async getCode(address, blockTag) {\n return fail();\n }\n async getStorageAt(address, position, blockTag) {\n return fail();\n }\n // Write\n async broadcastTransaction(signedTx) { return fail(); }\n // Queries\n async getBlock(blockHashOrBlockTag) {\n return fail();\n }\n async getBlockWithTransactions(blockHashOrBlockTag) {\n return fail();\n }\n async getTransaction(hash) {\n return fail();\n }\n async getTransactionReceipt(hash) {\n return fail();\n }\n // Bloom-filter Queries\n async getLogs(filter) {\n return fail();\n }\n // ENS\n async lookupAddress(address) {\n return fail();\n }\n async waitForTransaction(hash, confirms, timeout) {\n return fail();\n }\n async waitForBlock(blockTag) {\n return fail();\n }\n // EventEmitterable\n async on(event, listener) { return fail(); }\n async once(event, listener) { return fail(); }\n async emit(event, ...args) { return fail(); }\n async listenerCount(event) { return fail(); }\n async listeners(event) { return fail(); }\n async off(event, listener) { return fail(); }\n async removeAllListeners(event) { return fail(); }\n async addListener(event, listener) { return fail(); }\n async removeListener(event, listener) { return fail(); }\n}\n// A singleton provider instance that can be used as a placeholder. This\n// allows API that have a Provider added later to not require a null check.\nexport const dummyProvider = new DummyProvider();\n//# sourceMappingURL=provider.js.map","// Belongs to Networks; requires abstract-provider\n// provider requires abstract-provider and network\nvar __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 _Formatter_format, _Formatter_baseBlock;\n/**\n * Formatter\n *\n * This is responsibile for converting much of the various\n * loose network values into a concrete ethers-ready value.\n *\n * For example, converting addresses to checksum addresses,\n * validating a hash is 32 bytes, and so on.\n *\n * By sub-classing this class and providing it in a custom\n * Network object this allows exotic (non-Ethereum) networks\n * to be fairly simple to adapt to ethers.\n */\nimport { getAddress, getCreateAddress } from \"@ethersproject/address\";\nimport { dataLength, dataSlice, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { Block, Log, TransactionReceipt, TransactionResponse } from \"./provider.js\";\nimport { logger } from \"./logger.js\";\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n//export type AccessListSet = { address: string, storageKeys: Array };\n//export type AccessList = Array;\n//export type AccessListish = AccessList |\n// Array<[ string, Array ]> |\n// Record>;\nfunction stringify(value) {\n if (typeof (value) !== \"string\") {\n throw new Error(\"invalid string\");\n }\n return value;\n}\nexport class Formatter {\n constructor() {\n _Formatter_format.set(this, void 0);\n _Formatter_baseBlock.set(this, void 0);\n const address = this.address.bind(this);\n const bigNumber = this.bigNumber.bind(this);\n const blockTag = this.blockTag.bind(this);\n const data = this.data.bind(this);\n const hash = this.hash.bind(this);\n const number = this.number.bind(this);\n const uint256 = this.uint256.bind(this);\n const topics = this.arrayOf(hash);\n __classPrivateFieldSet(this, _Formatter_format, {\n address,\n bigNumber,\n blockTag,\n data,\n hash,\n number,\n uint256,\n topics,\n filter: this.object({\n fromBlock: this.allowNull(blockTag, undefined),\n toBlock: this.allowNull(blockTag, undefined),\n blockHash: this.allowNull(hash, undefined),\n address: this.allowNull(address, undefined),\n topics: this.allowNull(topics, undefined)\n }),\n transactionRequest: this.object({\n from: this.allowNull(address),\n type: this.allowNull(number),\n to: this.allowNull(address),\n nonce: this.allowNull(number),\n gasLimit: this.allowNull(uint256),\n gasPrice: this.allowNull(uint256),\n maxFeePerGas: this.allowNull(uint256),\n maxPriorityFeePerGas: this.allowNull(uint256),\n data: this.allowNull(data),\n value: this.allowNull(uint256),\n }),\n transactionResponse: this.object({\n hash: hash,\n index: number,\n type: this.allowNull(number, 0),\n // These can be null for pending blocks\n blockHash: this.allowNull(hash),\n blockNumber: this.allowNull(number),\n // For Legacy transactions, this comes from the v\n chainId: this.allowNull(number),\n from: address,\n to: this.address,\n gasLimit: bigNumber,\n gasPrice: this.allowNull(bigNumber),\n maxFeePerGas: this.allowNull(bigNumber),\n maxPriorityFeePerGas: this.allowNull(bigNumber),\n value: bigNumber,\n data: data,\n nonce: number,\n r: hash,\n s: hash,\n v: number,\n accessList: this.allowNull(this.accessList)\n }, {\n index: [\"transactionIndex\"]\n }),\n }, \"f\");\n __classPrivateFieldSet(this, _Formatter_baseBlock, this.object({\n number: number,\n hash: this.allowNull(hash, null),\n timestamp: number,\n parentHash: hash,\n nonce: this.allowNull(stringify, \"0x0000000000000000\"),\n difficulty: bigNumber,\n gasLimit: bigNumber,\n gasUsed: bigNumber,\n miner: this.allowNull(address, \"0x0000000000000000000000000000000000000000\"),\n extraData: stringify,\n baseFeePerGas: this.allowNull(bigNumber),\n }), \"f\");\n }\n // An address\n address(value) {\n return getAddress(value);\n }\n // An address from a call result; may be zero-padded\n callAddress(value) {\n if (dataLength(value) !== 32 || dataSlice(value, 0, 12) !== \"0x000000000000000000000000\") {\n logger.throwArgumentError(\"invalid call address\", \"value\", value);\n }\n return this.address(dataSlice(value, 12));\n }\n // An address from a transaction (e.g. { from: string, nonce: number })\n contractAddress(value) {\n return getCreateAddress({\n from: this.address(value.from),\n nonce: logger.getNumber(value.nonce, \"value.nonce\")\n });\n }\n // Block Tag\n blockTag(value) {\n if (value == null) {\n return \"latest\";\n }\n switch (value) {\n case \"earliest\":\n return \"0x0\";\n case \"latest\":\n case \"pending\":\n return value;\n }\n if (typeof (value) === \"number\" || (isHexString(value) && dataLength(value) < 32)) {\n return quantity(value);\n }\n return logger.throwArgumentError(\"invalid blockTag\", \"value\", value);\n }\n // Block objects\n block(value, provider) {\n const params = __classPrivateFieldGet(this, _Formatter_baseBlock, \"f\").call(this, value);\n params.transactions = value.transactions.map((t) => this.hash(t));\n return new Block(params, provider);\n }\n blockWithTransactions(value, provider) {\n throw new Error();\n }\n // Transactions\n transactionRequest(value, provider) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionRequest(value);\n }\n transactionResponse(value, provider) {\n value = Object.assign({}, value);\n // @TODO: Use the remap feature\n if (value.data == null && value.input != null) {\n value.data = value.input;\n }\n if (value.gasLimit == null && value.gas) {\n value.gasLimit = value.gas;\n }\n value = __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionResponse(value);\n const sig = Signature.fromTransaction(value.r, value.s, value.v);\n value.signature = sig;\n if (value.chainId == null) {\n value.chainId = sig.legacyChainId;\n }\n return new TransactionResponse(value, provider);\n }\n // Receipts\n log(value, provider) {\n const log = this.object({\n address: this.address,\n blockHash: this.hash,\n blockNumber: this.number,\n data: this.data,\n index: this.number,\n removed: this.boolean,\n topics: this.topics,\n transactionHash: this.hash,\n transactionIndex: this.number,\n }, {\n index: [\"logIndex\"]\n })(value);\n return new Log(log, provider);\n }\n receipt(value, provider) {\n const receipt = this.object({\n blockHash: this.hash,\n blockNumber: this.number,\n contractAddress: this.allowNull(this.address),\n cumulativeGasUsed: this.bigNumber,\n from: this.address,\n gasUsed: this.bigNumber,\n logs: this.arrayOf((v) => (this.log(v, provider))),\n logsBloom: this.data,\n root: this.allowNull(this.data),\n status: this.allowNull(this.number),\n to: this.address,\n gasPrice: this.allowNull(this.bigNumber),\n hash: this.hash,\n index: this.number,\n type: this.allowNull(this.number, 0),\n }, {\n hash: [\"transactionHash\"],\n gasPrice: [\"effectiveGasPrice\"],\n index: [\"transactionIndex\"]\n })(value);\n // RSK incorrectly implemented EIP-658, so we munge things a bit here for it\n if (receipt.root != null) {\n if (receipt.root.length <= 4) {\n // Could be 0x00, 0x0, 0x01 or 0x1\n const value = parseInt(receipt.root);\n if (value === 0 || value === 1) {\n // Make sure if both are specified, they match\n if (receipt.status != null && receipt.status !== value) {\n return logger.throwError(\"alt-root-status/status mismatch\", \"BAD_DATA\", {\n value: { root: receipt.root, status: receipt.status }\n });\n }\n receipt.status = value;\n delete receipt.root;\n }\n else {\n return logger.throwError(\"invalid alt-root-status\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n else if (!isHexString(receipt.root, 32)) {\n // Must be a valid bytes32\n return logger.throwError(\"invalid receipt root hash\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n //receipt.byzantium = (receipt.root == null);\n return new TransactionReceipt(receipt, provider);\n }\n // Fitlers\n topics(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").topics(value);\n }\n filter(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").filter(value);\n }\n filterLog(value) {\n console.log(\"ME\", value);\n return null;\n }\n // Converts a serialized transaction to a TransactionResponse\n transaction(value) {\n throw new Error();\n }\n // Useful utility formatters functions, which if need be use the\n // methods within the formatter to ensure internal compatibility\n // Access List; converts an AccessListish to an AccessList\n accessList(value) {\n return accessListify(value);\n }\n // Converts falsish values to a specific value, otherwise use the formatter. Calls preserve `this`.\n allowFalsish(format, ifFalse) {\n return ((value) => {\n if (!value) {\n return ifFalse;\n }\n return format.call(this, value);\n });\n }\n // Allows null, optionally replacing it with a default value. Calls preserve `this`.\n allowNull(format, ifNull) {\n return ((value) => {\n if (value == null) {\n return ifNull;\n }\n return format.call(this, value);\n });\n }\n // Requires an Array satisfying the formatter. Calls preserves `this`.\n arrayOf(format) {\n return ((array) => {\n if (!Array.isArray(array)) {\n throw new Error(\"not an array\");\n }\n return array.map((i) => format.call(this, i));\n });\n }\n // Requires a value which is a value BigNumber\n bigNumber(value) {\n return logger.getBigInt(value, \"value\");\n }\n uint256(value) {\n const result = this.bigNumber(value);\n if (result < 0 || result > BN_MAX_UINT256) {\n logger.throwArgumentError(\"invalid uint256\", \"value\", value);\n }\n return result;\n }\n // Requires a value which is a value boolean or string equivalent\n boolean(value) {\n switch (value) {\n case true:\n case \"true\":\n return true;\n case false:\n case \"false\":\n return false;\n }\n return logger.throwArgumentError(`invalid boolean; ${JSON.stringify(value)}`, \"value\", value);\n }\n // Requires a value which is a valid hexstring. If dataOrLength is true,\n // the length must be even (i.e. a datahexstring) or if it is a number,\n // specifies teh number of bytes value must represent\n _hexstring(dataOrLength) {\n if (dataOrLength == null) {\n dataOrLength = false;\n }\n return (function (value) {\n if (isHexString(value, dataOrLength)) {\n return value.toLowerCase();\n }\n throw new Error(\"bad hexstring\");\n });\n }\n data(value) {\n if (dataLength(value) == null) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return value;\n }\n // Requires a network-native hash\n hash(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").data(value);\n }\n // Requires a valid number, within the IEEE 754 safe range\n number(value) {\n return logger.getNumber(value);\n }\n // Requires an object which matches a fleet of other formatters\n // Any FormatFunc may return `undefined` to have the value omitted\n // from the result object. Calls preserve `this`.\n object(format, altNames) {\n return ((value) => {\n const result = {};\n for (const key in format) {\n let srcKey = key;\n if (altNames && key in altNames && !(srcKey in value)) {\n for (const altKey of altNames[key]) {\n if (altKey in value) {\n srcKey = altKey;\n break;\n }\n }\n }\n try {\n const nv = format[key].call(this, value[srcKey]);\n if (nv !== undefined) {\n result[key] = nv;\n }\n }\n catch (error) {\n const message = (error instanceof Error) ? error.message : \"not-an-error\";\n logger.throwError(`invalid value for value.${key} (${message})`, \"BAD_DATA\", { value });\n }\n }\n return result;\n });\n }\n // Requires a value which matches a network-native storage slot\n storageSlot(value) {\n return toHex(logger.getBigInt(value), 32);\n }\n}\n_Formatter_format = new WeakMap(), _Formatter_baseBlock = new WeakMap();\n//# sourceMappingURL=formatter.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nconst EnsAddress = \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\";\nexport class NetworkPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n clone() {\n return new NetworkPlugin(this.name);\n }\n validate(network) {\n return this;\n }\n}\nexport class GasCostPlugin extends NetworkPlugin {\n constructor(effectiveBlock = 0, costs) {\n super(`org.ethers.plugins.gas-cost#${(effectiveBlock || 0)}`);\n const props = { effectiveBlock };\n function set(name, nullish) {\n let value = (costs || {})[name];\n if (value == null) {\n value = nullish;\n }\n if (typeof (value) !== \"number\") {\n logger.throwArgumentError(`invalud value for ${name}`, \"costs\", costs);\n }\n props[name] = value;\n }\n set(\"txBase\", 21000);\n set(\"txCreate\", 32000);\n set(\"txDataZero\", 4);\n set(\"txDataNonzero\", 16);\n set(\"txAccessListStorageKey\", 1900);\n set(\"txAccessListAddress\", 2400);\n defineProperties(this, props);\n }\n clone() {\n return new GasCostPlugin(this.effectiveBlock, this);\n }\n}\n// Networks shoudl use this plugin to specify the contract address\n// and network necessary to resolve ENS names.\nexport class EnsPlugin extends NetworkPlugin {\n constructor(address, targetNetwork) {\n super(\"org.ethers.plugins.ens\");\n defineProperties(this, {\n address: (address || EnsAddress),\n targetNetwork: ((targetNetwork == null) ? 1 : targetNetwork)\n });\n }\n clone() {\n return new EnsPlugin(this.address, this.targetNetwork);\n }\n validate(network) {\n network.formatter.address(this.address);\n return this;\n }\n}\nexport class MaxPriorityFeePlugin extends NetworkPlugin {\n constructor(priorityFee) {\n super(\"org.ethers.plugins.max-priority-fee\");\n defineProperties(this, {\n priorityFee: logger.getBigInt(priorityFee)\n });\n }\n async getPriorityFee(provider) {\n return this.priorityFee;\n }\n clone() {\n return new MaxPriorityFeePlugin(this.priorityFee);\n }\n}\n//# sourceMappingURL=plugins-network.js.map","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 _Network_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { Formatter } from \"./formatter.js\";\nimport { logger } from \"./logger.js\";\nimport { EnsPlugin, GasCostPlugin } from \"./plugins-network.js\";\n/* * * *\n// Networks which operation against an L2 can use this plugin to\n// specify how to access L1, for the purpose of resolving ENS,\n// for example.\nexport class LayerOneConnectionPlugin extends NetworkPlugin {\n readonly provider!: Provider;\n// @TODO: Rename to ChainAccess and allow for connecting to any chain\n constructor(provider: Provider) {\n super(\"org.ethers.plugins.layer-one-connection\");\n defineProperties(this, { provider });\n }\n\n clone(): LayerOneConnectionPlugin {\n return new LayerOneConnectionPlugin(this.provider);\n }\n}\n*/\n/* * * *\nexport class PriceOraclePlugin extends NetworkPlugin {\n readonly address!: string;\n\n constructor(address: string) {\n super(\"org.ethers.plugins.price-oracle\");\n defineProperties(this, { address });\n }\n\n clone(): PriceOraclePlugin {\n return new PriceOraclePlugin(this.address);\n }\n}\n*/\n// Networks or clients with a higher need for security (such as clients\n// that may automatically make CCIP requests without user interaction)\n// can use this plugin to anonymize requests or intercept CCIP requests\n// to notify and/or receive authorization from the user\n/* * * *\nexport type FetchDataFunc = (req: Frozen) => Promise;\nexport class CcipPreflightPlugin extends NetworkPlugin {\n readonly fetchData!: FetchDataFunc;\n\n constructor(fetchData: FetchDataFunc) {\n super(\"org.ethers.plugins.ccip-preflight\");\n defineProperties(this, { fetchData });\n }\n\n clone(): CcipPreflightPlugin {\n return new CcipPreflightPlugin(this.fetchData);\n }\n}\n*/\nconst Networks = new Map();\nconst defaultFormatter = new Formatter();\nexport class Network {\n constructor(name, _chainId, formatter) {\n _Network_props.set(this, void 0);\n const chainId = logger.getBigInt(_chainId);\n if (formatter == null) {\n formatter = defaultFormatter;\n }\n const plugins = new Map();\n __classPrivateFieldSet(this, _Network_props, { name, chainId, formatter, plugins }, \"f\");\n }\n toJSON() {\n return { name: this.name, chainId: this.chainId };\n }\n get name() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\"); }\n set name(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\", value); }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\", logger.getBigInt(value, \"chainId\")); }\n get formatter() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\"); }\n set formatter(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\", value); }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _Network_props, \"f\").plugins.values());\n }\n attachPlugin(plugin) {\n if (this.isFrozen()) {\n throw new Error(\"frozen\");\n }\n if (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _Network_props, \"f\").plugins.set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(name)) || null;\n }\n // Gets a list of Plugins which match basename, ignoring any fragment\n getPlugins(basename) {\n return (this.plugins.filter((p) => (p.name.split(\"#\")[0] === basename)));\n }\n clone() {\n const clone = new Network(this.name, this.chainId, this.formatter);\n this.plugins.forEach((plugin) => {\n clone.attachPlugin(plugin.clone());\n });\n return clone;\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Network_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Network_props, \"f\"));\n }\n computeIntrinsicGas(tx) {\n const costs = this.getPlugin(\"org.ethers.gas-cost\") || (new GasCostPlugin());\n let gas = costs.txBase;\n if (tx.to == null) {\n gas += costs.txCreate;\n }\n if (tx.data) {\n for (let i = 2; i < tx.data.length; i += 2) {\n if (tx.data.substring(i, i + 2) === \"00\") {\n gas += costs.txDataZero;\n }\n else {\n gas += costs.txDataNonzero;\n }\n }\n }\n if (tx.accessList) {\n const accessList = this.formatter.accessList(tx.accessList);\n for (const addr in accessList) {\n gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length;\n }\n }\n return gas;\n }\n static from(network) {\n // Default network\n if (network == null) {\n return Network.from(\"homestead\");\n }\n // Canonical name or chain ID\n if (typeof (network) === \"number\") {\n network = BigInt(network);\n }\n if (typeof (network) === \"string\" || typeof (network) === \"bigint\") {\n const networkFunc = Networks.get(network);\n if (networkFunc) {\n return networkFunc();\n }\n if (typeof (network) === \"bigint\") {\n return new Network(\"unknown\", network);\n }\n logger.throwArgumentError(\"unknown network\", \"network\", network);\n }\n // Clonable with network-like abilities\n if (typeof (network.clone) === \"function\") {\n const clone = network.clone();\n //if (typeof(network.name) !== \"string\" || typeof(network.chainId) !== \"number\") {\n //}\n return clone;\n }\n // Networkish\n if (typeof (network) === \"object\") {\n if (typeof (network.name) !== \"string\" || typeof (network.chainId) !== \"number\") {\n logger.throwArgumentError(\"invalid network object name or chainId\", \"network\", network);\n }\n const custom = new Network((network.name), (network.chainId));\n if (network.ensAddress || network.ensNetwork != null) {\n custom.attachPlugin(new EnsPlugin(network.ensAddress, network.ensNetwork));\n }\n //if ((network).layerOneConnection) {\n // custom.attachPlugin(new LayerOneConnectionPlugin((network).layerOneConnection));\n //}\n return custom;\n }\n return logger.throwArgumentError(\"invalid network\", \"network\", network);\n }\n static register(nameOrChainId, networkFunc) {\n if (typeof (nameOrChainId) === \"number\") {\n nameOrChainId = BigInt(nameOrChainId);\n }\n const existing = Networks.get(nameOrChainId);\n if (existing) {\n logger.throwArgumentError(`conflicting network for ${JSON.stringify(existing.name)}`, \"nameOrChainId\", nameOrChainId);\n }\n Networks.set(nameOrChainId, networkFunc);\n }\n}\n_Network_props = new WeakMap();\n//# sourceMappingURL=network.js.map","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 _PollingBlockSubscriber_instances, _PollingBlockSubscriber_provider, _PollingBlockSubscriber_poller, _PollingBlockSubscriber_interval, _PollingBlockSubscriber_blockNumber, _PollingBlockSubscriber_poll, _OnBlockSubscriber_provider, _OnBlockSubscriber_poll, _PollingOrphanSubscriber_filter, _PollingTransactionSubscriber_hash, _PollingEventSubscriber_instances, _PollingEventSubscriber_provider, _PollingEventSubscriber_filter, _PollingEventSubscriber_poller, _PollingEventSubscriber_blockNumber, _PollingEventSubscriber_poll;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport function getPollingSubscriber(provider, event) {\n if (event === \"block\") {\n return new PollingBlockSubscriber(provider);\n }\n if (isHexString(event, 32)) {\n return new PollingTransactionSubscriber(provider, event);\n }\n return logger.throwError(\"unsupported polling event\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getPollingSubscriber\", info: { event }\n });\n}\n// @TODO: refactor this\nexport class PollingBlockSubscriber {\n constructor(provider) {\n _PollingBlockSubscriber_instances.add(this);\n _PollingBlockSubscriber_provider.set(this, void 0);\n _PollingBlockSubscriber_poller.set(this, void 0);\n _PollingBlockSubscriber_interval.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingBlockSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, 4000, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\"); }\n set pollingInterval(value) { __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, value, \"f\"); }\n start() {\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber already running\");\n }\n __classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).call(this);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n }\n stop() {\n if (!__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber not running\");\n }\n clearTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\"));\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingBlockSubscriber_provider = new WeakMap(), _PollingBlockSubscriber_poller = new WeakMap(), _PollingBlockSubscriber_interval = new WeakMap(), _PollingBlockSubscriber_blockNumber = new WeakMap(), _PollingBlockSubscriber_instances = new WeakSet(), _PollingBlockSubscriber_poll = async function _PollingBlockSubscriber_poll() {\n const blockNumber = await __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").getBlockNumber();\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n return;\n }\n // @TODO: Put a cap on the maximum number of events per loop?\n if (blockNumber !== __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\")) {\n for (let b = __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") + 1; b <= blockNumber; b++) {\n __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").emit(\"block\", b);\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n};\nexport class OnBlockSubscriber {\n constructor(provider) {\n _OnBlockSubscriber_provider.set(this, void 0);\n _OnBlockSubscriber_poll.set(this, void 0);\n __classPrivateFieldSet(this, _OnBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _OnBlockSubscriber_poll, (blockNumber) => {\n this._poll(blockNumber, __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\"));\n }, \"f\");\n }\n async _poll(blockNumber, provider) {\n throw new Error(\"sub-classes must override this\");\n }\n start() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\").call(this, -2);\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n pause(dropWhilePaused) { this.stop(); }\n resume() { this.start(); }\n}\n_OnBlockSubscriber_provider = new WeakMap(), _OnBlockSubscriber_poll = new WeakMap();\nexport class PollingOrphanSubscriber extends OnBlockSubscriber {\n constructor(provider, filter) {\n super(provider);\n _PollingOrphanSubscriber_filter.set(this, void 0);\n __classPrivateFieldSet(this, _PollingOrphanSubscriber_filter, copy(filter), \"f\");\n }\n async _poll(blockNumber, provider) {\n console.log(__classPrivateFieldGet(this, _PollingOrphanSubscriber_filter, \"f\"));\n throw new Error(\"@TODO\");\n }\n}\n_PollingOrphanSubscriber_filter = new WeakMap();\nexport class PollingTransactionSubscriber extends OnBlockSubscriber {\n constructor(provider, hash) {\n super(provider);\n _PollingTransactionSubscriber_hash.set(this, void 0);\n __classPrivateFieldSet(this, _PollingTransactionSubscriber_hash, hash, \"f\");\n }\n async _poll(blockNumber, provider) {\n const tx = await provider.getTransactionReceipt(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"));\n if (tx) {\n provider.emit(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"), tx);\n }\n }\n}\n_PollingTransactionSubscriber_hash = new WeakMap();\nexport class PollingEventSubscriber {\n constructor(provider, filter) {\n _PollingEventSubscriber_instances.add(this);\n _PollingEventSubscriber_provider.set(this, void 0);\n _PollingEventSubscriber_filter.set(this, void 0);\n _PollingEventSubscriber_poller.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingEventSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingEventSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_filter, copy(filter), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_poller, __classPrivateFieldGet(this, _PollingEventSubscriber_instances, \"m\", _PollingEventSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n start() {\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getBlockNumber().then((blockNumber) => {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n });\n }\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingEventSubscriber_provider = new WeakMap(), _PollingEventSubscriber_filter = new WeakMap(), _PollingEventSubscriber_poller = new WeakMap(), _PollingEventSubscriber_blockNumber = new WeakMap(), _PollingEventSubscriber_instances = new WeakSet(), _PollingEventSubscriber_poll = async function _PollingEventSubscriber_poll(blockNumber) {\n // The initial block hasn't been determined yet\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n return;\n }\n const filter = copy(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"));\n filter.fromBlock = __classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") + 1;\n filter.toBlock = blockNumber;\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n const logs = await __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getLogs(filter);\n for (const log of logs) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").emit(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"), log);\n }\n};\n//# sourceMappingURL=subscriber-polling.js.map","// @TODO\n// Event coalescence\n// When we register an event with an async value (e.g. address is a Signer\n// or ENS name), we need to add it immeidately for the Event API, but also\n// need time to resolve the address. Upon resolving the address, we need to\n// migrate the listener to the static event. We also need to maintain a map\n// of Signer/ENS name to address so we can sync respond to listenerCount.\nvar __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 _AbstractProvider_instances, _AbstractProvider_subs, _AbstractProvider_plugins, _AbstractProvider_pausedState, _AbstractProvider_networkPromise, _AbstractProvider_anyNetwork, _AbstractProvider_performCache, _AbstractProvider_nextTimer, _AbstractProvider_timers, _AbstractProvider_disableCcipRead, _AbstractProvider_perform, _AbstractProvider_call, _AbstractProvider_getBlock, _AbstractProvider_hasSub, _AbstractProvider_getSub;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { toArray } from \"@ethersproject/math\";\nimport { defineProperties, EventPayload, resolveProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { EnsResolver } from \"./ens-resolver.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { FeeData } from \"./provider.js\";\nimport { PollingBlockSubscriber, PollingEventSubscriber, PollingOrphanSubscriber, PollingTransactionSubscriber } from \"./subscriber-polling.js\";\n// Constants\nconst BN_2 = BigInt(2);\nconst MAX_CCIP_REDIRECTS = 10;\nfunction getTag(prefix, value) {\n return prefix + \":\" + JSON.stringify(value, (k, v) => {\n if (typeof (v) === \"bigint\") {\n return `bigint:${v.toString()}`;\n }\n if (typeof (v) === \"string\") {\n return v.toLowerCase();\n }\n // Sort object keys\n if (typeof (v) === \"object\" && !Array.isArray(v)) {\n const keys = Object.keys(v);\n keys.sort();\n return keys.reduce((accum, key) => {\n accum[key] = v[key];\n return accum;\n }, {});\n }\n return v;\n });\n}\nexport class UnmanagedSubscriber {\n constructor(name) { defineProperties(this, { name }); }\n start() { }\n stop() { }\n pause(dropWhilePaused) { }\n resume() { }\n}\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\n// Normalize a ProviderEvent into a Subscription\n// @TODO: Make events sync if possible; like block\n//function getSyncSubscription(_event: ProviderEvent): Subscription {\n//}\nasync function getSubscription(_event, provider) {\n if (_event == null) {\n throw new Error(\"invalid event\");\n }\n // Normalize topic array info an EventFilter\n if (Array.isArray(_event)) {\n _event = { topics: _event };\n }\n if (typeof (_event) === \"string\") {\n switch (_event) {\n case \"block\":\n case \"pending\":\n case \"debug\":\n case \"network\": {\n return { type: _event, tag: _event };\n }\n }\n }\n if (isHexString(_event, 32)) {\n const hash = _event.toLowerCase();\n return { type: \"transaction\", tag: getTag(\"tx\", { hash }), hash };\n }\n if (_event.orphan) {\n const event = _event;\n // @TODO: Should lowercase and whatnot things here instead of copy...\n return { type: \"orphan\", tag: getTag(\"orphan\", event), filter: copy(event) };\n }\n if ((_event.address || _event.topics)) {\n const event = _event;\n const filter = {\n topics: ((event.topics || []).map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n }))\n };\n if (event.address) {\n const addresses = [];\n const promises = [];\n const addAddress = (addr) => {\n if (isHexString(addr)) {\n addresses.push(addr);\n }\n else {\n promises.push((async () => {\n addresses.push(await resolveAddress(addr, provider));\n })());\n }\n };\n if (Array.isArray(event.address)) {\n event.address.forEach(addAddress);\n }\n else {\n addAddress(event.address);\n }\n if (promises.length) {\n await Promise.all(promises);\n }\n filter.address = concisify(addresses.map((a) => a.toLowerCase()));\n }\n return { filter, tag: getTag(\"event\", filter), type: \"event\" };\n }\n return logger.throwArgumentError(\"unknown ProviderEvent\", \"event\", _event);\n}\nfunction getTime() { return (new Date()).getTime(); }\nexport function copyRequest(tx) {\n // @TODO: copy the copy from contracts and use it from this\n return tx;\n}\nexport class AbstractProvider {\n // @TODO: This should be a () => Promise so network can be\n // done when needed; or rely entirely on _detectNetwork?\n constructor(_network) {\n _AbstractProvider_instances.add(this);\n _AbstractProvider_subs.set(this, void 0);\n _AbstractProvider_plugins.set(this, void 0);\n // null=unpaused, true=paused+dropWhilePaused, false=paused\n _AbstractProvider_pausedState.set(this, void 0);\n _AbstractProvider_networkPromise.set(this, void 0);\n _AbstractProvider_anyNetwork.set(this, void 0);\n _AbstractProvider_performCache.set(this, void 0);\n _AbstractProvider_nextTimer.set(this, void 0);\n _AbstractProvider_timers.set(this, void 0);\n _AbstractProvider_disableCcipRead.set(this, void 0);\n if (_network === \"any\") {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, true, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n else if (_network) {\n const network = Network.from(_network);\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(network), \"f\");\n setTimeout(() => { this.emit(\"network\", network, null); }, 0);\n }\n else {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n //this.#approxNumber = -2;\n //this.#approxNumberT0 = 0;\n __classPrivateFieldSet(this, _AbstractProvider_performCache, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_plugins, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_nextTimer, 0, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_timers, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, false, \"f\");\n }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").values());\n }\n attachPlugin(plugin) {\n if (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(name)) || null;\n }\n set disableCcipRead(value) { __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, !!value, \"f\"); }\n get disableCcipRead() { return __classPrivateFieldGet(this, _AbstractProvider_disableCcipRead, \"f\"); }\n async ccipReadFetch(tx, calldata, urls) {\n if (this.disableCcipRead || urls.length === 0 || tx.to == null) {\n return null;\n }\n const sender = tx.to.toLowerCase();\n const data = calldata.toLowerCase();\n const errorMessages = [];\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n // URL expansion\n const href = url.replace(\"{sender}\", sender).replace(\"{data}\", data);\n // If no {data} is present, use POST; otherwise GET\n //const json: string | null = (url.indexOf(\"{data}\") >= 0) ? null: JSON.stringify({ data, sender });\n //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => {\n // value.status = response.statusCode;\n // return value;\n //});\n const request = new FetchRequest(href);\n if (url.indexOf(\"{data}\") === -1) {\n request.body = { data, sender };\n }\n let errorMessage = \"unknown error\";\n const resp = await fetchData(request);\n try {\n const result = resp.bodyJson;\n if (result.data) {\n return result.data;\n }\n if (result.message) {\n errorMessage = result.message;\n }\n }\n catch (error) { }\n // 4xx indicates the result is not present; stop\n if (resp.statusCode >= 400 && resp.statusCode < 500) {\n return logger.throwError(`response not found during CCIP fetch: ${errorMessage}`, \"OFFCHAIN_FAULT\", {\n reason: \"404_MISSING_RESOURCE\",\n transaction: tx, info: { url, errorMessage }\n });\n }\n // 5xx indicates server issue; try the next url\n errorMessages.push(errorMessage);\n }\n return logger.throwError(`error encountered during CCIP fetch: ${errorMessages.map((m) => JSON.stringify(m)).join(\", \")}`, \"OFFCHAIN_FAULT\", {\n reason: \"500_SERVER_ERROR\",\n transaction: tx, info: { urls, errorMessages }\n });\n }\n _wrapTransaction(tx, hash, blockNumber) {\n return tx;\n }\n _detectNetwork() {\n return logger.throwError(\"sub-classes must implement this\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_detectNetwork\"\n });\n }\n async _perform(req) {\n return logger.throwError(`unsupported method: ${req.method}`, \"UNSUPPORTED_OPERATION\", {\n operation: req.method,\n info: req\n });\n }\n // State\n async getBlockNumber() {\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getBlockNumber\" }), \"%response\");\n }\n async _getAddress(address) {\n if (typeof (address) === \"string\") {\n return address;\n }\n return await address.getAddress();\n }\n async _getBlockTag(blockTag) {\n const network = await this.getNetwork();\n if (typeof (blockTag) === \"number\" && Number.isSafeInteger(blockTag) && blockTag < 0) {\n //let blockNumber = await this._getApproxBlockNumber(500);\n let blockNumber = await this.getBlockNumber();\n blockNumber += blockTag;\n if (blockNumber < 0) {\n blockNumber = 0;\n }\n return network.formatter.blockTag(blockNumber);\n }\n return network.formatter.blockTag(blockTag);\n }\n async getNetwork() {\n // No explicit network was set and this is our first time\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") == null) {\n // Detect the current network (shared with all calls)\n const detectNetwork = this._detectNetwork().then((network) => {\n this.emit(\"network\", network, null);\n return network;\n }, (error) => {\n // Reset the networkPromise on failure, so we will try again\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === detectNetwork) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n throw error;\n });\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, detectNetwork, \"f\");\n return await detectNetwork;\n }\n const networkPromise = __classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\");\n const [expected, actual] = await Promise.all([\n networkPromise,\n this._detectNetwork() // The actual connected network\n ]);\n if (expected.chainId !== actual.chainId) {\n if (__classPrivateFieldGet(this, _AbstractProvider_anyNetwork, \"f\")) {\n // The \"any\" network can change, so notify listeners\n this.emit(\"network\", actual, expected);\n // Update the network if something else hasn't already changed it\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === networkPromise) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(actual), \"f\");\n }\n }\n else {\n // Otherwise, we do not allow changes to the underlying network\n logger.throwError(`network changed: ${expected.chainId} => ${actual.chainId} `, \"NETWORK_ERROR\", {\n event: \"changed\"\n });\n }\n }\n return expected.clone().freeze();\n }\n async getFeeData() {\n const { block, gasPrice } = await resolveProperties({\n block: this.getBlock(\"latest\"),\n gasPrice: ((async () => {\n try {\n const gasPrice = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getGasPrice\" });\n return logger.getBigInt(gasPrice, \"%response\");\n }\n catch (error) { }\n return null;\n })())\n });\n let maxFeePerGas = null, maxPriorityFeePerGas = null;\n if (block && block.baseFeePerGas) {\n // We may want to compute this more accurately in the future,\n // using the formula \"check if the base fee is correct\".\n // See: https://eips.ethereum.org/EIPS/eip-1559\n maxPriorityFeePerGas = BigInt(\"1500000000\");\n // Allow a network to override their maximum priority fee per gas\n const priorityFeePlugin = (await this.getNetwork()).getPlugin(\"org.ethers.plugins.max-priority-fee\");\n if (priorityFeePlugin) {\n maxPriorityFeePerGas = await priorityFeePlugin.getPriorityFee(this);\n }\n maxFeePerGas = (block.baseFeePerGas * BN_2) + maxPriorityFeePerGas;\n }\n return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas);\n }\n async _getTransaction(_request) {\n const network = await this.getNetwork();\n // Fill in any addresses\n const request = Object.assign({}, _request, await resolveProperties({\n to: (_request.to ? resolveAddress(_request.to, this) : undefined),\n from: (_request.from ? resolveAddress(_request.from, this) : undefined),\n }));\n return network.formatter.transactionRequest(request);\n }\n async estimateGas(_tx) {\n const transaction = await this._getTransaction(_tx);\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"estimateGas\", transaction\n }), \"%response\");\n }\n async call(_tx) {\n const { tx, blockTag } = await resolveProperties({\n tx: this._getTransaction(_tx),\n blockTag: this._getBlockTag(_tx.blockTag)\n });\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, tx, blockTag, _tx.enableCcipRead ? 0 : -1);\n }\n // Account\n async getBalanceOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBalance\", address, blockTag\n }), \"%response\");\n }\n async getTransactionCountOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getTransactionCount\", address, blockTag\n }), \"%response\");\n }\n async getCode(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getCode\", address, blockTag\n }));\n }\n async getStorageAt(_address, _position, _blockTag) {\n const position = logger.getBigInt(_position);\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getStorageAt\", address, position, blockTag\n }));\n }\n // Write\n async broadcastTransaction(signedTx) {\n throw new Error();\n return {};\n }\n // Queries\n async getBlock(block) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, false);\n if (params == null) {\n return null;\n }\n return format.block(params, this);\n }\n async getBlockWithTransactions(block) {\n const format = (await this.getNetwork()).formatter;\n const params = __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, true);\n if (params == null) {\n return null;\n }\n return format.blockWithTransactions(params, this);\n }\n async getTransaction(hash) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n return format.transactionResponse(params, this);\n }\n async getTransactionReceipt(hash) {\n const format = (await this.getNetwork()).formatter;\n const receipt = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransactionReceipt\", hash });\n if (receipt == null) {\n return null;\n }\n // Some backends did not backfill the effectiveGasPrice into old transactions\n // in the receipt, so we look it up manually and inject it.\n if (receipt.gasPrice == null && receipt.effectiveGasPrice == null) {\n const tx = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n receipt.effectiveGasPrice = tx.gasPrice;\n }\n return format.receipt(receipt, this);\n }\n async _getFilter(filter) {\n const lookup = {};\n if (filter.address) {\n if (Array.isArray(filter.address)) {\n lookup.address = Promise.all(filter.address.map((a) => resolveAddress(a, this)));\n }\n else {\n lookup.address = resolveAddress(filter.address, this);\n }\n }\n const addBlockTag = (key) => {\n if (filter[key] == null) {\n return;\n }\n lookup[key] = this._getBlockTag(filter[key]);\n };\n addBlockTag(\"fromBlock\");\n addBlockTag(\"toBlock\");\n const result = await resolveProperties(lookup);\n if (Array.isArray(result.address)) {\n result.address.sort();\n }\n if (filter.blockHash) {\n if (filter.fromBlock || filter.toBlock) {\n throw new Error(\"invalid filter\");\n }\n result.blockHash = filter.blockHash;\n }\n return result;\n }\n // Bloom-filter Queries\n async getLogs(_filter) {\n const { network, filter } = await resolveProperties({\n network: this.getNetwork(),\n filter: this._getFilter(_filter)\n });\n return (await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getLogs\", filter })).map((l) => {\n return network.formatter.log(l, this);\n });\n }\n // ENS\n _getProvider(chainId) {\n return logger.throwError(\"provider cannot connect to target network\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_getProvider()\"\n });\n }\n async getResolver(name) {\n return await EnsResolver.fromName(this, name);\n }\n async getAvatar(name) {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAvatar();\n }\n return null;\n }\n async resolveName(name) {\n if (typeof (name) === \"string\") {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAddress();\n }\n }\n else {\n const address = await name.getAddress();\n if (address == null) {\n return logger.throwArgumentError(\"Addressable returned no address\", \"name\", name);\n }\n return address;\n }\n return null;\n }\n async lookupAddress(address) {\n throw new Error();\n //return \"TODO\";\n }\n async waitForTransaction(hash, confirms = 1, timeout) {\n if (confirms === 0) {\n return this.getTransactionReceipt(hash);\n }\n return new Promise(async (resolve, reject) => {\n let timer = null;\n const listener = (async (blockNumber) => {\n try {\n const receipt = await this.getTransactionReceipt(hash);\n if (receipt != null) {\n if (blockNumber - receipt.blockNumber + 1 >= confirms) {\n resolve(receipt);\n this.off(\"block\", listener);\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n return;\n }\n }\n }\n catch (error) {\n console.log(\"EEE\", error);\n }\n this.once(\"block\", listener);\n });\n if (timeout != null) {\n timer = setTimeout(() => {\n if (timer == null) {\n return;\n }\n timer = null;\n this.off(\"block\", listener);\n reject(logger.makeError(\"timeout\", \"TIMEOUT\", {}));\n }, timeout);\n }\n listener(await this.getBlockNumber());\n });\n }\n async waitForBlock(blockTag) {\n throw new Error();\n //return new Block({ }, this);\n }\n _clearTimeout(timerId) {\n const timer = __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").get(timerId);\n if (!timer) {\n return;\n }\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n }\n _setTimeout(_func, timeout = 0) {\n var _a, _b;\n const timerId = (__classPrivateFieldSet(this, _AbstractProvider_nextTimer, (_b = __classPrivateFieldGet(this, _AbstractProvider_nextTimer, \"f\"), _a = _b++, _b), \"f\"), _a);\n const func = () => {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n _func();\n };\n if (this.paused) {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer: null, func, time: timeout });\n }\n else {\n const timer = setTimeout(func, timeout);\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer, func, time: getTime() });\n }\n return timerId;\n }\n _forEachSubscriber(func) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n func(sub.subscriber);\n }\n }\n // Event API; sub-classes should override this; any supported\n // event filter will have been munged into an EventFilter\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"debug\":\n case \"network\":\n return new UnmanagedSubscriber(sub.type);\n case \"block\":\n return new PollingBlockSubscriber(this);\n case \"event\":\n return new PollingEventSubscriber(this, sub.filter);\n case \"transaction\":\n return new PollingTransactionSubscriber(this, sub.hash);\n case \"orphan\":\n return new PollingOrphanSubscriber(this, sub.filter);\n }\n throw new Error(`unsupported event: ${sub.type}`);\n }\n _recoverSubscriber(oldSub, newSub) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n if (sub.subscriber === oldSub) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n sub.subscriber = newSub;\n if (sub.started) {\n newSub.start();\n }\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n newSub.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n break;\n }\n }\n }\n async on(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: false });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async once(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: true });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async emit(event, ...args) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event, args);\n if (!sub) {\n return false;\n }\n ;\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const payload = new EventPayload(this, (once ? null : listener), event);\n setTimeout(() => { listener.call(this, ...args, payload); }, 0);\n return !once;\n });\n return (count > 0);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n let total = 0;\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n let result = [];\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (!listener || sub.listeners.length === 0) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const { tag, started, subscriber } = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n else {\n for (const [tag, { started, subscriber }] of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\")) {\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return this.off(event, listener);\n }\n // Sub-classes should override this to shutdown any sockets, etc.\n // but MUST call this super.shutdown.\n async shutdown() {\n // Stop all listeners\n this.removeAllListeners();\n // Shut down all tiemrs\n for (const timerId of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").keys()) {\n this._clearTimeout(timerId);\n }\n }\n get paused() { return (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null); }\n pause(dropWhilePaused) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == !!dropWhilePaused) {\n return;\n }\n return logger.throwError(\"cannot change pause type; resume first\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause\"\n });\n }\n this._forEachSubscriber((s) => s.pause(dropWhilePaused));\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, !!dropWhilePaused, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Clear the timer\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n // Remaining time needed for when we become unpaused\n timer.time = getTime() - timer.time;\n }\n }\n resume() {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == null) {\n return;\n }\n this._forEachSubscriber((s) => s.resume());\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Remaining time when we were paused\n let timeout = timer.time;\n if (timeout < 0) {\n timeout = 0;\n }\n // Start time (in cause paused, so we con compute remaininf time)\n timer.time = getTime();\n // Start the timer\n setTimeout(timer.func, timeout);\n }\n }\n}\n_AbstractProvider_subs = new WeakMap(), _AbstractProvider_plugins = new WeakMap(), _AbstractProvider_pausedState = new WeakMap(), _AbstractProvider_networkPromise = new WeakMap(), _AbstractProvider_anyNetwork = new WeakMap(), _AbstractProvider_performCache = new WeakMap(), _AbstractProvider_nextTimer = new WeakMap(), _AbstractProvider_timers = new WeakMap(), _AbstractProvider_disableCcipRead = new WeakMap(), _AbstractProvider_instances = new WeakSet(), _AbstractProvider_perform = \n// Shares multiple identical requests made during the same 250ms\nasync function _AbstractProvider_perform(req) {\n // Create a tag\n const tag = getTag(req.method, req);\n let perform = __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag);\n if (!perform) {\n perform = this._perform(req);\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").set(tag, perform);\n setTimeout(() => {\n if (__classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag) === perform) {\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").delete(tag);\n }\n }, 250);\n }\n return await perform;\n}, _AbstractProvider_call = async function _AbstractProvider_call(tx, blockTag, attempt) {\n if (attempt >= MAX_CCIP_REDIRECTS) {\n logger.throwError(\"CCIP read exceeded maximum redirections\", \"OFFCHAIN_FAULT\", {\n reason: \"TOO_MANY_REDIRECTS\",\n transaction: Object.assign({}, tx, { blockTag, enableCcipRead: true })\n });\n }\n const transaction = copyRequest(tx);\n try {\n return hexlify(await this._perform({ method: \"call\", transaction, blockTag }));\n }\n catch (error) {\n // CCIP Read OffchainLookup\n if (!this.disableCcipRead && isCallException(error) && attempt >= 0 && blockTag === \"latest\" && transaction.to != null && dataSlice(error.data, 0, 4) === \"0x556f1830\") {\n const data = error.data;\n const txSender = await resolveAddress(transaction.to, this);\n // Parse the CCIP Read Arguments\n let ccipArgs;\n try {\n ccipArgs = parseOffchainLookup(dataSlice(error.data, 4));\n }\n catch (error) {\n return logger.throwError(error.message, \"OFFCHAIN_FAULT\", {\n reason: \"BAD_DATA\",\n transaction, info: { data }\n });\n }\n // Check the sender of the OffchainLookup matches the transaction\n if (ccipArgs.sender.toLowerCase() !== txSender.toLowerCase()) {\n return logger.throwError(\"CCIP Read sender mismatch\", \"CALL_EXCEPTION\", {\n data, transaction,\n errorSignature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n errorName: \"OffchainLookup\",\n errorArgs: ccipArgs.errorArgs\n });\n }\n const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls);\n if (ccipResult == null) {\n return logger.throwError(\"CCIP Read failed to fetch data\", \"OFFCHAIN_FAULT\", {\n reason: \"FETCH_FAILED\",\n transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs }\n });\n }\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, {\n to: txSender,\n data: concat([\n ccipArgs.selector, encodeBytes([ccipResult, ccipArgs.extraData])\n ]),\n }, blockTag, attempt + 1);\n }\n throw error;\n }\n}, _AbstractProvider_getBlock = async function _AbstractProvider_getBlock(block, includeTransactions) {\n const format = (await this.getNetwork()).formatter;\n if (isHexString(block, 32)) {\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockHash: block, includeTransactions\n });\n }\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockTag: format.blockTag(block), includeTransactions\n });\n}, _AbstractProvider_hasSub = async function _AbstractProvider_hasSub(event, emitArgs) {\n let sub = await getSubscription(event, this);\n // This is a log that is removing an existing log; we actually want\n // to emit an orphan event for the removed log\n if (sub.type === \"event\" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) {\n sub = await getSubscription({ orphan: \"drop-log\", log: emitArgs[0] }, this);\n }\n return __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(sub.tag) || null;\n}, _AbstractProvider_getSub = async function _AbstractProvider_getSub(event) {\n const subscription = await getSubscription(event, this);\n // Prevent tampering with our tag in any subclass' _getSubscriber\n const tag = subscription.tag;\n let sub = __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(tag);\n if (!sub) {\n const subscriber = this._getSubscriber(subscription);\n const addressableMap = new WeakMap();\n const nameMap = new Map();\n sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [] };\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").set(tag, sub);\n }\n return sub;\n};\nfunction _parseString(result, start) {\n try {\n const bytes = _parseBytes(result, start);\n if (bytes) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction _parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n try {\n const offset = logger.getNumber(dataSlice(result, start, start + 32));\n const length = logger.getNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\nconst empty = new Uint8Array([]);\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\nconst zeros = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseOffchainLookup(data) {\n const result = {\n sender: \"\", urls: [], calldata: \"\", selector: \"\", extraData: \"\", errorArgs: []\n };\n if (dataLength(data) < 5 * 32) {\n throw new Error(\"insufficient OffchainLookup data\");\n }\n const sender = dataSlice(data, 0, 32);\n if (dataSlice(sender, 0, 12) !== dataSlice(zeros, 0, 12)) {\n throw new Error(\"corrupt OffchainLookup sender\");\n }\n result.sender = dataSlice(sender, 12);\n // Read the URLs from the response\n try {\n const urls = [];\n const urlsOffset = logger.getNumber(dataSlice(data, 32, 64));\n const urlsLength = logger.getNumber(dataSlice(data, urlsOffset, urlsOffset + 32));\n const urlsData = dataSlice(data, urlsOffset + 32);\n for (let u = 0; u < urlsLength; u++) {\n const url = _parseString(urlsData, u * 32);\n if (url == null) {\n throw new Error(\"abort\");\n }\n urls.push(url);\n }\n result.urls = urls;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup urls\");\n }\n // Get the CCIP calldata to forward\n try {\n const calldata = _parseBytes(data, 64);\n if (calldata == null) {\n throw new Error(\"abort\");\n }\n result.calldata = calldata;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup calldata\");\n }\n // Get the callbackSelector (bytes4)\n if (dataSlice(data, 100, 128) !== dataSlice(zeros, 0, 28)) {\n throw new Error(\"corrupt OffchainLookup callbaackSelector\");\n }\n result.selector = dataSlice(data, 96, 100);\n // Get the extra data to send back to the contract as context\n try {\n const extraData = _parseBytes(data, 128);\n if (extraData == null) {\n throw new Error(\"abort\");\n }\n result.extraData = extraData;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup extraData\");\n }\n result.errorArgs = \"sender,urls,calldata,selector,extraData\".split(/,/).map((k) => result[k]);\n return result;\n}\n//# sourceMappingURL=abstract-provider.js.map","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 __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 _AbstractSigner_instances, _AbstractSigner_checkProvider, _AbstractSigner_fromify, _VoidSigner_instances, _VoidSigner_throwUnsupported, _WrappedSigner_signer;\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\nexport class AbstractSigner {\n constructor(provider) {\n _AbstractSigner_instances.add(this);\n defineProperties(this, { provider: (provider || null) });\n }\n async getBalance(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getBalance\").getBalanceOf(await this.getAddress(), blockTag);\n }\n async getTransactionCount(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getTransactionCount\").getTransactionCountOf(await this.getAddress(), blockTag);\n }\n async estimateGas(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"estimateGas\").estimateGas(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async call(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"call\").call(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async populateTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"populateTransaction\");\n //let pop: Deferrable = Object.assign({ }, tx);\n let pop = Object.assign({}, tx);\n if (pop.to != null) {\n pop.to = provider.resolveName(pop.to).then((to) => {\n if (to == null) {\n return logger.throwArgumentError(\"transaction to ENS name not configured\", \"tx.to\", pop.to);\n }\n return to;\n });\n }\n if (pop.from != null) {\n const from = pop.from;\n pop.from = Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n return logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n return address;\n });\n }\n if (pop.nonce == null) {\n pop.nonce = this.getTransactionCount();\n }\n pop = resolveProperties(pop);\n if (pop.gasLimit == null) {\n pop.gasLimit = provider.estimateGas(pop);\n }\n pop = resolveProperties(pop);\n //@TODO: Copy logic from AbstractSigner in v5\n return await resolveProperties(pop);\n }\n async resolveName(name) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"resolveName\");\n return await provider.resolveName(name);\n }\n async sendTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"sendTransaction\");\n const txObj = Transaction.from(await this.populateTransaction(tx));\n return await provider.broadcastTransaction(await this.signTransaction(txObj));\n }\n}\n_AbstractSigner_instances = new WeakSet(), _AbstractSigner_checkProvider = function _AbstractSigner_checkProvider(operation) {\n if (this.provider) {\n return this.provider;\n }\n return logger.throwError(\"missing provider\", \"UNSUPPORTED_OPERATION\", { operation });\n}, _AbstractSigner_fromify = async function _AbstractSigner_fromify(tx) {\n tx = Object.assign({}, tx);\n const actions = [];\n if (tx.from != null) {\n const from = tx.from;\n actions.push(Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n tx.from = address;\n }));\n }\n await Promise.all(actions);\n return tx;\n};\nexport class VoidSigner extends AbstractSigner {\n constructor(address, provider) {\n super(provider);\n _VoidSigner_instances.add(this);\n defineProperties(this, { address });\n }\n async getAddress() { return this.address; }\n connect(provider) {\n return new VoidSigner(this.address, provider);\n }\n async signTransaction(tx) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"transactions\", \"signTransaction\");\n }\n async signMessage(message) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"messages\", \"signMessage\");\n }\n async signTypedData(domain, types, value) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"typed-data\", \"signTypedData\");\n }\n}\n_VoidSigner_instances = new WeakSet(), _VoidSigner_throwUnsupported = function _VoidSigner_throwUnsupported(suffix, operation) {\n return logger.throwError(`VoidSigner cannot sign ${suffix}`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n};\nexport class WrappedSigner extends AbstractSigner {\n //get provider(): null | Provider { return this.#signer.provider; }\n constructor(signer) {\n super(signer.provider);\n _WrappedSigner_signer.set(this, void 0);\n __classPrivateFieldSet(this, _WrappedSigner_signer, signer, \"f\");\n }\n async getAddress() {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").getAddress();\n }\n connect(provider) {\n return new WrappedSigner(__classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").connect(provider));\n }\n async signTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTransaction(tx);\n }\n async sendTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").sendTransaction(tx);\n }\n async signMessage(message) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signMessage(message);\n }\n async signTypedData(domain, types, value) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTypedData(domain, types, value);\n }\n}\n_WrappedSigner_signer = new WeakMap();\n//# sourceMappingURL=abstract-signer.js.map","// Show the throttle message only once\nconst shown = new Set();\nexport function showThrottleMessage(service) {\n if (shown.has(service)) {\n return;\n }\n shown.add(service);\n console.log(\"========= NOTICE =========\");\n console.log(`Request-Rate Exceeded for ${service} (this message will not be repeated)`);\n console.log(\"\");\n console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n console.log(\"community resource for low-traffic projects and early prototyping.\");\n console.log(\"\");\n console.log(\"While your application will continue to function, we highly recommended\");\n console.log(\"signing up for your own API keys to improve performance, increase your\");\n console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n console.log(\"\");\n console.log(\"For more details: https:/\\/docs.ethers.io/api-keys/\");\n console.log(\"==========================\");\n}\n//# sourceMappingURL=community.js.map","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 _FilterIdSubscriber_instances, _FilterIdSubscriber_provider, _FilterIdSubscriber_filterIdPromise, _FilterIdSubscriber_poller, _FilterIdSubscriber_network, _FilterIdSubscriber_poll, _FilterIdSubscriber_teardown, _FilterIdEventSubscriber_event;\nimport { PollingEventSubscriber } from \"./subscriber-polling.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport class FilterIdSubscriber {\n constructor(provider) {\n _FilterIdSubscriber_instances.add(this);\n _FilterIdSubscriber_provider.set(this, void 0);\n _FilterIdSubscriber_filterIdPromise.set(this, void 0);\n _FilterIdSubscriber_poller.set(this, void 0);\n _FilterIdSubscriber_network.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_poller, __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, null, \"f\");\n }\n _subscribe(provider) {\n throw new Error(\"subclasses must override this\");\n }\n _emitResults(provider, result) {\n throw new Error(\"subclasses must override this\");\n }\n _recover(provider) {\n throw new Error(\"subclasses must override this\");\n }\n start() { __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).call(this, -2); }\n stop() {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n if (dropWhilePaused) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n resume() { this.start(); }\n}\n_FilterIdSubscriber_provider = new WeakMap(), _FilterIdSubscriber_filterIdPromise = new WeakMap(), _FilterIdSubscriber_poller = new WeakMap(), _FilterIdSubscriber_network = new WeakMap(), _FilterIdSubscriber_instances = new WeakSet(), _FilterIdSubscriber_poll = async function _FilterIdSubscriber_poll(blockNumber) {\n try {\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\") == null) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, this._subscribe(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")), \"f\");\n }\n const filterId = await __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterId == null) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")._recoverSubscriber(this, this._recover(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")));\n return;\n }\n const network = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").getNetwork();\n if (!__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\")) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, network, \"f\");\n }\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\").chainId !== network.chainId) {\n throw new Error(\"chaid changed\");\n }\n const result = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_getFilterChanges\", [filterId]);\n await this._emitResults(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\"), result);\n }\n catch (error) {\n console.log(\"@TODO\", error);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").once(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n}, _FilterIdSubscriber_teardown = function _FilterIdSubscriber_teardown() {\n const filterIdPromise = __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterIdPromise) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n filterIdPromise.then((filterId) => {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_uninstallFilter\", [filterId]);\n });\n }\n};\nexport class FilterIdEventSubscriber extends FilterIdSubscriber {\n constructor(provider, filter) {\n super(provider);\n _FilterIdEventSubscriber_event.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdEventSubscriber_event, copy(filter), \"f\");\n }\n _recover(provider) {\n return new PollingEventSubscriber(provider, __classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"));\n }\n async _subscribe(provider) {\n const filterId = await provider.send(\"eth_newFilter\", [__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\")]);\n console.log(\"____SUB\", filterId);\n return filterId;\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n const log = network.formatter.log(result, provider);\n provider.emit(__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"), log);\n }\n }\n}\n_FilterIdEventSubscriber_event = new WeakMap();\nexport class FilterIdPendingSubscriber extends FilterIdSubscriber {\n async _subscribe(provider) {\n return await provider.send(\"eth_newPendingTransactionFilter\", []);\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n provider.emit(\"pending\", network.formatter.hash(result));\n }\n }\n}\n//# sourceMappingURL=subscriber-filterid.js.map","// @TODO:\n// - Add the batching API\nvar __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 _JsonRpcApiProvider_nextId, _JsonRpcApiProvider_options, _JsonRpcProvider_connect, _JsonRpcProvider_pollingInterval;\n// https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=true&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { TypedDataEncoder } from \"@ethersproject/hash\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { AbstractProvider, UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { FilterIdEventSubscriber, FilterIdPendingSubscriber } from \"./subscriber-filterid.js\";\nimport { logger } from \"./logger.js\";\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nconst Primitive = \"bigint,boolean,function,number,string,symbol\".split(/,/g);\n//const Methods = \"getAddress,then\".split(/,/g);\nfunction deepCopy(value) {\n if (value == null || Primitive.indexOf(typeof (value)) >= 0) {\n return value;\n }\n // Keep any Addressable\n if (typeof (value.getAddress) === \"function\") {\n return value;\n }\n if (Array.isArray(value)) {\n return (value.map(deepCopy));\n }\n if (typeof (value) === \"object\") {\n return Object.keys(value).reduce((accum, key) => {\n accum[key] = value[key];\n return accum;\n }, {});\n }\n throw new Error(`should not happen: ${value} (${typeof (value)})`);\n}\nfunction getLowerCase(value) {\n if (value) {\n return value.toLowerCase();\n }\n return value;\n}\nfunction isPollable(value) {\n return (value && typeof (value.pollingInterval) === \"number\");\n}\nconst defaultOptions = {\n // Default to use filter ID (the FilterIdSubscriber will\n // fallback onto polling if subscription fails)\n polling: false,\n // Maximum batch size (in bytes)\n batchMaxSize: (1 << 20),\n // How long to wait before dispatching a new batch\n batchStallTime: 250,\n};\n// @TODO: Unchecked Signers\nexport class JsonRpcSigner {\n constructor(provider, address) {\n defineProperties(this, { provider, address });\n }\n connect(provider) {\n return logger.throwError(\"cannot reconnect JsonRpcSigner\", \"UNSUPPORTED_OPERATION\", {\n operation: \"signer.connect\"\n });\n }\n async getAddress() {\n return this.address;\n }\n async getNetwork() {\n return await this.provider.getNetwork();\n }\n async getFeeData() {\n return await this.provider.getFeeData();\n }\n async estimateGas(tx) {\n return await this.provider.estimateGas(tx);\n }\n async call(tx) {\n return await this.provider.call(tx);\n }\n async resolveName(name) {\n return await this.provider.resolveName(name);\n }\n async getBalance(blockTag) {\n return await this.provider.getBalanceOf(this.address);\n }\n async getTransactionCount(blockTag) {\n return await this.provider.getTransactionCountOf(this.address);\n }\n // Returns just the hash of the transaction after sent, which is what\n // the bare JSON-RPC API does;\n async sendUncheckedTransaction(_tx) {\n const tx = deepCopy(_tx);\n const promises = [];\n // Make sure the from matches the sender\n if (tx.from) {\n const _from = tx.from;\n promises.push((async () => {\n const from = await resolveAddress(_from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n })());\n }\n else {\n tx.from = this.address;\n }\n // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n // wishes to use this, it is easy to specify explicitly, otherwise\n // we look it up for them.\n if (tx.gasLimit == null) {\n promises.push((async () => {\n tx.gasLimit = await this.provider.estimateGas(Object.assign(Object.assign({}, tx), { from: this.address }));\n })());\n }\n // The address may be an ENS name or Addressable\n if (tx.to != null) {\n const _to = tx.to;\n promises.push((async () => {\n tx.to = await resolveAddress(_to, this.provider);\n })());\n }\n // Wait until all of our properties are filled in\n if (promises.length) {\n await Promise.all(promises);\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return this.provider.send(\"eth_sendTransaction\", [hexTx]);\n }\n async sendTransaction(tx) {\n // This cannot be mined any earlier than any recent block\n const blockNumber = await this.provider.getBlockNumber();\n // Send the transaction\n const hash = await this.sendUncheckedTransaction(tx);\n // Unfortunately, JSON-RPC only provides and opaque transaction hash\n // for a response, and we need the actual transaction, so we poll\n // for it; it should show up very quickly\n return await (new Promise((resolve, reject) => {\n const checkTx = async (duration) => {\n // Try getting the transaction\n const tx = await this.provider.getTransaction(hash);\n if (tx != null) {\n resolve(this.provider._wrapTransaction(tx, hash, blockNumber));\n return;\n }\n // Wait another 4 seconds\n this.provider._setTimeout(() => { checkTx(4000); }, duration);\n };\n checkTx(1000);\n }));\n }\n async signTransaction(_tx) {\n const tx = deepCopy(_tx);\n // Make sure the from matches the sender\n if (tx.from) {\n const from = await resolveAddress(tx.from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n return logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n }\n else {\n tx.from = this.address;\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return await this.provider.send(\"eth_sign_Transaction\", [hexTx]);\n }\n async signMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"personal_sign\", [\n hexlify(message), this.address.toLowerCase()\n ]);\n }\n async signTypedData(domain, types, _value) {\n const value = deepCopy(_value);\n // Populate any ENS names (in-place)\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value) => {\n const address = await resolveAddress(value);\n if (address == null) {\n return logger.throwArgumentError(\"TypedData does not support null address\", \"value\", value);\n }\n return address;\n });\n return await this.provider.send(\"eth_signTypedData_v4\", [\n this.address.toLowerCase(),\n JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n ]);\n }\n async unlock(password) {\n return this.provider.send(\"personal_unlockAccount\", [\n this.address.toLowerCase(), password, null\n ]);\n }\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n async _legacySignMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"eth_sign\", [\n this.address.toLowerCase(), hexlify(message)\n ]);\n }\n}\nexport class JsonRpcApiProvider extends AbstractProvider {\n constructor(network) {\n super(network);\n _JsonRpcApiProvider_nextId.set(this, void 0);\n _JsonRpcApiProvider_options.set(this, void 0);\n __classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, 1, \"f\");\n __classPrivateFieldSet(this, _JsonRpcApiProvider_options, Object.assign({}, defaultOptions), \"f\");\n }\n _getOptions(key) {\n return __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key];\n }\n _setOptions(options) {\n // Validate all the options\n for (const _key in options) {\n const key = _key;\n const value = options[key];\n if (typeof (value) !== typeof (__classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key])) {\n return logger.throwArgumentError(\"invalid option value\", `options.${key}`, value);\n }\n }\n // Update the values\n for (const _key in options) {\n const key = _key;\n __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key] = (options[key]);\n }\n }\n prepareRequest(method, params) {\n var _a, _b;\n return {\n method, params, id: (__classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, (_b = __classPrivateFieldGet(this, _JsonRpcApiProvider_nextId, \"f\"), _a = _b++, _b), \"f\"), _a), jsonrpc: \"2.0\"\n };\n }\n // Sends the payload to the backend\n //async sendPayload(payload: any): Promise {\n // throw new Error(\"sub-class must implement this\");\n //}\n async send(method, params) {\n // @TODO: This should construct and queue the payload\n throw new Error(\"sub-class must implement this\");\n }\n async getSigner(address = 0) {\n const network = await this.getNetwork();\n const accounts = await this.send(\"eth_accounts\", []);\n // Account index\n if (typeof (address) === \"number\") {\n if (address > accounts.length) {\n throw new Error(\"no such account\");\n }\n return new JsonRpcSigner(this, accounts[address]);\n }\n // Account address\n address = network.formatter.address(address);\n for (const account of accounts) {\n if (network.formatter.address(account) === account) {\n return new JsonRpcSigner(this, account);\n }\n }\n throw new Error(\"invalid account\");\n }\n // Sub-classes can override this; it detects the *actual* network we\n // are connected to\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" })));\n }\n _getSubscriber(sub) {\n // Pending Filters aren't availble via polling\n if (sub.type === \"pending\") {\n return new FilterIdPendingSubscriber(this);\n }\n if (sub.type === \"event\") {\n return new FilterIdEventSubscriber(this, sub.filter);\n }\n // Orphaned Logs are handled automatically, by the filter, since\n // logs with removed are emitted by it\n if (sub.type === \"orphan\" && sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"orphan\");\n }\n return super._getSubscriber(sub);\n }\n getRpcTransaction(tx) {\n const result = {};\n // JSON-RPC now requires numeric values to be \"quantity\" values\n [\"chainId\", \"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n let dstKey = key;\n if (key === \"gasLimit\") {\n dstKey = \"gas\";\n }\n result[dstKey] = quantity(tx[key]);\n });\n // Make sure addresses and data are lowercase\n [\"from\", \"to\", \"data\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n result[key] = hexlify(tx[key]);\n });\n // Normalize the access list object\n if (tx.accessList) {\n result[\"accessList\"] = accessListify(tx.accessList);\n }\n return result;\n }\n getRpcRequest(req) {\n switch (req.method) {\n case \"chainId\":\n return { method: \"eth_chainId\", args: [] };\n case \"getBlockNumber\":\n return { method: \"eth_blockNumber\", args: [] };\n case \"getGasPrice\":\n return { method: \"eth_gasPrice\", args: [] };\n case \"getBalance\":\n return {\n method: \"eth_getBalance\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getTransactionCount\":\n return {\n method: \"eth_getTransactionCount\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getCode\":\n return {\n method: \"eth_getCode\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getStorageAt\":\n return {\n method: \"eth_getStorageAt\",\n args: [\n getLowerCase(req.address),\n (\"0x\" + req.position.toString(16)),\n req.blockTag\n ]\n };\n case \"sendTransaction\":\n return {\n method: \"eth_sendRawTransaction\",\n args: [req.signedTransaction]\n };\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return {\n method: \"eth_getBlockByNumber\",\n args: [req.blockTag, !!req.includeTransactions]\n };\n }\n else if (\"blockHash\" in req) {\n return {\n method: \"eth_getBlockByHash\",\n args: [req.blockHash, !!req.includeTransactions]\n };\n }\n break;\n case \"getTransaction\":\n return {\n method: \"eth_getTransactionByHash\",\n args: [req.hash]\n };\n case \"getTransactionReceipt\":\n return {\n method: \"eth_getTransactionReceipt\",\n args: [req.hash]\n };\n case \"call\":\n return {\n method: \"eth_call\",\n args: [this.getRpcTransaction(req.transaction), req.blockTag]\n };\n case \"estimateGas\": {\n return {\n method: \"eth_estimateGas\",\n args: [this.getRpcTransaction(req.transaction)]\n };\n }\n case \"getLogs\":\n if (req.filter && req.filter.address != null) {\n if (Array.isArray(req.filter.address)) {\n req.filter.address = req.filter.address.map(getLowerCase);\n }\n else {\n req.filter.address = getLowerCase(req.filter.address);\n }\n }\n return { method: \"eth_getLogs\", args: [req.filter] };\n }\n return null;\n }\n getRpcError(method, args, error) {\n if (method === \"eth_call\") {\n const result = spelunkData(error);\n if (result) {\n // @TODO: Extract errorSignature, errorName, errorArgs, reason if\n // it is Error(string) or Panic(uint25)\n return logger.makeError(\"execution reverted during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: result.data,\n transaction: args[0]\n });\n }\n return logger.makeError(\"missing revert data during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: \"0x\", transaction: args[0], info: { error }\n });\n }\n if (method === \"eth_estimateGas\") {\n }\n const message = JSON.stringify(spelunkMessage(error));\n if (message.match(/insufficient funds|base fee exceeds gas limit/)) {\n return logger.makeError(\"insufficient funds for intrinsic transaction cost\", \"INSUFFICIENT_FUNDS\", {\n transaction: args[0]\n });\n }\n if (message.match(/nonce/) && message.match(/too low/)) {\n return logger.makeError(\"nonce has already been used\", \"NONCE_EXPIRED\", {\n transaction: args[0]\n });\n }\n // \"replacement transaction underpriced\"\n if (message.match(/replacement transaction/) && message.match(/underpriced/)) {\n return logger.makeError(\"replacement fee too low\", \"REPLACEMENT_UNDERPRICED\", {\n transaction: args[0]\n });\n }\n if (message.match(/only replay-protected/)) {\n return logger.makeError(\"legacy pre-eip-155 transactions not supported\", \"UNSUPPORTED_OPERATION\", {\n operation: method, info: { transaction: args[0] }\n });\n }\n if (method === \"estimateGas\" && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) {\n return logger.makeError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", \"UNPREDICTABLE_GAS_LIMIT\", {\n transaction: args[0]\n });\n }\n return error;\n }\n async _perform(req) {\n // Legacy networks do not like the type field being passed along (which\n // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n if (req.method === \"call\" || req.method === \"estimateGas\") {\n let tx = req.transaction;\n if (tx && tx.type != null && logger.getBigInt(tx.type)) {\n // If there are no EIP-1559 properties, it might be non-EIP-a559\n if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n const feeData = await this.getFeeData();\n if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n // Network doesn't know about EIP-1559 (and hence type)\n req = Object.assign({}, req, {\n transaction: Object.assign({}, tx, { type: undefined })\n });\n }\n }\n }\n }\n const request = this.getRpcRequest(req);\n if (request != null) {\n this.emit(\"debug\", { type: \"sendRequest\", request });\n try {\n const result = await this.send(request.method, request.args);\n //console.log(\"RR\", result);\n this.emit(\"debug\", { type: \"getResponse\", result });\n return result;\n }\n catch (error) {\n this.emit(\"debug\", { type: \"getError\", error });\n throw this.getRpcError(request.method, request.args, error);\n }\n }\n return super._perform(req);\n }\n}\n_JsonRpcApiProvider_nextId = new WeakMap(), _JsonRpcApiProvider_options = new WeakMap();\nexport class JsonRpcProvider extends JsonRpcApiProvider {\n constructor(url, network) {\n if (url == null) {\n url = \"http:/\\/localhost:8545\";\n }\n super(network);\n _JsonRpcProvider_connect.set(this, void 0);\n _JsonRpcProvider_pollingInterval.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, { request: new FetchRequest(url) }, \"f\");\n }\n else {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, Object.assign({}, url), \"f\");\n __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request = __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request.clone();\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, 4000, \"f\");\n }\n async send(method, params) {\n params = copy(params);\n // Configure a POST connection for the requested method\n const connection = Object.assign({}, __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\"));\n connection.request = connection.request.clone();\n connection.request.body = this.prepareRequest(method, params);\n const result = (await fetchData(connection)).bodyJson;\n if (\"error\" in result) {\n return logger.throwError(\"error from JSON-RPC\", \"UNKNOWN_ERROR\", {\n result\n });\n }\n return result.result;\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\"); }\n set pollingInterval(value) {\n if (!Number.isInteger(value) || value < 0) {\n throw new Error(\"invalid interval\");\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, value, \"f\");\n this._forEachSubscriber((sub) => {\n if (isPollable(sub)) {\n sub.pollingInterval = __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\");\n }\n });\n }\n}\n_JsonRpcProvider_connect = new WeakMap(), _JsonRpcProvider_pollingInterval = new WeakMap();\n// This class should only be used when it is not possible for the\n// underlying network to change, such as with INFURA. If you are\n// using MetaMask or some other client which allows users to change\n// their network DO NOT USE THIS. Bad things will happen.\nexport class StaticJsonRpcProvider extends JsonRpcProvider {\n constructor(url, network) {\n super(url, network);\n defineProperties(this, { network });\n }\n async _detectNetwork() {\n return this.network;\n }\n}\nfunction spelunkData(value) {\n if (value == null) {\n return null;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\" && value.message.match(\"reverted\") && isHexString(value.data)) {\n return { message: value.message, data: value.data };\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n const result = spelunkData(value[key]);\n if (result) {\n return result;\n }\n }\n return null;\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return spelunkData(JSON.parse(value));\n }\n catch (error) { }\n }\n return null;\n}\nfunction _spelunkMessage(value, result) {\n if (value == null) {\n return;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\") {\n result.push(value.message);\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n _spelunkMessage(value[key], result);\n }\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return _spelunkMessage(JSON.parse(value), result);\n }\n catch (error) { }\n }\n}\nfunction spelunkMessage(value) {\n const result = [];\n _spelunkMessage(value, result);\n return result;\n}\n//# sourceMappingURL=provider-jsonrpc.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"rpc.ankr.com/eth\";\n case \"matic\":\n return \"rpc.ankr.com/polygon\";\n case \"arbitrum\":\n return \"rpc.ankr.com/arbitrum\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AnkrProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const connection = AnkrProvider.getConnection(network, apiKey);\n super(connection, network);\n defineProperties(this, { apiKey });\n // Ankr does not support filterId, so we force polling\n super._setOptions({ polling: true });\n }\n _getProvider(chainId) {\n try {\n return new AnkrProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"AnkrProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n}\n//# sourceMappingURL=provider-ankr.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.alchemyapi.io\";\n case \"ropsten\":\n return \"eth-ropsten.alchemyapi.io\";\n case \"rinkeby\":\n return \"eth-rinkeby.alchemyapi.io\";\n case \"goerli\":\n return \"eth-goerli.alchemyapi.io\";\n case \"kovan\":\n return \"eth-kovan.alchemyapi.io\";\n case \"matic\":\n return \"polygon-mainnet.g.alchemy.com\";\n case \"maticmum\":\n return \"polygon-mumbai.g.alchemy.com\";\n case \"arbitrum\":\n return \"arb-mainnet.g.alchemy.com\";\n case \"arbitrum-rinkeby\":\n return \"arb-rinkeby.g.alchemy.com\";\n case \"optimism\":\n return \"opt-mainnet.g.alchemy.com\";\n case \"optimism-kovan\":\n return \"opt-kovan.g.alchemy.com\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AlchemyProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n super(AlchemyProvider.getConnection(network, apiKey), network);\n defineProperties(this, { apiKey });\n }\n _getProvider(chainId) {\n try {\n return new AlchemyProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v2/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"alchemy\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n}\n//# sourceMappingURL=provider-alchemy.js.map","import { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nexport class CloudflareProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\") {\n const network = Network.from(_network);\n if (network.name !== \"homestead\") {\n return logger.throwArgumentError(\"unsupported network\", \"network\", _network);\n }\n super(\"https:/\\/cloudflare-eth.com/\", network);\n }\n}\n//# sourceMappingURL=provider-cloudflare.js.map","import { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { isError } from \"@ethersproject/logger\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nif (false) {\n console.log(isHexString, isError);\n} // @TODO\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { NetworkPlugin } from \"./plugins-network.js\";\nimport { logger } from \"./logger.js\";\nconst defaultApiKey = \"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB\";\nconst EtherscanPluginId = \"org.ethers.plugins.etherscan\";\nexport class EtherscanPlugin extends NetworkPlugin {\n constructor(baseUrl, communityApiKey) {\n super(EtherscanPluginId);\n //if (communityApiKey == null) { communityApiKey = null; }\n defineProperties(this, { baseUrl, communityApiKey });\n }\n clone() {\n return new EtherscanPlugin(this.baseUrl, this.communityApiKey);\n }\n}\nexport class EtherscanProvider extends AbstractProvider {\n constructor(_network, apiKey) {\n super();\n const network = Network.from(_network);\n if (apiKey == null) {\n const plugin = network.getPlugin(EtherscanPluginId);\n if (plugin) {\n apiKey = plugin.communityApiKey;\n }\n else {\n apiKey = defaultApiKey;\n }\n }\n defineProperties(this, { apiKey, network });\n // Test that the network is supported by Etherscan\n this.getBaseUrl();\n }\n getBaseUrl() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return plugin.baseUrl;\n }\n switch (this.network.name) {\n case \"homestead\":\n return \"https:/\\/api.etherscan.io\";\n case \"ropsten\":\n return \"https:/\\/api-ropsten.etherscan.io\";\n case \"rinkeby\":\n return \"https:/\\/api-rinkeby.etherscan.io\";\n case \"kovan\":\n return \"https:/\\/api-kovan.etherscan.io\";\n case \"goerli\":\n return \"https:/\\/api-goerli.etherscan.io\";\n default:\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", this.network);\n }\n getUrl(module, params) {\n const query = Object.keys(params).reduce((accum, key) => {\n const value = params[key];\n if (value != null) {\n accum += `&${key}=${value}`;\n }\n return accum;\n }, \"\");\n const apiKey = ((this.apiKey) ? `&apikey=${this.apiKey}` : \"\");\n return `${this.getBaseUrl()}/api?module=${module}${query}${apiKey}`;\n }\n getPostUrl() {\n return `${this.getBaseUrl()}/api`;\n }\n getPostData(module, params) {\n params.module = module;\n params.apikey = this.apiKey;\n return params;\n }\n async detectNetwork() {\n return this.network;\n }\n async fetch(module, params, post) {\n const url = (post ? this.getPostUrl() : this.getUrl(module, params));\n const payload = (post ? this.getPostData(module, params) : null);\n /*\n this.emit(\"debug\", {\n action: \"request\",\n request: url,\n provider: this\n });\n */\n const request = new FetchRequest(url);\n const connection = {\n request,\n throttleSlotInterval: 1000,\n processResponse: async (request, response) => {\n const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)) : {};\n const throttle = ((typeof (result.result) === \"string\") ? result.result : \"\").toLowerCase().indexOf(\"rate limit\") >= 0;\n if (module === \"proxy\") {\n // This JSON response indicates we are being throttled\n if (result && result.status == 0 && result.message == \"NOTOK\" && throttle) {\n response.throwThrottleError(result.result);\n }\n }\n else {\n if (throttle) {\n response.throwThrottleError(result.result);\n }\n }\n return response;\n },\n };\n if (payload) {\n request.setHeader(\"content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n request.body = Object.keys(payload).map((k) => `${k}=${payload[k]}`).join(\"&\");\n }\n const response = await fetchData(connection);\n if (!response.hasBody()) {\n throw new Error();\n }\n /*\n this.emit(\"debug\", {\n action: \"response\",\n request: url,\n response: deepCopy(result),\n provider: this\n });\n */\n const result = JSON.parse(toUtf8String(response.body));\n if (module === \"proxy\") {\n if (result.jsonrpc != \"2.0\") {\n // @TODO: not any\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n throw error;\n }\n if (result.error) {\n // @TODO: not any\n const error = new Error(result.error.message || \"unknown error\");\n if (result.error.code) {\n error.code = result.error.code;\n }\n if (result.error.data) {\n error.data = result.error.data;\n }\n throw error;\n }\n return result.result;\n }\n else {\n // getLogs, getHistory have weird success responses\n if (result.status == 0 && (result.message === \"No records found\" || result.message === \"No transactions found\")) {\n return result.result;\n }\n if (result.status != 1 || result.message != \"OK\") {\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n // if ((result.result || \"\").toLowerCase().indexOf(\"rate limit\") >= 0) {\n // error.throttleRetry = true;\n // }\n throw error;\n }\n return result.result;\n }\n }\n // The transaction has already been sanitized by the calls in Provider\n _getTransactionPostData(transaction) {\n const result = {};\n for (let key in transaction) {\n if (transaction[key] == null) {\n continue;\n }\n let value = transaction[key];\n if (key === \"type\" && value === 0) {\n continue;\n }\n // Quantity-types require no leading zero, unless 0\n if ({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true }[key]) {\n value = quantity(hexlify(value));\n }\n else if (key === \"accessList\") {\n value = \"[\" + this.network.formatter.accessList(value).map((set) => {\n return `{address:\"${set.address}\",storageKeys:[\"${set.storageKeys.join('\",\"')}\"]}`;\n }).join(\",\") + \"]\";\n }\n else {\n value = hexlify(value);\n }\n result[key] = value;\n }\n return result;\n }\n _checkError(req, error, transaction) {\n /*\n let body = \"\";\n if (isError(error, Logger.Errors.SERVER_ERROR) && error.response && error.response.hasBody()) {\n body = toUtf8String(error.response.body);\n }\n console.log(body);\n \n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\" && body) {\n \n // Etherscan keeps changing their string\n if (body.match(/reverted/i) || body.match(/VM execution error/i)) {\n \n // Etherscan prefixes the data like \"Reverted 0x1234\"\n let data = e.data;\n if (data) { data = \"0x\" + data.replace(/^.*0x/i, \"\"); }\n if (!isHexString(data)) { data = \"0x\"; }\n \n logger.throwError(\"call exception\", Logger.Errors.CALL_EXCEPTION, {\n error, data\n });\n }\n }\n \n // Get the message from any nested error structure\n let message = error.message;\n if (isError(error, Logger.Errors.SERVER_ERROR)) {\n if (error.error && typeof(error.error.message) === \"string\") {\n message = error.error.message;\n } else if (typeof(error.body) === \"string\") {\n message = error.body;\n } else if (typeof(error.responseText) === \"string\") {\n message = error.responseText;\n }\n }\n message = (message || \"\").toLowerCase();\n \n // \"Insufficient funds. The account you tried to send transaction from\n // does not have enough funds. Required 21464000000000 and got: 0\"\n if (message.match(/insufficient funds/)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.Errors.INSUFFICIENT_FUNDS, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction with the same hash was already imported.\"\n if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) {\n logger.throwError(\"nonce has already been used\", Logger.Errors.NONCE_EXPIRED, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction gas price is too low. There is another transaction with\n // same nonce in the queue. Try increasing the gas price or incrementing the nonce.\"\n if (message.match(/another transaction with same nonce/)) {\n logger.throwError(\"replacement fee too low\", Logger.Errors.REPLACEMENT_UNDERPRICED, {\n error, transaction, info: { method }\n });\n }\n \n if (message.match(/execution failed due to an exception|execution reverted/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, {\n error, transaction, info: { method }\n });\n }\n */\n throw error;\n }\n async _detectNetwork() {\n return this.network;\n }\n async _perform(req) {\n switch (req.method) {\n case \"chainId\":\n return this.network.chainId;\n case \"getBlockNumber\":\n return this.fetch(\"proxy\", { action: \"eth_blockNumber\" });\n case \"getGasPrice\":\n return this.fetch(\"proxy\", { action: \"eth_gasPrice\" });\n case \"getBalance\":\n // Returns base-10 result\n return this.fetch(\"account\", {\n action: \"balance\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getTransactionCount\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionCount\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getCode\":\n return this.fetch(\"proxy\", {\n action: \"eth_getCode\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getStorageAt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getStorageAt\",\n address: req.address,\n position: req.position,\n tag: req.blockTag\n });\n case \"sendTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_sendRawTransaction\",\n hex: req.signedTransaction\n }, true).catch((error) => {\n return this._checkError(req, error, req.signedTransaction);\n });\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return this.fetch(\"proxy\", {\n action: \"eth_getBlockByNumber\",\n tag: req.blockTag,\n boolean: (req.includeTransactions ? \"true\" : \"false\")\n });\n }\n return logger.throwError(\"getBlock by blockHash not supported by Etherscan\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getBlock(blockHash)\"\n });\n case \"getTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionByHash\",\n txhash: req.hash\n });\n case \"getTransactionReceipt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionReceipt\",\n txhash: req.hash\n });\n case \"call\": {\n if (req.blockTag !== \"latest\") {\n throw new Error(\"EtherscanProvider does not support blockTag for call\");\n }\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_call\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n case \"estimateGas\": {\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_estimateGas\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n /*\n case \"getLogs\": {\n // Needs to complain if more than one address is passed in\n const args: Record = { action: \"getLogs\" }\n \n if (params.filter.fromBlock) {\n args.fromBlock = checkLogTag(params.filter.fromBlock);\n }\n \n if (params.filter.toBlock) {\n args.toBlock = checkLogTag(params.filter.toBlock);\n }\n \n if (params.filter.address) {\n args.address = params.filter.address;\n }\n \n // @TODO: We can handle slightly more complicated logs using the logs API\n if (params.filter.topics && params.filter.topics.length > 0) {\n if (params.filter.topics.length > 1) {\n logger.throwError(\"unsupported topic count\", Logger.Errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics });\n }\n if (params.filter.topics.length === 1) {\n const topic0 = params.filter.topics[0];\n if (typeof(topic0) !== \"string\" || topic0.length !== 66) {\n logger.throwError(\"unsupported topic format\", Logger.Errors.UNSUPPORTED_OPERATION, { topic0: topic0 });\n }\n args.topic0 = topic0;\n }\n }\n \n const logs: Array = await this.fetch(\"logs\", args);\n \n // Cache txHash => blockHash\n let blocks: { [tag: string]: string } = {};\n \n // Add any missing blockHash to the logs\n for (let i = 0; i < logs.length; i++) {\n const log = logs[i];\n if (log.blockHash != null) { continue; }\n if (blocks[log.blockNumber] == null) {\n const block = await this.getBlock(log.blockNumber);\n if (block) {\n blocks[log.blockNumber] = block.hash;\n }\n }\n \n log.blockHash = blocks[log.blockNumber];\n }\n \n return logs;\n }\n */\n default:\n break;\n }\n return super._perform(req);\n }\n async getNetwork() {\n return this.network;\n }\n async getEtherPrice() {\n if (this.network.name !== \"homestead\") {\n return 0.0;\n }\n return parseFloat((await this.fetch(\"stats\", { action: \"ethprice\" })).ethusd);\n }\n isCommunityResource() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return (plugin.communityApiKey === this.apiKey);\n }\n return (defaultApiKey === this.apiKey);\n }\n}\n/*\n(async function() {\n const provider = new EtherscanProvider();\n console.log(provider);\n console.log(await provider.getBlockNumber());\n / *\n provider.on(\"block\", (b) => {\n console.log(\"BB\", b);\n });\n console.log(await provider.getTransactionReceipt(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\"));\n\n provider.once(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\", (tx) => {\n console.log(\"TT\", tx);\n });\n * /\n try {\n console.log(await provider.getBlock(100));\n } catch (error) {\n console.log(error);\n }\n\n try {\n console.log(await provider.getBlock(13821768));\n } catch (error) {\n console.log(error);\n }\n\n})();\n*/\n//# sourceMappingURL=provider-etherscan.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultProjectId = \"84842078b09946638c03157f83405213\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"mainnet.infura.io\";\n case \"ropsten\":\n return \"ropsten.infura.io\";\n case \"rinkeby\":\n return \"rinkeby.infura.io\";\n case \"kovan\":\n return \"kovan.infura.io\";\n case \"goerli\":\n return \"goerli.infura.io\";\n case \"matic\":\n return \"polygon-mainnet.infura.io\";\n case \"maticmum\":\n return \"polygon-mumbai.infura.io\";\n case \"optimism\":\n return \"optimism-mainnet.infura.io\";\n case \"optimism-kovan\":\n return \"optimism-kovan.infura.io\";\n case \"arbitrum\":\n return \"arbitrum-mainnet.infura.io\";\n case \"arbitrum-rinkeby\":\n return \"arbitrum-rinkeby.infura.io\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class InfuraProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", projectId, projectSecret) {\n const network = Network.from(_network);\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const connection = InfuraProvider.getConnection(network, projectId, projectSecret);\n super(connection, network);\n defineProperties(this, { projectId, projectSecret });\n }\n _getProvider(chainId) {\n try {\n return new InfuraProvider(chainId, this.projectId, this.projectSecret);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, projectId, projectSecret) {\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v3/${projectId}`);\n request.allowGzip = true;\n if (projectSecret) {\n request.setCredentials(\"\", projectSecret);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (projectId === defaultProjectId) {\n showThrottleMessage(\"InfuraProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.projectId === defaultProjectId);\n }\n}\n//# sourceMappingURL=provider-infura.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\n// These are load-balancer-based application IDs\nconst defaultAppIds = {\n homestead: \"6004bcd10040261633ade990\",\n ropsten: \"6004bd4d0040261633ade991\",\n rinkeby: \"6004bda20040261633ade994\",\n goerli: \"6004bd860040261633ade992\",\n};\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.gateway.pokt.network\";\n case \"ropsten\":\n return \"eth-ropsten.gateway.pokt.network\";\n case \"rinkeby\":\n return \"eth-rinkeby.gateway.pokt.network\";\n case \"goerli\":\n return \"eth-goerli.gateway.pokt.network\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nfunction normalizeApiKey(network, _appId, applicationSecretKey, loadBalancer) {\n loadBalancer = !!loadBalancer;\n let community = false;\n let applicationId = _appId;\n if (applicationId == null) {\n applicationId = defaultAppIds[network.name];\n if (applicationId == null) {\n logger.throwArgumentError(\"network does not support default applicationId\", \"applicationId\", _appId);\n }\n loadBalancer = true;\n community = true;\n }\n else if (applicationId === defaultAppIds[network.name]) {\n loadBalancer = true;\n community = true;\n }\n if (applicationSecretKey == null) {\n applicationSecretKey = null;\n }\n return { applicationId, applicationSecretKey, community, loadBalancer };\n}\nexport class PocketProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", _appId, _secretKey, _loadBalancer) {\n const network = Network.from(_network);\n const { applicationId, applicationSecretKey, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n const connection = PocketProvider.getConnection(network, applicationId, applicationSecretKey, loadBalancer);\n super(connection, network);\n defineProperties(this, { applicationId, applicationSecretKey, loadBalancer });\n }\n static getConnection(network, _appId, _secretKey, _loadBalancer) {\n const { applicationId, applicationSecretKey, community, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n let url = `https:/\\/${getHost(network.name)}/v1/`;\n if (loadBalancer) {\n url += \"lb/\";\n }\n url += applicationId;\n const request = new FetchRequest(url);\n request.allowGzip = true;\n if (applicationSecretKey) {\n request.setCredentials(\"\", applicationSecretKey);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (community) {\n showThrottleMessage(\"PocketProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.applicationId === defaultAppIds[this.network.name]);\n }\n}\n//# sourceMappingURL=provider-pocket.js.map","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 _FallbackProvider_instances, _FallbackProvider_configs, _FallbackProvider_initialSyncPromise, _FallbackProvider_getNextConfig, _FallbackProvider_addRunner, _FallbackProvider_initialSync, _FallbackProvider_checkQuorum, _FallbackProvider_waitForQuorum;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { shuffle } from \"./shuffle.js\";\n//const BN_0 = BigInt(\"0\");\nconst BN_1 = BigInt(\"1\");\nconst BN_2 = BigInt(\"2\");\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\nfunction getTime() { return (new Date()).getTime(); }\n;\nconst defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 };\nconst defaultState = {\n blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0,\n outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0,\n _network: null, _updateNumber: null, _totalTime: 0\n};\nasync function waitForSync(config, blockNumber) {\n while (config.blockNumber < 0 || config.blockNumber < blockNumber) {\n if (!config._updateNumber) {\n config._updateNumber = (async () => {\n const blockNumber = await config.provider.getBlockNumber();\n if (blockNumber > config.blockNumber) {\n config.blockNumber = blockNumber;\n }\n config._updateNumber = null;\n })();\n }\n await config._updateNumber;\n config.outOfSync++;\n }\n}\n// Normalizes a result to a string that can be used to compare against\n// other results using normal string equality\nfunction normalize(network, value, req) {\n switch (req.method) {\n case \"chainId\":\n return logger.getBigInt(value).toString();\n case \"getBlockNumber\":\n return logger.getNumber(value).toString();\n case \"getGasPrice\":\n return logger.getBigInt(value).toString();\n case \"getBalance\":\n return logger.getBigInt(value).toString();\n case \"getTransactionCount\":\n return logger.getNumber(value).toString();\n case \"getCode\":\n return hexlify(value);\n case \"getStorageAt\":\n return hexlify(value);\n case \"getBlock\":\n if (req.includeTransactions) {\n return JSON.stringify(network.formatter.blockWithTransactions(value));\n }\n return JSON.stringify(network.formatter.block(value));\n case \"getTransaction\":\n return JSON.stringify(network.formatter.transactionResponse(value));\n case \"getTransactionReceipt\":\n return JSON.stringify(network.formatter.receipt(value));\n case \"call\":\n return hexlify(value);\n case \"estimateGas\":\n return logger.getBigInt(value).toString();\n case \"getLogs\":\n return JSON.stringify(value.map((v) => network.formatter.log(v)));\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}\n// This strategy picks the highest wieght result, as long as the weight is\n// equal to or greater than quorum\nfunction checkQuorum(quorum, results) {\n const tally = new Map();\n for (const { result, normal, weight } of results) {\n const t = tally.get(normal) || { result, weight: 0 };\n t.weight += weight;\n tally.set(normal, t);\n }\n let bestWeight = 0;\n let bestResult = undefined;\n for (const { weight, result } of tally.values()) {\n if (weight >= quorum && weight > bestWeight) {\n bestWeight = weight;\n bestResult = result;\n }\n }\n return bestResult;\n}\n/*\nfunction getMean(results: Array): bigint {\n const total = results.reduce((a, r) => (a + BigInt(r.result)), BN_0);\n return total / BigInt(results.length);\n}\n*/\nfunction getMedian(results) {\n // Get the sorted values\n const values = results.map((r) => BigInt(r.result));\n values.sort((a, b) => ((a < b) ? -1 : (b > a) ? 1 : 0));\n const mid = values.length / 2;\n // Odd-length; take the middle value\n if (values.length % 2) {\n return values[mid];\n }\n // Even length; take the ceiling of the mean of the center two values\n return (values[mid - 1] + values[mid] + BN_1) / BN_2;\n}\nexport class FallbackProvider extends AbstractProvider {\n constructor(providers, network) {\n super(network);\n _FallbackProvider_instances.add(this);\n _FallbackProvider_configs.set(this, void 0);\n _FallbackProvider_initialSyncPromise.set(this, void 0);\n __classPrivateFieldSet(this, _FallbackProvider_configs, providers.map((p) => {\n if (p instanceof AbstractProvider) {\n return Object.assign({ provider: p }, defaultConfig, defaultState);\n }\n else {\n return Object.assign({}, defaultConfig, p, defaultState);\n }\n }), \"f\");\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, null, \"f\");\n this.quorum = 2; //Math.ceil(providers.length / 2);\n this.eventQuorum = 1;\n this.eventWorkers = 1;\n if (this.quorum > __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").reduce((a, c) => (a + c.weight), 0)) {\n logger.throwArgumentError(\"quorum exceed provider wieght\", \"quorum\", this.quorum);\n }\n }\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" }))).freeze();\n }\n _getSubscriber(sub) {\n throw new Error(\"@TODO\");\n }\n async _perform(req) {\n await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_initialSync).call(this);\n // Bootstrap enough to meet quorum\n const running = new Set();\n for (let i = 0; i < this.quorum; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n const result = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n for (const runner of running) {\n runner.done = true;\n }\n return result;\n }\n}\n_FallbackProvider_configs = new WeakMap(), _FallbackProvider_initialSyncPromise = new WeakMap(), _FallbackProvider_instances = new WeakSet(), _FallbackProvider_getNextConfig = function _FallbackProvider_getNextConfig(configs) {\n // Shuffle the states, sorted by priority\n const allConfigs = __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").slice();\n shuffle(allConfigs);\n allConfigs.sort((a, b) => (b.priority - a.priority));\n for (const config of allConfigs) {\n if (configs.indexOf(config) === -1) {\n return config;\n }\n }\n return null;\n}, _FallbackProvider_addRunner = function _FallbackProvider_addRunner(running, req) {\n const config = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_getNextConfig).call(this, Array.from(running).map((r) => r.config));\n if (config == null) {\n return null;\n }\n const result = {};\n const runner = {\n config, result, didBump: false, done: false,\n perform: null, staller: null\n };\n const now = getTime();\n runner.perform = (async () => {\n try {\n config.requests++;\n result.result = await config.provider._perform(req);\n }\n catch (error) {\n config.errorResponses++;\n result.error = error;\n }\n if (runner.done) {\n config.lateResponses++;\n }\n const dt = (getTime() - now);\n config._totalTime += dt;\n config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt;\n runner.perform = null;\n })();\n runner.staller = (async () => {\n await stall(config.stallTimeout);\n runner.staller = null;\n })();\n running.add(runner);\n return runner;\n}, _FallbackProvider_initialSync = \n// Initializes the blockNumber and network for each runner and\n// blocks until initialized\nasync function _FallbackProvider_initialSync() {\n let initialSync = __classPrivateFieldGet(this, _FallbackProvider_initialSyncPromise, \"f\");\n if (!initialSync) {\n const promises = [];\n __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").forEach((config) => {\n promises.push(waitForSync(config, 0));\n promises.push((async () => {\n config._network = await config.provider.getNetwork();\n })());\n });\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, initialSync = (async () => {\n // Wait for all providers to have a block number and network\n await Promise.all(promises);\n // Check all the networks match\n let chainId = null;\n for (const config of __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\")) {\n const network = (config._network);\n if (chainId == null) {\n chainId = network.chainId;\n }\n else if (network.chainId !== chainId) {\n logger.throwError(\"cannot mix providers on different networks\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FallbackProvider\"\n });\n }\n }\n })(), \"f\");\n }\n await initialSync;\n}, _FallbackProvider_checkQuorum = async function _FallbackProvider_checkQuorum(running, req) {\n // Get all the result objects\n const results = [];\n for (const runner of running) {\n if (\"result\" in runner.result) {\n const result = runner.result.result;\n results.push({\n result,\n normal: normalize((runner.config._network), result, req),\n weight: runner.config.weight\n });\n }\n }\n // Are there enough results to event meet quorum?\n if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) {\n return undefined;\n }\n switch (req.method) {\n case \"getBlockNumber\": {\n throw new Error(\"TODO\");\n }\n case \"getGasPrice\":\n case \"estimateGas\":\n return getMedian(results);\n case \"getBlock\":\n // Pending blocks are mempool dependant and already\n // quite untrustworthy\n if (\"blockTag\" in req && req.blockTag === \"pending\") {\n return results[0].result;\n }\n return checkQuorum(this.quorum, results);\n case \"chainId\":\n case \"getBalance\":\n case \"getTransactionCount\":\n case \"getCode\":\n case \"getStorageAt\":\n case \"getTransaction\":\n case \"getTransactionReceipt\":\n case \"getLogs\":\n return checkQuorum(this.quorum, results);\n case \"call\":\n // @TODO: Check errors\n return checkQuorum(this.quorum, results);\n case \"sendTransaction\":\n throw new Error(\"TODO\");\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}, _FallbackProvider_waitForQuorum = async function _FallbackProvider_waitForQuorum(running, req) {\n if (running.size === 0) {\n throw new Error(\"no runners?!\");\n }\n // Any promises that are interesting to watch for; an expired stall\n // or a successful perform\n const interesting = [];\n //const results: Array = [ ];\n //const errors: Array = [ ];\n let newRunners = 0;\n for (const runner of running) {\n // @TODO: use runner.perfom != null\n /*\n if (\"result\" in runner.result) {\n results.push(runner.result.result);\n } else if (\"error\" in runner.result) {\n errors.push(runner.result.error);\n }\n*/\n // No responses, yet; keep an eye on it\n if (runner.perform) {\n interesting.push(runner.perform);\n }\n // Still stalling...\n if (runner.staller) {\n interesting.push(runner.staller);\n continue;\n }\n // This runner has already triggered another runner\n if (runner.didBump) {\n continue;\n }\n // Got a response (result or error) or stalled; kick off another runner\n runner.didBump = true;\n newRunners++;\n }\n // Check for quorum\n /*\n console.log({ results, errors } );\n if (results.length >= this.quorum) {\n return results[0];\n }\n\n if (errors.length >= this.quorum) {\n return errors[0];\n }\n */\n const value = await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_checkQuorum).call(this, running, req);\n if (value !== undefined) {\n if (value instanceof Error) {\n throw value;\n }\n return value;\n }\n // Add any new runners, because a staller timed out or a result\n // or error response came in.\n for (let i = 0; i < newRunners; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n if (interesting.length === 0) {\n throw new Error(\"quorum not met\");\n // return logger.throwError(\"failed to meet quorum\", \"\", {\n // });\n }\n // Wait for someone to either complete its perform or trigger a stall\n await Promise.race(interesting);\n return await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n};\n//# sourceMappingURL=provider-fallback.js.map","export function shuffle(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n }\n}\n//# sourceMappingURL=shuffle.js.map","function getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst _WebSocket = getGlobal().WebSocket;\nexport { _WebSocket as WebSocket };\n//# sourceMappingURL=ws-browser.js.map","/**\n * SocketProvider\n *\n * Generic long-lived socket provider.\n *\n * Sub-classing notes\n * - a sub-class MUST call the `_start()` method once connected\n * - a sub-class MUST override the `_write(string)` method\n * - a sub-class MUST call `_processMessage(string)` for each message\n */\nvar __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 _SocketSubscriber_provider, _SocketSubscriber_filter, _SocketSubscriber_filterId, _SocketSubscriber_paused, _SocketSubscriber_emitPromise, _SocketEventSubscriber_logFilter, _SocketEventSubscriber_formatter, _SocketProvider_callbacks, _SocketProvider_ready, _SocketProvider_subs, _SocketProvider_pending;\nimport { UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { JsonRpcApiProvider } from \"./provider-jsonrpc.js\";\nexport class SocketSubscriber {\n constructor(provider, filter) {\n _SocketSubscriber_provider.set(this, void 0);\n _SocketSubscriber_filter.set(this, void 0);\n _SocketSubscriber_filterId.set(this, void 0);\n _SocketSubscriber_paused.set(this, void 0);\n _SocketSubscriber_emitPromise.set(this, void 0);\n __classPrivateFieldSet(this, _SocketSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n get filter() { return JSON.parse(__classPrivateFieldGet(this, _SocketSubscriber_filter, \"f\")); }\n start() {\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_subscribe\", this.filter).then((filterId) => {\n ;\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\")._register(filterId, this);\n return filterId;\n }), \"f\");\n }\n stop() {\n (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\")).then((filterId) => {\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_unsubscribe\", [filterId]);\n });\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n }\n // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs\n // and resume\n pause(dropWhilePaused) {\n if (!dropWhilePaused) {\n logger.throwError(\"preserve logs while paused not supported by SocketSubscriber yet\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause(false)\"\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_paused, !!dropWhilePaused, \"f\");\n }\n resume() {\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n }\n _handleMessage(message) {\n if (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\") == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _SocketSubscriber_paused, \"f\") === null) {\n let emitPromise = __classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\");\n if (emitPromise == null) {\n emitPromise = this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n }\n else {\n emitPromise = emitPromise.then(async () => {\n await this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, emitPromise.then(() => {\n if (__classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\") === emitPromise) {\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n }), \"f\");\n }\n }\n async _emit(provider, message) {\n throw new Error(\"sub-classes must implemente this; _emit\");\n }\n}\n_SocketSubscriber_provider = new WeakMap(), _SocketSubscriber_filter = new WeakMap(), _SocketSubscriber_filterId = new WeakMap(), _SocketSubscriber_paused = new WeakMap(), _SocketSubscriber_emitPromise = new WeakMap();\nexport class SocketBlockSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newHeads\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"block\", parseInt(message.number));\n }\n}\nexport class SocketPendingSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newPendingTransactions\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"pending\", message);\n }\n}\nexport class SocketEventSubscriber extends SocketSubscriber {\n constructor(provider, filter) {\n super(provider, [\"logs\", filter]);\n _SocketEventSubscriber_logFilter.set(this, void 0);\n _SocketEventSubscriber_formatter.set(this, void 0);\n __classPrivateFieldSet(this, _SocketEventSubscriber_logFilter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketEventSubscriber_formatter, provider.getNetwork().then((network) => network.formatter), \"f\");\n }\n get logFilter() { return JSON.parse(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\")); }\n async _emit(provider, message) {\n const formatter = await __classPrivateFieldGet(this, _SocketEventSubscriber_formatter, \"f\");\n provider.emit(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\"), formatter.log(message, provider));\n }\n}\n_SocketEventSubscriber_logFilter = new WeakMap(), _SocketEventSubscriber_formatter = new WeakMap();\nexport class SocketProvider extends JsonRpcApiProvider {\n constructor(network) {\n super(network);\n _SocketProvider_callbacks.set(this, void 0);\n _SocketProvider_ready.set(this, void 0);\n // Maps each filterId to its subscriber\n _SocketProvider_subs.set(this, void 0);\n // If any events come in before a subscriber has finished\n // registering, queue them\n _SocketProvider_pending.set(this, void 0);\n __classPrivateFieldSet(this, _SocketProvider_callbacks, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_ready, false, \"f\");\n __classPrivateFieldSet(this, _SocketProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_pending, new Map(), \"f\");\n }\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"close\":\n return new UnmanagedSubscriber(\"close\");\n case \"block\":\n return new SocketBlockSubscriber(this);\n case \"pending\":\n return new SocketPendingSubscriber(this);\n case \"event\":\n return new SocketEventSubscriber(this, sub.filter);\n case \"orphan\":\n // Handled auto-matically within AbstractProvider\n // when the log.removed = true\n if (sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"drop-log\");\n }\n }\n return super._getSubscriber(sub);\n }\n _register(filterId, subscriber) {\n __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").set(filterId, subscriber);\n const pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending) {\n for (const message of pending) {\n subscriber._handleMessage(message);\n }\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").delete(filterId);\n }\n }\n async send(method, params) {\n const payload = this.prepareRequest(method, params);\n const promise = new Promise((resolve, reject) => {\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").set(payload.id, { payload, resolve, reject });\n });\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n await this._write(JSON.stringify(payload));\n }\n return await promise;\n }\n // Sub-classes must call this once they are connected\n async _start() {\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _SocketProvider_ready, true, \"f\");\n for (const { payload } of __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").values()) {\n await this._write(JSON.stringify(payload));\n }\n }\n // Sub-classes must call this for each message\n async _processMessage(message) {\n const result = JSON.parse(message);\n if (\"id\" in result) {\n const promise = __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").get(result.id);\n if (!promise) {\n console.log(\"Weird... Response for not a thing we sent\");\n return;\n }\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").delete(result.id);\n if (\"error\" in result) {\n const { message, code, data } = result.error;\n const error = logger.makeError(message || \"unkonwn error\", \"SERVER_ERROR\", {\n request: `ws:${JSON.stringify(promise.payload)}`,\n info: { code, data }\n });\n promise.reject(error);\n }\n else {\n promise.resolve(result.result);\n }\n }\n else if (result.method === \"eth_subscription\") {\n const filterId = result.params.subscription;\n const subscriber = __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").get(filterId);\n if (subscriber) {\n subscriber._handleMessage(result.params.result);\n }\n else {\n let pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending == null) {\n pending = [];\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").set(filterId, pending);\n }\n pending.push(result.params.result);\n }\n }\n }\n async _write(message) {\n throw new Error(\"sub-classes must override this\");\n }\n}\n_SocketProvider_callbacks = new WeakMap(), _SocketProvider_ready = new WeakMap(), _SocketProvider_subs = new WeakMap(), _SocketProvider_pending = new WeakMap();\n//# sourceMappingURL=provider-socket.js.map","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 _WebSocketProvider_websocket;\nimport { WebSocket } from \"ws\"; /*-browser*/\nimport { SocketProvider } from \"./provider-socket.js\";\nexport class WebSocketProvider extends SocketProvider {\n constructor(url, network) {\n super(network);\n _WebSocketProvider_websocket.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, new WebSocket(url), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, url, \"f\");\n }\n this.websocket.onopen = () => {\n this._start();\n };\n this.websocket.onmessage = (message) => {\n this._processMessage(message.data);\n };\n }\n get websocket() { return __classPrivateFieldGet(this, _WebSocketProvider_websocket, \"f\"); }\n async _write(message) {\n this.websocket.send(message);\n }\n}\n_WebSocketProvider_websocket = new WeakMap();\n//# sourceMappingURL=provider-websocket.js.map","import { EnsPlugin, GasCostPlugin, MaxPriorityFeePlugin } from \"./plugins-network.js\";\nimport { EtherscanPlugin } from \"./provider-etherscan.js\";\nimport { Network as _Network } from \"./network.js\";\n// See: https://chainlist.org\nfunction injectCommonNetworks(Network) {\n /// Register popular Ethereum networks\n function registerEth(name, chainId, options) {\n const func = function () {\n const network = new Network(name, chainId);\n // We use 0 to disable ENS\n if (options.ensNetwork != null) {\n network.attachPlugin(new EnsPlugin(null, options.ensNetwork));\n }\n if (options.priorityFee) {\n network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee));\n }\n if (options.etherscan) {\n const { url, apiKey } = options.etherscan;\n network.attachPlugin(new EtherscanPlugin(url, apiKey));\n }\n network.attachPlugin(new GasCostPlugin());\n return network;\n };\n // Register the network by name and chain ID\n Network.register(name, func);\n Network.register(chainId, func);\n if (options.altNames) {\n options.altNames.forEach((name) => {\n Network.register(name, func);\n });\n }\n }\n registerEth(\"homestead\", 1, { ensNetwork: 1, altNames: [\"mainnet\"] });\n registerEth(\"ropsten\", 3, { ensNetwork: 3 });\n registerEth(\"rinkeby\", 4, { ensNetwork: 4 });\n registerEth(\"goerli\", 5, { ensNetwork: 5 });\n registerEth(\"kovan\", 42, { ensNetwork: 42 });\n registerEth(\"classic\", 61, {});\n registerEth(\"classicKotti\", 6, {});\n registerEth(\"xdai\", 100, { ensNetwork: 1 });\n // Polygon has a 35 gwei maxPriorityFee requirement\n registerEth(\"matic\", 137, {\n ensNetwork: 1,\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api.polygonscan.com/\"\n }\n });\n registerEth(\"maticMumbai\", 80001, {\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api-testnet.polygonscan.com/\"\n }\n });\n registerEth(\"bnb\", 56, {\n ensNetwork: 1,\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api.bscscan.com\"\n }\n });\n registerEth(\"bnbt\", 97, {\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api-testnet.bscscan.com\"\n }\n });\n return Network;\n}\nconst Network = injectCommonNetworks(_Network);\nexport { Network };\n//# sourceMappingURL=common-networks.js.map","const IpcSocketProvider = undefined;\nexport { IpcSocketProvider };\n//# sourceMappingURL=provider-ipcsocket-browser.js.map","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 _ContractTransactionReceipt_interface, _ContractTransactionResponse_interface;\nimport { defineProperties, EventPayload } from \"@ethersproject/properties\";\nimport { Log, TransactionReceipt, TransactionResponse } from \"@ethersproject/providers\";\nexport class EventLog extends Log {\n constructor(log, iface, fragment) {\n super(log, log.provider);\n const args = iface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, interface: iface });\n }\n get eventName() { return this.fragment.name; }\n get eventSignature() { return this.fragment.format(); }\n}\nexport class ContractTransactionReceipt extends TransactionReceipt {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionReceipt_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionReceipt_interface, iface, \"f\");\n }\n get logs() {\n return super.logs.map((log) => {\n const fragment = log.topics.length ? __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\").getEvent(log.topics[0]) : null;\n if (fragment) {\n return new EventLog(log, __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\"), fragment);\n }\n else {\n return log;\n }\n });\n }\n}\n_ContractTransactionReceipt_interface = new WeakMap();\nexport class ContractTransactionResponse extends TransactionResponse {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionResponse_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionResponse_interface, iface, \"f\");\n }\n async wait(confirms) {\n const receipt = await super.wait();\n if (receipt == null) {\n return null;\n }\n return new ContractTransactionReceipt(__classPrivateFieldGet(this, _ContractTransactionResponse_interface, \"f\"), this.provider, receipt);\n }\n}\n_ContractTransactionResponse_interface = new WeakMap();\nexport class ContractEventPayload extends EventPayload {\n constructor(contract, listener, filter, fragment, _log) {\n super(contract, listener, filter);\n const log = new EventLog(_log, contract.interface, fragment);\n const args = contract.interface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, log });\n }\n get eventName() {\n return this.fragment.name;\n }\n get eventSignature() {\n return this.fragment.format();\n }\n async getBlock() {\n return await this.log.getBlock();\n }\n async getTransaction() {\n return await this.log.getTransaction();\n }\n async getTransactionReceipt() {\n return await this.log.getTransactionReceipt();\n }\n}\n//# sourceMappingURL=wrappers.js.map","export const version = \"@ethersproject/contract@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _PreparedTopicFilter_filter;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { Interface, Typed } from \"@ethersproject/abi\";\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { copyRequest } from \"@ethersproject/providers\";\nimport { ContractEventPayload, ContractTransactionResponse, EventLog } from \"./wrappers.js\";\nimport { logger } from \"./logger.js\";\nfunction canEstimate(value) {\n return (value && typeof (value.estimateGas) === \"function\");\n}\nfunction canCall(value) {\n return (value && typeof (value.call) === \"function\");\n}\nfunction canSend(value) {\n return (value && typeof (value.sendTransaction) === \"function\");\n}\nfunction canResolve(value) {\n return (value && typeof (value.resolveName) === \"function\");\n}\nfunction canQuery(value) {\n return (value && typeof (value.getLogs) === \"function\");\n}\nfunction canSubscribe(value) {\n return (value && typeof (value.on) === \"function\" && typeof (value.off) === \"function\");\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\nclass PreparedTopicFilter {\n constructor(contract, fragment, args) {\n _PreparedTopicFilter_filter.set(this, void 0);\n defineProperties(this, { fragment });\n if (fragment.inputs.length < args.length) {\n throw new Error(\"too many arguments\");\n }\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(contract.runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n __classPrivateFieldSet(this, _PreparedTopicFilter_filter, (async function () {\n const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n })(), \"f\");\n }\n getTopicFilter() {\n return __classPrivateFieldGet(this, _PreparedTopicFilter_filter, \"f\");\n }\n}\n_PreparedTopicFilter_filter = new WeakMap();\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n// the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n// TransactionResponse otherwise)\n//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\nfunction _WrappedMethodBase() {\n return Function;\n}\nfunction getRunner(value, feature) {\n if (value == null) {\n return null;\n }\n if (typeof (value[feature]) === \"function\") {\n return value;\n }\n if (value.provider && typeof (value.provider[feature]) === \"function\") {\n return value.provider;\n }\n return null;\n}\nexport async function copyOverrides(arg) {\n // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n const overrides = copyRequest(Typed.dereference(arg, \"overrides\"));\n // Some sanity checking; these are what these methods adds\n //if ((overrides).to) {\n if (overrides.to) {\n logger.throwArgumentError(\"cannot override to\", \"overrides.to\", overrides.to);\n }\n else if (overrides.data) {\n logger.throwArgumentError(\"cannot override data\", \"overrides.data\", overrides.data);\n }\n // Resolve any from\n if (overrides.from) {\n overrides.from = await resolveAddress(overrides.from);\n }\n return overrides;\n}\nexport async function resolveArgs(_runner, inputs, args) {\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(_runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n return await Promise.all(inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n}\nclass WrappedMethod extends _WrappedMethodBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getFunctionName(key),\n _contract: contract, _key: key\n });\n const proxy = new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n const fragment = target.getFragment(...args);\n if (fragment.constant) {\n return await target.staticCall(...args);\n }\n return await target.send(...args);\n },\n });\n return proxy;\n }\n // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n get fragment() {\n return this._contract.interface.getFunction(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getFunction(this._key, args);\n }\n async populateTransaction(...args) {\n const fragment = this.getFragment(...args);\n // If an overrides was passed in, copy it and normalize the values\n let overrides = {};\n if (fragment.inputs.length + 1 === args.length) {\n overrides = await copyOverrides(args.pop());\n }\n if (fragment.inputs.length !== args.length) {\n throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n }\n const resolvedArgs = await resolveArgs(this._contract.runner, fragment.inputs, args);\n return Object.assign({}, overrides, await resolveProperties({\n to: this._contract.getAddress(),\n data: this._contract.interface.encodeFunctionData(fragment, resolvedArgs)\n }));\n }\n async staticCall(...args) {\n const result = await this.staticCallResult(...args);\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n async send(...args) {\n const runner = getRunner(this._contract.runner, \"sendTransaction\");\n if (!canSend(runner)) {\n return logger.throwError(\"contract runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", {\n operation: \"sendTransaction\"\n });\n }\n const tx = await runner.sendTransaction(await this.populateTransaction(...args));\n const provider = getRunner(this._contract.runner, \"getLogs\");\n return new ContractTransactionResponse(this._contract.interface, provider, tx);\n }\n async estimateGas(...args) {\n const runner = getRunner(this._contract.runner, \"estimateGas\");\n if (!canEstimate(runner)) {\n return logger.throwError(\"contract runner does not support gas estimation\", \"UNSUPPORTED_OPERATION\", {\n operation: \"estimateGas\"\n });\n }\n return await runner.estimateGas(await this.populateTransaction(...args));\n }\n async staticCallResult(...args) {\n const runner = getRunner(this._contract.runner, \"call\");\n if (!canCall(runner)) {\n return logger.throwError(\"contract runner does not support calling\", \"UNSUPPORTED_OPERATION\", {\n operation: \"call\"\n });\n }\n const fragment = this.getFragment(...args);\n const tx = await this.populateTransaction(...args);\n let result = \"0x\";\n try {\n result = await runner.call(tx);\n }\n catch (error) {\n if (isCallException(error)) {\n throw this._contract.interface.makeError(fragment, error.data, tx);\n }\n throw error;\n }\n return this._contract.interface.decodeFunctionResult(fragment, result);\n }\n}\nfunction _WrappedEventBase() {\n return Function;\n}\nclass WrappedEvent extends _WrappedEventBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getEventName(key),\n _contract: contract, _key: key\n });\n return new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n return new PreparedTopicFilter(contract, target.getFragment(...args), args);\n },\n });\n }\n // Only works on non-ambiguous keys\n get fragment() {\n return this._contract.interface.getEvent(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getEvent(this._key, args);\n }\n}\n;\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\nconst internal = Symbol.for(\"_ethersInternal_contract\");\nconst internalValues = new WeakMap();\nfunction setInternal(contract, values) {\n internalValues.set(contract[internal], values);\n}\nfunction getInternal(contract) {\n return internalValues.get(contract[internal]);\n}\nfunction isDeferred(value) {\n return (value && typeof (value) === \"object\" && (\"getTopicFilter\" in value) &&\n (typeof (value.getTopicFilter) === \"function\") && value.fragment);\n}\nasync function getSubTag(contract, event) {\n let fragment;\n let topics;\n if (Array.isArray(event)) {\n // Topics; e.g. `[ \"0x1234...89ab\" ]`\n fragment = contract.interface.getEvent(event[0]);\n topics = event;\n }\n else if (typeof (event) === \"string\") {\n // Event name (name or signature); `\"Transfer\"`\n fragment = contract.interface.getEvent(event);\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else if (isDeferred(event)) {\n // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n fragment = event.fragment;\n topics = await event.getTopicFilter();\n }\n else if (\"fragment\" in event) {\n // ContractEvent; e.g. `contract.filter.Transfer`\n fragment = event.fragment;\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else {\n console.log(event);\n throw new Error(\"TODO\");\n }\n // Normalize topics and sort TopicSets\n topics = topics.map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n });\n const tag = topics.map((t) => {\n if (t == null) {\n return \"null\";\n }\n if (Array.isArray(t)) {\n return t.join(\"|\");\n }\n return t;\n }).join(\"&\");\n return { fragment, tag, topics };\n}\nasync function hasSub(contract, event) {\n const { subs } = getInternal(contract);\n return subs.get((await getSubTag(contract, event)).tag) || null;\n}\nasync function getSub(contract, event) {\n // Make sure our runner can actually subscribe to events\n const runner = getRunner(contract.runner, \"on\");\n const runnerOff = getRunner(contract.runner, \"off\");\n if (!runner || runner !== runnerOff || !canSubscribe(runner)) {\n return logger.throwError(\"contract runner does not support subscribing\", \"UNSUPPORTED_OPERATION\", {\n operation: \"on\"\n });\n }\n const { fragment, tag, topics } = await getSubTag(contract, event);\n const { addr, subs } = getInternal(contract);\n let sub = subs.get(tag);\n if (!sub) {\n const address = (addr ? addr : contract);\n const filter = { address, topics };\n const listener = (log) => {\n const payload = new ContractEventPayload(contract, null, event, fragment, log);\n emit(contract, event, payload.args, payload);\n };\n let started = false;\n const start = () => {\n if (started) {\n return;\n }\n runner.on(filter, listener);\n started = true;\n };\n const stop = () => {\n if (!started) {\n return;\n }\n runner.off(filter, listener);\n started = false;\n };\n sub = { tag, listeners: [], start, stop };\n subs.set(tag, sub);\n }\n return sub;\n}\nasync function _emit(contract, event, args, payload) {\n await lastEmit;\n const sub = await hasSub(contract, event);\n if (!sub) {\n return false;\n }\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const passArgs = args.slice();\n if (payload) {\n passArgs.push(new ContractEventPayload(contract, (once ? null : listener), event, payload.fragment, payload.log));\n }\n setTimeout(() => { listener.call(contract, ...passArgs); }, 0);\n return !once;\n });\n return (count > 0);\n}\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit = Promise.resolve();\nasync function emit(contract, event, args, payload) {\n try {\n await lastEmit;\n }\n catch (error) { }\n const resultPromise = _emit(contract, event, args, payload);\n lastEmit = resultPromise;\n return await resultPromise;\n}\nconst passProperties = [\"then\"];\nexport class BaseContract {\n constructor(target, abi, runner = null, _deployTx) {\n const iface = Interface.from(abi);\n defineProperties(this, { target, runner, interface: iface });\n Object.defineProperty(this, internal, { value: {} });\n let addrPromise;\n let addr = null;\n let deployTx = null;\n if (_deployTx) {\n const provider = getRunner(runner, \"getLogs\");\n deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx);\n }\n let subs = new Map();\n // Resolve the target as the address\n if (typeof (target) === \"string\") {\n if (isHexString(target)) {\n addr = target;\n addrPromise = Promise.resolve(target);\n }\n else {\n const resolver = getRunner(runner, \"resolveName\");\n if (!canResolve(resolver)) {\n throw logger.makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\"\n });\n }\n addrPromise = resolver.resolveName(target).then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n }\n else {\n addrPromise = target.getAddress().then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n // Set our private values\n setInternal(this, { addrPromise, addr, deployTx, subs });\n // Add the event filters\n const filters = new Proxy({}, {\n get: (target, _prop, receiver) => {\n // Pass important checks (like `then` for Promise) through\n if (passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = this.getEvent(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract event: ${prop}`);\n }\n });\n defineProperties(this, { filters });\n // Return a Proxy that will respond to functions\n return new Proxy(this, {\n get: (target, _prop, receiver) => {\n if (_prop in target || passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = target.getFunction(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract method: ${prop}`);\n }\n });\n }\n async getAddress() { return await getInternal(this).addrPromise; }\n deploymentTransaction() {\n return getInternal(this).deployTx;\n }\n getFunction(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedMethod(this, key));\n }\n getEvent(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedEvent(this, key));\n }\n async queryFilter(event, fromBlock = 0, toBlock = \"latest\") {\n const { addr, addrPromise } = getInternal(this);\n const address = (addr ? addr : (await addrPromise));\n const { fragment, topics } = await getSubTag(this, event);\n const filter = { address, topics, fromBlock, toBlock };\n const runner = getRunner(this.runner, \"getLogs\");\n if (!canQuery(runner)) {\n return logger.throwError(\"contract runner does not support querying\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getLogs\"\n });\n }\n return (await runner.getLogs(filter)).map((log) => {\n return new EventLog(log, this.interface, fragment);\n });\n }\n async on(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: false });\n sub.start();\n return this;\n }\n async once(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: true });\n sub.start();\n return this;\n }\n async emit(event, ...args) {\n return await emit(this, event, args, null);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n const { subs } = getInternal(this);\n let total = 0;\n for (const { listeners } of subs.values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n const { subs } = getInternal(this);\n let result = [];\n for (const { listeners } of subs.values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (listener == null || sub.listeners.length === 0) {\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n else {\n const { subs } = getInternal(this);\n for (const { tag, stop } of subs.values()) {\n stop();\n subs.delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return await this.off(event, listener);\n }\n static buildClass(abi) {\n class CustomContract extends BaseContract {\n constructor(address, runner = null) {\n super(address, abi, runner);\n }\n }\n return CustomContract;\n }\n ;\n static from(target, abi, runner = null) {\n const contract = new this(target, abi, runner);\n return contract;\n }\n}\nfunction _ContractBase() {\n return BaseContract;\n}\nexport class Contract extends _ContractBase() {\n}\n//# sourceMappingURL=contract.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nexport function computeAddress(key) {\n const publicKey = SigningKey.computePublicKey(key, false);\n return getAddress(keccak256(\"0x\" + publicKey.substring(4)).substring(26));\n}\n//# sourceMappingURL=address.js.map","const subsChrs = \" !#$%&'()*+,-./<=>?@[]^_`{|}~\";\nconst Word = /^[a-z]*$/i;\nfunction unfold(words, sep) {\n let initial = 97;\n return words.reduce((accum, word) => {\n if (word === sep) {\n initial++;\n }\n else if (word.match(Word)) {\n accum.push(String.fromCharCode(initial) + word);\n }\n else {\n initial = 97;\n accum.push(word);\n }\n return accum;\n }, []);\n}\nexport function decode(data, subs) {\n // Replace all the substitutions with their expanded form\n for (let i = subsChrs.length - 1; i >= 0; i--) {\n data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2));\n }\n // Get all tle clumps; each suffix, first-increment and second-increment\n const clumps = [];\n const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => {\n if (semi) {\n for (let i = parseInt(semi); i >= 0; i--) {\n clumps.push(\";\");\n }\n }\n else {\n clumps.push(item.toLowerCase());\n }\n return \"\";\n });\n if (leftover) {\n throw new Error(`leftovers: ${JSON.stringify(leftover)}`);\n }\n return unfold(unfold(clumps, \";\"), \":\");\n}\nexport function decodeOwl(data) {\n if (data[0] !== \"0\") {\n throw TypeError(\"unsupported auwl data\");\n }\n return decode(data.substring(1 + 2 * subsChrs.length), data.substring(1, 1 + 2 * subsChrs.length));\n}\n//# sourceMappingURL=decode-owl.js.map","export const version = \"@ethersproject/wordlists@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { defineProperties } from \"@ethersproject/properties\";\nexport class Wordlist {\n constructor(locale) {\n defineProperties(this, { locale });\n }\n // Subclasses may override this\n split(mnemonic) {\n return mnemonic.toLowerCase().split(/ +/g);\n }\n // Subclasses may override this\n join(words) {\n return words.join(\" \");\n }\n}\n//# sourceMappingURL=wordlist.js.map","// Use the encode-latin.js script to create the necessary\n// data files to be consumed by this class\nvar __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 _WordlistOwl_instances, _WordlistOwl_data, _WordlistOwl_checksum, _WordlistOwl_words, _WordlistOwl_loadWords;\nimport { id } from \"@ethersproject/hash\";\nimport { decodeOwl } from \"./decode-owl.js\";\nimport { logger } from \"./logger.js\";\nimport { Wordlist } from \"./wordlist.js\";\nexport class WordlistOwl extends Wordlist {\n constructor(locale, data, checksum) {\n super(locale);\n _WordlistOwl_instances.add(this);\n _WordlistOwl_data.set(this, void 0);\n _WordlistOwl_checksum.set(this, void 0);\n _WordlistOwl_words.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwl_data, data, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_checksum, checksum, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_words, null, \"f\");\n }\n get _data() { return __classPrivateFieldGet(this, _WordlistOwl_data, \"f\"); }\n _decodeWords() {\n return decodeOwl(__classPrivateFieldGet(this, _WordlistOwl_data, \"f\"));\n }\n getWord(index) {\n const words = __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this);\n if (index < 0 || index >= words.length) {\n logger.throwArgumentError(`invalid word index: ${index}`, \"index\", index);\n }\n return words[index];\n }\n getWordIndex(word) {\n return __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this).indexOf(word);\n }\n}\n_WordlistOwl_data = new WeakMap(), _WordlistOwl_checksum = new WeakMap(), _WordlistOwl_words = new WeakMap(), _WordlistOwl_instances = new WeakSet(), _WordlistOwl_loadWords = function _WordlistOwl_loadWords() {\n if (__classPrivateFieldGet(this, _WordlistOwl_words, \"f\") == null) {\n const words = this._decodeWords();\n // Verify the computed list matches the official list\n const checksum = id(words.join(\"\\n\") + \"\\n\");\n /* c8 ignore start */\n if (checksum !== __classPrivateFieldGet(this, _WordlistOwl_checksum, \"f\")) {\n throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);\n }\n /* c8 ignore stop */\n __classPrivateFieldSet(this, _WordlistOwl_words, words, \"f\");\n }\n return __classPrivateFieldGet(this, _WordlistOwl_words, \"f\");\n};\n//# sourceMappingURL=wordlist-owl.js.map","import { WordlistOwl } from \"./wordlist-owl.js\";\nconst words = \"0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO\";\nconst checksum = \"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\";\nexport class LangEn extends WordlistOwl {\n constructor() { super(\"en\", words, checksum); }\n}\nexport const langEn = new LangEn();\n//# sourceMappingURL=lang-en.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","export const version = \"@ethersproject/wallet@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { langEn as en } from \"./lang-en.js\";\nexport const wordlists = Object.freeze({\n en\n});\n//# sourceMappingURL=wordlists-en.js.map","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 _WordlistOwlA_accent;\nimport { WordlistOwl } from \"./wordlist-owl.js\";\nimport { decodeOwlA } from \"./decode-owla.js\";\nexport class WordlistOwlA extends WordlistOwl {\n constructor(locale, data, accent, checksum) {\n super(locale, data, checksum);\n _WordlistOwlA_accent.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwlA_accent, accent, \"f\");\n }\n get _accent() { return __classPrivateFieldGet(this, _WordlistOwlA_accent, \"f\"); }\n _decodeWords() {\n return decodeOwlA(this._data, this._accent);\n }\n}\n_WordlistOwlA_accent = new WeakMap();\n//# sourceMappingURL=wordlist-owla.js.map","import { decodeBits } from \"./bit-reader.js\";\nimport { decodeOwl } from \"./decode-owl.js\";\nexport function decodeOwlA(data, accents) {\n let words = decodeOwl(data).join(\",\");\n // Inject the accents\n accents.split(/,/g).forEach((accent) => {\n const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);\n if (!match) {\n throw new Error(\"internal error parsing accents\");\n }\n let posOffset = 0;\n const positions = decodeBits(parseInt(match[3]), match[4]);\n const charCode = parseInt(match[2]);\n const regex = new RegExp(`([${match[1]}])`, \"g\");\n words = words.replace(regex, (all, letter) => {\n const rem = --positions[posOffset];\n if (rem === 0) {\n letter = String.fromCharCode(letter.charCodeAt(0), charCode);\n posOffset++;\n }\n return letter;\n });\n });\n return words.split(\",\");\n}\n//# sourceMappingURL=decode-owla.js.map","const Base64 = \")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\";\nexport function decodeBits(width, data) {\n const maxValue = (1 << width) - 1;\n const result = [];\n let accum = 0, bits = 0, flood = 0;\n for (let i = 0; i < data.length; i++) {\n // Accumulate 6 bits of data\n accum = ((accum << 6) | Base64.indexOf(data[i]));\n bits += 6;\n // While we have enough for a word...\n while (bits >= width) {\n // ...read the word\n const value = (accum >> (bits - width));\n accum &= (1 << (bits - width)) - 1;\n bits -= width;\n // A value of 0 indicates we exceeded maxValue, it\n // floods over into the next value\n if (value === 0) {\n flood += maxValue;\n }\n else {\n result.push(value + flood);\n flood = 0;\n }\n }\n }\n return result;\n}\n//# sourceMappingURL=bit-reader.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { pbkdf2, sha256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from \"@ethersproject/strings\";\nimport { langEn } from \"@ethersproject/wordlists\";\nimport { logger } from \"./logger.js\";\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits) {\n return ((1 << bits) - 1) << (8 - bits) & 0xff;\n}\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits) {\n return ((1 << bits) - 1) & 0xff;\n}\nfunction mnemonicToEntropy(mnemonic, wordlist = langEn) {\n logger.assertNormalize(\"NFKD\");\n if (wordlist == null) {\n wordlist = langEn;\n }\n const words = wordlist.split(mnemonic);\n if ((words.length % 3) !== 0 || words.length < 12 || words.length > 24) {\n logger.throwArgumentError(\"invalid mnemonic length\", \"mnemonic\", \"[ REDACTED ]\");\n }\n const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));\n let offset = 0;\n for (let i = 0; i < words.length; i++) {\n let index = wordlist.getWordIndex(words[i].normalize(\"NFKD\"));\n if (index === -1) {\n logger.throwArgumentError(`invalid mnemonic word at index ${i}`, \"mnemonic\", \"[ REDACTED ]\");\n }\n for (let bit = 0; bit < 11; bit++) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n }\n offset++;\n }\n }\n const entropyBits = 32 * words.length / 3;\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n logger.throwArgumentError(\"invalid mnemonic checksum\", \"mnemonic\", \"[ REDACTED ]\");\n }\n return hexlify(entropy.slice(0, entropyBits / 8));\n}\nfunction entropyToMnemonic(entropy, wordlist = langEn) {\n if ((entropy.length % 4) || entropy.length < 16 || entropy.length > 32) {\n logger.throwArgumentError(\"invalid entropy size\", \"entropy\", \"[ REDACTED ]\");\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n const indices = [0];\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i++) {\n // Consume the whole byte (with still more to go)\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n }\n else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n remainingBits += 3;\n }\n }\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits);\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\n return wordlist.join(indices.map((index) => wordlist.getWord(index)));\n}\nconst _guard = {};\nexport class Mnemonic {\n constructor(guard, entropy, phrase, password, wordlist) {\n if (password == null) {\n password = \"\";\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n logger.assertPrivate(guard, _guard, \"Mnemonic\");\n defineProperties(this, { phrase, password, wordlist, entropy });\n }\n computeSeed() {\n const salt = toUtf8Bytes(\"mnemonic\" + this.password, UnicodeNormalizationForm.NFKD);\n return pbkdf2(toUtf8Bytes(this.phrase, UnicodeNormalizationForm.NFKD), salt, 2048, 64, \"sha512\");\n }\n static fromPhrase(phrase, password, wordlist) {\n // Normalize the case and space; throws if invalid\n const entropy = mnemonicToEntropy(phrase, wordlist);\n phrase = entropyToMnemonic(logger.getBytes(entropy), wordlist);\n return new Mnemonic(_guard, entropy, phrase, password, wordlist);\n }\n static fromEntropy(_entropy, password, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n const phrase = entropyToMnemonic(entropy, wordlist);\n return new Mnemonic(_guard, hexlify(entropy), phrase, password, wordlist);\n }\n static entropyToPhrase(_entropy, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n return entropyToMnemonic(entropy, wordlist);\n }\n static phraseToEntropy(phrase, wordlist) {\n return mnemonicToEntropy(phrase, wordlist);\n }\n static isValidMnemonic(phrase, wordlist) {\n try {\n mnemonicToEntropy(phrase, wordlist);\n return true;\n }\n catch (error) { }\n return false;\n }\n}\n//# sourceMappingURL=mnemonic.js.map","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 _BaseWallet_signingKey;\nimport { getAddress, resolveAddress } from \"@ethersproject/address\";\nimport { hashMessage, TypedDataEncoder } from \"@ethersproject/hash\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { AbstractSigner } from \"@ethersproject/providers\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport class BaseWallet extends AbstractSigner {\n constructor(privateKey, provider) {\n super(provider);\n _BaseWallet_signingKey.set(this, void 0);\n __classPrivateFieldSet(this, _BaseWallet_signingKey, privateKey, \"f\");\n const address = computeAddress(this.signingKey.publicKey);\n defineProperties(this, { address });\n }\n // Store these in getters to reduce visibility in console.log\n get signingKey() { return __classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"); }\n get privateKey() { return this.signingKey.privateKey; }\n async getAddress() { return this.address; }\n connect(provider) {\n return new BaseWallet(__classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"), provider);\n }\n async signTransaction(_tx) {\n // Replace any Addressable or ENS name with an address\n const tx = Object.assign({}, _tx, await resolveProperties({\n to: (_tx.to ? resolveAddress(_tx.to, this.provider) : undefined),\n from: (_tx.from ? resolveAddress(_tx.from, this.provider) : undefined)\n }));\n if (tx.from != null) {\n if (getAddress(tx.from) !== this.address) {\n logger.throwArgumentError(\"transaction from address mismatch\", \"tx.from\", _tx.from);\n }\n delete tx.from;\n }\n // Build the transaction\n const btx = Transaction.from(tx);\n btx.signature = this.signingKey.sign(btx.unsignedHash);\n return btx.serialized;\n }\n async signMessage(message) {\n return this.signingKey.sign(hashMessage(message)).serialized;\n }\n async signTypedData(domain, types, value) {\n // Populate any ENS names\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name) => {\n if (this.provider == null) {\n return logger.throwError(\"cannot resolve ENS names without a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n info: { name }\n });\n }\n const address = await this.provider.resolveName(name);\n if (address == null) {\n return logger.throwError(\"unconfigured ENS name\", \"UNCONFIGURED_NAME\", {\n value: name\n });\n }\n return address;\n });\n return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized;\n }\n}\n_BaseWallet_signingKey = new WeakMap();\n//# sourceMappingURL=base-wallet.js.map","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 __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 _a, _HDNodeWallet_fromSeed, _HDNodeWalletManager_root;\nimport { arrayify, concat, dataSlice, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac, randomBytes, ripemd160, sha256 } from \"@ethersproject/crypto\";\nimport { decodeBase58, encodeBase58, toBigInt, toHex } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { VoidSigner } from \"@ethersproject/providers\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { langEn } from \"@ethersproject/wordlists/lib/lang-en.js\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nexport const defaultPath = \"m/44'/60'/0'/0/0\";\n// \"Bitcoin seed\"\nconst MasterSecret = new Uint8Array([66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100]);\nconst HardenedBit = 0x80000000;\nconst N = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\nconst Nibbles = \"0123456789abcdef\";\nfunction zpad(value, length) {\n let result = \"\";\n while (value) {\n result = Nibbles[value % 16] + result;\n value = Math.trunc(value / 16);\n }\n while (result.length < length * 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction encodeBase58Check(_value) {\n const value = logger.getBytes(_value);\n const check = dataSlice(sha256(sha256(value)), 0, 4);\n const bytes = concat([value, check]);\n return encodeBase58(bytes);\n}\nconst _guard = {};\nfunction ser_I(index, chainCode, publicKey, privateKey) {\n const data = new Uint8Array(37);\n if (index & HardenedBit) {\n if (privateKey == null) {\n return logger.throwError(\"cannot derive child of neutered node\", \"UNSUPPORTED_OPERATION\", {\n operation: \"deriveChild\"\n });\n }\n // Data = 0x00 || ser_256(k_par)\n data.set(arrayify(privateKey), 1);\n }\n else {\n // Data = ser_p(point(k_par))\n data.set(arrayify(publicKey));\n }\n // Data += ser_32(i)\n for (let i = 24; i >= 0; i -= 8) {\n data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff);\n }\n const I = arrayify(computeHmac(\"sha512\", chainCode, data));\n return { IL: I.slice(0, 32), IR: I.slice(32) };\n}\nfunction derivePath(node, path) {\n const components = path.split(\"/\");\n if (components.length === 0 || (components[0] === \"m\" && node.depth !== 0)) {\n throw new Error(\"invalid path - \" + path);\n }\n if (components[0] === \"m\") {\n components.shift();\n }\n let result = node;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n if (component.match(/^[0-9]+'$/)) {\n const index = parseInt(component.substring(0, component.length - 1));\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(HardenedBit + index);\n }\n else if (component.match(/^[0-9]+$/)) {\n const index = parseInt(component);\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(index);\n }\n else {\n throw new Error(\"invalid path component - \" + component);\n }\n }\n return result;\n}\nexport class HDNodeWallet extends BaseWallet {\n constructor(guard, signingKey, parentFingerprint, chainCode, path, index, depth, mnemonic, provider) {\n super(signingKey, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeWallet\");\n defineProperties(this, { publicKey: signingKey.compressedPublicKey });\n const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n defineProperties(this, {\n parentFingerprint, fingerprint,\n chainCode, path, index, depth\n });\n defineProperties(this, { mnemonic });\n }\n connect(provider) {\n return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488ADE4\", zpad(this.depth, 1), this.parentFingerprint,\n zpad(this.index, 4), this.chainCode,\n concat([\"0x00\", this.privateKey])\n ]));\n }\n hasPath() { return (this.path != null); }\n neuter() {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.provider);\n }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey);\n const ki = new SigningKey(toHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32));\n return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.mnemonic, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n static fromSeed(seed) {\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, seed, null);\n }\n static fromPhrase(phrase, password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromMnemonic(mnemonic, path = defaultPath) {\n if (!path) {\n path = defaultPath;\n }\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromExtendedKey(extendedKey) {\n const bytes = arrayify(decodeBase58(extendedKey)); // @TODO: redact\n if (bytes.length !== 82 || encodeBase58Check(bytes.slice(0, 78)) !== extendedKey) {\n logger.throwArgumentError(\"invalid extended key\", \"extendedKey\", \"[ REDACTED ]\");\n }\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n switch (hexlify(bytes.slice(0, 4))) {\n // Public Key\n case \"0x0488b21e\":\n case \"0x043587cf\": {\n const publicKey = hexlify(key);\n return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey, parentFingerprint, chainCode, null, index, depth, null);\n }\n // Private Key\n case \"0x0488ade4\":\n case \"0x04358394 \":\n if (key[0] !== 0) {\n break;\n }\n return new HDNodeWallet(_guard, new SigningKey(key.slice(1)), parentFingerprint, chainCode, null, index, depth, null, null);\n }\n return logger.throwArgumentError(\"invalid extended key prefix\", \"extendedKey\", \"[ REDACTED ]\");\n }\n static createRandom(password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n}\n_a = HDNodeWallet, _HDNodeWallet_fromSeed = function _HDNodeWallet_fromSeed(_seed, mnemonic) {\n const seed = logger.getBytes(_seed, \"seed\");\n if (seed.length < 16 || seed.length > 64) {\n throw new Error(\"invalid seed\");\n }\n const I = arrayify(computeHmac(\"sha512\", MasterSecret, seed));\n const signingKey = new SigningKey(hexlify(I.slice(0, 32)));\n return new HDNodeWallet(_guard, signingKey, \"0x00000000\", hexlify(I.slice(32)), \"m\", 0, 0, mnemonic, null);\n};\nexport class HDNodeVoidWallet extends VoidSigner {\n constructor(guard, address, publicKey, parentFingerprint, chainCode, path, index, depth, provider) {\n super(address, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeVoidWallet\");\n defineProperties(this, { publicKey });\n const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4);\n defineProperties(this, {\n publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth\n });\n }\n connect(provider) {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488B21E\",\n zpad(this.depth, 1),\n this.parentFingerprint,\n zpad(this.index, 4),\n this.chainCode,\n this.publicKey,\n ]));\n }\n hasPath() { return (this.path != null); }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null);\n const Ki = SigningKey._addPoints(IL, this.publicKey, true);\n const address = computeAddress(Ki);\n return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n}\nexport class HDNodeWalletManager {\n constructor(phrase, password = \"\", path = \"m/44'/60'/0'/0\", locale = langEn) {\n _HDNodeWalletManager_root.set(this, void 0);\n __classPrivateFieldSet(this, _HDNodeWalletManager_root, HDNodeWallet.fromPhrase(phrase, password, path, locale), \"f\");\n }\n getSigner(index = 0) {\n return __classPrivateFieldGet(this, _HDNodeWalletManager_root, \"f\").deriveChild(index);\n }\n}\n_HDNodeWalletManager_root = new WeakMap();\nexport function getAccountPath(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index < 0 || index >= HardenedBit) {\n logger.throwArgumentError(\"invalid account index\", \"index\", index);\n }\n return `m/44'/60'/${index}'/0/0`;\n}\n//# sourceMappingURL=hdwallet.js.map","/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */\nvar __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 _AES_key, _AES_Kd, _AES_Ke;\n// Number of rounds by keysize\nconst numberOfRounds = { 16: 10, 24: 12, 32: 14 };\n// Round constant words\nconst rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n// S-box and Inverse S-box (S is for Substitution)\nconst S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\nconst Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n// Transformations for encryption\nconst T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\nconst T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\nconst T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\nconst T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n// Transformations for decryption\nconst T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\nconst T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\nconst T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\nconst T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n// Transformations for decryption key expansion\nconst U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\nconst U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\nconst U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\nconst U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\nfunction convertToInt32(bytes) {\n const result = [];\n for (let i = 0; i < bytes.length; i += 4) {\n result.push((bytes[i] << 24) | (bytes[i + 1] << 16) | (bytes[i + 2] << 8) | bytes[i + 3]);\n }\n return result;\n}\nexport class AES {\n constructor(key) {\n _AES_key.set(this, void 0);\n _AES_Kd.set(this, void 0);\n _AES_Ke.set(this, void 0);\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n __classPrivateFieldSet(this, _AES_key, new Uint8Array(key), \"f\");\n const rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new TypeError('invalid key size (must be 16, 24 or 32 bytes)');\n }\n // encryption round keys\n __classPrivateFieldSet(this, _AES_Ke, [], \"f\");\n // decryption round keys\n __classPrivateFieldSet(this, _AES_Kd, [], \"f\");\n for (let i = 0; i <= rounds; i++) {\n __classPrivateFieldGet(this, _AES_Ke, \"f\").push([0, 0, 0, 0]);\n __classPrivateFieldGet(this, _AES_Kd, \"f\").push([0, 0, 0, 0]);\n }\n const roundKeyCount = (rounds + 1) * 4;\n const KC = this.key.length / 4;\n // convert the key into ints\n const tk = convertToInt32(this.key);\n // copy values into round key arrays\n let index;\n for (let i = 0; i < KC; i++) {\n index = i >> 2;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[index][i % 4] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - index][i % 4] = tk[i];\n }\n // key expansion (fips-197 section 5.2)\n let rconpointer = 0;\n let t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (let i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n }\n else {\n for (let i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n tk[KC / 2] ^= (S[tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n for (let i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n // copy values into round key arrays\n let i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][c] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - r][c] = tk[i++];\n t++;\n }\n }\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (let r = 1; r < rounds; r++) {\n for (let c = 0; c < 4; c++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[tt & 0xFF]);\n }\n }\n }\n get key() { return __classPrivateFieldGet(this, _AES_key, \"f\").slice(); }\n encrypt(plaintext) {\n if (plaintext.length != 16) {\n throw new TypeError('invalid plaintext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Ke, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(plaintext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Ke, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T1[(t[i] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[t[(i + 3) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Ke, \"f\")[rounds][i];\n result[4 * i] = (S[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n decrypt(ciphertext) {\n if (ciphertext.length != 16) {\n throw new TypeError('invalid ciphertext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Kd, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(ciphertext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Kd, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T5[(t[i] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[t[(i + 1) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds][i];\n result[4 * i] = (Si[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n}\n_AES_key = new WeakMap(), _AES_Kd = new WeakMap(), _AES_Ke = new WeakMap();\n//# sourceMappingURL=aes.js.map","import { AES } from \"./aes.js\";\nexport class ModeOfOperation {\n constructor(name, key, cls) {\n if (cls && !(this instanceof cls)) {\n throw new Error(`${name} must be instantiated with \"new\"`);\n }\n Object.defineProperties(this, {\n aes: { enumerable: true, value: new AES(key) },\n name: { enumerable: true, value: name }\n });\n }\n}\n//# sourceMappingURL=mode.js.map","// Cipher Block Chaining\nvar __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 _CBC_iv, _CBC_lastBlock;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CBC extends ModeOfOperation {\n constructor(key, iv) {\n super(\"ECC\", key, CBC);\n _CBC_iv.set(this, void 0);\n _CBC_lastBlock.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CBC_iv, \"f\")); }\n encrypt(plaintext) {\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext.length);\n for (let i = 0; i < plaintext.length; i += 16) {\n for (let j = 0; j < 16; j++) {\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] ^= plaintext[i + j];\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.aes.encrypt(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\")), \"f\");\n ciphertext.set(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\"), i);\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n const plaintext = new Uint8Array(ciphertext.length);\n for (let i = 0; i < ciphertext.length; i += 16) {\n const block = this.aes.decrypt(ciphertext.subarray(i, i + 16));\n for (let j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j];\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] = ciphertext[i + j];\n }\n }\n return plaintext;\n }\n}\n_CBC_iv = new WeakMap(), _CBC_lastBlock = new WeakMap();\n//# sourceMappingURL=mode-cbc.js.map","// Cipher Feedback\nvar __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 _CFB_instances, _CFB_iv, _CFB_shiftRegister, _CFB_shift;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CFB extends ModeOfOperation {\n constructor(key, iv, segmentSize = 8) {\n super(\"CFB\", key, CFB);\n _CFB_instances.add(this);\n _CFB_iv.set(this, void 0);\n _CFB_shiftRegister.set(this, void 0);\n // This library currently only handles byte-aligned segmentSize\n if (!Number.isInteger(segmentSize) || (segmentSize % 8)) {\n throw new TypeError(\"invalid segmentSize\");\n }\n Object.defineProperties(this, {\n segmentSize: { enumerable: true, value: segmentSize }\n });\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CFB_shiftRegister, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CFB_iv, \"f\")); }\n encrypt(plaintext) {\n if (8 * plaintext.length % this.segmentSize) {\n throw new TypeError(\"invalid plaintext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n ciphertext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (8 * ciphertext.length % this.segmentSize) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const plaintext = new Uint8Array(ciphertext);\n for (let i = 0; i < plaintext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return plaintext;\n }\n}\n_CFB_iv = new WeakMap(), _CFB_shiftRegister = new WeakMap(), _CFB_instances = new WeakSet(), _CFB_shift = function _CFB_shift(data) {\n const segmentSize = this.segmentSize / 8;\n // Shift the register\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").subarray(segmentSize));\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(data.subarray(0, segmentSize), 16 - segmentSize);\n};\n//# sourceMappingURL=mode-cfb.js.map","// Counter Mode\nvar __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 _CTR_remaining, _CTR_remainingIndex, _CTR_counter;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CTR extends ModeOfOperation {\n constructor(key, initialValue) {\n super(\"CTR\", key, CTR);\n // Remaining bytes for the one-time pad\n _CTR_remaining.set(this, void 0);\n _CTR_remainingIndex.set(this, void 0);\n // The current counter\n _CTR_counter.set(this, void 0);\n __classPrivateFieldSet(this, _CTR_counter, new Uint8Array(16), \"f\");\n __classPrivateFieldGet(this, _CTR_counter, \"f\").fill(0);\n __classPrivateFieldSet(this, _CTR_remaining, __classPrivateFieldGet(this, _CTR_counter, \"f\"), \"f\"); // This will be discarded immediately\n __classPrivateFieldSet(this, _CTR_remainingIndex, 16, \"f\");\n if (initialValue == null) {\n initialValue = 1;\n }\n if (typeof (initialValue) === \"number\") {\n this.setCounterValue(initialValue);\n }\n else {\n this.setCounterBytes(initialValue);\n }\n }\n get counter() { return new Uint8Array(__classPrivateFieldGet(this, _CTR_counter, \"f\")); }\n setCounterValue(value) {\n if (!Number.isInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) {\n throw new TypeError(\"invalid counter initial integer value\");\n }\n for (let index = 15; index >= 0; --index) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[index] = value % 256;\n value = Math.floor(value / 256);\n }\n }\n setCounterBytes(value) {\n if (value.length !== 16) {\n throw new TypeError(\"invalid counter initial Uint8Array value length\");\n }\n __classPrivateFieldGet(this, _CTR_counter, \"f\").set(value);\n }\n increment() {\n for (let i = 15; i >= 0; i--) {\n if (__classPrivateFieldGet(this, _CTR_counter, \"f\")[i] === 255) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i] = 0;\n }\n else {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i]++;\n break;\n }\n }\n }\n encrypt(plaintext) {\n var _a, _b;\n const crypttext = new Uint8Array(plaintext);\n for (let i = 0; i < crypttext.length; i++) {\n if (__classPrivateFieldGet(this, _CTR_remainingIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _CTR_remaining, this.aes.encrypt(__classPrivateFieldGet(this, _CTR_counter, \"f\")), \"f\");\n __classPrivateFieldSet(this, _CTR_remainingIndex, 0, \"f\");\n this.increment();\n }\n crypttext[i] ^= __classPrivateFieldGet(this, _CTR_remaining, \"f\")[__classPrivateFieldSet(this, _CTR_remainingIndex, (_b = __classPrivateFieldGet(this, _CTR_remainingIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return crypttext;\n }\n decrypt(ciphertext) {\n return this.encrypt(ciphertext);\n }\n}\n_CTR_remaining = new WeakMap(), _CTR_remainingIndex = new WeakMap(), _CTR_counter = new WeakMap();\n//# sourceMappingURL=mode-ctr.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from '@ethersproject/strings';\nimport { logger } from \"./logger.js\";\nexport function looseArrayify(hexString) {\n if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\n hexString = '0x' + hexString;\n }\n return arrayify(hexString);\n}\nexport function zpad(value, length) {\n value = String(value);\n while (value.length < length) {\n value = '0' + value;\n }\n return value;\n}\nexport function getPassword(password) {\n if (typeof (password) === 'string') {\n return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC);\n }\n return arrayify(password);\n}\nexport function spelunk(object, _path) {\n const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i);\n if (match == null) {\n return logger.throwArgumentError(\"invalid path\", \"path\", _path);\n }\n const path = match[1];\n const type = match[3];\n const reqd = (match[4] === \"!\");\n let cur = object;\n for (const comp of path.toLowerCase().split('.')) {\n // Search for a child object with a case-insensitive matching key\n if (Array.isArray(cur)) {\n if (!comp.match(/^[0-9]+$/)) {\n break;\n }\n cur = cur[parseInt(comp)];\n }\n else if (typeof (cur) === \"object\") {\n let found = null;\n for (const key in cur) {\n if (key.toLowerCase() === comp) {\n found = cur[key];\n break;\n }\n }\n cur = found;\n }\n else {\n cur = null;\n }\n if (cur == null) {\n break;\n }\n }\n if (reqd && cur == null) {\n logger.throwArgumentError(\"missing required value\", \"path\", path);\n }\n if (type && cur != null) {\n if (type === \"int\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9]+$/)) {\n return parseInt(cur);\n }\n else if (Number.isSafeInteger(cur)) {\n return cur;\n }\n }\n if (type === \"number\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9.]*$/)) {\n return parseFloat(cur);\n }\n }\n if (type === \"data\") {\n if (typeof (cur) === \"string\") {\n return looseArrayify(cur);\n }\n }\n if (type === \"array\" && Array.isArray(cur)) {\n return cur;\n }\n if (type === typeof (cur)) {\n return cur;\n }\n logger.throwArgumentError(`wrong type found for ${type} `, \"path\", path);\n }\n return cur;\n}\n/*\nexport function follow(object: any, path: string): null | string {\n let currentChild = object;\n\n for (const comp of path.toLowerCase().split('/')) {\n\n // Search for a child object with a case-insensitive matching key\n let matchingChild = null;\n for (const key in currentChild) {\n if (key.toLowerCase() === comp) {\n matchingChild = currentChild[key];\n break;\n }\n }\n\n if (matchingChild === null) { return null; }\n\n currentChild = matchingChild;\n }\n\n return currentChild;\n}\n\n// \"path/to/something:type!\"\nexport function followRequired(data: any, path: string): string {\n const value = follow(data, path);\n if (value != null) { return value; }\n return logger.throwArgumentError(\"invalid value\", `data:${ path }`,\n JSON.stringify(data));\n}\n*/\n// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\nexport function uuidV4(randomBytes) {\n const bytes = logger.getBytes(randomBytes, \"randomBytes\");\n // Section: 4.1.3:\n // - time_hi_and_version[12:16] = 0b0100\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n // Section 4.4\n // - clock_seq_hi_and_reserved[6] = 0b0\n // - clock_seq_hi_and_reserved[7] = 0b1\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const value = hexlify(bytes);\n return [\n value.substring(2, 10),\n value.substring(10, 14),\n value.substring(14, 18),\n value.substring(18, 22),\n value.substring(22, 34),\n ].join(\"-\");\n}\n//# sourceMappingURL=utils.js.map","import { CBC, pkcs7Strip } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { pbkdf2 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, looseArrayify, spelunk } from \"./utils.js\";\nexport function isCrowdsaleJson(json) {\n try {\n const data = JSON.parse(json);\n if (data.encseed) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\n// See: https://github.com/ethereum/pyethsaletool\nexport function decryptCrowdsaleJson(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n // Ethereum Address\n const address = getAddress(spelunk(data, \"ethaddr:string!\"));\n // Encrypted Seed\n const encseed = looseArrayify(spelunk(data, \"encseed:string!\"));\n if (!encseed || (encseed.length % 16) !== 0) {\n logger.throwArgumentError(\"invalid encseed\", \"json\", json);\n }\n const key = arrayify(pbkdf2(password, password, 2000, 32, \"sha256\")).slice(0, 16);\n const iv = encseed.slice(0, 16);\n const encryptedSeed = encseed.slice(16);\n // Decrypt the seed\n const aesCbc = new CBC(key, iv);\n const seed = pkcs7Strip(arrayify(aesCbc.decrypt(encryptedSeed)));\n // This wallet format is weird... Convert the binary encoded hex to a string.\n let seedHex = \"\";\n for (let i = 0; i < seed.length; i++) {\n seedHex += String.fromCharCode(seed[i]);\n }\n return { address, privateKey: id(seedHex) };\n}\n//# sourceMappingURL=json-crowdsale.js.map","export function pkcs7Pad(data) {\n const padder = 16 - (data.length % 16);\n const result = new Uint8Array(data.length + padder);\n result.set(data);\n for (let i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n}\nexport function pkcs7Strip(data) {\n if (data.length < 16) {\n throw new TypeError('PKCS#7 invalid length');\n }\n const padder = data[data.length - 1];\n if (padder > 16) {\n throw new TypeError('PKCS#7 padding byte out of range');\n }\n const length = data.length - padder;\n for (let i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new TypeError('PKCS#7 invalid padding byte');\n }\n }\n return new Uint8Array(data.subarray(0, length));\n}\n//# sourceMappingURL=padding.js.map","// Output Feedback\nvar __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 _OFB_iv, _OFB_lastPrecipher, _OFB_lastPrecipherIndex;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class OFB extends ModeOfOperation {\n constructor(key, iv) {\n super(\"OFB\", key, OFB);\n _OFB_iv.set(this, void 0);\n _OFB_lastPrecipher.set(this, void 0);\n _OFB_lastPrecipherIndex.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.iv, \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 16, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _OFB_iv, \"f\")); }\n encrypt(plaintext) {\n var _a, _b;\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i++) {\n if (__classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.aes.encrypt(__classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")), \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 0, \"f\");\n }\n ciphertext[i] ^= __classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")[__classPrivateFieldSet(this, _OFB_lastPrecipherIndex, (_b = __classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n return this.encrypt(ciphertext);\n }\n}\n_OFB_iv = new WeakMap(), _OFB_lastPrecipher = new WeakMap(), _OFB_lastPrecipherIndex = new WeakMap();\n//# sourceMappingURL=mode-ofb.js.map","import { CTR } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256, pbkdf2, randomBytes, scrypt, scryptSync } from \"@ethersproject/crypto\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, spelunk, uuidV4, zpad } from \"./utils.js\";\nimport { version } from \"./_version.js\";\nconst defaultPath = \"m/44'/60'/0'/0/0\";\nexport function isKeystoreJson(json) {\n try {\n const data = JSON.parse(json);\n const version = ((data.version != null) ? parseInt(data.version) : 0);\n if (version === 3) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\nfunction decrypt(data, key, ciphertext) {\n const cipher = spelunk(data, \"crypto.cipher:string\");\n if (cipher === \"aes-128-ctr\") {\n const iv = spelunk(data, \"crypto.cipherparams.iv:data!\");\n const aesCtr = new CTR(key, iv);\n return hexlify(aesCtr.decrypt(ciphertext));\n }\n return logger.throwError(\"unsupported cipher\", \"UNSUPPORTED_OPERATION\", {\n operation: \"decrypt\"\n });\n}\nfunction getAccount(data, _key) {\n const key = logger.getBytes(_key);\n const ciphertext = spelunk(data, \"crypto.ciphertext:data!\");\n const computedMAC = hexlify(keccak256(concat([key.slice(16, 32), ciphertext]))).substring(2);\n if (computedMAC !== spelunk(data, \"crypto.mac:string!\").toLowerCase()) {\n return logger.throwArgumentError(\"incorrect password\", \"password\", \"[ REDACTED ]\");\n }\n const privateKey = decrypt(data, key.slice(0, 16), ciphertext);\n const address = computeAddress(privateKey);\n if (data.address) {\n let check = data.address.toLowerCase();\n if (check.substring(0, 2) !== \"0x\") {\n check = \"0x\" + check;\n }\n if (getAddress(check) !== address) {\n logger.throwArgumentError(\"keystore address/privateKey mismatch\", \"address\", data.address);\n }\n }\n const account = { address, privateKey };\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n const version = spelunk(data, \"x-ethers.version:string\");\n if (version === \"0.1\") {\n const mnemonicKey = key.slice(32, 64);\n const mnemonicCiphertext = spelunk(data, \"x-ethers.mnemonicCiphertext:data!\");\n const mnemonicIv = spelunk(data, \"x-ethers.mnemonicCounter:data!\");\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n account.mnemonic = {\n path: (spelunk(data, \"x-ethers.path:string\") || defaultPath),\n locale: (spelunk(data, \"x-ethers.locale:string\") || \"en\"),\n entropy: hexlify(arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext)))\n };\n }\n return account;\n}\nfunction getKdfParams(data) {\n const kdf = spelunk(data, \"crypto.kdf:string\");\n if (kdf && typeof (kdf) === \"string\") {\n const throwError = function (name, value) {\n return logger.throwArgumentError(\"invalid key-derivation function parameters\", name, value);\n };\n if (kdf.toLowerCase() === \"scrypt\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const N = spelunk(data, \"crypto.kdfparams.n:int!\");\n const r = spelunk(data, \"crypto.kdfparams.r:int!\");\n const p = spelunk(data, \"crypto.kdfparams.p:int!\");\n // Check for all required parameters\n if (!N || !r || !p) {\n return throwError(\"kdf\", kdf);\n }\n // Make sure N is a power of 2\n if ((N & (N - 1)) !== 0) {\n return throwError(\"N\", N);\n }\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n return throwError(\"dklen\", dkLen);\n }\n return { name: \"scrypt\", salt, N, r, p, dkLen: 64 };\n }\n else if (kdf.toLowerCase() === \"pbkdf2\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const prf = spelunk(data, \"crypto.kdfparams.prf:string!\");\n const algorithm = prf.split(\"-\").pop();\n if (algorithm !== \"sha256\" && algorithm !== \"sha512\") {\n return throwError(\"prf\", prf);\n }\n const count = spelunk(data, \"crypto.kdfparams.c:int!\");\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n throwError(\"dklen\", dkLen);\n }\n return { name: \"pbkdf2\", salt, count, dkLen, algorithm };\n }\n }\n return logger.throwArgumentError(\"unsupported key-derivation function\", \"kdf\", kdf);\n}\nexport function decryptKeystoreJsonSync(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = scryptSync(password, salt, N, r, p, dkLen);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport async function decryptKeystoreJson(json, _password, progress) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n if (progress) {\n progress(0);\n await stall(0);\n }\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n if (progress) {\n progress(1);\n await stall(0);\n }\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = await scrypt(password, salt, N, r, p, dkLen, progress);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nexport async function encryptKeystoreJson(account, password, options, progressCallback) {\n // Check the address matches the private key\n //if (getAddress(account.address) !== computeAddress(account.privateKey)) {\n // throw new Error(\"address/privateKey mismatch\");\n //}\n // Check the mnemonic (if any) matches the private key\n /*\n if (hasMnemonic(account)) {\n const mnemonic = account.mnemonic;\n const node = HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || defaultPath);\n\n if (node.privateKey != account.privateKey) {\n throw new Error(\"mnemonic mismatch\");\n }\n }\n */\n // The options are optional, so adjust the call as needed\n if (typeof (options) === \"function\" && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n if (!options) {\n options = {};\n }\n const privateKey = logger.getBytes(account.privateKey, \"privateKey\");\n const passwordBytes = getPassword(password);\n /*\n let mnemonic: null | Mnemonic = null;\n let entropy: Uint8Array = null\n let path: string = null;\n let locale: string = null;\n if (hasMnemonic(account)) {\n const srcMnemonic = account.mnemonic;\n entropy = arrayify(mnemonicToEntropy(srcMnemonic.phrase, srcMnemonic.locale || \"en\"));\n path = srcMnemonic.path || defaultPath;\n locale = srcMnemonic.locale || \"en\";\n mnemonic = Mnemonic.from(\n }\n */\n // Check/generate the salt\n const salt = (options.salt != null) ? logger.getBytes(options.salt, \"options.slat\") : randomBytes(32);\n // Override initialization vector\n const iv = (options.iv != null) ? logger.getBytes(options.iv, \"options.iv\") : randomBytes(16);\n if (iv.length !== 16) {\n logger.throwArgumentError(\"invalid options.iv\", \"options.iv\", options.iv);\n }\n // Override the uuid\n const uuidRandom = (options.uuid != null) ? logger.getBytes(options.uuid, \"options.uuid\") : randomBytes(16);\n if (uuidRandom.length !== 16) {\n logger.throwArgumentError(\"invalid options.uuid\", \"options.uuid\", options.iv);\n }\n if (uuidRandom.length !== 16) {\n throw new Error(\"invalid uuid\");\n }\n // Override the scrypt password-based key derivation function parameters\n let N = (1 << 17), r = 8, p = 1;\n if (options.scrypt) {\n if (options.scrypt.N) {\n N = options.scrypt.N;\n }\n if (options.scrypt.r) {\n r = options.scrypt.r;\n }\n if (options.scrypt.p) {\n p = options.scrypt.p;\n }\n }\n // We take 64 bytes:\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n const _key = await scrypt(passwordBytes, salt, N, r, p, 64, progressCallback);\n const key = arrayify(_key);\n // This will be used to encrypt the wallet (as per Web3 secret storage)\n const derivedKey = key.slice(0, 16);\n const macPrefix = key.slice(16, 32);\n // Encrypt the private key\n const aesCtr = new CTR(derivedKey, iv);\n const ciphertext = arrayify(aesCtr.encrypt(privateKey));\n // Compute the message authentication code, used to check the password\n const mac = keccak256(concat([macPrefix, ciphertext]));\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n const data = {\n address: account.address.substring(2).toLowerCase(),\n id: uuidV4(uuidRandom),\n version: 3,\n Crypto: {\n cipher: \"aes-128-ctr\",\n cipherparams: {\n iv: hexlify(iv).substring(2),\n },\n ciphertext: hexlify(ciphertext).substring(2),\n kdf: \"scrypt\",\n kdfparams: {\n salt: hexlify(salt).substring(2),\n n: N,\n dklen: 32,\n p: p,\n r: r\n },\n mac: mac.substring(2)\n }\n };\n // If we have a mnemonic, encrypt it into the JSON wallet\n if (account.mnemonic) {\n const client = (options.client != null) ? options.client : `ethers/${version}`;\n const path = account.mnemonic.path || defaultPath;\n const locale = account.mnemonic.locale || \"en\";\n const mnemonicKey = key.slice(32, 64);\n const entropy = logger.getBytes(account.mnemonic.entropy, \"account.mnemonic.entropy\");\n const mnemonicIv = randomBytes(16);\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n const mnemonicCiphertext = arrayify(mnemonicAesCtr.encrypt(entropy));\n const now = new Date();\n const timestamp = (now.getUTCFullYear() + \"-\" +\n zpad(now.getUTCMonth() + 1, 2) + \"-\" +\n zpad(now.getUTCDate(), 2) + \"T\" +\n zpad(now.getUTCHours(), 2) + \"-\" +\n zpad(now.getUTCMinutes(), 2) + \"-\" +\n zpad(now.getUTCSeconds(), 2) + \".0Z\");\n const gethFilename = (\"UTC--\" + timestamp + \"--\" + data.address);\n data[\"x-ethers\"] = {\n client, gethFilename, path, locale,\n mnemonicCounter: hexlify(mnemonicIv).substring(2),\n mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2),\n version: \"0.1\"\n };\n }\n return JSON.stringify(data);\n}\n//# sourceMappingURL=json-keystore.js.map","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 _Wallet_mnemonic;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { randomBytes } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { computeAddress } from \"./address.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nimport { HDNodeWallet } from \"./hdwallet.js\";\nimport { decryptCrowdsaleJson, isCrowdsaleJson } from \"./json-crowdsale.js\";\nimport { decryptKeystoreJson, decryptKeystoreJsonSync, isKeystoreJson } from \"./json-keystore.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nfunction tryWallet(value) {\n try {\n if (!value || !value.signingKey) {\n return null;\n }\n const key = trySigningKey(value.signingKey);\n if (key == null || computeAddress(key.publicKey) !== value.address) {\n return null;\n }\n if (value.mnemonic) {\n const wallet = HDNodeWallet.fromMnemonic(value.mnemonic);\n if (wallet.privateKey !== key.privateKey) {\n return null;\n }\n }\n return value;\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\n// Try using value as mnemonic to derive the defaultPath HDodeWallet\nfunction tryMnemonic(value) {\n try {\n if (value == null || typeof (value.phrase) !== \"string\" ||\n typeof (value.password) !== \"string\" ||\n value.wordlist == null) {\n return null;\n }\n return HDNodeWallet.fromPhrase(value.phrase, value.password, null, value.wordlist);\n }\n catch (error) {\n console.log(error);\n }\n return null;\n}\nfunction trySigningKey(value) {\n try {\n if (!value || !isHexString(value.privateKey, 32)) {\n return null;\n }\n const key = value.privateKey;\n if (SigningKey.computePublicKey(key) !== value.publicKey) {\n return null;\n }\n return new SigningKey(key);\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport class Wallet extends BaseWallet {\n constructor(key, provider) {\n let signingKey = null;\n let mnemonic = null;\n // A normal private key\n if (typeof (key) === \"string\") {\n signingKey = new SigningKey(key);\n }\n // Try Wallet\n if (signingKey == null) {\n const wallet = tryWallet(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // Try Mnemonic, with the defaultPath wallet\n if (signingKey == null) {\n const wallet = tryMnemonic(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // A signing key\n if (signingKey == null) {\n signingKey = trySigningKey(key);\n }\n if (signingKey == null) {\n logger.throwArgumentError(\"invalid key\", \"key\", \"[ REDACTED ]\");\n }\n super(signingKey, provider);\n _Wallet_mnemonic.set(this, void 0);\n __classPrivateFieldSet(this, _Wallet_mnemonic, mnemonic, \"f\");\n }\n // Store this in a getter to reduce visibility in console.log\n get mnemonic() { return __classPrivateFieldGet(this, _Wallet_mnemonic, \"f\"); }\n connect(provider) {\n return new Wallet(this, provider);\n }\n async encrypt(password, options, progressCallback) {\n throw new Error(\"TODO\");\n }\n encryptSync(password, options) {\n throw new Error(\"TODO\");\n }\n static async fromEncryptedJson(json, password, progress) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = await decryptKeystoreJson(json, password, progress);\n }\n else if (isCrowdsaleJson(json)) {\n if (progress) {\n progress(0);\n await stall(0);\n }\n account = decryptCrowdsaleJson(json, password);\n if (progress) {\n progress(1);\n await stall(0);\n }\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static fromEncryptedJsonSync(json, password) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = decryptKeystoreJsonSync(json, password);\n }\n else if (isCrowdsaleJson(json)) {\n account = decryptCrowdsaleJson(json, password);\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static createRandom(provider, password, wordlist) {\n return new Wallet(Mnemonic.fromEntropy(randomBytes(16), password, wordlist), provider);\n }\n static fromMnemonic(mnemonic, provider) {\n return new Wallet(mnemonic, provider);\n }\n static fromPhrase(phrase, provider, password = \"\", wordlist) {\n return new Wallet(Mnemonic.fromPhrase(phrase, password, wordlist), provider);\n }\n}\n_Wallet_mnemonic = new WeakMap();\n//# sourceMappingURL=wallet.js.map","export const version = \"ethers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map"],"names":["async","resolveProperties","value","keys","Object","Promise","all","map","k","resolve","reduce","accum","v","index","checkType","type","types","split","t","trim","i","length","Error","defineProperties","target","values","defaults","key","fallback","undefined","defineProperty","enumerable","writable","_EventPayload_listener","__classPrivateFieldSet","this","receiver","state","kind","f","TypeError","has","call","set","__classPrivateFieldGet","get","EventPayload","constructor","emitter","listener","filter","off","getStore","store","setStore","isFrozen","isError","error","code","isCallException","WeakMap","_Logger_instances","_Logger_assertIntRange","_Logger_getBytes","_Logger_log","LogLevel","LogLevels","debug","default","info","warning","_logLevel","_globalLogger","_normalizeForms","form","normalize","check","String","fromCharCode","push","defineReadOnly","object","name","maxValue","ErrorConstructors","INVALID_ARGUMENT","NUMERIC_FAULT","RangeError","BUFFER_OVERRUN","Logger","version","add","makeError","message","details","JSON","stringify","join","throwError","throwArgumentError","argument","assert","condition","assertArgument","assertIntegerArgument","lower","upper","Number","isInteger","assertSafeUint53","operation","fault","assertNormalize","indexOf","assertPrivate","givenGuard","guard","className","method","assertArgumentCount","count","expectedCount","assertInt53","assertUint53","assertInteger","min","max","getBytes","getBytesCopy","getNumber","BigInt","e","getBigInt","args","DEBUG","INFO","warn","WARNING","static","logLevel","level","toLowerCase","globalLogger","WeakSet","minValue","isNaN","Math","floor","copy","Uint8Array","match","result","offset","parseInt","substring","console","log","apply","logger","_TokenString_instances","_TokenString_offset","_TokenString_tokens","_TokenString_subTokenString","_ParamType_instances","_ParamType_walkAsync","FormatType","setify","items","Set","forEach","freeze","_kwVisib","KwVisib","_kwTypes","KwTypes","_kwModifiers","KwModifiers","Keywords","SimpleTokens","regexWhitespace","RegExp","regexNumber","regexIdentifier","regexType","TokenString","tokens","slice","clone","reset","popKeyword","allowed","top","peek","text","pop","popType","popParen","popParams","link","linkNext","peekKeyword","peekType","_a","toString","token","lex","brackets","commas","cur","depth","linkBack","suffix","allowSingle","included","consumeName","keyword","consumeKeywords","keywords","consumeParams","allowIndexed","ParamType","fromTokens","consumeGas","consumeEoi","from","to","assign","regexArrayType","verifyBasicType","size","_guard","internal","Symbol","for","baseType","indexed","components","arrayLength","arrayChildren","format","sighash","json","isTuple","c","parse","isArray","comp","full","isIndexable","walk","process","Array","promises","obj","isParamType","arrayMatch","comps","bracket","FragmentType","setValue","childType","param","then","Fragment","inputs","fromString","fromObject","ConstructorFragment","ErrorFragment","EventFragment","FunctionFragment","StructFragment","NamedFragment","super","joinParams","params","p","input","anonymous","event","payable","gas","stateMutability","outputs","function","constant","o","mutability","modifiers","consumeMutability","struct","BN_0","toBigInt","_value","toNumber","toHex","_width","width","toArray","hex","BN_1","fromTwos","toTwos","mask","_bits","bits","_FixedNumber_instances","_FixedNumber_value","_FixedNumber_checkFormat","_constructorGuard","NegativeOne","throwFault","zeros","getMultiplier","decimals","formatFixed","_decimals","multiplier","multiplierStr","negative","fraction","parseFixed","whole","wei","FixedFormat","constructorGuard","signed","_multiplier","defaultValue","FixedNumber","_isFixedNumber","addUnsafe","other","a","b","fromValue","subUnsafe","mulUnsafe","divUnsafe","hasFraction","isNegative","ONE","toFormat","ceiling","round","factor","bump","BUMP","isZero","toHexString","toUnsafeFloat","parseFloat","fixedFormat","numeric","decimal","fromBytes","Alphabet","Lookup","getAlpha","letter","BN_58","encodeBase58","decodeBase58","isHexString","isBytesLike","BN_8","BN_255","arrayify","data","unshift","_noCopyArrayify","decodeBase64","textData","Buffer","encodeBase64","hexlify","bytes","quantity","concat","datas","d","dataLength","dataSlice","start","end","buffer","stripZerosLeft","zeroPad","left","fill","zeroPadLeft","zeroPadRight","_Result_instances","_Result_indices","_Result_throwError","_Writer_instances","_Writer_data","_Writer_dataLength","_Writer_writeData","_Reader_instances","_Reader_data","_Reader_offset","_Reader_coerceFunc","_Reader_peekBytes","Padding","passProperties","Result","Map","Proxy","prop","item","Reflect","getValue","wrapped","Coder","localName","dynamic","_throwError","Writer","appendWriter","writer","writeBytes","paddingOffset","writeValue","writeUpdatableValue","Reader","coerceFunc","allowLoose","coerce","consumed","subReader","readBytes","loose","readValue","readIndex","alignedLength","ceil","u32","arr","Uint32Array","byteOffset","byteLength","createView","DataView","rotr","word","shift","padStart","nextTick","nodeRequire","module","require","bind","setImmediate","setTimeout","asyncLoop","iters","tick","cb","ts","Date","now","diff","toBytes","str","TextEncoder","encode","utf8ToBytes","assertNumber","n","isSafeInteger","assertHash","hash","create","outputLen","blockLen","Hash","_cloneInto","checkOpts","def","_opts","prototype","wrapConstructor","hashConstructor","hashC","update","digest","tmp","HMAC","_key","finished","destroyed","iHash","pad","oHash","buf","digestInto","out","destroy","getPrototypeOf","hmac","pbkdf2","password","salt","opts","dkLen","DK","PRF","PRFSalt","_password","_salt","asyncTick","pbkdf2Init","prfW","view","u","ti","pos","Ti","subarray","setInt32","ui","pbkdf2Output","SHA2","padOffset","isLE","len","take","dataView","roundClean","setBigUint64","_32n","_u32_max","wh","wl","h","l","setUint32","oview","res","Chi","Maj","SHA256_K","IV","SHA256_W","SHA256","A","B","C","D","E","F","G","H","getUint32","W15","W2","s0","s1","T1","T2","sha256","U32_MASK64","fromBig","le","lst","Ah","Al","shrSH","s","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5L","El","add5H","Eh","SHA512_Kh","SHA512_Kl","u64.split","SHA512_W_H","SHA512_W_L","SHA512","Fh","Fl","Gh","Gl","Hh","Hl","W15h","W15l","s0h","u64.rotrSH","u64.shrSH","s0l","u64.rotrSL","u64.shrSL","W2h","W2l","s1h","u64.rotrBH","s1l","u64.rotrBL","SUMl","u64.add4L","SUMh","u64.add4H","sigma1h","sigma1l","CHIh","T1ll","u64.add5L","T1h","u64.add5H","T1l","sigma0h","sigma0l","MAJh","MAJl","u64.add","All","u64.add3L","u64.add3H","SHA512_256","SHA384","sha512","anyGlobal","self","window","global","getGlobal","crypto","msCrypto","createHash","algo","locked","_computeHmac","algorithm","_algo","createHmac","__computeHmac","computeHmac","_data","_","lock","register","func","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_0n","_1n","_2n","_7n","_256n","_0x71n","R","x","y","j","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","u64.rotlBH","u64.rotlSH","rotlL","u64.rotlBL","u64.rotlSL","Keccak","enableXOF","rounds","posOut","state32","keccak","idx1","idx0","B0","B1","Th","Tl","curH","curL","PI","keccakP","finish","writeInto","xofInto","xof","gen","keccak_256","genShake","hashCons","msg","wrapConstructorWithOpts","_keccak256","__keccak256","keccak256","Rho","Id","Pi","idxL","idxR","shifts","shiftsL","idx","shiftsR","Kl","Kr","rotl","group","z","BUF","RIPEMD160","h0","h1","h2","h3","h4","al","ar","bl","br","cl","cr","dl","dr","el","er","rGroup","hbl","hbr","rl","rr","sl","sr","tl","tr","ripemd160","_ripemd160","noble_ripemd160","__ripemd160","_pbkdf2","iterations","keylen","pbkdf2Sync","__pbkdf2","_randomBytes","getRandomValues","crypto_random","__randomBytes","randomBytes","XorAndSalsa","prev","pi","ii","oi","y00","y01","y02","y03","y04","y05","y06","y07","y08","y09","y10","y11","y12","y13","y14","y15","x00","x01","x02","x03","x04","x05","x06","x07","x08","x09","x10","x11","x12","x13","x14","x15","BlockMix","r","head","tail","scryptInit","maxmem","N","onProgress","blockSize","blockSize32","memUsed","B32","V","blockMixCb","totalBlockMix","callbackPer","blockMixCnt","scryptOutput","lockedSync","lockedAsync","_scryptAsync","passwd","_nobleAsync","_scryptSync","_nobleSync","__scryptAsync","__scryptSync","scrypt","_passwd","progress","scryptSync","_sha256","_sha512","__sha256","__sha512","locked256","locked512","BN_36","getChecksumAddress","address","chars","expanded","charCodeAt","hashed","toUpperCase","ibanLookup","ibanChecksum","block","checksum","Base36","getAddress","fromBase36","getIcapAddress","base36","arrayifyInteger","_encode","payload","child","encodeRlp","hexlifyByte","unarrayifyInteger","_decodeChildren","childOffset","decoded","_decode","checkOffset","lengthLength","decodeRlp","getCreateAddress","tx","nonceHex","nonce","getCreate2Address","_from","_initCodeHash","initCodeHash","isAddressable","isAddress","resolveAddress","resolver","resolveName","_Typed_options","_gaurd","Typed","_typedSymbol","gaurd","options","isBigInt","isData","isString","tupleName","isTyped","AddressCoder","dereference","decode","reader","AnonymousCoder","coder","pack","coders","arrayValues","unique","staticWriter","dynamicWriter","updateFuncs","dynamicOffset","updateFunc","baseOffset","unpack","baseReader","offsetReader","fromItems","ArrayCoder","defaultChild","BooleanCoder","DynamicBytesCoder","BytesCoder","FixedBytesCoder","Empty","NullCoder","BN_MAX_UINT256","NumberCoder","maxUintValue","WordSize","bounds","UnicodeNormalizationForm","Utf8ErrorReason","ignoreFunc","reason","output","badCodepoint","BAD_PREFIX","UNEXPECTED_CONTINUE","OVERRUN","Utf8ErrorFuncs","ignore","replace","OVERLONG","getUtf8CodePoints","_bytes","onError","extraLength","overlongMask","nextChar","MISSING_CONTINUE","OUT_OF_RANGE","UTF16_SURROGATE","toUtf8Bytes","current","c2","pair","escapeChar","_toEscapedUtf8String","codePoint","_toUtf8String","codePoints","toUtf8String","toUtf8CodePoints","formatBytes32String","parseBytes32String","createTable","_func","lo","createRangeTable","hi","matchMap","ranges","range","Table_A_1_ranges","Table_B_1_flags","Table_B_2_ranges","Table_B_2_lut_abs","Table_B_2_lut_rel","Table_B_2_complex","Table_C_ranges","nameprep","codes","codesTableB2","codepoint","_nameprepTableB2","NFKC","StringCoder","TupleCoder","uniqueNames","_AbiCoder_instances","_AbiCoder_getCoder","paramTypeBytes","paramTypeNumber","defaultAbiCoder","getDefaultValue","id","Zeros","Partition","isValidName","namehash","partition","dnsEncode","messagePrefix","hashMessage","_TypedDataEncoder_instances","_TypedDataEncoder_types","_TypedDataEncoder_fullTypes","_TypedDataEncoder_encoderCache","_TypedDataEncoder_getEncoder","padding","BN__1","hexTrue","hexFalse","domainFieldTypes","chainId","verifyingContract","domainFieldNames","checkString","domainChecks","getBaseEncoder","boundsUpper","boundsLower","hexPadRight","encodeType","fields","TypedDataEncoder","links","parents","subtypes","field","primaryTypes","primaryType","checkCircular","found","subtype","delete","st","sort","getEncoder","encoder","encodeData","hashStruct","_visit","callback","visit","domain","domainFields","EIP712Domain","hashDomain","ensCache","domainValues","domainTypes","typesWithDomain","subEncoder","encodedType","_Interface_instances","_Interface_errors","_Interface_events","_Interface_functions","_Interface_abiCoder","_Interface_getFunction","_Interface_getEvent","LogDescription","fragment","topic","signature","TransactionDescription","selector","ErrorDescription","Indexed","_isIndexed","PanicReasons","BuiltinErrors","Interface","fragments","abi","getAbiCoder","bucket","deploy","getFunctionName","getFunction","getEventName","getEvent","getError","getSelector","matching","getEventTopic","_decodeParams","_encodeParams","encodeDeploy","decodeErrorResult","encodeErrorResult","decodeFunctionData","encodeFunctionData","decodeFunctionResult","errorArgs","errorName","errorSignature","builtin","transaction","encodeFunctionResult","functionFragment","encodeFilterTopics","eventFragment","topics","encodeTopic","encodeEventLog","dataTypes","dataValues","decodeEventLog","eventTopic","nonIndexed","resultIndexed","resultNonIndexed","nonIndexedIndex","indexedIndex","parseTransaction","parseLog","parseError","hexData","forceUnique","lastValue","valueLength","allowOptions","splice","lastArg","matchStr","m","_FetchResponse_props","_FetchResponse_error","FetchResponse","statusCode","statusMessage","headers","body","request","bodyText","response","bodyJson","iterator","next","done","makeServerError","throwThrottleError","stall","throttle","getHeader","hasBody","ok","assertOk","getUrl","req","timeout","protocol","url","credentials","allowInsecureAuthentication","init","Headers","resp","fetch","arrayBuffer","status","statusText","_FetchRequest_props","FetchRequest","allowInsecure","gzip","bodyType","allowGzip","setHeader","clearHeaders","setCredentials","username","redirect","location","delay","duration","getTime","lockGateways","fetchData","connection","conn","attempts","throttleLimit","slotInterval","throttleSlotInterval","retryFunc","throttleRetry","preflightRequest","processResponse","t0","retryAfter","trunc","random","pow","setGateway","gateway","setIpfsGateway","setArGateway","_EnsResolver_supports2544","_EnsResolver_getResolver","HashZero","parseBytes","parseString","numPad","padded","bytesPad","encodeBytes","byteCount","getIpfsLink","MulticoinProviderPlugin","validate","proivder","supportsCoinType","coinType","matcherIpfs","matchers","EnsResolver","provider","catch","parameters","addrData","enableCcipRead","supportsWildcard","_fetch","getNetwork","formatter","callAddress","coinPlugin","plugin","plugins","encodeAddress","keyBytes","calldata","hexBytes","ipfs","scheme","swarm","_getAvatar","linkage","avatar","getText","owner","addr","tokenId","tokenOwner","balance","metadataUrl","metadata","imageUrl","image","currentName","network","ensPlugin","getPlugin","_Signature_props","BN_2","BN_27","BN_28","BN_35","BN_MASK_255","Zero","Signature","networkV","legacyChainId","getChainId","vs","yParity","serialized","toJSON","_type","bv","_v","sig","getNormalizedV","_3n","_8n","POW_2_256","CURVE","P","Gx","Gy","beta","weistrass","x2","mod","x3","USE_ENDOMORPHISM","JacobianPoint","Point","points","toInv","nums","scratch","inverted","invert","acc","num","reduceRight","invertBatch","toAffine","toAffineBatch","fromAffine","equals","X1","Y1","Z1","X2","Y2","Z2","Z1Z1","Z2Z2","U1","U2","S1","S2","negate","double","X3","Y3","Z3","ZERO","HH","HHH","subtract","multiplyUnsafe","scalar","normalizeScalar","P0","k1neg","k1","k2neg","k2","splitScalarEndo","k1p","k2p","precomputeWindow","W","windows","base","wNAF","affinePoint","BASE","_WINDOW_SIZE","precomputes","pointPrecomputes","normalizeZ","windowSize","maxNumber","shiftBy","wbits","pr","cached","abs","multiply","point","fake","f1p","f2p","invZ","iz1","iz2","iz3","ax","ay","_setWindowSize","isShort","bytesToNumber","isValidFieldElement","_6n","_11n","_22n","_23n","_44n","_88n","b2","b3","b6","pow2","b9","b11","b22","b44","b88","b176","b220","b223","t1","t2","sqrtMod","isYOdd","assertValidity","ensureBytes","header","fromCompressedHex","fromUncompressedHex","privateKey","normalizePrivateKey","msgHash","recovery","delta","truncateHash","fromDER","fromCompact","normalizeSignature","prefix","fromHex","numTo32bStr","rinv","u1","u2","Q","multiplyAndAddUnsafe","toRawBytes","isCompressed","hexToBytes","toHexX","toRawX","aP","bQ","sum","sliceDER","parseDERInt","bytesToHex","isUint8a","hexToNumber","sBytes","rBytesLeft","parseDERSignature","isWithinCurveOrder","hasHighS","HALF","normalizeS","toDERRawBytes","toDERHex","sHex","numberToHexUnpadded","rHex","rLen","sLen","toCompactRawBytes","toCompactHex","concatBytes","arrays","every","hexes","uint8a","array","hexByte","byte","power","number","modulo","divNearest","POW_2_128","a1","b1","a2","c1","HmacDrbg","counter","utils","hmacSha256","hmacSync","hmacSha256Sync","incr","seed","reseedSync","generateSync","kmdToSig","kBytes","q","isPub","getSharedSecret","privateA","publicB","publicKey","bits2int","bits2octets","z1","z2","int2octets","signSync","privKey","extraEntropy","seedArgs","initSigArgs","drbg","recSig","canonical","der","recovered","finalizeSig","node","web","isValidPrivateKey","hashToPrivateKey","numTo32b","bytesLength","randomPrivateKey","subtle","messages","ckey","importKey","sign","sha256Sync","precompute","_SigningKey_privateKey","secp256k1.utils","SigningKey","computePublicKey","compressedPublicKey","sigDer","recid","secp256k1.signSync","secp256k1.Signature","computeShardSecret","pubKey","secp256k1.getSharedSecret","compressed","fromPrivateKey","secp256k1.getPublicKey","pub","secp256k1.Point","fromSignature","secp256k1.recoverPublicKey","p0","p1","pub0","pub1","accessSetify","storageKeys","storageKey","accessListify","localeCompare","_Transaction_props","formatNumber","formatAccessList","_serializeLegacy","gasPrice","gasLimit","legacy","getChainIdV","_serializeEip1559","maxPriorityFeePerGas","maxFeePerGas","accessList","_serializeEip2930","Transaction","typeName","unsignedHash","unsignedSerialized","fromPublicKey","isSigned","inferTypes","hasGasPrice","hasFee","hasAccessList","_parseEip1559","_Block_transactions","_TransactionReceipt_logs","toJson","FeeData","Block","dummyProvider","transactions","timestamp","parentHash","difficulty","gasUsed","miner","extraData","baseFeePerGas","date","getTransaction","isMined","isLondon","orphanedEvent","orphan","Log","transactionHash","blockHash","blockNumber","removed","transactionIndex","getBlock","getTransactionReceipt","removedEvent","TransactionReceipt","logs","contractAddress","logsBloom","cumulativeGasUsed","effectiveGasPrice","byzantium","root","fee","getBlockNumber","createRemovedTransactionFilter","reorderedEvent","createReorderedTransactionFilter","TransactionResponse","confirms","waitForTransaction","isLegacy","isBerlin","fail","blockTag","position","signedTx","blockHashOrBlockTag","_Formatter_format","_Formatter_baseBlock","Formatter","bigNumber","uint256","arrayOf","fromBlock","allowNull","toBlock","transactionRequest","transactionResponse","blockWithTransactions","fromTransaction","boolean","receipt","filterLog","allowFalsish","ifFalse","ifNull","_hexstring","dataOrLength","altNames","srcKey","altKey","nv","storageSlot","NetworkPlugin","GasCostPlugin","effectiveBlock","costs","props","nullish","EnsPlugin","targetNetwork","MaxPriorityFeePlugin","priorityFee","_Network_props","Networks","defaultFormatter","Network","_chainId","attachPlugin","getPlugins","basename","computeIntrinsicGas","txBase","txCreate","txDataZero","txDataNonzero","txAccessListAddress","txAccessListStorageKey","networkFunc","custom","ensAddress","ensNetwork","nameOrChainId","existing","_PollingBlockSubscriber_instances","_PollingBlockSubscriber_provider","_PollingBlockSubscriber_poller","_PollingBlockSubscriber_interval","_PollingBlockSubscriber_blockNumber","_PollingBlockSubscriber_poll","_OnBlockSubscriber_provider","_OnBlockSubscriber_poll","_PollingOrphanSubscriber_filter","_PollingTransactionSubscriber_hash","_PollingEventSubscriber_instances","_PollingEventSubscriber_provider","_PollingEventSubscriber_filter","_PollingEventSubscriber_poller","_PollingEventSubscriber_blockNumber","_PollingEventSubscriber_poll","PollingBlockSubscriber","pollingInterval","stop","clearTimeout","pause","dropWhilePaused","resume","emit","OnBlockSubscriber","_poll","on","PollingOrphanSubscriber","PollingTransactionSubscriber","PollingEventSubscriber","getLogs","_AbstractProvider_instances","_AbstractProvider_subs","_AbstractProvider_plugins","_AbstractProvider_pausedState","_AbstractProvider_networkPromise","_AbstractProvider_anyNetwork","_AbstractProvider_performCache","_AbstractProvider_nextTimer","_AbstractProvider_timers","_AbstractProvider_disableCcipRead","_AbstractProvider_perform","_AbstractProvider_call","_AbstractProvider_getBlock","_AbstractProvider_hasSub","_AbstractProvider_getSub","getTag","UnmanagedSubscriber","concisify","getSubscription","_event","tag","addresses","addAddress","AbstractProvider","_network","disableCcipRead","urls","sender","errorMessages","href","errorMessage","_wrapTransaction","_detectNetwork","detectNetwork","networkPromise","expected","actual","priorityFeePlugin","getPriorityFee","_request","_tx","_getTransaction","_getBlockTag","_address","_blockTag","_position","lookup","addBlockTag","_filter","_getFilter","_getProvider","fromName","getResolver","getAvatar","reject","timer","once","_clearTimeout","timerId","_setTimeout","_b","paused","time","_forEachSubscriber","sub","subscriber","_getSubscriber","_recoverSubscriber","oldSub","newSub","started","listeners","total","removeAllListeners","_parseString","_parseBytes","perform","_perform","attempt","txSender","ccipArgs","urlsOffset","urlsLength","urlsData","parseOffchainLookup","ccipResult","ccipReadFetch","includeTransactions","emitArgs","subscription","addressableMap","nameMap","empty","_AbstractSigner_instances","_AbstractSigner_checkProvider","_AbstractSigner_fromify","_VoidSigner_instances","_VoidSigner_throwUnsupported","_WrappedSigner_signer","AbstractSigner","getBalanceOf","getTransactionCountOf","estimateGas","getTransactionCount","txObj","populateTransaction","broadcastTransaction","signTransaction","actions","VoidSigner","connect","WrappedSigner","signer","sendTransaction","signMessage","signTypedData","shown","showThrottleMessage","service","_FilterIdSubscriber_instances","_FilterIdSubscriber_provider","_FilterIdSubscriber_filterIdPromise","_FilterIdSubscriber_poller","_FilterIdSubscriber_network","_FilterIdSubscriber_poll","_FilterIdSubscriber_teardown","_FilterIdEventSubscriber_event","FilterIdSubscriber","_subscribe","_emitResults","_recover","filterId","send","filterIdPromise","FilterIdEventSubscriber","results","FilterIdPendingSubscriber","_JsonRpcApiProvider_nextId","_JsonRpcApiProvider_options","_JsonRpcProvider_connect","_JsonRpcProvider_pollingInterval","Primitive","deepCopy","getLowerCase","defaultOptions","polling","batchMaxSize","batchStallTime","JsonRpcSigner","getFeeData","_to","hexTx","getRpcTransaction","sendUncheckedTransaction","checkTx","_message","populated","resolveNames","getPayload","JsonRpcApiProvider","_getOptions","_setOptions","prepareRequest","jsonrpc","accounts","account","dstKey","getRpcRequest","signedTransaction","getRpcError","spelunkData","_spelunkMessage","spelunkMessage","feeData","JsonRpcProvider","isPollable","StaticJsonRpcProvider","defaultApiKey","AnkrProvider","apiKey","getConnection","getHost","isCommunityResource","AlchemyProvider","CloudflareProvider","EtherscanPluginId","EtherscanPlugin","baseUrl","communityApiKey","EtherscanProvider","getBaseUrl","query","getPostUrl","getPostData","apikey","post","_getTransactionPostData","maxFeePerGs","_checkError","action","txhash","postData","ethusd","defaultProjectId","InfuraProvider","projectId","projectSecret","defaultAppIds","homestead","ropsten","rinkeby","goerli","normalizeApiKey","_appId","applicationSecretKey","loadBalancer","community","applicationId","PocketProvider","_secretKey","_loadBalancer","_FallbackProvider_instances","_FallbackProvider_configs","_FallbackProvider_initialSyncPromise","_FallbackProvider_getNextConfig","_FallbackProvider_addRunner","_FallbackProvider_initialSync","_FallbackProvider_checkQuorum","_FallbackProvider_waitForQuorum","defaultConfig","stallTimeout","priority","weight","defaultState","requests","lateResponses","errorResponses","outOfSync","unsupportedEvents","rollingDuration","score","_updateNumber","_totalTime","checkQuorum","quorum","tally","normal","bestResult","bestWeight","FallbackProvider","providers","eventQuorum","eventWorkers","running","runner","configs","allConfigs","shuffle","config","didBump","staller","dt","initialSync","waitForSync","mid","getMedian","interesting","newRunners","race","_WebSocket","WebSocket","_SocketSubscriber_provider","_SocketSubscriber_filter","_SocketSubscriber_filterId","_SocketSubscriber_paused","_SocketSubscriber_emitPromise","_SocketEventSubscriber_logFilter","_SocketEventSubscriber_formatter","_SocketProvider_callbacks","_SocketProvider_ready","_SocketProvider_subs","_SocketProvider_pending","SocketSubscriber","_register","_handleMessage","emitPromise","_emit","SocketBlockSubscriber","SocketPendingSubscriber","SocketEventSubscriber","logFilter","SocketProvider","pending","promise","_write","_WebSocketProvider_websocket","WebSocketProvider","websocket","onopen","_start","onmessage","_processMessage","registerEth","etherscan","injectCommonNetworks","_Network","IpcSocketProvider","_ContractTransactionReceipt_interface","_ContractTransactionResponse_interface","EventLog","iface","interface","eventName","eventSignature","ContractTransactionReceipt","ContractTransactionResponse","wait","ContractEventPayload","contract","_log","_PreparedTopicFilter_filter","canResolve","PreparedTopicFilter","getRunner","resolvedArgs","walkAsync","getTopicFilter","feature","copyOverrides","arg","overrides","bigIntKeys","numberKeys","enableCcipReadEnabled","customData","copyRequest","WrappedMethod","Function","_WrappedMethodBase","_contract","thisArg","getFragment","staticCall","_runner","resolveArgs","staticCallResult","WrappedEvent","_WrappedEventBase","internalValues","getInternal","getSubTag","hasSub","subs","getSub","runnerOff","lastEmit","resultPromise","passArgs","BaseContract","_deployTx","addrPromise","deployTx","filters","_prop","deploymentTransaction","Contract","_ContractBase","computeAddress","subsChrs","Word","unfold","words","sep","initial","decodeOwl","clumps","leftover","semi","Wordlist","locale","mnemonic","_WordlistOwl_instances","_WordlistOwl_data","_WordlistOwl_checksum","_WordlistOwl_words","_WordlistOwl_loadWords","WordlistOwl","_decodeWords","getWord","getWordIndex","langEn","wordlists","en","_WordlistOwlA_accent","WordlistOwlA","accent","_accent","accents","posOffset","positions","flood","decodeBits","charCode","regex","decodeOwlA","getUpperMask","mnemonicToEntropy","wordlist","entropy","bit","entropyBits","checksumMask","entropyToMnemonic","indices","remainingBits","checksumBits","Mnemonic","phrase","computeSeed","NFKD","_entropy","_BaseWallet_signingKey","BaseWallet","signingKey","btx","_HDNodeWallet_fromSeed","_HDNodeWalletManager_root","defaultPath","MasterSecret","zpad","encodeBase58Check","ser_I","chainCode","I","IL","IR","derivePath","path","component","deriveChild","HDNodeWallet","parentFingerprint","fingerprint","extendedKey","hasPath","neuter","HDNodeVoidWallet","_index","ki","fromPhrase","fromEntropy","_seed","Ki","_addPoints","HDNodeWalletManager","getSigner","getAccountPath","_AES_key","_AES_Kd","_AES_Ke","numberOfRounds","rcon","S","Si","T3","T4","T5","T6","T7","T8","U3","U4","convertToInt32","AES","roundKeyCount","KC","tk","tt","rconpointer","encrypt","plaintext","decrypt","ciphertext","ModeOfOperation","cls","aes","_CBC_iv","_CBC_lastBlock","CBC","iv","_CTR_remaining","_CTR_remainingIndex","_CTR_counter","CTR","initialValue","setCounterValue","setCounterBytes","MAX_SAFE_INTEGER","increment","crypttext","looseArrayify","hexString","getPassword","spelunk","_path","reqd","isCrowdsaleJson","encseed","decryptCrowdsaleJson","encryptedSeed","padder","pkcs7Strip","seedHex","isKeystoreJson","getAccount","mnemonicKey","mnemonicCiphertext","mnemonicIv","mnemonicAesCtr","getKdfParams","kdf","prf","_Wallet_mnemonic","trySigningKey","Wallet","wallet","fromMnemonic","tryWallet","tryMnemonic","progressCallback","encryptSync","decryptKeystoreJson","decryptKeystoreJsonSync"],"mappings":"AA0GOA,eAAeC,EAAkBC,GACpC,MAAMC,EAAOC,OAAOD,KAAKD,GAEzB,aADsBG,QAAQC,IAAIH,EAAKI,KAAKC,GAAMH,QAAQI,QAAQP,EAAMM,QACzDE,QAAO,CAACC,EAAOC,EAAGC,KAC7BF,EAAMR,EAAKU,IAAUD,EACdD,IACR,IAgEP,SAASG,EAAUZ,EAAOa,GACtB,MAAMC,EAAQD,EAAKE,MAAM,KAAKV,KAAIW,GAAKA,EAAEC,SACzC,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAMK,OAAQD,IAC9B,OAAQL,GACJ,IAAK,MACD,OACJ,IAAK,UACL,IAAK,SACL,IAAK,SACD,UAAY,IAAWA,EACnB,OAIhB,MAAM,IAAIO,MAAM,0BAEb,SAASC,EAAiBC,EAAQC,EAAQT,EAAOU,GACpD,IAAK,IAAIC,KAAOF,EAAQ,CACpB,IAAIvB,EAAQuB,EAAOE,GACnB,MAAMC,EAAYF,EAAWA,EAASC,QAAOE,EAC7C,QAAiBA,IAAbD,EACA1B,EAAQ0B,MAEP,CACD,MAAMb,EAAQC,EAAQA,EAAMW,GAAO,KAC/BZ,GACAD,EAAUZ,EAAOa,GAGzBX,OAAO0B,eAAeN,EAAQG,EAAK,CAAEI,YAAY,EAAM7B,MAAAA,EAAO8B,UAAU,KC7MhF,IAWIC,EAXAC,EAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,EAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAIjF,MAAMU,EACTC,YAAYC,EAASC,EAAUC,GAC3BjB,EAAuBU,IAAIR,UAAM,GACjCD,EAAuBC,KAAMF,EAAwBgB,EAAU,KAC/D1B,EAAiBY,KAAM,CAAEa,QAAAA,EAASE,OAAAA,IAEtClD,uBACqE,MAA7D4C,EAAuBT,KAAMF,EAAwB,YAGnDE,KAAKa,QAAQG,IAAIhB,KAAKe,OAAQN,EAAuBT,KAAMF,EAAwB,OCvB1F,SAASmB,EAASC,EAAO1B,GAC5B,OAAO0B,EAAM1B,GAEV,SAAS2B,EAASD,EAAO1B,EAAKzB,GACjC,GAAIE,OAAOmD,SAASF,GAChB,MAAM,IAAI/B,MAAM,2CAA6CK,GAEjE0B,EAAM1B,GAAOzB,ECIV,SAASsD,EAAQC,EAAOC,GAC3B,OAAQD,GAASA,EAAMC,OAASA,EAE7B,SAASC,EAAgBF,GAC5B,OAAOD,EAAQC,EAAO,kBFW1BxB,EAAyB,IAAI2B,QG1B7B,IAKIC,EAAmBC,EAAwBC,EAAkBC,EAEtDC,EAPPrB,EAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,KAKxF,SAAW6B,GACPA,EAAgB,MAAI,QACpBA,EAAe,KAAI,OACnBA,EAAkB,QAAI,UACtBA,EAAgB,MAAI,QACpBA,EAAc,IAAI,MALtB,CAMGA,IAAaA,EAAW,KAE3B,MAAMC,EAAY,CAAEC,MAAO,EAAGC,QAAW,EAAGC,KAAM,EAAGC,QAAS,EAAGb,MAAO,EAAGN,IAAK,GAChF,IAAIoB,EAAYL,EAAmB,QAC/BM,EAAgB,KACpB,MAAMC,EAAkB,CAAC,MAAO,MAAO,OAAQ,QAAQ/D,QAAO,CAACC,EAAO+D,KAClE,IAGI,GAA+B,SAA3B,OAAOC,UAAUD,GACjB,MAAM,IAAIpD,MAAM,OAIpB,GAAa,QAAToD,EAAgB,CAChB,MAAME,EAAQC,OAAOC,aAAa,KAAMH,UAAU,OAGlD,GAAIC,IAFaC,OAAOC,aAAa,IAAM,KAGvC,MAAM,IAAIxD,MAAM,UAIxBX,EAAMoE,KAAKL,GAEf,MAAOjB,IACP,OAAO9C,IACR,IACH,SAASqE,EAAeC,EAAQC,EAAMhF,GAClCE,OAAO0B,eAAemD,EAAQC,EAAM,CAChCnD,YAAY,EAAMC,UAAU,EAAO9B,MAAAA,IAY3C,MAAMiF,EAAW,iBAEXC,EAAoB,GAC1BA,EAAkBC,iBAAmB7C,UACrC4C,EAAkBE,cAAgBC,WAClCH,EAAkBI,eAAiBD,WAC5B,MAAME,EACT1C,YAAY2C,GACR7B,EAAkB8B,IAAIxD,MACtB6C,EAAe7C,KAAM,UAAWuD,GAAW,KAE/CE,UAAUC,EAASnC,EAAMW,GAKrB,CACI,MAAMyB,EAAU,GAChB,GAAIzB,EACA,IAAK,MAAM1C,KAAO0C,EAAM,CACpB,MAAMnE,EAASmE,EAAK1C,GACpB,IACImE,EAAQf,KAAKpD,EAAM,IAAMoE,KAAKC,UAAU9F,IAE5C,MAAOuD,GACHqC,EAAQf,KAAKpD,EAAM,kCAI/BmE,EAAQf,KAAK,QAAQrB,KACrBoC,EAAQf,KAAK,WAAW5C,KAAKuD,WACzBI,EAAQzE,SACRwE,GAAW,KAAOC,EAAQG,KAAK,MAAQ,KAG/C,MACMxC,EAAS,IADA2B,EAAkB1B,IAASpC,OAChBuE,GAE1B,GADAb,EAAevB,EAAO,OAAQC,GAC1BW,EACA,IAAK,MAAM1C,KAAO0C,EACdW,EAAevB,EAAO9B,EAAM0C,EAAK1C,IAGzC,OAAO8B,EAEXyC,WAAWL,EAASnC,EAAMW,GACtB,MAAMlC,KAAKyD,UAAUC,EAASnC,EAAMW,GAExC8B,mBAAmBN,EAASX,EAAMhF,GAC9B,OAAOiC,KAAK+D,WAAWL,EAAS,mBAAoB,CAChDO,SAAUlB,EACVhF,MAAOA,IAGfmG,OAAOC,EAAWT,EAASnC,EAAMW,GACvBiC,GAGNnE,KAAK+D,WAAWL,EAASnC,GAAQ,gBAAiBW,GAEtDkC,eAAeD,EAAWT,EAASX,EAAMhF,GACrC,OAAOiC,KAAKkE,OAAOC,EAAWT,EAAS,mBAAoB,CACvDO,SAAUlB,EACVhF,MAAAA,IAGRsG,sBAAsBtB,EAAMhF,EAAOuG,EAAOC,GACtC,IAAIb,EAAU,KACS,iBAAX,EACRA,EAAU,oBAEJc,OAAOC,UAAU1G,IAGR,MAATuG,GAAiBvG,EAAQuG,GAAoB,MAATC,GAAiBxG,EAAQwG,KACnEb,EAAU,yBAHVA,EAAU,kBAKVA,GACA1D,KAAKgE,mBAAmBN,EAASX,EAAMhF,GAG/C2G,iBAAiB3G,EAAO2F,GACpB1D,KAAKoE,eAAmC,iBAAnB,EAA8B,iBAAkB,QAASrG,GAC/D,MAAX2F,IACAA,EAAU,kBAEd,MAAMiB,EAAY,oBAClB3E,KAAKkE,OAAQnG,GAAS,GAAKA,EAAQ,iBAAmB2F,EAAS,gBAAiB,CAC5EiB,UAAAA,EAAWC,MAAO,oBAAqB7G,MAAAA,IAE3CiC,KAAKkE,OAAQnG,EAAQ,GAAO,EAAG2F,EAAS,gBAAiB,CACrDiB,UAAAA,EAAWC,MAAO,cAAe7G,MAAAA,IAGzC8G,gBAAgBtC,IAC2B,IAAnCD,EAAgBwC,QAAQvC,IACxBvC,KAAK+D,WAAW,8CAA+C,wBAAyB,CACpFY,UAAW,6BAA8BzC,KAAM,CAAEK,KAAAA,KAI7DwC,cAAcC,EAAYC,EAAOC,EAAY,IACzC,GAAIF,IAAeC,EAAO,CACtB,IAAIE,EAASD,EAAWP,EAAY,MAChCO,IACAC,GAAU,IACVR,GAAa,IAAMO,GAEvBlF,KAAK+D,WAAW,4BAA4BoB,iBAAuB,wBAAyB,CACxFR,UAAAA,KAIZS,oBAAoBC,EAAOC,EAAe5B,EAAU,IAC5CA,IACAA,EAAU,KAAOA,GAErB1D,KAAKkE,OAAQmB,GAASC,EAAgB,mBAAqB5B,EAAS,mBAAoB,CACpF2B,MAAOA,EACPC,cAAeA,IAEnBtF,KAAKkE,OAAQmB,GAASC,EAAgB,qBAAuB5B,EAAS,sBAAuB,CACzF2B,MAAOA,EACPC,cAAeA,IAGvBC,YAAYxH,EAAO4G,GACflE,EAAuBT,KAAM0B,EAAmB,IAAKC,GAAwBpB,KAAKP,KAAM,QAASjC,EAAO4G,GAAa,WAAY3B,GAErIwC,aAAazH,EAAO4G,GAChBlE,EAAuBT,KAAM0B,EAAmB,IAAKC,GAAwBpB,KAAKP,KAAM,QAASjC,EAAO4G,GAAa,UAAW,GAEpIc,cAAc1H,EAAO4G,EAAY,UAAWe,EAAM,EAAGC,EAAM3C,IAG3D4C,SAAS7H,EAAOgF,GACZ,OAAOtC,EAAuBT,KAAM0B,EAAmB,IAAKE,GAAkBrB,KAAKP,KAAMjC,EAAOgF,GAAM,GAE1G8C,aAAa9H,EAAOgF,GAChB,OAAOtC,EAAuBT,KAAM0B,EAAmB,IAAKE,GAAkBrB,KAAKP,KAAMjC,EAAOgF,GAAM,GAE1G+C,UAAU/H,EAAOgF,GACb,cAAgB,GACZ,IAAK,SAID,OAHIhF,GAASiF,GAAYjF,EAAQiF,IAC7BhD,KAAKgE,mBAAmB,WAAYjB,GAAQ,QAAShF,GAElDyG,OAAOzG,GAClB,IAAK,SAOD,OANKyG,OAAOC,UAAU1G,IAGbA,GAASiF,GAAYjF,EAAQiF,IAClChD,KAAKgE,mBAAmB,WAAYjB,GAAQ,QAAShF,GAHrDiC,KAAKgE,mBAAmB,YAAajB,GAAQ,QAAShF,GAKnDA,EACX,IAAK,SACD,IACI,OAAOiC,KAAK8F,UAAUC,OAAOhI,GAAQgF,GAEzC,MAAOiD,GACHhG,KAAKgE,mBAAmB,2BAA2BgC,EAAEtC,UAAWX,GAAQ,QAAShF,IAG7F,OAAOiC,KAAKgE,mBAAmB,wBAAyBjB,GAAQ,QAAShF,GAE7EkI,UAAUlI,EAAOgF,GACb,cAAgB,GACZ,IAAK,SAAU,OAAOhF,EACtB,IAAK,SAOD,OANKyG,OAAOC,UAAU1G,IAGbA,GAASiF,GAAYjF,EAAQiF,IAClChD,KAAKgE,mBAAmB,WAAYjB,GAAQ,QAAShF,GAHrDiC,KAAKgE,mBAAmB,YAAajB,GAAQ,QAAShF,GAKnDgI,OAAOhI,GAClB,IAAK,SACD,IACI,OAAOgI,OAAOhI,GAElB,MAAOiI,GACHhG,KAAKgE,mBAAmB,gCAAgCgC,EAAEtC,UAAWX,GAAQ,QAAShF,IAGlG,OAAOiC,KAAKgE,mBAAmB,6BAA8BjB,GAAQ,QAAShF,GAElFiE,SAASkE,GACLzF,EAAuBT,KAAM0B,EAAmB,IAAKG,GAAatB,KAAKP,KAAM8B,EAASqE,MAAOD,GAEjGhE,QAAQgE,GACJzF,EAAuBT,KAAM0B,EAAmB,IAAKG,GAAatB,KAAKP,KAAM8B,EAASsE,KAAMF,GAEhGG,QAAQH,GACJzF,EAAuBT,KAAM0B,EAAmB,IAAKG,GAAatB,KAAKP,KAAM8B,EAASwE,QAASJ,GAEnGK,sBAII,OAHKlE,IACDA,EAAgB,IAAIiB,EC9PT,uCDgQRjB,EAEXkE,mBAAmBC,GACf,MAAMC,EAAQ1E,EAAUyE,EAASE,eACpB,MAATD,EAIJrE,EAAYqE,EAHRnD,EAAOqD,eAAeN,KAAK,uBAAyBG,IAMhE9E,EAAoB,IAAIkF,QAAWjF,EAAyB,SAAgCoB,EAAMhF,EAAO4G,EAAWkC,IACzF,iBAAX,GAAuBC,MAAM/I,KACrCiC,KAAKgE,mBAAmB,WAAWjB,IAAQ,mBAAoB,CAC3DA,KAAM,QAAShF,MAAAA,IAGvB,IAAI2F,EAAU,WAAWX,UACrB6B,EAAQ,KACRkC,MAAM/I,GACN6G,EAAQ,eAEH7G,EAAQ8I,GAAY9I,EAAQiF,GACjCU,EAAU,UAAUX,UACpB6B,EAAQ,YAEHmC,KAAKC,MAAMjJ,KAAWA,IAC3B6G,EAAQ,aAERA,GACA5E,KAAK+D,WAAWL,EAAS,gBAAiB,CACtCiB,UAAAA,EAAWC,MAAAA,EAAO7G,MAAAA,KAG3B6D,EAAmB,SAA0B7D,EAAOgF,EAAMkE,GACzD,GAAIlJ,aAAiBmJ,WACjB,OAAID,EACO,IAAIC,WAAWnJ,GAEnBA,EAEX,GAAuB,iBAAnB,GAA+BA,EAAMoJ,MAAM,4BAA6B,CACxE,MAAMC,EAAS,IAAIF,YAAYnJ,EAAMmB,OAAS,GAAK,GACnD,IAAImI,EAAS,EACb,IAAK,IAAIpI,EAAI,EAAGA,EAAImI,EAAOlI,OAAQD,IAC/BmI,EAAOnI,GAAKqI,SAASvJ,EAAMwJ,UAAUF,EAAQA,EAAS,GAAI,IAC1DA,GAAU,EAEd,OAAOD,EAEX,OAAOpH,KAAKgE,mBAAmB,0BAA2BjB,GAAQ,QAAShF,IAC5E8D,EAAc,SAAqB2E,EAAUN,GAC5C,MAAMO,EAAQD,EAASE,cACC,MAApB3E,EAAU0E,IACVzG,KAAKgE,mBAAmB,yBAA0B,WAAYwC,GAE9DpE,EAAYL,EAAU0E,IAG1Be,QAAQC,IAAIC,MAAMF,QAAStB,IAG/B5C,EAAOvB,UAAYD,EE9TZ,MCEM6F,EAAS,IAAIrE,EDFH,mCEAvB,IAWIsE,EAAwBC,EAAqBC,EAAqBC,EAA6BC,EAAsBC,EAI9GC,EAfPnI,EAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,EAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAmBxF,SAASkI,EAAOC,GACZ,MAAMhB,EAAS,IAAIiB,IAEnB,OADAD,EAAME,SAASjK,GAAM+I,EAAO5D,IAAInF,KACzBJ,OAAOsK,OAAOnB,IAfzB,SAAWc,GAEPA,EAAoB,QAAI,UAExBA,EAAoB,QAAI,UAExBA,EAAiB,KAAI,OAErBA,EAAiB,KAAI,OARzB,CASGA,IAAeA,EAAa,KAS/B,MAAMM,EAAW,8DACXC,EAAUN,EAAOK,EAAS1J,MAAM,MAChC4J,EAAW,0CACXC,EAAUR,EAAOO,EAAS5J,MAAM,MAChC8J,EAAe,0CACfC,EAAcV,EAAOS,EAAa9J,MAAM,MAIxCgK,EAAWX,EADC,CAACO,EAAUE,EAFZ,gBAEoCJ,GAAU1E,KAAK,KAClChF,MAAM,MAElCiK,EAAe,CACjB,IAAK,aAAc,IAAK,cACxB,IAAK,eAAgB,IAAK,gBAC1B,IAAK,QAAS,IAAK,MAGjBC,EAAkB,IAAIC,OAAO,WAC7BC,EAAc,IAAID,OAAO,aACzBE,EAAkB,IAAIF,OAAO,+BAC7BG,EAAY,IAAIH,OAAO,oDACtB,MAAMI,EACTzI,YAAY0I,GACR1B,EAAuBpE,IAAIxD,MAC3B6H,EAAoBrH,IAAIR,UAAM,GAC9B8H,EAAoBtH,IAAIR,UAAM,GAC9BD,EAAuBC,KAAM6H,EAAqB,EAAG,KACrD9H,EAAuBC,KAAM8H,EAAqBwB,EAAOC,QAAS,KAElElC,aAAW,OAAO5G,EAAuBT,KAAM6H,EAAqB,KACpE3I,aAAW,OAAOuB,EAAuBT,KAAM8H,EAAqB,KAAK5I,OAASuB,EAAuBT,KAAM6H,EAAqB,KACxI2B,QAAU,OAAO,IAAIH,EAAY5I,EAAuBT,KAAM8H,EAAqB,MACnF2B,QAAU1J,EAAuBC,KAAM6H,EAAqB,EAAG,KAE/D6B,WAAWC,GACP,MAAMC,EAAM5J,KAAK6J,OACjB,GAAiB,YAAbD,EAAIhL,OAAuB+K,EAAQrJ,IAAIsJ,EAAIE,MAC3C,MAAM,IAAI3K,MAAM,oBAAoByK,EAAIE,QAE5C,OAAO9J,KAAK+J,MAAMD,KAGtBE,QAAQpL,GACJ,GAAIoB,KAAK6J,OAAOjL,OAASA,EACrB,MAAM,IAAIO,MAAM,YAAYP,UAAagF,KAAKC,UAAU7D,KAAK6J,WAEjE,OAAO7J,KAAK+J,MAAMD,KAGtBG,WACI,MAAML,EAAM5J,KAAK6J,OACjB,GAAiB,eAAbD,EAAIhL,KACJ,MAAM,IAAIO,MAAM,aAEpB,MAAMiI,EAAS3G,EAAuBT,KAAM4H,EAAwB,IAAKG,GAA6BxH,KAAKP,KAAMS,EAAuBT,KAAM6H,EAAqB,KAAO,EAAG+B,EAAIzC,MAAQ,GAEzL,OADApH,EAAuBC,KAAM6H,EAAqB+B,EAAIzC,MAAQ,EAAG,KAC1DC,EAGX8C,YACI,MAAMN,EAAM5J,KAAK6J,OACjB,GAAiB,eAAbD,EAAIhL,KACJ,MAAM,IAAIO,MAAM,aAEpB,MAAMiI,EAAS,GACf,KAAO3G,EAAuBT,KAAM6H,EAAqB,KAAO+B,EAAIzC,MAAQ,GAAG,CAC3E,MAAMgD,EAAOnK,KAAK6J,OAAOO,SACzBhD,EAAOxE,KAAKnC,EAAuBT,KAAM4H,EAAwB,IAAKG,GAA6BxH,KAAKP,KAAMS,EAAuBT,KAAM6H,EAAqB,KAAO,EAAGsC,IAC1KpK,EAAuBC,KAAM6H,EAAqBsC,EAAM,KAG5D,OADApK,EAAuBC,KAAM6H,EAAqB+B,EAAIzC,MAAQ,EAAG,KAC1DC,EAGXyC,OACI,GAAIpJ,EAAuBT,KAAM6H,EAAqB,MAAQpH,EAAuBT,KAAM8H,EAAqB,KAAK5I,OACjH,MAAM,IAAIC,MAAM,iBAEpB,OAAOsB,EAAuBT,KAAM8H,EAAqB,KAAKrH,EAAuBT,KAAM6H,EAAqB,MAGpHwC,YAAYV,GACR,MAAMC,EAAM5J,KAAKsK,SAAS,WAC1B,OAAe,MAAPV,GAAeD,EAAQrJ,IAAIsJ,GAAQA,EAAM,KAGrDU,SAAS1L,GACL,GAAoB,IAAhBoB,KAAKd,OACL,OAAO,KAEX,MAAM0K,EAAM5J,KAAK6J,OACjB,OAAQD,EAAIhL,OAASA,EAAQgL,EAAIE,KAAO,KAG5CC,MACI,IAAIQ,EACJ,MAAMnD,EAASpH,KAAK6J,OAEpB,OADA9J,EAAuBC,KAAM6H,GAAsB0C,EAAK9J,EAAuBT,KAAM6H,EAAqB,OAAM0C,GAAW,KACpHnD,EAEXoD,WACI,MAAMlB,EAAS,GACf,IAAK,IAAIrK,EAAIwB,EAAuBT,KAAM6H,EAAqB,KAAM5I,EAAIwB,EAAuBT,KAAM8H,EAAqB,KAAK5I,OAAQD,IAAK,CACzI,MAAMwL,EAAQhK,EAAuBT,KAAM8H,EAAqB,KAAK7I,GACrEqK,EAAO1G,KAAK,GAAG6H,EAAM7L,QAAQ6L,EAAMX,QAEvC,MAAO,gBAAgBR,EAAOxF,KAAK,SAapC,SAAS4G,EAAIZ,GAChB,MAAMR,EAAS,GACTvF,EAAcL,IAChB,MAAM+G,EAASpD,EAASyC,EAAK5K,OAAU0E,KAAKC,UAAUiG,EAAKzC,IAAW,OACtE,MAAM,IAAIlI,MAAM,iBAAiBsL,QAAYpD,MAAW3D,MAE5D,IAAIiH,EAAW,GACXC,EAAS,GACTvD,EAAS,EACb,KAAOA,EAASyC,EAAK5K,QAAQ,CAEzB,IAAI2L,EAAMf,EAAKvC,UAAUF,GACrBF,EAAQ0D,EAAI1D,MAAM6B,GAClB7B,IACAE,GAAUF,EAAM,GAAGjI,OACnB2L,EAAMf,EAAKvC,UAAUF,IAEzB,MAAMoD,EAAQ,CAAEK,MAAOH,EAASzL,OAAQ6L,UAAW,EAAGX,UAAW,EAAGjD,OAAQ,EAAGvI,KAAM,GAAIkL,KAAM,GAAIzC,OAAAA,EAAQtJ,OAAQ,GACnHuL,EAAO1G,KAAK6H,GACZ,IAAI7L,EAAQmK,EAAa8B,EAAI,KAAO,GACpC,GAAIjM,GAIA,GAHA6L,EAAM7L,KAAOA,EACb6L,EAAMX,KAAOe,EAAI,GACjBxD,IACa,eAATzI,EACA+L,EAAS/H,KAAK0G,EAAOpK,OAAS,GAC9B0L,EAAOhI,KAAK0G,EAAOpK,OAAS,QAE3B,GAAY,eAARN,EACmB,IAApB+L,EAASzL,QACT6E,EAAW,4BAEf0G,EAAMtD,MAAQwD,EAASZ,MACtBT,EAAOmB,EAAMtD,OAAQA,MAAQmC,EAAOpK,OAAS,EAC9CuL,EAAMK,QACNL,EAAMM,SAAWH,EAAOb,MACvBT,EAAOmB,EAAMM,UAAWX,SAAWd,EAAOpK,OAAS,OAEnD,GAAa,UAATN,EACL6L,EAAMM,SAAWH,EAAOb,MACvBT,EAAOmB,EAAMM,UAAWX,SAAWd,EAAOpK,OAAS,EACpD0L,EAAOhI,KAAK0G,EAAOpK,OAAS,QAE3B,GAAa,iBAATN,EACL6L,EAAM7L,KAAO,eAEZ,GAAa,kBAATA,EAA0B,CAE/B,IAAIoM,EAAS1B,EAAOS,MAAMD,KAC1B,GAAIR,EAAOpK,OAAS,GAAwC,WAAnCoK,EAAOA,EAAOpK,OAAS,GAAGN,KAAmB,CAClE,MAAMb,EAAQuL,EAAOS,MAAMD,KAC3BkB,EAASjN,EAAQiN,EAChB1B,EAAOA,EAAOpK,OAAS,GAAInB,MAAQ4J,EAAO7B,UAAU/H,GAEzD,GAAsB,IAAlBuL,EAAOpK,QAAmD,YAAnCoK,EAAOA,EAAOpK,OAAS,GAAGN,KACjD,MAAM,IAAIO,MAAM,2BAEnBmK,EAAOA,EAAOpK,OAAS,GAAI4K,MAAQkB,QAK5C,GADA7D,EAAQ0D,EAAI1D,MAAMgC,GACdhC,EAAJ,CAGI,GAFAsD,EAAMX,KAAO3C,EAAM,GACnBE,GAAUoD,EAAMX,KAAK5K,OACjB4J,EAASxI,IAAImK,EAAMX,MAAO,CAC1BW,EAAM7L,KAAO,UACb,SAEJ,GAAI6L,EAAMX,KAAK3C,MAAMiC,GAAY,CAC7BqB,EAAM7L,KAAO,OACb,SAEJ6L,EAAM7L,KAAO,SAXjB,CAeA,GADAuI,EAAQ0D,EAAI1D,MAAM+B,IACd/B,EAMJ,MAAM,IAAIhI,MAAM,oBAAoByE,KAAKC,UAAUgH,EAAI,mBAAmBxD,KALtEoD,EAAMX,KAAO3C,EAAM,GACnBsD,EAAM7L,KAAO,SACbyI,GAAUoD,EAAMX,KAAK5K,QAK7B,OAAO,IAAImK,EAAYC,EAAOlL,KAAKW,GAAMd,OAAOsK,OAAOxJ,MAG3D,SAASkM,EAAYzK,EAAKmJ,GACtB,IAAIuB,EAAW,GACf,IAAK,MAAM1L,KAAOmK,EAAQ3L,OAClBwC,EAAIF,IAAId,IACR0L,EAAStI,KAAKpD,GAGtB,GAAI0L,EAAShM,OAAS,EAClB,MAAM,IAAIC,MAAM,sBAAsB+L,EAASpH,KAAK,SAK5D,SAASqH,EAAYvM,EAAM0K,GACvB,GAAIA,EAAOe,YAAY1B,GAAU,CAC7B,MAAMyC,EAAU9B,EAAOS,MAAMD,KAC7B,GAAIsB,IAAYxM,EACZ,MAAM,IAAIO,MAAM,YAAYP,UAAawM,KAGjD,OAAO9B,EAAOU,QAAQ,MAG1B,SAASqB,EAAgB/B,EAAQK,GAC7B,MAAM2B,EAAW,IAAIjD,IACrB,OAAa,CACT,MAAM+C,EAAU9B,EAAOgB,SAAS,WAChC,GAAe,MAAXc,GAAoBzB,IAAYA,EAAQrJ,IAAI8K,GAC5C,MAGJ,GADA9B,EAAOS,MACHuB,EAAShL,IAAI8K,GACb,MAAM,IAAIjM,MAAM,uBAAuByE,KAAKC,UAAUuH,MAE1DE,EAAS9H,IAAI4H,GAEjB,OAAOnN,OAAOsK,OAAO+C,GA4BzB,SAASC,EAAcjC,EAAQkC,GAC3B,OAAOlC,EAAOY,YAAY9L,KAAKW,GAAM0M,GAAUC,WAAW3M,EAAGyM,KAGjE,SAASG,GAAWrC,GAChB,GAAIA,EAAOgB,SAAS,MAAO,CAEvB,GADAhB,EAAOS,MACHT,EAAOgB,SAAS,UAChB,OAAO3C,EAAO1B,UAAUqD,EAAOS,MAAMD,MAEzC,MAAM,IAAI3K,MAAM,eAEpB,OAAO,KAEX,SAASyM,GAAWtC,GAChB,GAAIA,EAAOpK,OACP,MAAM,IAAIC,MAAM,sBAAsBmK,EAAOkB,cAlLrD3C,EAAsB,IAAIpG,QAAWqG,EAAsB,IAAIrG,QAAWmG,EAAyB,IAAIhB,QAAWmB,EAA8B,SAAqC8D,EAAO,EAAGC,EAAK,GAChM,OAAO,IAAIzC,EAAY5I,EAAuBT,KAAM8H,EAAqB,KAAKyB,MAAMsC,EAAMC,GAAI1N,KAAKW,GACxFd,OAAOsK,OAAOtK,OAAO8N,OAAO,GAAIhN,EAAG,CACtCoI,MAAQpI,EAAEoI,MAAQ0E,EAClBd,SAAWhM,EAAEgM,SAAWc,EACxBzB,SAAWrL,EAAEqL,SAAWyB,SAgLpC,MAAMG,GAAiB,IAAI/C,OAAO,sBAClC,SAASgD,GAAgBrN,GACrB,MAAMuI,EAAQvI,EAAKuI,MAAMiC,GACzB,IAAKjC,EACD,OAAOQ,EAAO3D,mBAAmB,eAAgB,OAAQpF,GAE7D,GAAa,SAATA,EACA,MAAO,UAEX,GAAa,QAATA,EACA,MAAO,SAEX,GAAIuI,EAAM,GAAI,CAEV,MAAMjI,EAASoI,SAASH,EAAM,KACf,IAAXjI,GAAgBA,EAAS,KACzByI,EAAO3D,mBAAmB,uBAAwB,OAAQpF,QAG7D,GAAIuI,EAAM,GAAI,CAEf,MAAM+E,EAAO5E,SAASH,EAAM,KACf,IAAT+E,GAAcA,EAAO,KAAOA,EAAO,IACnCvE,EAAO3D,mBAAmB,wBAAyB,OAAQpF,GAGnE,OAAOA,EAGX,MAAMuN,GAAS,GACTC,GAAWC,OAAOC,IAAI,oBAErB,MAAMb,GACT7K,YAAYqE,EAAOlC,EAAMnE,EAAM2N,EAAUC,EAASC,EAAYC,EAAaC,GAOvE,GANA3E,EAAqBxE,IAAIxD,MACzB2H,EAAO5C,cAAcE,EAAOkH,GAAQ,aACpClO,OAAO0B,eAAeK,KAAMoM,GAAU,CAAErO,MALtB,uBAMd0O,IACAA,EAAaxO,OAAOsK,OAAOkE,EAAWlD,UAEzB,UAAbgD,GACA,GAAmB,MAAfG,GAAwC,MAAjBC,EACvB,MAAM,IAAIxN,MAAM,SAGnB,GAAmB,MAAfuN,GAAwC,MAAjBC,EAC5B,MAAM,IAAIxN,MAAM,IAEpB,GAAiB,UAAboN,GACA,GAAkB,MAAdE,EACA,MAAM,IAAItN,MAAM,SAGnB,GAAkB,MAAdsN,EACL,MAAM,IAAItN,MAAM,IAEpBC,EAAiBY,KAAM,CACnB+C,KAAAA,EAAMnE,KAAAA,EAAM2N,SAAAA,EAAUC,QAAAA,EAASC,WAAAA,EAAYC,YAAAA,EAAaC,cAAAA,IAOhEC,OAAOA,EAAS1E,EAAW2E,SAIvB,GAHK3E,EAAW0E,IACZjF,EAAO3D,mBAAmB,sBAAuB,SAAU4I,GAE3DA,IAAW1E,EAAW4E,KAAM,CAC5B,IAAI1F,EAAS,CACTxI,KAA0B,UAAlBoB,KAAKuM,SAAwB,QAAUvM,KAAKpB,KACpDmE,KAAO/C,KAAK+C,WAAQrD,GAQxB,MAN8B,kBAAlBM,KAAY,UACpBoH,EAAOoF,QAAUxM,KAAKwM,SAEtBxM,KAAK+M,YACL3F,EAAOqF,WAAazM,KAAKyM,WAAWrO,KAAK4O,GAAMpJ,KAAKqJ,MAAMD,EAAEJ,OAAOA,OAEhEhJ,KAAKC,UAAUuD,GAE1B,IAAIA,EAAS,GAyBb,OAvBIpH,KAAKkN,WACL9F,GAAUpH,KAAK2M,cAAcC,OAAOA,GACpCxF,GAAU,IAAKpH,KAAK0M,YAAc,EAAI,GAAKhK,OAAO1C,KAAK0M,iBAGnD1M,KAAK+M,WACDH,IAAW1E,EAAW2E,UACtBzF,GAAUpH,KAAKpB,MAEnBwI,GAAU,IAAMpH,KAAKyM,WAAWrO,KAAK+O,GAASA,EAAKP,OAAOA,KAAS9I,KAAM8I,IAAW1E,EAAWkF,KAAQ,KAAO,KAAO,KAGrHhG,GAAUpH,KAAKpB,KAGnBgO,IAAW1E,EAAW2E,WACD,IAAjB7M,KAAKwM,UACLpF,GAAU,YAEVwF,IAAW1E,EAAWkF,MAAQpN,KAAK+C,OACnCqE,GAAU,IAAMpH,KAAK+C,OAGtBqE,EAEXb,eAAexI,GACX,OAAOA,GAA6B,UAAnBA,EAAMwO,SAE3BW,UACI,MAA0B,UAAlBlN,KAAKuM,SAEjBQ,UACI,MAA0B,UAAlB/M,KAAKuM,SAEjBc,cACI,OAAwB,MAAhBrN,KAAKwM,QAEjBc,KAAKvP,EAAOwP,GACR,GAAIvN,KAAKkN,UAAW,CAChB,IAAKM,MAAMN,QAAQnP,GACf,MAAM,IAAIoB,MAAM,uBAEpB,IAA0B,IAAtBa,KAAK0M,aAAsB3O,EAAMmB,SAAWc,KAAK0M,YACjD,MAAM,IAAIvN,MAAM,yBAEpB,OAAOpB,EAAMK,KAAKK,GAAOuB,KAAK2M,cAAcW,KAAK7O,EAAG8O,KAExD,GAAIvN,KAAK+M,UAAW,CAChB,IAAKS,MAAMN,QAAQnP,GACf,MAAM,IAAIoB,MAAM,uBAEpB,GAAIpB,EAAMmB,SAAWc,KAAKyM,WAAWvN,OACjC,MAAM,IAAIC,MAAM,yBAEpB,OAAOpB,EAAMK,KAAI,CAACK,EAAGQ,IAAOe,KAAKyM,WAAWxN,GAAGqO,KAAK7O,EAAG8O,KAE3D,OAAOA,EAAQvN,KAAKpB,KAAMb,GAE9BF,gBAAgBE,EAAOwP,GACnB,MAAME,EAAW,GACXrG,EAAS,CAACrJ,GAOhB,OANA0C,EAAuBT,KAAMgI,EAAsB,IAAKC,GAAsB1H,KAAKP,KAAMyN,EAAU1P,EAAOwP,GAAUxP,IAChHqJ,EAAO,GAAKrJ,KAEZ0P,EAASvO,cACHhB,QAAQC,IAAIsP,GAEfrG,EAAO,GAElBb,YAAYmH,EAAKlC,GACb,GAAIC,GAAUkC,YAAYD,GACtB,OAAOA,EAEX,GAAqB,iBAAT,EACR,OAAOjC,GAAUC,WAAWhB,EAAIgD,GAAMlC,GAE1C,GAAIkC,aAAerE,EACf,OAAOoC,GAAUC,WAAWgC,EAAKlC,GAErC,MAAMzI,EAAO2K,EAAI3K,MACbA,GAA2B,iBAAV,GAAuBA,EAAKoE,MAAMgC,IACnDxB,EAAO3D,mBAAmB,eAAgB,WAAYjB,GAE1D,IAAIyJ,EAAUkB,EAAIlB,QACH,MAAXA,IACKhB,GACD7D,EAAO3D,mBAAmB,8BAA+B,cAAe0J,EAAIlB,SAEhFA,IAAYA,GAEhB,IAAI5N,EAAO8O,EAAI9O,KACXgP,EAAahP,EAAKuI,MAAM6E,IAC5B,GAAI4B,EAAY,CACZ,MAAMlB,EAAckB,EAAW,GACzBjB,EAAgBlB,GAAUI,KAAK,CACjCjN,KAAMgP,EAAW,GACjBnB,WAAYiB,EAAIjB,aAEpB,OAAO,IAAIhB,GAAUU,GAAQpJ,EAAMnE,EAAM,QAAS4N,EAAS,KAAME,EAAaC,GAElF,GAA6B,WAAzB/N,EAAK2I,UAAU,EAAG,IAA+B,MAAZ3I,EAAK,GAAY,CACtD,MAAMiP,EAA2B,MAAlBH,EAAIjB,WAAsBiB,EAAIjB,WAAWrO,KAAK4O,GAAMvB,GAAUI,KAAKmB,KAAM,KAGxF,OAFc,IAAIvB,GAAUU,GAAQpJ,EAAMnE,EAAM,QAAS4N,EAASqB,EAAO,KAAM,MAKnF,OADAjP,EAAOqN,GAAgByB,EAAI9O,MACpB,IAAI6M,GAAUU,GAAQpJ,EAAMnE,EAAMA,EAAM4N,EAAS,KAAM,KAAM,MAExEjG,kBAAkBmH,EAAKlC,GACnB,MAAM,IAAIrM,MAAM,SAEpBoH,kBAAkB+C,EAAQkC,GACtB,IAAI5M,EAAO,GAAI2N,EAAW,GACtBsB,EAAQ,KACRxC,EAAgB/B,EAAQnB,EAAO,CAAC,WAAW7H,IAAI,UAAYgJ,EAAOgB,SAAS,eAE3EiC,EAAW,QACXsB,EAAQvE,EAAOY,YAAY9L,KAAKW,GAAM0M,GAAUI,KAAK9M,KACrDH,EAAO,SAASiP,EAAMzP,KAAK4O,GAAMA,EAAEJ,WAAU9I,KAAK,UAIlDlF,EAAOqN,GAAgB3C,EAAOU,QAAQ,SACtCuC,EAAW3N,GAGf,IAAI+N,EAAgB,KAChBD,EAAc,KAClB,KAAOpD,EAAOpK,QAAUoK,EAAOgB,SAAS,YAAY,CAChD,MAAMwD,EAAUxE,EAAOS,MACvB4C,EAAgB,IAAIlB,GAAUU,GAAQ,GAAIvN,EAAM2N,EAAU,KAAMsB,EAAOnB,EAAaC,GACpFD,EAAcoB,EAAQ/P,MACtBa,GAAQkP,EAAQhE,KAChByC,EAAW,QACXsB,EAAQ,KAEZ,IAAIrB,EAAU,KAEd,GADiBnB,EAAgB/B,EAAQT,GAC5BvI,IAAI,WAAY,CACzB,IAAKkL,EACD,MAAM,IAAIrM,MAAM,IAEpBqN,GAAU,EAEd,MAAMzJ,EAAQuG,EAAOgB,SAAS,MAAQhB,EAAOS,MAAMD,KAAO,GAC1D,GAAIR,EAAOpK,OACP,MAAM,IAAIC,MAAM,mBAEpB,OAAO,IAAIsM,GAAUU,GAAQpJ,EAAMnE,EAAM2N,EAAUC,EAASqB,EAAOnB,EAAaC,GAEpFpG,mBAAmBxI,GACf,OAAQA,GA5MU,uBA4MDA,EAAMqO,KA8DxB,IAAI2B,GA3DX/F,EAAuB,IAAIpB,QAAWqB,EAAuB,SAASA,EAAqBwF,EAAU1P,EAAOwP,EAASS,GACjH,GAAIhO,KAAKkN,UAAW,CAChB,IAAKM,MAAMN,QAAQnP,GACf,MAAM,IAAIoB,MAAM,uBAEpB,IAA0B,IAAtBa,KAAK0M,aAAsB3O,EAAMmB,SAAWc,KAAK0M,YACjD,MAAM,IAAIvN,MAAM,yBAEpB,MAAM8O,EAAYjO,KAAK2M,cACjBvF,EAASrJ,EAAMwL,QAOrB,OANAnC,EAAOkB,SAAQ,CAACvK,EAAOW,KACnB+B,EAAuBwN,EAAWjG,EAAsB,IAAKC,GAAsB1H,KAAK0N,EAAWR,EAAU1P,EAAOwP,GAAUxP,IAC1HqJ,EAAO1I,GAASX,aAGxBiQ,EAAS5G,GAGb,GAAIpH,KAAK+M,UAAW,CAChB,MAAMN,EAAazM,KAAKyM,WAExB,IAAIrF,EACJ,GAAIoG,MAAMN,QAAQnP,GACdqJ,EAASrJ,EAAMwL,YAEd,CACD,GAAa,MAATxL,GAAoC,mBACpC,MAAM,IAAIoB,MAAM,uBAEpBiI,EAASqF,EAAWrO,KAAK8P,IACrB,IAAKA,EAAMnL,KACP,MAAM,IAAI5D,MAAM,mDAEpB,KAAM+O,EAAMnL,QAAQhF,GAChB,MAAM,IAAIoB,MAAM,+BAA+B+O,EAAMnL,QAEzD,OAAOhF,EAAMmQ,EAAMnL,SAG3B,GAAIhF,EAAMmB,SAAWc,KAAKyM,WAAWvN,OACjC,MAAM,IAAIC,MAAM,yBASpB,OAPAiI,EAAOkB,SAAQ,CAACvK,EAAOW,KACnB,IAAI6L,EACJ9J,EAAwB8J,EAAKkC,EAAW/N,GAASsJ,EAAsB,IAAKC,GAAsB1H,KAAKgK,EAAIkD,EAAU1P,EAAOwP,GAAUxP,IAClIqJ,EAAO1I,GAASX,aAGxBiQ,EAAS5G,GAGb,MAAMA,EAASmG,EAAQvN,KAAKpB,KAAMb,GAC9BqJ,EAAO+G,KACPV,EAAS7K,KAAK,iBAAqBoL,QAAe5G,GAApC,IAGd4G,EAAS5G,IAIjB,SAAW2G,GACPA,EAA0B,YAAI,cAC9BA,EAAoB,MAAI,QACxBA,EAAoB,MAAI,QACxBA,EAAuB,SAAI,WAC3BA,EAAqB,OAAI,SAL7B,CAMGA,KAAiBA,GAAe,KAE5B,MAAMK,GACTxN,YAAYqE,EAAOrG,EAAMyP,GACrB1G,EAAO5C,cAAcE,EAAOkH,GAAQ,YAEpC/M,EAAiBY,KAAM,CAAEpB,KAAAA,EAAMyP,OAD/BA,EAASpQ,OAAOsK,OAAO8F,EAAO9E,WAGlChD,YAAYmH,GACR,GAAqB,iBAAT,EACR,OAAO1N,KAAKsO,WAAWZ,GAE3B,GAAIA,aAAerE,EACf,OAAOrJ,KAAK0L,WAAWgC,GAE3B,GAAqB,iBAAT,EACR,OAAO1N,KAAKuO,WAAWb,GAE3B,MAAM,IAAIvO,MAAM,qBAAqBuO,KAEzCnH,kBAAkBmH,GACd,OAAQA,EAAI9O,MACR,IAAK,cAAe,OAAO4P,GAAoBD,WAAWb,GAC1D,IAAK,QAAS,OAAOe,GAAcF,WAAWb,GAC9C,IAAK,QAAS,OAAOgB,GAAcH,WAAWb,GAC9C,IAAK,WAAY,OAAOiB,GAAiBJ,WAAWb,GACpD,IAAK,SAAU,OAAOkB,GAAeL,WAAWb,GAEpD,MAAM,IAAIvO,MAAM,uBAEpBoH,kBAAkBuD,GACd,IACIsE,GAASvC,KAAKjI,KAAKqJ,MAAMnD,IAE7B,MAAO9D,IACP,OAAOoI,GAAS1C,WAAWhB,EAAIZ,IAEnCvD,kBAAkB+C,GACd,MAAM1K,EAAO0K,EAAOI,WAAWf,GAC/B,OAAQ/J,GACJ,IAAK,cAAe,OAAO4P,GAAoB9C,WAAWpC,GAC1D,IAAK,QAAS,OAAOmF,GAAc/C,WAAWpC,GAC9C,IAAK,QAAS,OAAOoF,GAAchD,WAAWpC,GAC9C,IAAK,WAAY,OAAOqF,GAAiBjD,WAAWpC,GACpD,IAAK,SAAU,OAAOsF,GAAelD,WAAWpC,GAEpD,MAAM,IAAInK,MAAM,qBAAqBP,KAoBzC2H,qBAAqBxI,GACjB,OAAQA,GAAwB,gBAAfA,EAAMa,KAE3B2H,eAAexI,GACX,OAAQA,GAAwB,UAAfA,EAAMa,KAE3B2H,eAAexI,GACX,OAAQA,GAAwB,UAAfA,EAAMa,KAE3B2H,kBAAkBxI,GACd,OAAQA,GAAwB,aAAfA,EAAMa,KAE3B2H,gBAAgBxI,GACZ,OAAQA,GAAwB,WAAfA,EAAMa,MAGxB,MAAMiQ,WAAsBT,GAC/BxN,YAAYqE,EAAOrG,EAAMmE,EAAMsL,GAC3BS,MAAM7J,EAAOrG,EAAMyP,GACnBA,EAASpQ,OAAOsK,OAAO8F,EAAO9E,SAC9BnK,EAAiBY,KAAM,CAAE+C,KAAAA,KAGjC,SAASgM,GAAWnC,EAAQoC,GACxB,MAAO,IAAMA,EAAO5Q,KAAK6Q,GAAMA,EAAErC,OAAOA,KAAS9I,KAAM8I,IAAW1E,EAAWkF,KAAQ,KAAO,KAAO,IAEhG,MAAMqB,WAAsBI,GAC/BjO,YAAYqE,EAAOlC,EAAMsL,GACrBS,MAAM7J,EAAO8I,GAAazM,MAAOyB,EAAMsL,GAE3CzB,OAAOA,EAAS1E,EAAW2E,SAIvB,GAHK3E,EAAW0E,IACZjF,EAAO3D,mBAAmB,sBAAuB,SAAU4I,GAE3DA,IAAW1E,EAAW4E,KACtB,OAAOlJ,KAAKC,UAAU,CAClBjF,KAAM,QACNmE,KAAM/C,KAAK+C,KACXsL,OAAQrO,KAAKqO,OAAOjQ,KAAK8Q,GAAUtL,KAAKqJ,MAAMiC,EAAMtC,OAAOA,QAGnE,MAAMxF,EAAS,GAKf,OAJIwF,IAAW1E,EAAW2E,SACtBzF,EAAOxE,KAAK,SAEhBwE,EAAOxE,KAAK5C,KAAK+C,KAAOgM,GAAWnC,EAAQ5M,KAAKqO,SACzCjH,EAAOtD,KAAK,KAEvByC,kBAAkBuD,GACd,OAAO2E,GAAc/C,WAAWhB,EAAIZ,IAExCvD,kBAAkB+C,GACd,MAAMvG,EAAOoI,EAAY,QAAS7B,GAC5B+E,EAAS9C,EAAcjC,GAE7B,OADAsC,GAAWtC,GACJ,IAAImF,GAActC,GAAQpJ,EAAMsL,IAGxC,MAAMK,WAAsBG,GAC/BjO,YAAYqE,EAAOlC,EAAMsL,EAAQc,GAC7BL,MAAM7J,EAAO8I,GAAaqB,MAAOrM,EAAMsL,GACvCjP,EAAiBY,KAAM,CAAEmP,UAAAA,IAE7BvC,OAAOA,EAAS1E,EAAW2E,SAIvB,GAHK3E,EAAW0E,IACZjF,EAAO3D,mBAAmB,sBAAuB,SAAU4I,GAE3DA,IAAW1E,EAAW4E,KACtB,OAAOlJ,KAAKC,UAAU,CAClBjF,KAAM,QACNuQ,UAAWnP,KAAKmP,UAChBpM,KAAM/C,KAAK+C,KACXsL,OAAQrO,KAAKqO,OAAOjQ,KAAKa,GAAM2E,KAAKqJ,MAAMhO,EAAE2N,OAAOA,QAG3D,MAAMxF,EAAS,GAQf,OAPIwF,IAAW1E,EAAW2E,SACtBzF,EAAOxE,KAAK,SAEhBwE,EAAOxE,KAAK5C,KAAK+C,KAAOgM,GAAWnC,EAAQ5M,KAAKqO,SAC5CzB,IAAW1E,EAAW2E,SAAW7M,KAAKmP,WACtC/H,EAAOxE,KAAK,aAETwE,EAAOtD,KAAK,KAEvByC,kBAAkBuD,GACd,OAAO4E,GAAchD,WAAWhB,EAAIZ,IAExCvD,kBAAkB+C,GACd,MAAMvG,EAAOoI,EAAY,QAAS7B,GAC5B+E,EAAS9C,EAAcjC,GAAQ,GAC/B6F,IAAc9D,EAAgB/B,EAAQnB,EAAO,CAAC,eAAe7H,IAAI,aAEvE,OADAsL,GAAWtC,GACJ,IAAIoF,GAAcvC,GAAQpJ,EAAMsL,EAAQc,IAGhD,MAAMX,WAA4BJ,GACrCxN,YAAYqE,EAAOrG,EAAMyP,EAAQgB,EAASC,GACtCR,MAAM7J,EAAOrG,EAAMyP,GACnBjP,EAAiBY,KAAM,CAAEqP,QAAAA,EAASC,IAAAA,IAEtC1C,OAAOA,EAAS1E,EAAW2E,SASvB,GARK3E,EAAW0E,IACZjF,EAAO3D,mBAAmB,sBAAuB,SAAU4I,GAE3DA,IAAW1E,EAAW2E,SACtBlF,EAAO5D,WAAW,0CAA2C,wBAAyB,CAClFY,UAAW,oBAGfiI,IAAW1E,EAAW4E,KACtB,OAAOlJ,KAAKC,UAAU,CAClBjF,KAAM,cACN2Q,gBAAkBvP,KAAKqP,QAAU,UAAY,YAC7CA,QAASrP,KAAKqP,QACdC,IAAmB,MAAZtP,KAAKsP,IAAetP,KAAKsP,SAAM5P,EACtC2O,OAAQrO,KAAKqO,OAAOjQ,KAAKa,GAAM2E,KAAKqJ,MAAMhO,EAAE2N,OAAOA,QAG3D,MAAMxF,EAAS,CAAC,cAAc2H,GAAWnC,EAAQ5M,KAAKqO,WAKtD,OAJAjH,EAAOxE,KAAM5C,KAAY,QAAI,UAAY,cACzB,MAAZA,KAAKsP,KACLlI,EAAOxE,KAAK,IAAI5C,KAAKsP,IAAI9E,cAEtBpD,EAAOtD,KAAK,KAEvByC,kBAAkBuD,GACd,OAAO0E,GAAoB9C,WAAWhB,EAAIZ,IAE9CvD,kBAAkBmH,GACd,MAAM,IAAIvO,MAAM,QAEpBoH,kBAAkB+C,GACd+B,EAAgB/B,EAAQnB,EAAO,CAAC,iBAChC,MAAMkG,EAAS9C,EAAcjC,GACvB+F,IAAYhE,EAAgB/B,EAAQnB,EAAO,CAAC,aAAa7H,IAAI,WAC7DgP,EAAM3D,GAAWrC,GAEvB,OADAsC,GAAWtC,GACJ,IAAIkF,GAAoBrC,GAAQ4B,GAAanN,YAAayN,EAAQgB,EAASC,IAGnF,MAAMX,WAAyBE,GAClCjO,YAAYqE,EAAOlC,EAAMwM,EAAiBlB,EAAQmB,EAASF,GACvDR,MAAM7J,EAAO8I,GAAa0B,SAAU1M,EAAMsL,GAI1CjP,EAAiBY,KAAM,CAAE0P,SAFa,SAApBH,GAAkD,SAApBA,EAEbD,IAAAA,EAAKE,QAHxCA,EAAUvR,OAAOsK,OAAOiH,EAAQjG,SAGiB8F,QADZ,YAApBE,EACyCA,gBAAAA,IAE9D3C,OAAOA,EAAS1E,EAAW2E,SAIvB,GAHK3E,EAAW0E,IACZjF,EAAO3D,mBAAmB,sBAAuB,SAAU4I,GAE3DA,IAAW1E,EAAW4E,KACtB,OAAOlJ,KAAKC,UAAU,CAClBjF,KAAM,WACNmE,KAAM/C,KAAK+C,KACX2M,SAAU1P,KAAK0P,SACfH,gBAA4C,eAAzBvP,KAAKuP,gBAAoCvP,KAAKuP,qBAAkB7P,EACnF2P,QAASrP,KAAKqP,QACdC,IAAmB,MAAZtP,KAAKsP,IAAetP,KAAKsP,SAAM5P,EACtC2O,OAAQrO,KAAKqO,OAAOjQ,KAAKa,GAAM2E,KAAKqJ,MAAMhO,EAAE2N,OAAOA,MACnD4C,QAASxP,KAAKwP,QAAQpR,KAAKuR,GAAM/L,KAAKqJ,MAAM0C,EAAE/C,OAAOA,QAG7D,MAAMxF,EAAS,GAiBf,OAhBIwF,IAAW1E,EAAW2E,SACtBzF,EAAOxE,KAAK,YAEhBwE,EAAOxE,KAAK5C,KAAK+C,KAAOgM,GAAWnC,EAAQ5M,KAAKqO,SAC5CzB,IAAW1E,EAAW2E,UACO,eAAzB7M,KAAKuP,iBACLnI,EAAOxE,KAAK5C,KAAKuP,iBAEjBvP,KAAKwP,SAAWxP,KAAKwP,QAAQtQ,SAC7BkI,EAAOxE,KAAK,WACZwE,EAAOxE,KAAKmM,GAAWnC,EAAQ5M,KAAKwP,WAExB,MAAZxP,KAAKsP,KACLlI,EAAOxE,KAAK,IAAI5C,KAAKsP,IAAI9E,eAG1BpD,EAAOtD,KAAK,KAEvByC,kBAAkBuD,GACd,OAAO6E,GAAiBjD,WAAWhB,EAAIZ,IAE3CvD,kBAAkB+C,GACd,MAAMvG,EAAOoI,EAAY,WAAY7B,GAC/B+E,EAAS9C,EAAcjC,GACvBsG,EA5lBd,SAA2BtG,GACvB,IAAIuG,EAAYxE,EAAgB/B,EAAQb,GAKxC,OAHAwC,EAAY4E,EAAW1H,EAAO,8BAA8BrJ,MAAM,OAClEmM,EAAY4E,EAAW1H,EAAO,+BAA+BrJ,MAAM,OAE/D+Q,EAAUvP,IAAI,QACP,OAEPuP,EAAUvP,IAAI,QACP,OAEPuP,EAAUvP,IAAI,WACP,UAEPuP,EAAUvP,IAAI,cACP,aAGPuP,EAAUvP,IAAI,YACP,OAEJ,aAskBgBwP,CAAkBxG,GACrC,IAAIkG,EAAU,GACVnE,EAAgB/B,EAAQnB,EAAO,CAAC,aAAa7H,IAAI,aACjDkP,EAAUjE,EAAcjC,IAE5B,MAAMgG,EAAM3D,GAAWrC,GAEvB,OADAsC,GAAWtC,GACJ,IAAIqF,GAAiBxC,GAAQpJ,EAAM6M,EAAYvB,EAAQmB,EAASF,IAGxE,MAAMV,WAAuBC,GAChCjC,SACI,MAAM,IAAIzN,MAAM,SAEpBoH,kBAAkBuD,GACd,OAAO8E,GAAelD,WAAWhB,EAAIZ,IAEzCvD,kBAAkB+C,GACd,MAAMvG,EAAOoI,EAAY,SAAU7B,GAC7B+E,EAAS9C,EAAcjC,GAE7B,OADAsC,GAAWtC,GACJ,IAAIsF,GAAezC,GAAQ4B,GAAagC,OAAQhN,EAAMsL,ICz4B9D,MCEM1G,GAAS,IAAIrE,EDFH,oCEIjB0M,GAAOjK,OAAO,GAEb,SAASkK,GAASC,GACrB,GAAIA,aAAkBhJ,WAAY,CAC9B,IAAIE,EAAS,MACb,IAAK,MAAM3I,KAAKyR,EACZ9I,GAPI,mBAOc3I,GAAK,GACvB2I,GARI,mBAQkB,GAAJ3I,GAEtB,OAAOsH,OAAOqB,GAElB,OAAOO,GAAO1B,UAAUiK,EAAQ,SAE7B,SAASC,GAASD,GACrB,MAAMnS,EAAQkS,GAASC,GAIvB,OAHInS,GAjBS,kBAiBYA,EAjBZ,mBAkBT4J,GAAO3D,mBAAmB,WAAY,QAASkM,GAE5C1L,OAAOzG,GAGX,SAASqS,GAAMF,EAAQG,GAC1B,MAAMtS,EAAQ4J,GAAO1B,UAAUiK,EAAQ,SACvC,GAAInS,EAAQ,EACR,MAAM,IAAIoB,MAAM,wCAEpB,IAAIiI,EAASrJ,EAAMyM,SAAS,IAC5B,GAAc,MAAV6F,EAEIjJ,EAAOlI,OAAS,IAChBkI,EAAS,IAAMA,OAGlB,CACD,MAAMkJ,EAAQ3I,GAAO7B,UAAUuK,EAAQ,SACvC,GAAY,EAARC,EAAYlJ,EAAOlI,OACnB,MAAM,IAAIC,MAAM,SAASpB,mBAAuBuS,KAGpD,KAAOlJ,EAAOlI,OAAkB,EAARoR,GACpBlJ,EAAS,IAAMA,EAGvB,MAAO,KAAOA,EAEX,SAASmJ,GAAQL,GACpB,MAAMnS,EAAQ4J,GAAO1B,UAAUiK,EAAQ,SACvC,GAAInS,EAAQ,EACR,MAAM,IAAIoB,MAAM,wCAEpB,GAAIpB,IAAUiS,GACV,OAAO,IAAI9I,WAAW,IAE1B,IAAIsJ,EAAMzS,EAAMyM,SAAS,IACrBgG,EAAItR,OAAS,IACbsR,EAAM,IAAMA,GAEhB,MAAMpJ,EAAS,IAAIF,WAAWsJ,EAAItR,OAAS,GAC3C,IAAK,IAAID,EAAI,EAAGA,EAAImI,EAAOlI,OAAQD,IAAK,CACpC,MAAMoI,EAAa,EAAJpI,EACfmI,EAAOnI,GAAKqI,SAASkJ,EAAIjJ,UAAUF,EAAQA,EAAS,GAAI,IAE5D,OAAOD,ECjEX,MAAM4I,GAAOjK,OAAO,GACd0K,GAAO1K,OAAO,GAEb,SAAS2K,GAASR,EAAQG,GAC7B,MAAMtS,EAAQ4J,GAAO1B,UAAUiK,EAAQ,SACjCI,EAAQvK,OAAO4B,GAAO7B,UAAUuK,EAAQ,UAE9C,GAAItS,GAAUuS,EAAQG,GAAO,CAEzB,UAAY1S,GADE0S,IAAQH,GAASG,IACFA,IAEjC,OAAO1S,EAGJ,SAAS4S,GAAOT,EAAQG,GAC3B,MAAMtS,EAAQ4J,GAAO1B,UAAUiK,EAAQ,SACjCI,EAAQvK,OAAO4B,GAAO7B,UAAUuK,EAAQ,UAC9C,GAAItS,EAAQiS,GAAM,CAEd,SAAYjS,GADE0S,IAAQH,GAASG,IACDA,GAElC,OAAO1S,EAEJ,SAAS6S,GAAKV,EAAQW,GACzB,MAAM9S,EAAQ4J,GAAO1B,UAAUiK,EAAQ,SACjCY,EAAOnJ,GAAO1B,UAAU4K,EAAO,QACrC,OAAO9S,GAAU0S,IAAQK,GAAQL,GC3BrC,IAWIM,GAAwBC,GAAoBC,GAX5ClR,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAMxF,MAAMiR,GAAoB,GAEpBC,GAAcpL,QAAQ,GAC5B,SAASqL,GAAW1N,EAASkB,EAAOD,EAAW5G,GAC3C,MAAMiR,EAAS,CAAEpK,MAAOA,EAAOD,UAAWA,GAI1C,YAHcjF,IAAV3B,IACAiR,EAAOjR,MAAQA,GAEZ4J,GAAO5D,WAAWL,EAAS,gBAAiBsL,GAGvD,IAAIqC,GAAQ,IACZ,KAAOA,GAAMnS,OAAS,KAClBmS,IAASA,GAGb,SAASC,GAAcC,GAInB,OAH0B,iBAAd,GAA0BA,EAAW,GAAKA,EAAW,KAAOA,EAAW,IAC/E5J,GAAO3D,mBAAmB,yBAA0B,WAAYuN,GAE7DxL,OAAO,IAAMsL,GAAM9J,UAAU,EAAGgK,IAEpC,SAASC,GAAYtB,EAAQuB,EAAY,GAC5C,IAAI1T,EAAQ4J,GAAO1B,UAAUiK,EAAQ,SACrC,MACMwB,EAAaJ,GADF3J,GAAO7B,UAAU2L,EAAW,aAEvCE,EAAgBjP,OAAOgP,GACvBE,EAAY7T,EAAQ,EACtB6T,IACA7T,GAASoT,IAEb,IAAIU,EAAWnP,OAAO3E,EAAQ2T,GAE9B,KAAOG,EAAS3S,OAASyS,EAAczS,OAAS,GAC5C2S,EAAW,IAAMA,EAGrB,KAAOA,EAAS3S,OAAS,GAAiD,MAA5C2S,EAAStK,UAAUsK,EAAS3S,OAAS,IAC/D2S,EAAWA,EAAStK,UAAU,EAAGsK,EAAS3S,OAAS,GAEvD,IAAIkI,EAAS1E,OAAO3E,EAAQ2T,GAO5B,OAN6B,IAAzBC,EAAczS,SACdkI,GAAU,IAAMyK,GAEhBD,IACAxK,EAAS,IAAMA,GAEZA,EAEJ,SAAS0K,GAAW/T,EAAO0T,EAAY,GAC1C,MACMC,EAAaJ,GADF3J,GAAO7B,UAAU2L,EAAW,aAEtB,iBAAnB,GAAgC1T,EAAMoJ,MAAM,gBAC5CQ,GAAO3D,mBAAmB,wBAAyB,QAASjG,GAGhE,MAAM6T,EAAsC,MAA1B7T,EAAMwJ,UAAU,EAAG,GACjCqK,IACA7T,EAAQA,EAAMwJ,UAAU,IAEd,MAAVxJ,GACA4J,GAAO3D,mBAAmB,gBAAiB,QAASjG,GAGxD,MAAM8P,EAAQ9P,EAAMe,MAAM,KACtB+O,EAAM3O,OAAS,GACfyI,GAAO3D,mBAAmB,0BAA2B,QAASjG,GAElE,IAAIgU,EAASlE,EAAM,IAAM,IAAMgE,EAAYhE,EAAM,IAAM,IAEvD,KAAyC,MAAlCgE,EAASA,EAAS3S,OAAS,IAC9B2S,EAAWA,EAAStK,UAAU,EAAGsK,EAAS3S,OAAS,GAWvD,IARI2S,EAAS3S,OAASwD,OAAOgP,GAAYxS,OAAS,GAC9CkS,GAAW,wCAAyC,YAAa,cAGpD,KAAbS,IACAA,EAAW,KAGRA,EAAS3S,OAASwD,OAAOgP,GAAYxS,OAAS,GACjD2S,GAAY,IAIhB,IAAIG,EAFejM,OAAOgM,GAEFL,EADF3L,OAAO8L,GAK7B,OAHID,IACAI,GAAOb,IAEJa,EAEJ,MAAMC,GACTrR,YAAYsR,EAAkBC,EAAQ7B,EAAOiB,GACrCW,IAAqBhB,IACrBvJ,GAAO5D,WAAW,2DAA4D,wBAAyB,CACnGY,UAAW,oBAGnB3E,KAAKmS,OAASA,EACdnS,KAAKsQ,MAAQA,EACbtQ,KAAKuR,SAAWA,EAChBvR,KAAK+C,MAAQoP,EAAS,GAAK,KAAO,QAAUzP,OAAO4N,GAAS,IAAM5N,OAAO6O,GACzEvR,KAAKoS,YAAcd,GAAcC,GACjCtT,OAAOsK,OAAOvI,MAElBuG,YAAYxI,GACR,GAAIA,aAAiBkU,GACjB,OAAOlU,EAEY,iBAAX,IACRA,EAAQ,YAAYA,KAExB,IAAIoU,GAAS,EACT7B,EAAQ,IACRiB,EAAW,GACf,GAAuB,iBAAX,EACR,GAAc,UAAVxT,QAGC,GAAc,WAAVA,EACLoU,GAAS,MAER,CACD,MAAMhL,EAAQpJ,EAAMoJ,MAAM,gCAC1B,IAAKA,EACD,OAAOQ,GAAO3D,mBAAmB,uBAAwB,SAAUjG,GAEvEoU,EAAuB,MAAbhL,EAAM,GAChBmJ,EAAQhJ,SAASH,EAAM,IACvBoK,EAAWjK,SAASH,EAAM,SAG7B,GAAIpJ,EAAO,CACZ,MAAM0E,EAAQ,CAACjD,EAAKZ,EAAMyT,IACJ,MAAdtU,EAAMyB,GACC6S,UAECtU,EAAMyB,KAAUZ,GACxB+I,GAAO3D,mBAAmB,yBAA2BxE,EAAM,QAAUZ,EAAO,IAAK,UAAYY,EAAKzB,EAAMyB,IAErGzB,EAAMyB,IAEjB2S,EAAS1P,EAAM,SAAU,UAAW0P,GACpC7B,EAAQ7N,EAAM,QAAS,SAAU6N,GACjCiB,EAAW9O,EAAM,WAAY,SAAU8O,GAQ3C,OANIjB,EAAQ,GACR3I,GAAO3D,mBAAmB,gDAAiD,eAAgBsM,GAE3FiB,EAAW,IACX5J,GAAO3D,mBAAmB,4CAA6C,kBAAmBuN,GAEvF,IAAIU,GAAYf,GAAmBiB,EAAQ7B,EAAOiB,IAG1D,MAAMe,GACT1R,YAAYsR,EAAkB1B,EAAKzS,EAAO6O,GACtCmE,GAAuBvN,IAAIxD,MAE3BgR,GAAmBxQ,IAAIR,UAAM,GACzBkS,IAAqBhB,IACrBvJ,GAAO5D,WAAW,2DAA4D,wBAAyB,CACnGY,UAAW,oBAGnB3E,KAAK4M,OAASqF,GAAYpG,KAAKe,GAE/B7M,GAAuBC,KAAMgR,GAAoBjT,EAAO,KACxDiC,KAAKuS,gBAAiB,EACtBtU,OAAOsK,OAAOvI,MAElBwS,UAAUC,GACNhS,GAAuBT,KAAM+Q,GAAwB,IAAKE,IAA0B1Q,KAAKP,KAAMyS,GAC/F,MAAMC,EAAIZ,GAAWrR,GAAuBT,KAAMgR,GAAoB,KAAMhR,KAAK4M,OAAO2E,UAClFoB,EAAIb,GAAWrR,GAAuBgS,EAAOzB,GAAoB,KAAMyB,EAAM7F,OAAO2E,UAC1F,OAAOe,GAAYM,UAAUF,EAAIC,EAAG3S,KAAK4M,OAAO2E,SAAUvR,KAAK4M,QAEnEiG,UAAUJ,GACNhS,GAAuBT,KAAM+Q,GAAwB,IAAKE,IAA0B1Q,KAAKP,KAAMyS,GAC/F,MAAMC,EAAIZ,GAAWrR,GAAuBT,KAAMgR,GAAoB,KAAMhR,KAAK4M,OAAO2E,UAClFoB,EAAIb,GAAWrR,GAAuBgS,EAAOzB,GAAoB,KAAMyB,EAAM7F,OAAO2E,UAC1F,OAAOe,GAAYM,UAAUF,EAAIC,EAAG3S,KAAK4M,OAAO2E,SAAUvR,KAAK4M,QAEnEkG,UAAUL,GACNhS,GAAuBT,KAAM+Q,GAAwB,IAAKE,IAA0B1Q,KAAKP,KAAMyS,GAC/F,MAAMC,EAAIZ,GAAWrR,GAAuBT,KAAMgR,GAAoB,KAAMhR,KAAK4M,OAAO2E,UAClFoB,EAAIb,GAAWrR,GAAuBgS,EAAOzB,GAAoB,KAAMyB,EAAM7F,OAAO2E,UAC1F,OAAOe,GAAYM,UAAWF,EAAIC,EAAK3S,KAAK4M,OAAOwF,YAAapS,KAAK4M,OAAO2E,SAAUvR,KAAK4M,QAE/FmG,UAAUN,GACNhS,GAAuBT,KAAM+Q,GAAwB,IAAKE,IAA0B1Q,KAAKP,KAAMyS,GAC/F,MAAMC,EAAIZ,GAAWrR,GAAuBT,KAAMgR,GAAoB,KAAMhR,KAAK4M,OAAO2E,UAClFoB,EAAIb,GAAWrR,GAAuBgS,EAAOzB,GAAoB,KAAMyB,EAAM7F,OAAO2E,UAC1F,OAAOe,GAAYM,UAAWF,EAAI1S,KAAK4M,OAAOwF,YAAeO,EAAG3S,KAAK4M,OAAO2E,SAAUvR,KAAK4M,QAE/F5F,QACI,MAAM6G,EAAQ7N,KAAKwK,WAAW1L,MAAM,KACf,IAAjB+O,EAAM3O,QACN2O,EAAMjL,KAAK,KAEf,IAAIwE,EAASkL,GAAYzG,KAAKgC,EAAM,GAAI7N,KAAK4M,QAC7C,MAAMoG,GAAenF,EAAM,GAAG1G,MAAM,UAIpC,OAHInH,KAAKiT,cAAgBD,IACrB5L,EAASA,EAAOyL,UAAUK,GAAIC,SAAS/L,EAAOwF,UAE3CxF,EAEXgM,UACI,MAAMvF,EAAQ7N,KAAKwK,WAAW1L,MAAM,KACf,IAAjB+O,EAAM3O,QACN2O,EAAMjL,KAAK,KAEf,IAAIwE,EAASkL,GAAYzG,KAAKgC,EAAM,GAAI7N,KAAK4M,QAC7C,MAAMoG,GAAenF,EAAM,GAAG1G,MAAM,UAIpC,OAHKnH,KAAKiT,cAAgBD,IACtB5L,EAASA,EAAOoL,UAAUU,GAAIC,SAAS/L,EAAOwF,UAE3CxF,EAGXiM,MAAM9B,GACc,MAAZA,IACAA,EAAW,GAGf,MAAM1D,EAAQ7N,KAAKwK,WAAW1L,MAAM,KAOpC,GANqB,IAAjB+O,EAAM3O,QACN2O,EAAMjL,KAAK,MAEX2O,EAAW,GAAKA,EAAW,IAAOA,EAAW,IAC7C5J,GAAO3D,mBAAmB,wBAAyB,WAAYuN,GAE/D1D,EAAM,GAAG3O,QAAUqS,EACnB,OAAOvR,KAEX,MAAMsT,EAAShB,GAAYzG,KAAK,IAAMwF,GAAM9J,UAAU,EAAGgK,GAAWvR,KAAK4M,QACnE2G,EAAOC,GAAKL,SAASnT,KAAK4M,QAChC,OAAO5M,KAAK8S,UAAUQ,GAAQd,UAAUe,GAAMvM,QAAQ+L,UAAUO,GAEpEG,SACI,MAAkE,QAA1DhT,GAAuBT,KAAMgR,GAAoB,MAA4E,MAA1DvQ,GAAuBT,KAAMgR,GAAoB,KAEhIiC,aACI,MAAqE,MAA7DxS,GAAuBT,KAAMgR,GAAoB,KAAK,GAElExG,WAAa,OAAO/J,GAAuBT,KAAMgR,GAAoB,KACrE0C,YAAYrD,GACR,MAAM,IAAIlR,MAAM,QAYpBwU,gBAAkB,OAAOC,WAAW5T,KAAKwK,YACzC2I,SAASvG,GACL,OAAO0F,GAAYhE,WAAW7N,GAAuBT,KAAMgR,GAAoB,KAAMpE,GAEzFrG,iBAAiBxI,EAAOwT,EAAW,EAAG3E,EAAS,SAC3C,OAAO0F,GAAYhE,WAAWkD,GAAYzT,EAAOwT,GAAWU,GAAYpG,KAAKe,IAEjFrG,kBAAkBxI,EAAO6O,EAAS,SAC9B,MAAMiH,EAAc5B,GAAYpG,KAAKe,GAC/BkH,EAAUhC,GAAW/T,EAAO8V,EAAYtC,WACzCsC,EAAY1B,QAAU2B,EAAU,GACjC1C,GAAW,oCAAqC,WAAY,QAASrT,GAEzE,MAAMyS,EACEqD,EAAY1B,OACL/B,GAAMO,GAAOmD,EAASD,EAAYvD,QAEtCF,GAAM0D,EAASD,EAAYvD,MAAQ,GAExCyD,EAAUvC,GAAYsC,EAASD,EAAYtC,UACjD,OAAO,IAAIe,GAAYpB,GAAmBV,EAAKuD,EAASF,GAE5DtN,iBAAiB2J,EAAQtD,EAAS,SAC9B,MAAM7O,EAAQ4J,GAAO/B,SAASsK,EAAQ,SAChC2D,EAAc5B,GAAYpG,KAAKe,GACrC,GAAI7O,EAAMmB,OAAS2U,EAAYvD,MAAQ,EACnC,MAAM,IAAInR,MAAM,YAEpB,IAAI2U,EAAU7D,GAASlS,GACnB8V,EAAY1B,SACZ2B,EAAUpD,GAASoD,EAASD,EAAYvD,QAE5C,MAAME,EAAMJ,GAAMO,GAAOmD,GAAUD,EAAY1B,OAAS,EAAI,GAAK0B,EAAYvD,QACvEyD,EAAUvC,GAAYsC,EAASD,EAAYtC,UACjD,OAAO,IAAIe,GAAYpB,GAAmBV,EAAKuD,EAASF,GAE5DtN,YAAYxI,EAAO6O,GACf,GAAuB,iBAAX,EACR,OAAO0F,GAAYhE,WAAWvQ,EAAO6O,GAEzC,GAAI7O,aAAiBmJ,WACjB,OAAOoL,GAAY0B,UAAUjW,EAAO6O,GAExC,IACI,OAAO0F,GAAYM,UAAU7U,EAAO,EAAG6O,GAE3C,MAAOtL,GAEH,GAAmB,qBAAfA,EAAMC,KACN,MAAMD,EAGd,OAAOqG,GAAO3D,mBAAmB,4BAA6B,QAASjG,GAE3EwI,qBAAqBxI,GACjB,SAAUA,IAASA,EAAMwU,iBAGjCvB,GAAqB,IAAIvP,QAAWsP,GAAyB,IAAInK,QAAWqK,GAA2B,SAAkCwB,GACjIzS,KAAK4M,OAAO7J,OAAS0P,EAAM7F,OAAO7J,MAClC4E,GAAO3D,mBAAmB,gDAAiD,QAASyO,IAG5F,MAAMS,GAAMZ,GAAYzG,KAAK,GACvB2H,GAAOlB,GAAYzG,KAAK,OClVxBoI,GAAW,6DACjB,IAAIC,GAAS,KACb,SAASC,GAASC,GACd,GAAc,MAAVF,GAAgB,CAChBA,GAAS,GACT,IAAK,IAAIjV,EAAI,EAAGA,EAAIgV,GAAS/U,OAAQD,IACjCiV,GAAOD,GAAShV,IAAM8G,OAAO9G,GAGrC,MAAMmI,EAAS8M,GAAOE,GAItB,OAHc,MAAVhN,GACAO,GAAO3D,mBAAmB,uBAAwB,SAAUoQ,GAEzDhN,EAEX,MAAM4I,GAAOjK,OAAO,GACdsO,GAAQtO,OAAO,IACd,SAASuO,GAAapE,GACzB,IAAInS,EAAQkS,GAAStI,GAAO/B,SAASsK,IACjC9I,EAAS,GACb,KAAOrJ,GACHqJ,EAAS6M,GAASzP,OAAOzG,EAAQsW,KAAUjN,EAC3CrJ,GAASsW,GAEb,OAAOjN,EAEJ,SAASmN,GAAaxW,GACzB,IAAIqJ,EAAS4I,GACb,IAAK,IAAI/Q,EAAI,EAAGA,EAAIlB,EAAMmB,OAAQD,IAC9BmI,GAAUiN,GACVjN,GAAU+M,GAASpW,EAAMkB,IAE7B,OAAOmR,GAAMhJ,GClCV,SAASoN,GAAYzW,EAAOmB,GAC/B,QAAuB,iBAAnB,IAAgCnB,EAAMoJ,MAAM,wBAGxB,iBAAZ,GAAwBpJ,EAAMmB,SAAW,EAAI,EAAIA,MAG9C,IAAXA,GAAoBnB,EAAMmB,OAAS,GAAO,IAyB3C,SAASuV,GAAY1W,GACxB,OAAQyW,GAAYzW,GAAO,IAAUA,aAAiBmJ,WCjCnD,MCEMS,GAAS,IAAIrE,EDFH,qCEEvB,IAAIoR,GAAO,KACPC,GAAS,KACb,IACID,GAAO3O,OAAO,KACd4O,GAAS5O,OAAO,OAEpB,MAAOzE,GACHkG,QAAQC,IAAI,qBAAsBnG,GAK/B,SAASsT,GAASC,GAIrB,GAHY,MAARA,GACAlN,GAAO3D,mBAAmB,0BAA2B,OAAQ6Q,GAE3C,iBAAV,EAAoB,CAC5BlN,GAAOnC,aAAaqP,GACpB,MAAMzN,EAAS,GACf,KAAOyN,GACHzN,EAAO0N,QAAe,IAAPD,GACfA,EAAOvN,SAAS5E,OAAOmS,EAAO,MAKlC,OAHsB,IAAlBzN,EAAOlI,QACPkI,EAAOxE,KAAK,GAET,IAAIsE,WAAWE,GAE1B,GAAIsN,IAA0B,iBAAlB,EAA4B,CACpC,MAAMtN,EAAS,GACf,KAAOyN,GACHzN,EAAO0N,QAAQtQ,OAAOqQ,EAAOF,KAC7BE,IAASH,GAKb,OAHsB,IAAlBtN,EAAOlI,QACPkI,EAAOxE,KAAK,GAET,IAAIsE,WAAWE,GAE1B,IA9BerJ,EA8BD8W,IA7BkC,mBAAvB9W,EAAiB,YA8BtC,OAAO6W,GAASC,EAAKnB,eA/B7B,IAAmB3V,EAiCf,GAAsB,iBAAV,EAAoB,CAC5B,IAAIyS,EAAMqE,EAIV,IAAKrE,EAAIrJ,MAAM,kBACX,MAAM,IAAI/D,WAAW,4BAA4BQ,KAAKC,UAAUgR,OAEpE,MAAMzN,EAAS,GACf,IAAK,IAAInI,EAAI,EAAGA,EAAIuR,EAAItR,OAAQD,GAAK,EACjCmI,EAAOxE,KAAK0E,SAASkJ,EAAIjJ,UAAUtI,EAAGA,EAAI,GAAI,KAElD,OAAO,IAAIiI,WAAWE,GAE1B,GAAIyN,aAAgB3N,WAChB,OAAO,IAAIA,WAAW2N,GAE1B,MAAM,IAAIxU,UAAU,mBAAmBuD,KAAKC,UAAUgR,MAEnD,SAASE,GAAgBF,GAI5B,OAHKJ,GAAYI,IACblN,GAAO3D,mBAAmB,0BAA2B,OAAQ6Q,GAE7DA,aAAgB3N,WACT2N,EAEJD,GAASC,GCrEb,SAASG,GAAaC,GACzB,OAAO,IAAI/N,WAAWgO,OAAOrJ,KAAKoJ,EAAU,WAGzC,SAASE,GAAaN,GACzB,OAAOK,OAAOrJ,KAAKlE,GAAO/B,SAASiP,EAAM,SAASrK,SAAS,UCJxD,SAAS4K,GAAQP,GACpB,MAAMQ,EAAQN,GAAgBF,GAC9B,IAAIzN,EAAS,KACb,IAAK,IAAInI,EAAI,EAAGA,EAAIoW,EAAMnW,OAAQD,IAAK,CACnC,MAAMR,EAAI4W,EAAMpW,GAChBmI,GANc,oBAMe,IAAJ3I,IAAa,GANxB,mBAM+C,GAAJA,GAE7D,OAAO2I,EAEJ,SAASkO,GAASvX,GACrB,IAAIqJ,EAASgO,GAAQR,GAAS7W,IAAQwJ,UAAU,GAChD,KAAkC,MAA3BH,EAAOG,UAAU,EAAG,IACvBH,EAASA,EAAOG,UAAU,GAK9B,MAHe,KAAXH,IACAA,EAAS,KAEN,KAAOA,ECfX,SAASmO,GAAOC,GACnB,MAAO,KAAOA,EAAMpX,KAAKqX,GAAML,GAAQK,GAAGlO,UAAU,KAAIzD,KAAK,IAE1D,SAAS4R,GAAWb,GACvB,OAAIL,GAAYK,GAAM,IACVA,EAAK3V,OAAS,GAAK,EAExB6V,GAAgBF,GAAM3V,OAE1B,SAASyW,GAAUd,EAAMe,EAAOC,GACnC,MAAMR,EAAQN,GAAgBF,GAM9B,OALW,MAAPgB,GAAeA,EAAMR,EAAMnW,QAC3ByI,GAAO5D,WAAW,kCAAmC,iBAAkB,CACnE+R,OAAQT,EAAOnW,OAAQmW,EAAMnW,OAAQmI,OAAQwO,IAG9CT,GAAQC,EAAM9L,MAAgB,MAATqM,EAAiB,EAAIA,EAAe,MAAPC,EAAeR,EAAMnW,OAAS2W,IAEpF,SAASE,GAAelB,GAC3B,IAAIQ,EAAQD,GAAQP,GAAMtN,UAAU,GACpC,KAAgC,MAAzB8N,EAAM9N,UAAU,EAAG,IACtB8N,EAAQA,EAAM9N,UAAU,GAE5B,MAAO,KAAO8N,ECxBlB,SAASW,GAAQnB,EAAM3V,EAAQ+W,GAC3B,MAAMZ,EAAQN,GAAgBF,GAC1B3V,EAASmW,EAAMnW,QACfyI,GAAO5D,WAAW,8BAA+B,iBAAkB,CAC/D+R,OAAQ,IAAI5O,WAAWmO,GACvBnW,OAAQA,EACRmI,OAAQnI,EAAS,IAGzB,MAAMkI,EAAS,IAAIF,WAAWhI,GAQ9B,OAPAkI,EAAO8O,KAAK,GACRD,EACA7O,EAAO5G,IAAI6U,EAAOnW,EAASmW,EAAMnW,QAGjCkI,EAAO5G,IAAI6U,EAAO,GAEfD,GAAQhO,GAEZ,SAAS+O,GAAYtB,EAAM3V,GAC9B,OAAO8W,GAAQnB,EAAM3V,GAAQ,GAE1B,SAASkX,GAAavB,EAAM3V,GAC/B,OAAO8W,GAAQnB,EAAM3V,GAAQ,GC1BjC,IAWImX,GAAmBC,GAAiBC,GAAoBC,GAAmBC,GAAcC,GAAoBC,GAAmBC,GAAmBC,GAAcC,GAAgBC,GAAoBC,GAXrMjX,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAOjF,MACDgX,GAAU,IAAI/P,WADI,IAIlBgQ,GAAiB,CAAC,QAClB/K,GAAS,GACR,MAAMgL,WAAe3J,MACxB5M,YAAYqE,EAAOmD,EAAOpK,GAqBtB,OApBA2J,EAAO5C,cAAcE,EAAOkH,GAAQ,UACpC2C,SAAS1G,GACTiO,GAAkB7S,IAAIxD,MACtBsW,GAAgB9V,IAAIR,UAAM,GAE1BD,GAAuBC,KAAMsW,GAAiB,IAAIc,IAAO,KACrDpZ,GACAA,EAAKsK,SAAQ,CAAC9I,EAAKd,KACJ,MAAPc,IAGAiB,GAAuBT,KAAMsW,GAAiB,KAAKhW,IAAId,GACtDiB,GAAuBT,KAAMsW,GAAiB,KAAK5V,IAAIlB,GAAMoD,KAAKlE,GAGnE+B,GAAuBT,KAAMsW,GAAiB,KAAK9V,IAAIhB,EAAK,CAACd,QAIzET,OAAOsK,OAAOvI,MACP,IAAIqX,MAAMrX,KAAM,CACnBU,IAAK,CAACrB,EAAQiY,EAAMrX,KAChB,GAAsB,iBAAV,EAAoB,CAC5B,GAAIqX,EAAKnQ,MAAM,YAAa,CACxB,MAAMzI,EAAQiJ,EAAO7B,UAAUwR,EAAM,UACrC,GAAI5Y,EAAQ,GAAKA,GAASsB,KAAKd,OAC3B,MAAM,IAAIkE,WAAW,uBAEzB,MAAMmU,EAAOlY,EAAOX,GAIpB,OAHI6Y,aAAgBpY,OAChBsB,GAAuBT,KAAMqW,GAAmB,IAAKE,IAAoBhW,KAAKP,KAAM,SAAStB,IAAS6Y,GAEnGA,EAGX,GAAID,KAAQjY,GAAU6X,GAAepS,QAAQwS,IAAS,EAClD,OAAOE,QAAQ9W,IAAIrB,EAAQiY,EAAMrX,GAGrC,KAAMqX,KAAQjY,GACV,OAAOA,EAAOoY,SAASH,GAG/B,OAAOE,QAAQ9W,IAAIrB,EAAQiY,EAAMrX,MAI7CsJ,MAAMqM,EAAOC,GACI,MAATD,IACAA,EAAQ,GAED,MAAPC,IACAA,EAAM7V,KAAKd,QAEf,MAAMkI,EAAS,GACf,IAAK,IAAInI,EAAI2W,EAAO3W,EAAI4W,EAAK5W,IAAK,CAC9B,IAAIlB,EACJ,IACIA,EAAQiC,KAAKf,GAEjB,MAAOqC,GACHvD,EAAQuD,EAAMA,MAElB8F,EAAOxE,KAAK7E,GAEhB,OAAOqJ,EAEXqQ,SAAS1U,GACL,MAAMrE,EAAQ+B,GAAuBT,KAAMsW,GAAiB,KAAK5V,IAAIqC,GACrE,GAAa,MAATrE,GAAkC,IAAjBA,EAAMQ,OAAc,CACrC,MAAMqY,EAAOvX,KAAKtB,EAAM,IAIxB,OAHI6Y,aAAgBpY,OAChBsB,GAAuBT,KAAMqW,GAAmB,IAAKE,IAAoBhW,KAAKP,KAAM,YAAY4D,KAAKC,UAAUd,KAASwU,GAErHA,EAEX,MAAM,IAAIpY,MAAM,uBAAuByE,KAAKC,UAAUd,MAE1DwD,iBAAiB6B,EAAOpK,GACpB,OAAO,IAAImZ,GAAOhL,GAAQ/D,EAAOpK,IA6BzC,SAASyZ,GAAS1Z,GACd,IAAIsX,EAAQ9E,GAAQxS,GAWpB,OAVIsX,EAAMnW,OAtHU,IAuHhByI,EAAO5D,WAAW,sBAAuB,iBAAkB,CACvD+R,OAAQT,EACRnW,OAzHY,GA0HZmI,OAAQgO,EAAMnW,SAGlBmW,EAAMnW,OA7HU,KA8HhBmW,EAAQT,GAASW,GAAO,CAAC0B,GAAQ1N,MAAM8L,EAAMnW,OA9H7B,IA8HiDmW,MAE9DA,EAtCXiB,GAAkB,IAAI7U,QAAW4U,GAAoB,IAAIzP,QAAW2P,GAAqB,SAA4BxT,EAAMzB,GACvH,MAAMoW,EAAU,IAAIvY,MAAM,0DAA0D4D,KAEpF,MADA2U,EAAQpW,MAAQA,EACVoW,GAqCH,MAAMC,GACT/W,YAAYmC,EAAMnE,EAAMgZ,EAAWC,GAC/BzY,EAAiBY,KAAM,CAAE+C,KAAAA,EAAMnE,KAAAA,EAAMgZ,UAAAA,EAAWC,QAAAA,GAAW,CACvD9U,KAAM,SAAUnE,KAAM,SAAUgZ,UAAW,SAAUC,QAAS,YAGtEC,YAAYpU,EAAS3F,GACjB,OAAO4J,EAAO3D,mBAAmBN,EAAS1D,KAAK4X,UAAW7Z,IAG3D,MAAMga,GACTnX,cACI4V,GAAkBhT,IAAIxD,MAEtByW,GAAajW,IAAIR,UAAM,GACvB0W,GAAmBlW,IAAIR,UAAM,GAC7BD,GAAuBC,KAAMyW,GAAc,GAAI,KAC/C1W,GAAuBC,KAAM0W,GAAoB,EAAG,KAEpD7B,WACA,OAAOU,GAAO9U,GAAuBT,KAAMyW,GAAc,MAEzDvX,aAAW,OAAOuB,GAAuBT,KAAM0W,GAAoB,KACvEsB,aAAaC,GACT,OAAOxX,GAAuBT,KAAMwW,GAAmB,IAAKG,IAAmBpW,KAAKP,KAAM4U,GAASqD,EAAOpD,OAG9GqD,WAAWna,GACP,IAAIsX,EAAQT,GAAS7W,GACrB,MAAMoa,EAAgB9C,EAAMnW,OA/JZ,GAmKhB,OAHIiZ,IACA9C,EAAQT,GAASW,GAAO,CAACF,EAAO4B,GAAQ1N,MAAM4O,OAE3C1X,GAAuBT,KAAMwW,GAAmB,IAAKG,IAAmBpW,KAAKP,KAAMqV,GAG9F+C,WAAWra,GACP,OAAO0C,GAAuBT,KAAMwW,GAAmB,IAAKG,IAAmBpW,KAAKP,KAAMyX,GAAS1Z,IAIvGsa,sBACI,MAAMhR,EAAS5G,GAAuBT,KAAMyW,GAAc,KAAKvX,OAG/D,OAFAuB,GAAuBT,KAAMyW,GAAc,KAAK7T,KAAKqU,IACrDlX,GAAuBC,KAAM0W,GAAoBjW,GAAuBT,KAAM0W,GAAoB,KA9KlF,GA8KmG,KAC3G3Y,IACJ0C,GAAuBT,KAAMyW,GAAc,KAAKpP,GAAUoQ,GAAS1Z,KAI/E0Y,GAAe,IAAIhV,QAAWiV,GAAqB,IAAIjV,QAAW+U,GAAoB,IAAI5P,QAAW+P,GAAoB,SAA2B9B,GAGhJ,OAFApU,GAAuBT,KAAMyW,GAAc,KAAK7T,KAAKiS,GACrD9U,GAAuBC,KAAM0W,GAAoBjW,GAAuBT,KAAM0W,GAAoB,KAAO7B,EAAK3V,OAAQ,KAC/G2V,EAAK3V,QAET,MAAMoZ,GACT1X,YAAYiU,EAAM0D,EAAYC,GAC1B5B,GAAkBpT,IAAIxD,MACtB6W,GAAarW,IAAIR,UAAM,GACvB8W,GAAetW,IAAIR,UAAM,GACzB+W,GAAmBvW,IAAIR,UAAM,GAC7BZ,EAAiBY,KAAM,CAAEwY,aAAcA,IACvCzY,GAAuBC,KAAM6W,GAAcjC,GAASC,GAAO,KAC3D9U,GAAuBC,KAAM+W,GAAoBwB,GAAcD,GAAOG,OAAQ,KAC9E1Y,GAAuBC,KAAM8W,GAAgB,EAAG,KAEhDjC,WAAS,OAAOO,GAAQ3U,GAAuBT,KAAM6W,GAAc,MACnEnB,iBAAe,OAAOjV,GAAuBT,KAAM6W,GAAc,KAAK3X,OACtEwZ,eAAa,OAAOjY,GAAuBT,KAAM8W,GAAgB,KACjEzB,YAAU,OAAO,IAAInO,WAAWzG,GAAuBT,KAAM6W,GAAc,MAE/EtQ,cAAc3H,EAAMb,GAChB,IAAIoJ,EAAQvI,EAAKuI,MAAM,mBAIvB,OAHIA,GAASG,SAASH,EAAM,KAAO,KAC/BpJ,EAAQA,EAAMoS,YAEXpS,EAEX0a,OAAO7Z,EAAMb,GACT,OAAO0C,GAAuBT,KAAM+W,GAAoB,KAAKxW,KAAKP,KAAMpB,EAAMb,GAGlF4a,UAAUtR,GACN,OAAO,IAAIiR,GAAO7X,GAAuBT,KAAM6W,GAAc,KAAKtN,MAAM9I,GAAuBT,KAAM8W,GAAgB,KAAOzP,GAAS5G,GAAuBT,KAAM+W,GAAoB,KAAM/W,KAAKwY,YAGrMI,UAAU1Z,EAAQ2Z,GACd,IAAIxD,EAAQ5U,GAAuBT,KAAM4W,GAAmB,IAAKI,IAAmBzW,KAAKP,KAAM,EAAGd,IAAU2Z,GAG5G,OAFA9Y,GAAuBC,KAAM8W,GAAgBrW,GAAuBT,KAAM8W,GAAgB,KAAOzB,EAAMnW,OAAQ,KAExGmW,EAAM9L,MAAM,EAAGrK,GAG1B4Z,YACI,OAAO7I,GAASjQ,KAAK4Y,UAhOL,KAkOpBG,YACI,OAAO5I,GAASnQ,KAAK4Y,UAnOL,MAsOxB/B,GAAe,IAAIpV,QAAWqV,GAAiB,IAAIrV,QAAWsV,GAAqB,IAAItV,QAAWmV,GAAoB,IAAIhQ,QAAWoQ,GAAoB,SAA2B3P,EAAQnI,EAAQ2Z,GAChM,IAAIG,EAvOgB,GAuOAjS,KAAKkS,KAAK/Z,EAvOV,IAoPpB,OAZIuB,GAAuBT,KAAM8W,GAAgB,KAAOkC,EAAgBvY,GAAuBT,KAAM6W,GAAc,KAAK3X,SAChHc,KAAKwY,YAAcK,GAASpY,GAAuBT,KAAM8W,GAAgB,KAAO5X,GAAUuB,GAAuBT,KAAM6W,GAAc,KAAK3X,OAC1I8Z,EAAgB9Z,EAGhByI,EAAO5D,WAAW,qBAAsB,iBAAkB,CACtD+R,OAAQlB,GAASnU,GAAuBT,KAAM6W,GAAc,MAC5D3X,OAAQuB,GAAuBT,KAAM6W,GAAc,KAAK3X,OACxDmI,OAAQ5G,GAAuBT,KAAM8W,GAAgB,KAAOkC,KAIjEvY,GAAuBT,KAAM6W,GAAc,KAAKtN,MAAM9I,GAAuBT,KAAM8W,GAAgB,KAAMrW,GAAuBT,KAAM8W,GAAgB,KAAOkC;;AC9PjK,MAAME,GAAOC,GAAQ,IAAIC,YAAYD,EAAIrD,OAAQqD,EAAIE,WAAYtS,KAAKC,MAAMmS,EAAIG,WAAa,IAEvFC,GAAcJ,GAAQ,IAAIK,SAASL,EAAIrD,OAAQqD,EAAIE,WAAYF,EAAIG,YAEnEG,GAAO,CAACC,EAAMC,IAAWD,GAAS,GAAKC,EAAWD,IAASC,EAIxE,KAHgF,KAA5D,IAAIzS,WAAW,IAAIkS,YAAY,CAAC,YAAatD,QAAQ,IAIrE,MAAM,IAAI3W,MAAM,+CACNqO,MAAM3B,KAAK,CAAE3M,OAAQ,MAAO,CAACT,EAAGQ,IAAMA,EAAEuL,SAAS,IAAIoP,SAAS,EAAG,OAkCxE,MAAMC,GAAW,MACpB,MAAMC,EAAgC,oBAAXC,QACG,mBAAnBA,OAAOC,SACdD,OAAOC,QAAQC,KAAKF,QACxB,IACI,GAAID,EAAa,CACb,MAAMI,aAAEA,GAAiBJ,EAAY,UACrC,MAAO,IAAM,IAAI5b,SAASI,GAAY4b,EAAa5b,MAG3D,MAAO0H,IACP,MAAO,IAAM,IAAI9H,SAASI,GAAY6b,WAAW7b,EAAS,MAXtC,GAcjBT,eAAeuc,GAAUC,EAAOC,EAAMC,GACzC,IAAIC,EAAKC,KAAKC,MACd,IAAK,IAAIzb,EAAI,EAAGA,EAAIob,EAAOpb,IAAK,CAC5Bsb,EAAGtb,GAEH,MAAM0b,EAAOF,KAAKC,MAAQF,EACtBG,GAAQ,GAAKA,EAAOL,UAElBT,KACNW,GAAMG,IASP,SAASC,GAAQ/F,GAGpB,GAFoB,iBAATA,IACPA,EARD,SAAqBgG,GACxB,GAAmB,iBAARA,EACP,MAAM,IAAIxa,UAAU,2CAA2Cwa,GAEnE,OAAO,IAAIC,aAAcC,OAAOF,GAIrBG,CAAYnG,MACjBA,aAAgB3N,YAClB,MAAM,IAAI7G,UAAU,iDAAiDwU,MACzE,OAAOA,EAoBJ,SAASoG,GAAaC,GACzB,IAAK1W,OAAO2W,cAAcD,IAAMA,EAAI,EAChC,MAAM,IAAI/b,MAAM,2BAA2B+b,KAa5C,SAASE,GAAWC,GACvB,GAAoB,mBAATA,GAA8C,mBAAhBA,EAAKC,OAC1C,MAAM,IAAInc,MAAM,mDACpB8b,GAAaI,EAAKE,WAClBN,GAAaI,EAAKG,UAGf,MAAMC,GAETjS,QACI,OAAOxJ,KAAK0b,cAKb,SAASC,GAAUC,EAAKC,GAC3B,QAAcnc,IAAVmc,IAAyC,iBAAVA,IAFhBnO,EAEqDmO,EAFL,oBAAxC5d,OAAO6d,UAAUtR,SAASjK,KAAKmN,IAA8BA,EAAI9M,cAAgB3C,SAGxG,MAAM,IAAIoC,UAAU,yCAHN,IAACqN,EAKnB,OADazP,OAAO8N,OAAO6P,EAAKC,GAG7B,SAASE,GAAgBC,GAC5B,MAAMC,EAASvY,GAAYsY,IAAkBE,OAAOtB,GAAQlX,IAAUyY,SAChEC,EAAMJ,IAIZ,OAHAC,EAAMV,UAAYa,EAAIb,UACtBU,EAAMT,SAAWY,EAAIZ,SACrBS,EAAMX,OAAS,IAAMU,IACdC,ECnJX,MAAMI,WAAaZ,GACf7a,YAAYya,EAAMiB,GACdxN,QACA9O,KAAKuc,UAAW,EAChBvc,KAAKwc,WAAY,EACjBpB,GAAWC,GACX,MAAM7b,EAAMob,GAAQ0B,GAEpB,GADAtc,KAAKyc,MAAQpB,EAAKC,WACZtb,KAAKyc,iBAAiBhB,IACxB,MAAM,IAAIpb,UAAU,uDACxB,MAAMmb,EAAYxb,KAAKwb,SAAWxb,KAAKyc,MAAMjB,SAC7Cxb,KAAKub,UAAYvb,KAAKyc,MAAMlB,UAC5B,MAAMmB,EAAM,IAAIxV,WAAWsU,GAE3BkB,EAAIlc,IAAIhB,EAAIN,OAASc,KAAKyc,MAAMjB,SAAWH,EAAKC,SAASY,OAAO1c,GAAK2c,SAAW3c,GAChF,IAAK,IAAIP,EAAI,EAAGA,EAAIyd,EAAIxd,OAAQD,IAC5Byd,EAAIzd,IAAM,GACde,KAAKyc,MAAMP,OAAOQ,GAElB1c,KAAK2c,MAAQtB,EAAKC,SAElB,IAAK,IAAIrc,EAAI,EAAGA,EAAIyd,EAAIxd,OAAQD,IAC5Byd,EAAIzd,IAAM,IACde,KAAK2c,MAAMT,OAAOQ,GAClBA,EAAIxG,KAAK,GAEbgG,OAAOU,GACH,GAAI5c,KAAKwc,UACL,MAAM,IAAIrd,MAAM,yBAEpB,OADAa,KAAKyc,MAAMP,OAAOU,GACX5c,KAEX6c,WAAWC,GACP,GAAI9c,KAAKwc,UACL,MAAM,IAAIrd,MAAM,yBACpB,KAAM2d,aAAe5V,aAAe4V,EAAI5d,SAAWc,KAAKub,UACpD,MAAM,IAAIpc,MAAM,+BACpB,GAAIa,KAAKuc,SACL,MAAM,IAAIpd,MAAM,+BACpBa,KAAKuc,UAAW,EAChBvc,KAAKyc,MAAMI,WAAWC,GACtB9c,KAAK2c,MAAMT,OAAOY,GAClB9c,KAAK2c,MAAME,WAAWC,GACtB9c,KAAK+c,UAETZ,SACI,MAAMW,EAAM,IAAI5V,WAAWlH,KAAK2c,MAAMpB,WAEtC,OADAvb,KAAK6c,WAAWC,GACTA,EAEXpB,WAAW5P,GAEPA,IAAOA,EAAK7N,OAAOqd,OAAOrd,OAAO+e,eAAehd,MAAO,KACvD,MAAM2c,MAAEA,EAAKF,MAAEA,EAAKF,SAAEA,EAAQC,UAAEA,EAAShB,SAAEA,EAAQD,UAAEA,GAAcvb,KAQnE,OAPA8L,EAAKA,GACFyQ,SAAWA,EACdzQ,EAAG0Q,UAAYA,EACf1Q,EAAG0P,SAAWA,EACd1P,EAAGyP,UAAYA,EACfzP,EAAG6Q,MAAQA,EAAMjB,WAAW5P,EAAG6Q,OAC/B7Q,EAAG2Q,MAAQA,EAAMf,WAAW5P,EAAG2Q,OACxB3Q,EAEXiR,UACI/c,KAAKwc,WAAY,EACjBxc,KAAK2c,MAAMI,UACX/c,KAAKyc,MAAMM,WASZ,MAAME,GAAO,CAAC5B,EAAM7b,EAAKkE,IAAY,IAAI2Y,GAAKhB,EAAM7b,GAAK0c,OAAOxY,GAASyY,SCxCzE,SAASe,GAAO7B,EAAM8B,EAAUC,EAAMC,GACzC,MAAMrQ,EAAEA,EAACsQ,MAAEA,EAAKC,GAAEA,EAAEC,IAAEA,EAAGC,QAAEA,GAlC/B,SAAoBpC,EAAMqC,EAAWC,EAAO9B,GACxCT,GAAWC,GACX,MAAMgC,EAAO1B,GAAU,CAAE2B,MAAO,GAAIM,UAAW,IAAM/B,IAC/C7O,EAAEA,EAACsQ,MAAEA,EAAKM,UAAEA,GAAcP,EAIhC,GAHApC,GAAajO,GACbiO,GAAaqC,GACbrC,GAAa2C,GACT5Q,EAAI,EACJ,MAAM,IAAI7N,MAAM,yCACpB,MAAMge,EAAWvC,GAAQ8C,GACnBN,EAAOxC,GAAQ+C,GAEfJ,EAAK,IAAIrW,WAAWoW,GAEpBE,EAAMP,GAAK3B,OAAOD,EAAM8B,GACxBM,EAAUD,EAAI9B,aAAaQ,OAAOkB,GACxC,MAAO,CAAEpQ,EAAAA,EAAGsQ,MAAAA,EAAOM,UAAAA,EAAWL,GAAAA,EAAIC,IAAAA,EAAKC,QAAAA,GAkBAI,CAAWxC,EAAM8B,EAAUC,EAAMC,GACxE,IAAIS,EACJ,MAAM3E,EAAM,IAAIjS,WAAW,GACrB6W,EAAOxE,GAAWJ,GAClB6E,EAAI,IAAI9W,WAAWsW,EAAIjC,WAE7B,IAAK,IAAI0C,EAAK,EAAGC,EAAM,EAAGA,EAAMZ,EAAOW,IAAMC,GAAOV,EAAIjC,UAAW,CAE/D,MAAM4C,EAAKZ,EAAGa,SAASF,EAAKA,EAAMV,EAAIjC,WACtCwC,EAAKM,SAAS,EAAGJ,GAAI,IAGpBH,EAAOL,EAAQ/B,WAAWoC,IAAO5B,OAAO/C,GAAK0D,WAAWmB,GACzDG,EAAG3d,IAAIwd,EAAEI,SAAS,EAAGD,EAAGjf,SACxB,IAAK,IAAIof,EAAK,EAAGA,EAAKtR,EAAGsR,IAAM,CAE3Bd,EAAI9B,WAAWoC,GAAM5B,OAAO8B,GAAGnB,WAAWmB,GAC1C,IAAK,IAAI/e,EAAI,EAAGA,EAAIkf,EAAGjf,OAAQD,IAC3Bkf,EAAGlf,IAAM+e,EAAE/e,IAGvB,OArCJ,SAAsBue,EAAKC,EAASF,EAAIO,EAAME,GAM1C,OALAR,EAAIT,UACJU,EAAQV,UACJe,GACAA,EAAKf,UACTiB,EAAE9H,KAAK,GACAqH,EA+BAgB,CAAaf,EAAKC,EAASF,EAAIO,EAAME,GDmBhDf,GAAK3B,OAAS,CAACD,EAAM7b,IAAQ,IAAI6c,GAAKhB,EAAM7b,GE/DrC,MAAMgf,WAAa/C,GACtB7a,YAAY4a,EAAUD,EAAWkD,EAAWC,GACxC5P,QACA9O,KAAKwb,SAAWA,EAChBxb,KAAKub,UAAYA,EACjBvb,KAAKye,UAAYA,EACjBze,KAAK0e,KAAOA,EACZ1e,KAAKuc,UAAW,EAChBvc,KAAKd,OAAS,EACdc,KAAKke,IAAM,EACXle,KAAKwc,WAAY,EACjBxc,KAAK8V,OAAS,IAAI5O,WAAWsU,GAC7Bxb,KAAK+d,KAAOxE,GAAWvZ,KAAK8V,QAEhCoG,OAAOrH,GACH,GAAI7U,KAAKwc,UACL,MAAM,IAAIrd,MAAM,yBACpB,MAAM4e,KAAEA,EAAIjI,OAAEA,EAAM0F,SAAEA,EAAQe,SAAEA,GAAavc,KAC7C,GAAIuc,EACA,MAAM,IAAIpd,MAAM,+BAEpB,MAAMwf,GADN9J,EAAO+F,GAAQ/F,IACE3V,OACjB,IAAK,IAAIgf,EAAM,EAAGA,EAAMS,GAAM,CAC1B,MAAMC,EAAO7X,KAAKrB,IAAI8V,EAAWxb,KAAKke,IAAKS,EAAMT,GAEjD,GAAIU,IAASpD,EAMb1F,EAAOtV,IAAIqU,EAAKuJ,SAASF,EAAKA,EAAMU,GAAO5e,KAAKke,KAChDle,KAAKke,KAAOU,EACZV,GAAOU,EACH5e,KAAKke,MAAQ1C,IACbxb,KAAKuN,QAAQwQ,EAAM,GACnB/d,KAAKke,IAAM,OAXf,CACI,MAAMW,EAAWtF,GAAW1E,GAC5B,KAAO2G,GAAYmD,EAAMT,EAAKA,GAAO1C,EACjCxb,KAAKuN,QAAQsR,EAAUX,IAanC,OAFAle,KAAKd,QAAU2V,EAAK3V,OACpBc,KAAK8e,aACE9e,KAEX6c,WAAWC,GACP,GAAI9c,KAAKwc,UACL,MAAM,IAAIrd,MAAM,yBACpB,KAAM2d,aAAe5V,aAAe4V,EAAI5d,OAASc,KAAKub,UAClD,MAAM,IAAIpc,MAAM,gCACpB,GAAIa,KAAKuc,SACL,MAAM,IAAIpd,MAAM,+BACpBa,KAAKuc,UAAW,EAIhB,MAAMzG,OAAEA,EAAMiI,KAAEA,EAAIvC,SAAEA,EAAQkD,KAAEA,GAAS1e,KACzC,IAAIke,IAAEA,GAAQle,KAEd8V,EAAOoI,KAAS,IAChBle,KAAK8V,OAAOsI,SAASF,GAAKhI,KAAK,GAE3BlW,KAAKye,UAAYjD,EAAW0C,IAC5Ble,KAAKuN,QAAQwQ,EAAM,GACnBG,EAAM,GAGV,IAAK,IAAIjf,EAAIif,EAAKjf,EAAIuc,EAAUvc,IAC5B6W,EAAO7W,GAAK,GA/ExB,SAAsB8e,EAAM1E,EAAYtb,EAAO2gB,GAC3C,GAAiC,mBAAtBX,EAAKgB,aACZ,OAAOhB,EAAKgB,aAAa1F,EAAYtb,EAAO2gB,GAChD,MAAMM,EAAOjZ,OAAO,IACdkZ,EAAWlZ,OAAO,YAClBmZ,EAAK1a,OAAQzG,GAASihB,EAAQC,GAC9BE,EAAK3a,OAAOzG,EAAQkhB,GACpBG,EAAIV,EAAO,EAAI,EACfW,EAAIX,EAAO,EAAI,EACrBX,EAAKuB,UAAUjG,EAAa+F,EAAGF,EAAIR,GACnCX,EAAKuB,UAAUjG,EAAagG,EAAGF,EAAIT,GAyE/BK,CAAahB,EAAMvC,EAAW,EAAGzV,OAAqB,EAAd/F,KAAKd,QAAawf,GAC1D1e,KAAKuN,QAAQwQ,EAAM,GACnB,MAAMwB,EAAQhG,GAAWuD,GACzB9c,KAAKU,MAAM4H,SAAQ,CAAC7J,EAAGQ,IAAMsgB,EAAMD,UAAU,EAAIrgB,EAAGR,EAAGigB,KAE3DvC,SACI,MAAMrG,OAAEA,EAAMyF,UAAEA,GAAcvb,KAC9BA,KAAK6c,WAAW/G,GAChB,MAAM0J,EAAM1J,EAAOvM,MAAM,EAAGgS,GAE5B,OADAvb,KAAK+c,UACEyC,EAEX9D,WAAW5P,GACPA,IAAOA,EAAK,IAAI9L,KAAKY,aACrBkL,EAAGtL,OAAOR,KAAKU,OACf,MAAM8a,SAAEA,EAAQ1F,OAAEA,EAAM5W,OAAEA,EAAMqd,SAAEA,EAAQC,UAAEA,EAAS0B,IAAEA,GAAQle,KAO/D,OANA8L,EAAG5M,OAASA,EACZ4M,EAAGoS,IAAMA,EACTpS,EAAGyQ,SAAWA,EACdzQ,EAAG0Q,UAAYA,EACXtd,EAASsc,GACT1P,EAAGgK,OAAOtV,IAAIsV,GACXhK,GCxGf,MAAM2T,GAAM,CAAC/M,EAAGC,EAAG3F,IAAO0F,EAAIC,GAAOD,EAAI1F,EAEnC0S,GAAM,CAAChN,EAAGC,EAAG3F,IAAO0F,EAAIC,EAAMD,EAAI1F,EAAM2F,EAAI3F,EAI5C2S,GAAW,IAAIvG,YAAY,CAC7B,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,aAIlFwG,GAAK,IAAIxG,YAAY,CACvB,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,aAIlFyG,GAAW,IAAIzG,YAAY,IACjC,MAAM0G,WAAetB,GACjB5d,cACIkO,MAAM,GAAI,GAAI,GAAG,GAGjB9O,KAAK+f,EAAY,EAARH,GAAG,GACZ5f,KAAKggB,EAAY,EAARJ,GAAG,GACZ5f,KAAKigB,EAAY,EAARL,GAAG,GACZ5f,KAAKkgB,EAAY,EAARN,GAAG,GACZ5f,KAAKmgB,EAAY,EAARP,GAAG,GACZ5f,KAAKogB,EAAY,EAARR,GAAG,GACZ5f,KAAKqgB,EAAY,EAART,GAAG,GACZ5f,KAAKsgB,EAAY,EAARV,GAAG,GAEhBlf,MACI,MAAMqf,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAMtgB,KACnC,MAAO,CAAC+f,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GAGjC9f,IAAIuf,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GACrBtgB,KAAK+f,EAAQ,EAAJA,EACT/f,KAAKggB,EAAQ,EAAJA,EACThgB,KAAKigB,EAAQ,EAAJA,EACTjgB,KAAKkgB,EAAQ,EAAJA,EACTlgB,KAAKmgB,EAAQ,EAAJA,EACTngB,KAAKogB,EAAQ,EAAJA,EACTpgB,KAAKqgB,EAAQ,EAAJA,EACTrgB,KAAKsgB,EAAQ,EAAJA,EAEb/S,QAAQwQ,EAAM1W,GAEV,IAAK,IAAIpI,EAAI,EAAGA,EAAI,GAAIA,IAAKoI,GAAU,EACnCwY,GAAS5gB,GAAK8e,EAAKwC,UAAUlZ,GAAQ,GACzC,IAAK,IAAIpI,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAC1B,MAAMuhB,EAAMX,GAAS5gB,EAAI,IACnBwhB,EAAKZ,GAAS5gB,EAAI,GAClByhB,EAAKjH,GAAK+G,EAAK,GAAK/G,GAAK+G,EAAK,IAAOA,IAAQ,EAC7CG,EAAKlH,GAAKgH,EAAI,IAAMhH,GAAKgH,EAAI,IAAOA,IAAO,GACjDZ,GAAS5gB,GAAM0hB,EAAKd,GAAS5gB,EAAI,GAAKyhB,EAAKb,GAAS5gB,EAAI,IAAO,EAGnE,IAAI8gB,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAMtgB,KACjC,IAAK,IAAIf,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MACM2hB,EAAMN,GADG7G,GAAK0G,EAAG,GAAK1G,GAAK0G,EAAG,IAAM1G,GAAK0G,EAAG,KACzBV,GAAIU,EAAGC,EAAGC,GAAKV,GAAS1gB,GAAK4gB,GAAS5gB,GAAM,EAE/D4hB,GADSpH,GAAKsG,EAAG,GAAKtG,GAAKsG,EAAG,IAAMtG,GAAKsG,EAAG,KAC7BL,GAAIK,EAAGC,EAAGC,GAAM,EACrCK,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKD,EAAIU,EAAM,EACfV,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKa,EAAKC,EAAM,EAGpBd,EAAKA,EAAI/f,KAAK+f,EAAK,EACnBC,EAAKA,EAAIhgB,KAAKggB,EAAK,EACnBC,EAAKA,EAAIjgB,KAAKigB,EAAK,EACnBC,EAAKA,EAAIlgB,KAAKkgB,EAAK,EACnBC,EAAKA,EAAIngB,KAAKmgB,EAAK,EACnBC,EAAKA,EAAIpgB,KAAKogB,EAAK,EACnBC,EAAKA,EAAIrgB,KAAKqgB,EAAK,EACnBC,EAAKA,EAAItgB,KAAKsgB,EAAK,EACnBtgB,KAAKQ,IAAIuf,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GAElCxB,aACIe,GAAS3J,KAAK,GAElB6G,UACI/c,KAAKQ,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9BR,KAAK8V,OAAOI,KAAK,IAOlB,MAAM4K,GAAS/E,IAAgB,IAAM,IAAI+D,KC1G1CiB,GAAahb,OAAO,GAAK,GAAK,GAC9BiZ,GAAOjZ,OAAO,IACb,SAASib,GAAQ9F,EAAG+F,GAAK,GAC5B,OAAIA,EACO,CAAE7B,EAAG5a,OAAO0W,EAAI6F,IAAa1B,EAAG7a,OAAQ0W,GAAK8D,GAAQ+B,KACzD,CAAE3B,EAAsC,EAAnC5a,OAAQ0W,GAAK8D,GAAQ+B,IAAiB1B,EAA4B,EAAzB7a,OAAO0W,EAAI6F,KAE7D,SAASjiB,GAAMoiB,EAAKD,GAAK,GAC5B,IAAIE,EAAK,IAAI/H,YAAY8H,EAAIhiB,QACzBkiB,EAAK,IAAIhI,YAAY8H,EAAIhiB,QAC7B,IAAK,IAAID,EAAI,EAAGA,EAAIiiB,EAAIhiB,OAAQD,IAAK,CACjC,MAAMmgB,EAAEA,EAACC,EAAEA,GAAM2B,GAAQE,EAAIjiB,GAAIgiB,IAChCE,EAAGliB,GAAImiB,EAAGniB,IAAM,CAACmgB,EAAGC,GAEzB,MAAO,CAAC8B,EAAIC,GAIT,MAAMC,GAAQ,CAACjC,EAAGC,EAAGiC,IAAMlC,IAAMkC,EAC3BC,GAAQ,CAACnC,EAAGC,EAAGiC,IAAOlC,GAAM,GAAKkC,EAAOjC,IAAMiC,EAE9CE,GAAS,CAACpC,EAAGC,EAAGiC,IAAOlC,IAAMkC,EAAMjC,GAAM,GAAKiC,EAC9CG,GAAS,CAACrC,EAAGC,EAAGiC,IAAOlC,GAAM,GAAKkC,EAAOjC,IAAMiC,EAE/CI,GAAS,CAACtC,EAAGC,EAAGiC,IAAOlC,GAAM,GAAKkC,EAAOjC,IAAOiC,EAAI,GACpDK,GAAS,CAACvC,EAAGC,EAAGiC,IAAOlC,IAAOkC,EAAI,GAAQjC,GAAM,GAAKiC,EAY3D,SAAS9d,GAAI2d,EAAIC,EAAIQ,EAAIC,GAC5B,MAAMxC,GAAK+B,IAAO,IAAMS,IAAO,GAC/B,MAAO,CAAEzC,EAAI+B,EAAKS,GAAOvC,EAAI,GAAK,GAAM,GAAM,EAAGA,EAAO,EAAJA,GAGjD,MAAMyC,GAAQ,CAACV,EAAIS,EAAIE,KAAQX,IAAO,IAAMS,IAAO,IAAME,IAAO,GAC1DC,GAAQ,CAACC,EAAKd,EAAIS,EAAIM,IAAQf,EAAKS,EAAKM,GAAOD,EAAM,GAAK,GAAM,GAAM,EACtEE,GAAQ,CAACf,EAAIS,EAAIE,EAAIK,KAAQhB,IAAO,IAAMS,IAAO,IAAME,IAAO,IAAMK,IAAO,GAC3EC,GAAQ,CAACJ,EAAKd,EAAIS,EAAIM,EAAII,IAAQnB,EAAKS,EAAKM,EAAKI,GAAOL,EAAM,GAAK,GAAM,GAAM,EAC/EM,GAAQ,CAACnB,EAAIS,EAAIE,EAAIK,EAAII,KAAQpB,IAAO,IAAMS,IAAO,IAAME,IAAO,IAAMK,IAAO,IAAMI,IAAO,GAC5FC,GAAQ,CAACR,EAAKd,EAAIS,EAAIM,EAAII,EAAII,IAAQvB,EAAKS,EAAKM,EAAKI,EAAKI,GAAOT,EAAM,GAAK,GAAM,GAAM,GC1C9FU,GAAWC,IAAaC,GAAU,CACrC,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,sBACpEzkB,KAAI8c,GAAKnV,OAAOmV,MAEZ4H,GAAa,IAAI1J,YAAY,IAC7B2J,GAAa,IAAI3J,YAAY,IAC5B,MAAM4J,WAAexE,GACxB5d,cACIkO,MAAM,IAAK,GAAI,IAAI,GAKnB9O,KAAKmhB,GAAK,WACVnhB,KAAKohB,IAAK,UACVphB,KAAK4hB,IAAK,WACV5hB,KAAK6hB,IAAK,WACV7hB,KAAKkiB,GAAK,WACVliB,KAAK+hB,IAAK,SACV/hB,KAAKsiB,IAAK,WACVtiB,KAAKoiB,GAAK,WACVpiB,KAAK0iB,GAAK,WACV1iB,KAAKwiB,IAAK,WACVxiB,KAAKijB,IAAK,WACVjjB,KAAKkjB,GAAK,UACVljB,KAAKmjB,GAAK,UACVnjB,KAAKojB,IAAK,SACVpjB,KAAKqjB,GAAK,WACVrjB,KAAKsjB,GAAK,UAGd5iB,MACI,MAAMygB,GAAEA,EAAEC,GAAEA,EAAEQ,GAAEA,EAAEC,GAAEA,EAAEK,GAAEA,EAAEH,GAAEA,EAAEO,GAAEA,EAAEF,GAAEA,EAAEM,GAAEA,EAAEF,GAAEA,EAAES,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,GAAOtjB,KAC3E,MAAO,CAACmhB,EAAIC,EAAIQ,EAAIC,EAAIK,EAAIH,EAAIO,EAAIF,EAAIM,EAAIF,EAAIS,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAGxE9iB,IAAI2gB,EAAIC,EAAIQ,EAAIC,EAAIK,EAAIH,EAAIO,EAAIF,EAAIM,EAAIF,EAAIS,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAC5DtjB,KAAKmhB,GAAU,EAALA,EACVnhB,KAAKohB,GAAU,EAALA,EACVphB,KAAK4hB,GAAU,EAALA,EACV5hB,KAAK6hB,GAAU,EAALA,EACV7hB,KAAKkiB,GAAU,EAALA,EACVliB,KAAK+hB,GAAU,EAALA,EACV/hB,KAAKsiB,GAAU,EAALA,EACVtiB,KAAKoiB,GAAU,EAALA,EACVpiB,KAAK0iB,GAAU,EAALA,EACV1iB,KAAKwiB,GAAU,EAALA,EACVxiB,KAAKijB,GAAU,EAALA,EACVjjB,KAAKkjB,GAAU,EAALA,EACVljB,KAAKmjB,GAAU,EAALA,EACVnjB,KAAKojB,GAAU,EAALA,EACVpjB,KAAKqjB,GAAU,EAALA,EACVrjB,KAAKsjB,GAAU,EAALA,EAEd/V,QAAQwQ,EAAM1W,GAEV,IAAK,IAAIpI,EAAI,EAAGA,EAAI,GAAIA,IAAKoI,GAAU,EACnCyb,GAAW7jB,GAAK8e,EAAKwC,UAAUlZ,GAC/B0b,GAAW9jB,GAAK8e,EAAKwC,UAAWlZ,GAAU,GAE9C,IAAK,IAAIpI,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAE1B,MAAMskB,EAA4B,EAArBT,GAAW7jB,EAAI,IACtBukB,EAA4B,EAArBT,GAAW9jB,EAAI,IACtBwkB,EAAMC,GAAWH,EAAMC,EAAM,GAAKE,GAAWH,EAAMC,EAAM,GAAKG,GAAUJ,EAAMC,EAAM,GACpFI,EAAMC,GAAWN,EAAMC,EAAM,GAAKK,GAAWN,EAAMC,EAAM,GAAKM,GAAUP,EAAMC,EAAM,GAEpFO,EAA0B,EAApBjB,GAAW7jB,EAAI,GACrB+kB,EAA0B,EAApBjB,GAAW9jB,EAAI,GACrBglB,EAAMP,GAAWK,EAAKC,EAAK,IAAME,GAAWH,EAAKC,EAAK,IAAML,GAAUI,EAAKC,EAAK,GAChFG,EAAMN,GAAWE,EAAKC,EAAK,IAAMI,GAAWL,EAAKC,EAAK,IAAMF,GAAUC,EAAKC,EAAK,GAEhFK,EAAOC,GAAUV,EAAKO,EAAKpB,GAAW9jB,EAAI,GAAI8jB,GAAW9jB,EAAI,KAC7DslB,EAAOC,GAAUH,EAAMZ,EAAKQ,EAAKnB,GAAW7jB,EAAI,GAAI6jB,GAAW7jB,EAAI,KACzE6jB,GAAW7jB,GAAY,EAAPslB,EAChBxB,GAAW9jB,GAAY,EAAPolB,EAEpB,IAAIlD,GAAEA,EAAEC,GAAEA,EAAEQ,GAAEA,EAAEC,GAAEA,EAAEK,GAAEA,EAAEH,GAAEA,EAAEO,GAAEA,EAAEF,GAAEA,EAAEM,GAAEA,EAAEF,GAAEA,EAAES,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,GAAOtjB,KAEzE,IAAK,IAAIf,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAEzB,MAAMwlB,EAAUf,GAAWhB,EAAIF,EAAI,IAAMkB,GAAWhB,EAAIF,EAAI,IAAM0B,GAAWxB,EAAIF,EAAI,IAC/EkC,EAAUb,GAAWnB,EAAIF,EAAI,IAAMqB,GAAWnB,EAAIF,EAAI,IAAM4B,GAAW1B,EAAIF,EAAI,IAE/EmC,EAAQjC,EAAKO,GAAQP,EAAKS,EAI1ByB,EAAOC,GAAUvB,EAAIoB,EAHblC,EAAKU,GAAQV,EAAKY,EAGUR,GAAU3jB,GAAI8jB,GAAW9jB,IAC7D6lB,EAAMC,GAAUH,EAAMvB,EAAIoB,EAASE,EAAMhC,GAAU1jB,GAAI6jB,GAAW7jB,IAClE+lB,EAAa,EAAPJ,EAENK,EAAUvB,GAAWvC,EAAIC,EAAI,IAAM8C,GAAW/C,EAAIC,EAAI,IAAM8C,GAAW/C,EAAIC,EAAI,IAC/E8D,EAAUrB,GAAW1C,EAAIC,EAAI,IAAMgD,GAAWjD,EAAIC,EAAI,IAAMgD,GAAWjD,EAAIC,EAAI,IAC/E+D,EAAQhE,EAAKS,EAAOT,EAAKe,EAAON,EAAKM,EACrCkD,EAAQhE,EAAKS,EAAOT,EAAKW,EAAOF,EAAKE,EAC3CsB,EAAU,EAALF,EACLG,EAAU,EAALF,EACLD,EAAU,EAALF,EACLG,EAAU,EAALF,EACLD,EAAU,EAALP,EACLQ,EAAU,EAALV,IACFpD,EAAGsD,EAAIrD,EAAGmD,GAAO6C,GAAa,EAAL/C,EAAa,EAALF,EAAc,EAAN0C,EAAe,EAANE,IACrD1C,EAAU,EAALJ,EACLE,EAAU,EAALL,EACLG,EAAU,EAALN,EACLG,EAAU,EAALF,EACLD,EAAU,EAALT,EACLU,EAAU,EAALT,EACL,MAAMkE,EAAMC,GAAUP,EAAKE,EAASE,GACpCjE,EAAKqE,GAAUF,EAAKR,EAAKG,EAASE,GAClC/D,EAAW,EAANkE,IAGNlG,EAAG+B,EAAI9B,EAAG+B,GAAOiE,GAAkB,EAAVrlB,KAAKmhB,GAAkB,EAAVnhB,KAAKohB,GAAa,EAALD,EAAa,EAALC,MAC3DhC,EAAGwC,EAAIvC,EAAGwC,GAAOwD,GAAkB,EAAVrlB,KAAK4hB,GAAkB,EAAV5hB,KAAK6hB,GAAa,EAALD,EAAa,EAALC,MAC3DzC,EAAG8C,EAAI7C,EAAG0C,GAAOsD,GAAkB,EAAVrlB,KAAKkiB,GAAkB,EAAVliB,KAAK+hB,GAAa,EAALG,EAAa,EAALH,MAC3D3C,EAAGkD,EAAIjD,EAAG+C,GAAOiD,GAAkB,EAAVrlB,KAAKsiB,GAAkB,EAAVtiB,KAAKoiB,GAAa,EAALE,EAAa,EAALF,MAC3DhD,EAAGsD,EAAIrD,EAAGmD,GAAO6C,GAAkB,EAAVrlB,KAAK0iB,GAAkB,EAAV1iB,KAAKwiB,GAAa,EAALE,EAAa,EAALF,MAC3DpD,EAAG6D,EAAI5D,EAAG6D,GAAOmC,GAAkB,EAAVrlB,KAAKijB,GAAkB,EAAVjjB,KAAKkjB,GAAa,EAALD,EAAa,EAALC,MAC3D9D,EAAG+D,EAAI9D,EAAG+D,GAAOiC,GAAkB,EAAVrlB,KAAKmjB,GAAkB,EAAVnjB,KAAKojB,GAAa,EAALD,EAAa,EAALC,MAC3DhE,EAAGiE,EAAIhE,EAAGiE,GAAO+B,GAAkB,EAAVrlB,KAAKqjB,GAAkB,EAAVrjB,KAAKsjB,GAAa,EAALD,EAAa,EAALC,IAC9DtjB,KAAKQ,IAAI2gB,EAAIC,EAAIQ,EAAIC,EAAIK,EAAIH,EAAIO,EAAIF,EAAIM,EAAIF,EAAIS,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAEzExE,aACIgE,GAAW5M,KAAK,GAChB6M,GAAW7M,KAAK,GAEpB6G,UACI/c,KAAK8V,OAAOI,KAAK,GACjBlW,KAAKQ,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAG9D,MAAMilB,WAAmBzC,GACrBpiB,cACIkO,QAEA9O,KAAKmhB,GAAK,UACVnhB,KAAKohB,IAAK,SACVphB,KAAK4hB,IAAK,WACV5hB,KAAK6hB,IAAK,UACV7hB,KAAKkiB,GAAK,UACVliB,KAAK+hB,GAAK,WACV/hB,KAAKsiB,IAAK,WACVtiB,KAAKoiB,GAAK,WACVpiB,KAAK0iB,IAAK,WACV1iB,KAAKwiB,IAAK,WACVxiB,KAAKijB,IAAK,WACVjjB,KAAKkjB,GAAK,WACVljB,KAAKmjB,GAAK,UACVnjB,KAAKojB,GAAK,UACVpjB,KAAKqjB,GAAK,UACVrjB,KAAKsjB,IAAK,WACVtjB,KAAKub,UAAY,IAGzB,MAAMmK,WAAe1C,GACjBpiB,cACIkO,QAEA9O,KAAKmhB,IAAK,UACVnhB,KAAKohB,IAAK,WACVphB,KAAK4hB,GAAK,WACV5hB,KAAK6hB,GAAK,UACV7hB,KAAKkiB,IAAK,WACVliB,KAAK+hB,GAAK,UACV/hB,KAAKsiB,GAAK,UACVtiB,KAAKoiB,IAAK,UACVpiB,KAAK0iB,GAAK,WACV1iB,KAAKwiB,IAAK,QACVxiB,KAAKijB,IAAK,WACVjjB,KAAKkjB,GAAK,WACVljB,KAAKmjB,IAAK,UACVnjB,KAAKojB,GAAK,WACVpjB,KAAKqjB,GAAK,WACVrjB,KAAKsjB,IAAK,WACVtjB,KAAKub,UAAY,IAGlB,MAAMoK,GAAS5J,IAAgB,IAAM,IAAIiH,KACtBjH,IAAgB,IAAM,IAAI0J,KAC9B1J,IAAgB,IAAM,IAAI2J,KC7MzC,MCEM/d,GAAS,IAAIrE,EDFH,sCEmBvB,MAAMsiB,GAbN,WACI,GAAoB,oBAATC,KACP,OAAOA,KAEX,GAAsB,oBAAXC,OACP,OAAOA,OAEX,GAAsB,oBAAXC,OACP,OAAOA,OAEX,MAAM,IAAI5mB,MAAM,kCAGF6mB,GAClB,IAAIC,GAASL,GAAUK,QAAUL,GAAUM,SACpC,SAASC,GAAWC,GACvB,OAAQA,GACJ,IAAK,SAAU,OAAOtF,GAAOxF,SAC7B,IAAK,SAAU,OAAOqK,GAAOrK,SAEjC,OAAO3T,GAAO3D,mBAAmB,iCAAkC,YAAaoiB,GCvBpF,IAAIC,IAAS,EACb,MAAMC,GAAe,SAAUC,EAAW/mB,EAAKqV,GAC3C,MAAO,KDuBJ,SAAoB2R,EAAOhnB,GAC9B,MAAM4mB,EAAQ,CAAAtF,OAAEA,GAAM6E,OAAEA,IAASa,GACjC,OAAY,MAARJ,EACOze,GAAO3D,mBAAmB,yBAA0B,YAAawiB,GAErEvJ,GAAK3B,OAAO8K,EAAM5mB,GC5BXinB,CAAWF,EAAW/mB,GAAK0c,OAAOrH,GAAMsH,OAAO,QAEjE,IAAIuK,GAAgBJ,GACb,SAASK,GAAYJ,EAAWjK,EAAMsK,GACzC,MAAMpnB,EAAMmI,GAAO/B,SAAS0W,EAAM,OAC5BzH,EAAOlN,GAAO/B,SAASghB,EAAO,QACpC,OAAOxR,GAAQsR,GAAcH,EAAW/mB,EAAKqV,IAEjD8R,GAAYE,EAAIP,GAChBK,GAAYG,KAAO,WAAcT,IAAS,GAC1CM,GAAYI,SAAW,SAAUC,GAC7B,GAAIX,GACA,MAAM,IAAIlnB,MAAM,yBAEpBunB,GAAgBM,GAEpB/oB,OAAOsK,OAAOoe,IClBd,MAAOM,GAASC,GAAWC,IAAc,CAAC,GAAI,GAAI,IAC5CC,GAAMrhB,OAAO,GACbshB,GAAMthB,OAAO,GACbuhB,GAAMvhB,OAAO,GACbwhB,GAAMxhB,OAAO,GACbyhB,GAAQzhB,OAAO,KACf0hB,GAAS1hB,OAAO,KACtB,IAAK,IAAIsN,EAAQ,EAAGqU,EAAIL,GAAKM,EAAI,EAAGC,EAAI,EAAGvU,EAAQ,GAAIA,IAAS,EAE3DsU,EAAGC,GAAK,CAACA,GAAI,EAAID,EAAI,EAAIC,GAAK,GAC/BX,GAAQrkB,KAAK,GAAK,EAAIglB,EAAID,IAE1BT,GAAUtkB,MAAQyQ,EAAQ,IAAMA,EAAQ,GAAM,EAAK,IAEnD,IAAItU,EAAIqoB,GACR,IAAK,IAAIS,EAAI,EAAGA,EAAI,EAAGA,IACnBH,GAAMA,GAAKL,IAASK,GAAKH,IAAOE,IAAWD,GACvCE,EAAIJ,KACJvoB,GAAKsoB,KAASA,IAAOthB,OAAO8hB,IAAMR,IAE1CF,GAAWvkB,KAAK7D,GAEpB,MAAO+oB,GAAaC,IAAelF,GAAUsE,IAAY,GAEnDa,GAAQ,CAAC5I,EAAGC,EAAGiC,IAAMA,EAAI,GNMT,EAAClC,EAAGC,EAAGiC,IAAOjC,GAAMiC,EAAI,GAAQlC,IAAO,GAAKkC,EMN9B2G,CAAW7I,EAAGC,EAAGiC,GNG/B,EAAClC,EAAGC,EAAGiC,IAAOlC,GAAKkC,EAAMjC,IAAO,GAAKiC,EMHD4G,CAAW9I,EAAGC,EAAGiC,GACrE6G,GAAQ,CAAC/I,EAAGC,EAAGiC,IAAMA,EAAI,GNMT,EAAClC,EAAGC,EAAGiC,IAAOlC,GAAMkC,EAAI,GAAQjC,IAAO,GAAKiC,EMN9B8G,CAAWhJ,EAAGC,EAAGiC,GNG/B,EAAClC,EAAGC,EAAGiC,IAAOjC,GAAKiC,EAAMlC,IAAO,GAAKkC,EMHD+G,CAAWjJ,EAAGC,EAAGiC,GA+CpE,MAAMgH,WAAe7M,GAExB7a,YAAY4a,EAAUxQ,EAAQuQ,EAAWgN,GAAY,EAAOC,EAAS,IAcjE,GAbA1Z,QACA9O,KAAKwb,SAAWA,EAChBxb,KAAKgL,OAASA,EACdhL,KAAKub,UAAYA,EACjBvb,KAAKuoB,UAAYA,EACjBvoB,KAAKwoB,OAASA,EACdxoB,KAAKke,IAAM,EACXle,KAAKyoB,OAAS,EACdzoB,KAAKuc,UAAW,EAChBvc,KAAKwc,WAAY,EAEjBvB,GAAaM,GAET,GAAKvb,KAAKwb,UAAYxb,KAAKwb,UAAY,IACvC,MAAM,IAAIrc,MAAM,4CACpBa,KAAKE,MAAQ,IAAIgH,WAAW,KAC5BlH,KAAK0oB,QAAUxP,GAAIlZ,KAAKE,OAE5ByoB,UAlEG,SAAiBrH,EAAGkH,EAAS,IAChC,MAAMxI,EAAI,IAAI5G,YAAY,IAE1B,IAAK,IAAI/F,EAAQ,GAAKmV,EAAQnV,EAAQ,GAAIA,IAAS,CAE/C,IAAK,IAAIsU,EAAI,EAAGA,EAAI,GAAIA,IACpB3H,EAAE2H,GAAKrG,EAAEqG,GAAKrG,EAAEqG,EAAI,IAAMrG,EAAEqG,EAAI,IAAMrG,EAAEqG,EAAI,IAAMrG,EAAEqG,EAAI,IAC5D,IAAK,IAAIA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC5B,MAAMiB,GAAQjB,EAAI,GAAK,GACjBkB,GAAQlB,EAAI,GAAK,GACjBmB,EAAK9I,EAAE6I,GACPE,EAAK/I,EAAE6I,EAAO,GACdG,EAAKhB,GAAMc,EAAIC,EAAI,GAAK/I,EAAE4I,GAC1BK,EAAKd,GAAMW,EAAIC,EAAI,GAAK/I,EAAE4I,EAAO,GACvC,IAAK,IAAIhB,EAAI,EAAGA,EAAI,GAAIA,GAAK,GACzBtG,EAAEqG,EAAIC,IAAMoB,EACZ1H,EAAEqG,EAAIC,EAAI,IAAMqB,EAIxB,IAAIC,EAAO5H,EAAE,GACT6H,EAAO7H,EAAE,GACb,IAAK,IAAIviB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MAAM4a,EAAQuN,GAAUnoB,GAClBiqB,EAAKhB,GAAMkB,EAAMC,EAAMxP,GACvBsP,EAAKd,GAAMe,EAAMC,EAAMxP,GACvByP,EAAKnC,GAAQloB,GACnBmqB,EAAO5H,EAAE8H,GACTD,EAAO7H,EAAE8H,EAAK,GACd9H,EAAE8H,GAAMJ,EACR1H,EAAE8H,EAAK,GAAKH,EAGhB,IAAK,IAAIrB,EAAI,EAAGA,EAAI,GAAIA,GAAK,GAAI,CAC7B,IAAK,IAAID,EAAI,EAAGA,EAAI,GAAIA,IACpB3H,EAAE2H,GAAKrG,EAAEsG,EAAID,GACjB,IAAK,IAAIA,EAAI,EAAGA,EAAI,GAAIA,IACpBrG,EAAEsG,EAAID,KAAO3H,GAAG2H,EAAI,GAAK,IAAM3H,GAAG2H,EAAI,GAAK,IAGnDrG,EAAE,IAAMwG,GAAYzU,GACpBiO,EAAE,IAAMyG,GAAY1U,GAExB2M,EAAE9J,KAAK,GAwBHmT,CAAQrpB,KAAK0oB,QAAS1oB,KAAKwoB,QAC3BxoB,KAAKyoB,OAAS,EACdzoB,KAAKke,IAAM,EAEfhC,OAAOrH,GACH,GAAI7U,KAAKwc,UACL,MAAM,IAAIrd,MAAM,yBACpB,GAAIa,KAAKuc,SACL,MAAM,IAAIpd,MAAM,+BACpB,MAAMqc,SAAEA,EAAQtb,MAAEA,GAAUF,KAEtB2e,GADN9J,EAAO+F,GAAQ/F,IACE3V,OACjB,IAAK,IAAIgf,EAAM,EAAGA,EAAMS,GAAM,CAC1B,MAAMC,EAAO7X,KAAKrB,IAAI8V,EAAWxb,KAAKke,IAAKS,EAAMT,GACjD,IAAK,IAAIjf,EAAI,EAAGA,EAAI2f,EAAM3f,IACtBiB,EAAMF,KAAKke,QAAUrJ,EAAKqJ,KAC1Ble,KAAKke,MAAQ1C,GACbxb,KAAK2oB,SAEb,OAAO3oB,KAEXspB,SACI,GAAItpB,KAAKuc,SACL,OACJvc,KAAKuc,UAAW,EAChB,MAAMrc,MAAEA,EAAK8K,OAAEA,EAAMkT,IAAEA,EAAG1C,SAAEA,GAAaxb,KAEzCE,EAAMge,IAAQlT,EACU,IAAV,IAATA,IAAwBkT,IAAQ1C,EAAW,GAC5Cxb,KAAK2oB,SACTzoB,EAAMsb,EAAW,IAAM,IACvBxb,KAAK2oB,SAETY,UAAUzM,GACN,GAAI9c,KAAKwc,UACL,MAAM,IAAIrd,MAAM,yBACpB,KAAM2d,aAAe5V,YACjB,MAAM,IAAI/H,MAAM,iCACpBa,KAAKspB,SACL,IAAK,IAAIpL,EAAM,EAAGS,EAAM7B,EAAI5d,OAAQgf,EAAMS,GAAM,CACxC3e,KAAKyoB,QAAUzoB,KAAKwb,UACpBxb,KAAK2oB,SACT,MAAM/J,EAAO7X,KAAKrB,IAAI1F,KAAKwb,SAAWxb,KAAKyoB,OAAQ9J,EAAMT,GACzDpB,EAAItc,IAAIR,KAAKE,MAAMke,SAASpe,KAAKyoB,OAAQzoB,KAAKyoB,OAAS7J,GAAOV,GAC9Dle,KAAKyoB,QAAU7J,EACfV,GAAOU,EAEX,OAAO9B,EAEX0M,QAAQ1M,GAEJ,IAAK9c,KAAKuoB,UACN,MAAM,IAAIppB,MAAM,yCACpB,OAAOa,KAAKupB,UAAUzM,GAE1B2M,IAAIpU,GAEA,OADA4F,GAAa5F,GACNrV,KAAKwpB,QAAQ,IAAItiB,WAAWmO,IAEvCwH,WAAWC,GACP,GAAIA,EAAI5d,OAASc,KAAKub,UAClB,MAAM,IAAIpc,MAAM,iCACpB,GAAIa,KAAKuc,SACL,MAAM,IAAIpd,MAAM,+BAIpB,OAHAa,KAAKspB,SACLtpB,KAAKupB,UAAUzM,GACf9c,KAAK+c,UACED,EAEXX,SACI,OAAOnc,KAAK6c,WAAW,IAAI3V,WAAWlH,KAAKub,YAE/CwB,UACI/c,KAAKwc,WAAY,EACjBxc,KAAKE,MAAMgW,KAAK,GAEpBwF,WAAW5P,GACP,MAAM0P,SAAEA,EAAQxQ,OAAEA,EAAMuQ,UAAEA,EAASiN,OAAEA,EAAMD,UAAEA,GAAcvoB,KAY3D,OAXA8L,IAAOA,EAAK,IAAIwc,GAAO9M,EAAUxQ,EAAQuQ,EAAWgN,EAAWC,IAC/D1c,EAAG4c,QAAQloB,IAAIR,KAAK0oB,SACpB5c,EAAGoS,IAAMle,KAAKke,IACdpS,EAAG2c,OAASzoB,KAAKyoB,OACjB3c,EAAGyQ,SAAWvc,KAAKuc,SACnBzQ,EAAG0c,OAASA,EAEZ1c,EAAGd,OAASA,EACZc,EAAGyP,UAAYA,EACfzP,EAAGyc,UAAYA,EACfzc,EAAG0Q,UAAYxc,KAAKwc,UACb1Q,GAGf,MAAM4d,GAAM,CAAC1e,EAAQwQ,EAAUD,IAAcQ,IAAgB,IAAM,IAAIuM,GAAO9M,EAAUxQ,EAAQuQ,KACxEmO,GAAI,EAAM,IAAK,IAKfA,GAAI,EAAM,IAAK,IACfA,GAAI,EAAM,IAAK,IACfA,GAAI,EAAM,GAAI,IACZA,GAAI,EAAM,IAAK,IAKlC,MAAMC,GAAaD,GAAI,EAAM,IAAK,IACfA,GAAI,EAAM,IAAK,IACfA,GAAI,EAAM,GAAI,IACxC,MAAME,GAAW,CAAC5e,EAAQwQ,EAAUD,IXvD7B,SAAiCsO,GACpC,MAAM5N,EAAQ,CAAC6N,EAAKzM,IAASwM,EAASxM,GAAMnB,OAAOtB,GAAQkP,IAAM3N,SAC3DC,EAAMyN,EAAS,IAIrB,OAHA5N,EAAMV,UAAYa,EAAIb,UACtBU,EAAMT,SAAWY,EAAIZ,SACrBS,EAAMX,OAAU+B,GAASwM,EAASxM,GAC3BpB,EWiDuC8N,EAAwB,CAAC1M,EAAO,KAAO,IAAIiL,GAAO9M,EAAUxQ,OAAuBtL,IAAf2d,EAAKC,MAAsBD,EAAKC,MAAQ/B,GAAW,KACjJqO,GAAS,GAAM,IAAK,IACpBA,GAAS,GAAM,IAAK,IC7M5C,IAAIvD,IAAS,EACb,MAAM2D,GAAa,SAAUnV,GACzB,OAAO8U,GAAW9U,IAEtB,IAAIoV,GAAcD,GACX,SAASE,GAAUtD,GACtB,MAAM/R,EAAOlN,GAAO/B,SAASghB,EAAO,QACpC,OAAOxR,GAAQ6U,GAAYpV,IAE/BqV,GAAUrD,EAAImD,GACdE,GAAUpD,KAAO,WAAcT,IAAS,GACxC6D,GAAUnD,SAAW,SAAUC,GAC3B,GAAIX,GACA,MAAM,IAAIhmB,UAAU,uBAExB4pB,GAAcjD,GAElB/oB,OAAOsK,OAAO2hB,IChBd,MAAMC,GAAM,IAAIjjB,WAAW,CAAC,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IACzEkjB,GAAKljB,WAAW2E,KAAK,CAAE3M,OAAQ,KAAM,CAAC2nB,EAAG5nB,IAAMA,IAC/CorB,GAAKD,GAAGhsB,KAAKa,IAAO,EAAIA,EAAI,GAAK,KACvC,IAAIqrB,GAAO,CAACF,IACRG,GAAO,CAACF,IACZ,IAAK,IAAIprB,EAAI,EAAGA,EAAI,EAAGA,IACnB,IAAK,IAAI4oB,IAAK,CAACyC,GAAMC,IACjB1C,EAAEjlB,KAAKilB,EAAE5oB,GAAGb,KAAKC,GAAM8rB,GAAI9rB,MACnC,MAAMmsB,GAAS,CACX,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GACtD,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GACtD,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GACtD,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GACtD,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IACxDpsB,KAAKa,GAAM,IAAIiI,WAAWjI,KACtBwrB,GAAUH,GAAKlsB,KAAI,CAACssB,EAAKzrB,IAAMyrB,EAAItsB,KAAKypB,GAAM2C,GAAOvrB,GAAG4oB,OACxD8C,GAAUJ,GAAKnsB,KAAI,CAACssB,EAAKzrB,IAAMyrB,EAAItsB,KAAKypB,GAAM2C,GAAOvrB,GAAG4oB,OACxD+C,GAAK,IAAIxR,YAAY,CAAC,EAAY,WAAY,WAAY,WAAY,aACtEyR,GAAK,IAAIzR,YAAY,CAAC,WAAY,WAAY,WAAY,WAAY,IAEtE0R,GAAO,CAACpR,EAAMC,IAAWD,GAAQC,EAAUD,IAAU,GAAKC,EAEhE,SAASvZ,GAAE2qB,EAAOpD,EAAGC,EAAGoD,GACpB,OAAc,IAAVD,EACOpD,EAAIC,EAAIoD,EACA,IAAVD,EACGpD,EAAIC,GAAOD,EAAIqD,EACR,IAAVD,GACGpD,GAAKC,GAAKoD,EACH,IAAVD,EACGpD,EAAIqD,EAAMpD,GAAKoD,EAEhBrD,GAAKC,GAAKoD,GAGzB,MAAMC,GAAM,IAAI7R,YAAY,IACrB,MAAM8R,WAAkB1M,GAC3B5d,cACIkO,MAAM,GAAI,GAAI,GAAG,GACjB9O,KAAKmrB,GAAK,WACVnrB,KAAKorB,IAAK,UACVprB,KAAKqrB,IAAK,WACVrrB,KAAKsrB,GAAK,UACVtrB,KAAKurB,IAAK,WAEd7qB,MACI,MAAMyqB,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,GAAOvrB,KAC/B,MAAO,CAACmrB,EAAIC,EAAIC,EAAIC,EAAIC,GAE5B/qB,IAAI2qB,EAAIC,EAAIC,EAAIC,EAAIC,GAChBvrB,KAAKmrB,GAAU,EAALA,EACVnrB,KAAKorB,GAAU,EAALA,EACVprB,KAAKqrB,GAAU,EAALA,EACVrrB,KAAKsrB,GAAU,EAALA,EACVtrB,KAAKurB,GAAU,EAALA,EAEdhe,QAAQwQ,EAAM1W,GACV,IAAK,IAAIpI,EAAI,EAAGA,EAAI,GAAIA,IAAKoI,GAAU,EACnC4jB,GAAIhsB,GAAK8e,EAAKwC,UAAUlZ,GAAQ,GAEpC,IAAImkB,EAAe,EAAVxrB,KAAKmrB,GAAQM,EAAKD,EAAIE,EAAe,EAAV1rB,KAAKorB,GAAQO,EAAKD,EAAIE,EAAe,EAAV5rB,KAAKqrB,GAAQQ,EAAKD,EAAIE,EAAe,EAAV9rB,KAAKsrB,GAAQS,EAAKD,EAAIE,EAAe,EAAVhsB,KAAKurB,GAAQU,EAAKD,EAGvI,IAAK,IAAIjB,EAAQ,EAAGA,EAAQ,EAAGA,IAAS,CACpC,MAAMmB,EAAS,EAAInB,EACboB,EAAMvB,GAAGG,GAAQqB,EAAMvB,GAAGE,GAC1BsB,EAAK/B,GAAKS,GAAQuB,EAAK/B,GAAKQ,GAC5BwB,EAAK9B,GAAQM,GAAQyB,EAAK7B,GAAQI,GACxC,IAAK,IAAI9rB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MAAMwtB,EAAM3B,GAAKU,EAAKprB,GAAE2qB,EAAOW,EAAIE,EAAIE,GAAMb,GAAIoB,EAAGptB,IAAMktB,EAAKI,EAAGttB,IAAM+sB,EAAM,EAC9ER,EAAKQ,EAAIA,EAAKF,EAAIA,EAAoB,EAAfhB,GAAKc,EAAI,IAASA,EAAKF,EAAIA,EAAKe,EAG3D,IAAK,IAAIxtB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MAAMytB,EAAM5B,GAAKW,EAAKrrB,GAAE8rB,EAAQP,EAAIE,EAAIE,GAAMd,GAAIqB,EAAGrtB,IAAMmtB,EAAKI,EAAGvtB,IAAMgtB,EAAM,EAC/ER,EAAKQ,EAAIA,EAAKF,EAAIA,EAAoB,EAAfjB,GAAKe,EAAI,IAASA,EAAKF,EAAIA,EAAKe,GAI/D1sB,KAAKQ,IAAKR,KAAKorB,GAAKQ,EAAKG,EAAM,EAAI/rB,KAAKqrB,GAAKS,EAAKG,EAAM,EAAIjsB,KAAKsrB,GAAKU,EAAKP,EAAM,EAAIzrB,KAAKurB,GAAKC,EAAKG,EAAM,EAAI3rB,KAAKmrB,GAAKO,EAAKG,EAAM,GAEvI/M,aACImM,GAAI/U,KAAK,GAEb6G,UACI/c,KAAKwc,WAAY,EACjBxc,KAAK8V,OAAOI,KAAK,GACjBlW,KAAKQ,IAAI,EAAG,EAAG,EAAG,EAAG,IAOtB,MAAMmsB,GAAY5Q,IAAgB,IAAM,IAAImP,KC/FnD,IAAI7E,IAAS,EACb,MAAMuG,GAAa,SAAU/X,GACzB,OAAOgY,GAAgBhY,IAE3B,IAAIiY,GAAcF,GACX,SAASD,GAAU/F,GACtB,MAAM/R,EAAOlN,GAAO/B,SAASghB,EAAO,QACpC,OAAOxR,GAAQ0X,GAAYjY,IAE/B8X,GAAU9F,EAAI+F,GACdD,GAAU7F,KAAO,WAAcT,IAAS,GACxCsG,GAAU5F,SAAW,SAAUC,GAC3B,GAAIX,GACA,MAAM,IAAIhmB,UAAU,uBAExBysB,GAAc9F,GAElB/oB,OAAOsK,OAAOokB,ICjBd,IAAItG,IAAS,EACb,MAAM0G,GAAU,SAAU5P,EAAUC,EAAM4P,EAAYC,EAAQ7G,GAC1D,ON8BG,SAAoBjJ,EAAUC,EAAM4P,EAAYC,EAAQzG,GAC3D,MAAMJ,EAAQ,CAAAtF,OAAEA,GAAM6E,OAAEA,IAASa,GACjC,OAAY,MAARJ,EACOze,GAAO3D,mBAAmB,2BAA4B,YAAawiB,GAEvEtJ,GAAOkJ,EAAMjJ,EAAUC,EAAM,CAAEpQ,EAAGggB,EAAY1P,MAAO2P,IMnCrDC,CAAW/P,EAAUC,EAAM4P,EAAYC,EAAQ7G,IAE1D,IAAI+G,GAAWJ,GACR,SAAS7P,GAAOQ,EAAWC,EAAOqP,EAAYC,EAAQ7G,GACzD,MAAMjJ,EAAWxV,GAAO/B,SAAS8X,EAAW,YACtCN,EAAOzV,GAAO/B,SAAS+X,EAAO,QACpC,OAAOvI,GAAQ+X,GAAShQ,EAAUC,EAAM4P,EAAYC,EAAQ7G,IAEhElJ,GAAO2J,EAAIkG,GACX7P,GAAO4J,KAAO,WAAcT,IAAS,GACrCnJ,GAAO6J,SAAW,SAAUC,GACxB,GAAIX,GACA,MAAM,IAAIlnB,MAAM,oBAEpBguB,GAAWnG,GAEf/oB,OAAOsK,OAAO2U,ICpBd,IAAImJ,IAAS,EACb,MAAM+G,GAAe,SAAUluB,GAC3B,OAAO,IAAIgI,WPuCR,SAAqBhI,GACxB,GAAc,MAAV+mB,GACA,OAAOte,GAAO5D,WAAW,kDAAmD,wBAAyB,CACjGY,UAAW,iBAGfzF,GAAU,GAAKA,EAAS,MAASA,EAAS,GAAMA,GAAUA,IAC1DyI,GAAO3D,mBAAmB,iBAAkB,SAAU9E,GAE1D,MAAMkI,EAAS,IAAIF,WAAWhI,GAE9B,OADA+mB,GAAOoH,gBAAgBjmB,GAChBA,EOlDekmB,CAAcpuB,KAExC,IAAIquB,GAAgBH,GACb,SAASI,GAAYtuB,GACxB,OAAOquB,GAAcruB,GAEzBsuB,GAAY3G,EAAIuG,GAChBI,GAAY1G,KAAO,WAAcT,IAAS,GAC1CmH,GAAYzG,SAAW,SAAUC,GAC7B,GAAIX,GACA,MAAM,IAAIlnB,MAAM,oBAEpBouB,GAAgBvG,GAEpB/oB,OAAOsK,OAAOilB,ICZd,MAAM1C,GAAO,CAACpY,EAAGC,IAAOD,GAAKC,EAAMD,IAAO,GAAKC,EAI/C,SAAS8a,GAAYC,EAAMC,EAAIze,EAAO0e,EAAI9Q,EAAK+Q,GAG3C,IAAIC,EAAMJ,EAAKC,KAAQze,EAAM0e,KAAOG,EAAML,EAAKC,KAAQze,EAAM0e,KACzDI,EAAMN,EAAKC,KAAQze,EAAM0e,KAAOK,EAAMP,EAAKC,KAAQze,EAAM0e,KACzDM,EAAMR,EAAKC,KAAQze,EAAM0e,KAAOO,EAAMT,EAAKC,KAAQze,EAAM0e,KACzDQ,EAAMV,EAAKC,KAAQze,EAAM0e,KAAOS,EAAMX,EAAKC,KAAQze,EAAM0e,KACzDU,EAAMZ,EAAKC,KAAQze,EAAM0e,KAAOW,EAAMb,EAAKC,KAAQze,EAAM0e,KACzDY,EAAMd,EAAKC,KAAQze,EAAM0e,KAAOa,EAAMf,EAAKC,KAAQze,EAAM0e,KACzDc,EAAMhB,EAAKC,KAAQze,EAAM0e,KAAOe,EAAMjB,EAAKC,KAAQze,EAAM0e,KACzDgB,EAAMlB,EAAKC,KAAQze,EAAM0e,KAAOiB,EAAMnB,EAAKC,KAAQze,EAAM0e,KAEzDkB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAE/K,IAAK,IAAI5vB,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACxBiwB,GAAOpE,GAAKgE,EAAMY,EAAM,EAAG,GAC3BJ,GAAOxE,GAAKoE,EAAMJ,EAAM,EAAG,GAC3BY,GAAO5E,GAAKwE,EAAMJ,EAAM,EAAG,IAC3BJ,GAAOhE,GAAK4E,EAAMJ,EAAM,EAAG,IAC3BC,GAAOzE,GAAKqE,EAAMJ,EAAM,EAAG,GAC3BY,GAAO7E,GAAKyE,EAAMJ,EAAM,EAAG,GAC3BJ,GAAOjE,GAAK6E,EAAMJ,EAAM,EAAG,IAC3BJ,GAAOrE,GAAKiE,EAAMY,EAAM,EAAG,IAC3BC,GAAO9E,GAAK0E,EAAMJ,EAAM,EAAG,GAC3BJ,GAAOlE,GAAK8E,EAAMJ,EAAM,EAAG,GAC3BJ,GAAOtE,GAAKkE,EAAMY,EAAM,EAAG,IAC3BJ,GAAO1E,GAAKsE,EAAMJ,EAAM,EAAG,IAC3BC,GAAOnE,GAAK+E,EAAMJ,EAAM,EAAG,GAC3BJ,GAAOvE,GAAKmE,EAAMY,EAAM,EAAG,GAC3BJ,GAAO3E,GAAKuE,EAAMJ,EAAM,EAAG,IAC3BY,GAAO/E,GAAK2E,EAAMJ,EAAM,EAAG,IAC3BN,GAAOjE,GAAKgE,EAAMG,EAAM,EAAG,GAC3BD,GAAOlE,GAAKiE,EAAMD,EAAM,EAAG,GAC3BG,GAAOnE,GAAKkE,EAAMD,EAAM,EAAG,IAC3BD,GAAOhE,GAAKmE,EAAMD,EAAM,EAAG,IAC3BI,GAAOtE,GAAKqE,EAAMD,EAAM,EAAG,GAC3BG,GAAOvE,GAAKsE,EAAMD,EAAM,EAAG,GAC3BD,GAAOpE,GAAKuE,EAAMD,EAAM,EAAG,IAC3BD,GAAOrE,GAAKoE,EAAMG,EAAM,EAAG,IAC3BI,GAAO3E,GAAK0E,EAAMD,EAAM,EAAG,GAC3BD,GAAOxE,GAAK2E,EAAMD,EAAM,EAAG,GAC3BD,GAAOzE,GAAKwE,EAAMG,EAAM,EAAG,IAC3BD,GAAO1E,GAAKyE,EAAMD,EAAM,EAAG,IAC3BI,GAAO5E,GAAK+E,EAAMD,EAAM,EAAG,GAC3BD,GAAO7E,GAAK4E,EAAMG,EAAM,EAAG,GAC3BD,GAAO9E,GAAK6E,EAAMD,EAAM,EAAG,IAC3BG,GAAO/E,GAAK8E,EAAMD,EAAM,EAAG,IAG/B7S,EAAI+Q,KAASC,EAAMgB,EAAO,EAC1BhS,EAAI+Q,KAASE,EAAMgB,EAAO,EAC1BjS,EAAI+Q,KAASG,EAAMgB,EAAO,EAC1BlS,EAAI+Q,KAASI,EAAMgB,EAAO,EAC1BnS,EAAI+Q,KAASK,EAAMgB,EAAO,EAC1BpS,EAAI+Q,KAASM,EAAMgB,EAAO,EAC1BrS,EAAI+Q,KAASO,EAAMgB,EAAO,EAC1BtS,EAAI+Q,KAASQ,EAAMgB,EAAO,EAC1BvS,EAAI+Q,KAASS,EAAMgB,EAAO,EAC1BxS,EAAI+Q,KAASU,EAAMgB,EAAO,EAC1BzS,EAAI+Q,KAASW,EAAMgB,EAAO,EAC1B1S,EAAI+Q,KAASY,EAAMgB,EAAO,EAC1B3S,EAAI+Q,KAASa,EAAMgB,EAAO,EAC1B5S,EAAI+Q,KAASc,EAAMgB,EAAO,EAC1B7S,EAAI+Q,KAASe,EAAMgB,EAAO,EAC1B9S,EAAI+Q,KAASgB,EAAMgB,EAAO,EAE9B,SAASC,GAAS5gB,EAAO0e,EAAI9Q,EAAK+Q,EAAIkC,GAElC,IAAIC,EAAOnC,EAAK,EACZoC,EAAOpC,EAAK,GAAKkC,EACrB,IAAK,IAAI9wB,EAAI,EAAGA,EAAI,GAAIA,IACpB6d,EAAImT,EAAOhxB,GAAKiQ,EAAM0e,EAAmB,IAAb,EAAImC,EAAI,GAAU9wB,GAClD,IAAK,IAAIA,EAAI,EAAGA,EAAI8wB,EAAG9wB,IAAK+wB,GAAQ,GAAIpC,GAAM,GAE1CH,GAAY3Q,EAAKmT,EAAM/gB,EAAO0e,EAAI9Q,EAAKkT,GACnC/wB,EAAI,IACJgxB,GAAQ,IACZxC,GAAY3Q,EAAKkT,EAAM9gB,EAAQ0e,GAAM,GAAK9Q,EAAKmT,GAIvD,SAASC,GAAW/S,EAAUC,EAAMvB,GAEhC,MAAMwB,EAAO1B,GAAU,CACnB2B,MAAO,GACPM,UAAW,GACXuS,OAAQ,YACTtU,IACGuU,EAAEA,EAACL,EAAEA,EAAC9gB,EAAEA,EAACqO,MAAEA,EAAKM,UAAEA,EAASuS,OAAEA,EAAME,WAAEA,GAAehT,EAO1D,GANApC,GAAamV,GACbnV,GAAa8U,GACb9U,GAAahM,GACbgM,GAAaqC,GACbrC,GAAa2C,GACb3C,GAAakV,QACMzwB,IAAf2wB,GAAkD,mBAAfA,EACnC,MAAM,IAAIlxB,MAAM,iCACpB,MAAMmxB,EAAY,IAAMP,EAClBQ,EAAcD,EAAY,EAChC,GAAIF,GAAK,GAAuB,IAAjBA,EAAKA,EAAI,IAAaA,GAAK,IAAME,EAAY,IAAMF,EAAI,GAAK,GAGvE,MAAM,IAAIjxB,MAAM,+FAEpB,GAAI8P,EAAI,GAAKA,EAAI,aAAuBqhB,EACpC,MAAM,IAAInxB,MAAM,4FAEpB,GAAIme,EAAQ,GAAKA,EAAQ,aACrB,MAAM,IAAIne,MAAM,kFAEpB,MAAMqxB,EAAUF,GAAaF,EAAInhB,GACjC,GAAIuhB,EAAUL,EACV,MAAM,IAAIhxB,MAAM,iCAAiCqxB,2BAAiCL,cAItF,MAAMnQ,EAAI9C,GAAO4D,GAAQ3D,EAAUC,EAAM,CAAEpQ,EAAG,EAAGsQ,MAAOgT,EAAYrhB,IAC9DwhB,EAAMvX,GAAI8G,GAEV0Q,EAAIxX,GAAI,IAAIhS,WAAWopB,EAAYF,IACnChU,EAAMlD,GAAI,IAAIhS,WAAWopB,IAC/B,IAAIK,EAAa,OACjB,GAAIN,EAAY,CACZ,MAAMO,EAAgB,EAAIR,EAAInhB,EAGxB4hB,EAAc9pB,KAAKpB,IAAIoB,KAAKC,MAAM4pB,EAAgB,KAAQ,GAChE,IAAIE,EAAc,EAClBH,EAAa,KACTG,KACIT,GAAiBS,EAAcD,GAAgBC,IAAgBF,GAC/DP,EAAWS,EAAcF,IAGrC,MAAO,CAAER,EAAAA,EAAGL,EAAAA,EAAG9gB,EAAAA,EAAGqO,MAAAA,EAAOiT,YAAAA,EAAaG,EAAAA,EAAGD,IAAAA,EAAKzQ,EAAAA,EAAG5D,IAAAA,EAAKuU,WAAAA,EAAY/S,UAAAA,GAEtE,SAASmT,GAAa5T,EAAUG,EAAO0C,EAAG0Q,EAAGtU,GACzC,MAAMoD,EAAMtC,GAAO4D,GAAQ3D,EAAU6C,EAAG,CAAEhT,EAAG,EAAGsQ,MAAAA,IAIhD,OAHA0C,EAAE9J,KAAK,GACPwa,EAAExa,KAAK,GACPkG,EAAIlG,KAAK,GACFsJ,ECnJX,IAAIwR,IAAa,EAAOC,IAAc,EACtC,MAAMC,GAAerzB,eAAgBszB,EAAQ/T,EAAMgT,EAAGL,EAAG9gB,EAAGqO,EAAO+S,GAC/D,aD2LGxyB,eAA2Bsf,EAAUC,EAAMC,GAC9C,MAAM+S,EAAEA,EAACL,EAAEA,EAAC9gB,EAAEA,EAACqO,MAAEA,EAAKiT,YAAEA,EAAWG,EAAEA,EAACD,IAAEA,EAAGzQ,EAAEA,EAAC5D,IAAEA,EAAGuU,WAAEA,EAAU/S,UAAEA,GAAcsS,GAAW/S,EAAUC,EAAMC,GAC1G,IAAK,IAAIsQ,EAAK,EAAGA,EAAK1e,EAAG0e,IAAM,CAC3B,MAAMtD,EAAKkG,EAAc5C,EACzB,IAAK,IAAI1uB,EAAI,EAAGA,EAAIsxB,EAAatxB,IAC7ByxB,EAAEzxB,GAAKwxB,EAAIpG,EAAKprB,GACpB,IAAIif,EAAM,QACJ9D,GAAUgW,EAAI,EAAGxS,GAAY3e,IAC/B6wB,GAASY,EAAGxS,EAAKwS,EAAIxS,GAAOqS,EAAcR,GAC1CY,OAEJb,GAASY,GAAIN,EAAI,GAAKG,EAAaE,EAAKpG,EAAI0F,GAC5CY,UACMvW,GAAUgW,EAAGxS,GAAY3e,IAE3B,MAAM4oB,EAAI4I,EAAIpG,EAAKkG,EAAc,IAAMH,EACvC,IAAK,IAAI/xB,EAAI,EAAGA,EAAIkyB,EAAalyB,IAC7B+d,EAAI/d,GAAKoyB,EAAIpG,EAAKhsB,GAAKqyB,EAAE7I,EAAI0I,EAAclyB,GAC/CyxB,GAAS1T,EAAK,EAAGqU,EAAKpG,EAAI0F,GAC1BY,OAGR,OAAOI,GAAa5T,EAAUG,EAAO0C,EAAG0Q,EAAGtU,GCjN9BgV,CAAYD,EAAQ/T,EAAM,CAAEgT,EAAAA,EAAGL,EAAAA,EAAG9gB,EAAAA,EAAGqO,MAAAA,EAAO+S,WAAAA,KAEvDgB,GAAc,SAAUF,EAAQ/T,EAAMgT,EAAGL,EAAG9gB,EAAGqO,GACjD,OD8JG,SAAgBH,EAAUC,EAAMC,GACnC,MAAM+S,EAAEA,EAACL,EAAEA,EAAC9gB,EAAEA,EAACqO,MAAEA,EAAKiT,YAAEA,EAAWG,EAAEA,EAACD,IAAEA,EAAGzQ,EAAEA,EAAC5D,IAAEA,EAAGuU,WAAEA,GAAeT,GAAW/S,EAAUC,EAAMC,GAC/F,IAAK,IAAIsQ,EAAK,EAAGA,EAAK1e,EAAG0e,IAAM,CAC3B,MAAMtD,EAAKkG,EAAc5C,EACzB,IAAK,IAAI1uB,EAAI,EAAGA,EAAIsxB,EAAatxB,IAC7ByxB,EAAEzxB,GAAKwxB,EAAIpG,EAAKprB,GACpB,IAAK,IAAIA,EAAI,EAAGif,EAAM,EAAGjf,EAAImxB,EAAI,EAAGnxB,IAChC6wB,GAASY,EAAGxS,EAAKwS,EAAIxS,GAAOqS,EAAcR,GAC1CY,IAEJb,GAASY,GAAIN,EAAI,GAAKG,EAAaE,EAAKpG,EAAI0F,GAC5CY,IACA,IAAK,IAAI1xB,EAAI,EAAGA,EAAImxB,EAAGnxB,IAAK,CAExB,MAAM4oB,EAAI4I,EAAIpG,EAAKkG,EAAc,IAAMH,EACvC,IAAK,IAAI/xB,EAAI,EAAGA,EAAIkyB,EAAalyB,IAC7B+d,EAAI/d,GAAKoyB,EAAIpG,EAAKhsB,GAAKqyB,EAAE7I,EAAI0I,EAAclyB,GAC/CyxB,GAAS1T,EAAK,EAAGqU,EAAKpG,EAAI0F,GAC1BY,KAGR,OAAOI,GAAa5T,EAAUG,EAAO0C,EAAG0Q,EAAGtU,GCnLpCkV,CAAWH,EAAQ/T,EAAM,CAAEgT,EAAAA,EAAGL,EAAAA,EAAG9gB,EAAAA,EAAGqO,MAAAA,KAE/C,IAAIiU,GAAgBL,GAChBM,GAAeH,GACZxzB,eAAe4zB,GAAOC,EAAS/T,EAAOyS,EAAGL,EAAG9gB,EAAGqO,EAAOqU,GACzD,MAAMR,EAASxpB,GAAO/B,SAAS8rB,EAAS,UAClCtU,EAAOzV,GAAO/B,SAAS+X,EAAO,QACpC,OAAO2C,SAAQiR,GAAcJ,EAAQ/T,EAAMgT,EAAGL,EAAG9gB,EAAGqO,EAAOqU,IAWxD,SAASC,GAAWF,EAAS/T,EAAOyS,EAAGL,EAAG9gB,EAAGqO,GAChD,MAAM6T,EAASxpB,GAAO/B,SAAS8rB,EAAS,UAClCtU,EAAOzV,GAAO/B,SAAS+X,EAAO,QACpC,OAAO2C,GAAEkR,GAAaL,EAAQ/T,EAAMgT,EAAGL,EAAG9gB,EAAGqO,IAZjDmU,GAAO5K,EAAIqK,GACXO,GAAO3K,KAAO,WAAcmK,IAAc,GAC1CQ,GAAO1K,SAAW,SAAUC,GACxB,GAAIiK,GACA,MAAM,IAAI9xB,MAAM,oBAEpBoyB,GAAgBvK,GAEpB/oB,OAAOsK,OAAOkpB,IAMdG,GAAW/K,EAAIwK,GACfO,GAAW9K,KAAO,WAAckK,IAAa,GAC7CY,GAAW7K,SAAW,SAAUC,GAC5B,GAAIgK,GACA,MAAM,IAAI7xB,MAAM,wBAEpBqyB,GAAexK,GAEnB/oB,OAAOsK,OAAOqpB,ICpCd,MAAMC,GAAU,SAAUhd,GACtB,OAAOsR,GAAW,UAAUjK,OAAOrH,GAAMsH,UAEvC2V,GAAU,SAAUjd,GACtB,OAAOsR,GAAW,UAAUjK,OAAOrH,GAAMsH,UAE7C,IAAI4V,GAAWF,GACXG,GAAWF,GACXG,IAAY,EAAOC,IAAY,EAC5B,SAASpR,GAAO8F,GACnB,MAAM/R,EAAOlN,GAAO/B,SAASghB,EAAO,QACpC,OAAOxR,GAAQ2c,GAASld,IAWrB,SAAS8Q,GAAOiB,GACnB,MAAM/R,EAAOlN,GAAO/B,SAASghB,EAAO,QACpC,OAAOxR,GAAQ4c,GAASnd,IClBrB,SAASiS,KACZH,GAAYG,OACZoD,GAAUpD,OACV5J,GAAO4J,OACP0G,GAAY1G,OACZ6F,GAAU7F,OACV2K,GAAO3K,OACP8K,GAAW9K,OACXhG,GAAOgG,OACPnB,GAAOmB,ODFXhG,GAAO+F,EAAIgL,GACX/Q,GAAOgG,KAAO,WAAcmL,IAAY,GACxCnR,GAAOiG,SAAW,SAAUC,GACxB,GAAIiL,GACA,MAAM,IAAI9yB,MAAM,oBAEpB4yB,GAAW/K,GAEf/oB,OAAOsK,OAAOuY,IAKd6E,GAAOkB,EAAIiL,GACXnM,GAAOmB,KAAO,WAAcoL,IAAY,GACxCvM,GAAOoB,SAAW,SAAUC,GACxB,GAAIkL,GACA,MAAM,IAAI/yB,MAAM,oBAEpB6yB,GAAWhL,GAEf/oB,OAAOsK,OAAOuY,IErCP,MCEMnZ,GAAS,IAAIrE,EDFH,uCEGjB0M,GAAOjK,OAAO,GACdosB,GAAQpsB,OAAO,IACrB,SAASqsB,GAAmBC,GAKxB,MAAMC,GADND,EAAUA,EAAQ3rB,eACIa,UAAU,GAAGzI,MAAM,IACnCyzB,EAAW,IAAIrrB,WAAW,IAChC,IAAK,IAAIjI,EAAI,EAAGA,EAAI,GAAIA,IACpBszB,EAAStzB,GAAKqzB,EAAMrzB,GAAGuzB,WAAW,GAEtC,MAAMC,EAAS7d,GAASsV,GAAUqI,IAClC,IAAK,IAAItzB,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACpBwzB,EAAOxzB,GAAK,IAAM,GAAM,IACzBqzB,EAAMrzB,GAAKqzB,EAAMrzB,GAAGyzB,gBAEF,GAAjBD,EAAOxzB,GAAK,KAAc,IAC3BqzB,EAAMrzB,EAAI,GAAKqzB,EAAMrzB,EAAI,GAAGyzB,eAGpC,MAAO,KAAOJ,EAAMxuB,KAAK,IAI7B,MAAM6uB,GAAa,GACnB,IAAK,IAAI1zB,EAAI,EAAGA,EAAI,GAAIA,IACpB0zB,GAAWjwB,OAAOzD,IAAMyD,OAAOzD,GAEnC,IAAK,IAAIA,EAAI,EAAGA,EAAI,GAAIA,IACpB0zB,GAAWjwB,OAAOC,aAAa,GAAK1D,IAAMyD,OAAO,GAAKzD,GAK1D,SAAS2zB,GAAaP,GAGlB,IAAIE,GADJF,GADAA,EAAUA,EAAQK,eACAnrB,UAAU,GAAK8qB,EAAQ9qB,UAAU,EAAG,GAAK,MACpCzI,MAAM,IAAIV,KAAK4O,GAAe2lB,GAAW3lB,KAAOlJ,KAAK,IAE5E,KAAOyuB,EAASrzB,QAND,IAMuB,CAClC,IAAI2zB,EAAQN,EAAShrB,UAAU,EAPpB,IAQXgrB,EAAWjrB,SAASurB,EAAO,IAAM,GAAKN,EAAShrB,UAAUsrB,EAAM3zB,QAEnE,IAAI4zB,EAAWpwB,OAAO,GAAM4E,SAASirB,EAAU,IAAM,IACrD,KAAOO,EAAS5zB,OAAS,GACrB4zB,EAAW,IAAMA,EAErB,OAAOA,EAGX,MAAMC,GAAS,WAEX,MAAM3rB,EAAS,GACf,IAAK,IAAInI,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAEzBmI,EADY,uCAAuCnI,IACrC8G,OAAO9G,GAEzB,OAAOmI,EAPI,GAiBR,SAAS4rB,GAAWX,GAIvB,GAHyB,iBAAb,GACR1qB,GAAO3D,mBAAmB,kBAAmB,UAAWquB,GAExDA,EAAQlrB,MAAM,0BAA2B,CAET,OAA5BkrB,EAAQ9qB,UAAU,EAAG,KACrB8qB,EAAU,KAAOA,GAErB,MAAMjrB,EAASgrB,GAAmBC,GAKlC,OAHIA,EAAQlrB,MAAM,kCAAoCC,IAAWirB,GAC7D1qB,GAAO3D,mBAAmB,uBAAwB,UAAWquB,GAE1DjrB,EAGX,GAAIirB,EAAQlrB,MAAM,kCAAmC,CAE7CkrB,EAAQ9qB,UAAU,EAAG,KAAOqrB,GAAaP,IACzC1qB,GAAO3D,mBAAmB,oBAAqB,UAAWquB,GAE9D,IAAIjrB,EA9BZ,SAAoBrJ,GAChBA,EAAQA,EAAM2I,cACd,IAAIU,EAAS4I,GACb,IAAK,IAAI/Q,EAAI,EAAGA,EAAIlB,EAAMmB,OAAQD,IAC9BmI,EAASA,EAAS+qB,GAAQY,GAAOh1B,EAAMkB,IAE3C,OAAOmI,EAwBU6rB,CAAWZ,EAAQ9qB,UAAU,IAAIiD,SAAS,IACvD,KAAOpD,EAAOlI,OAAS,IACnBkI,EAAS,IAAMA,EAEnB,OAAOgrB,GAAmB,KAAOhrB,GAErC,OAAOO,GAAO3D,mBAAmB,kBAAmB,UAAWquB,GAE5D,SAASa,GAAeb,GAE3B,IAAIc,EAASptB,OAAOitB,GAAWX,IAAU7nB,SAAS,IAAIkoB,cACtD,KAAOS,EAAOj0B,OAAS,IACnBi0B,EAAS,IAAMA,EAEnB,MAAO,KAAOP,GAAa,OAASO,GAAUA,EC3G3C,MCEMxrB,GAAS,IAAIrE,EDFH,mCEEvB,SAAS8vB,GAAgBr1B,GACrB,MAAMqJ,EAAS,GACf,KAAOrJ,GACHqJ,EAAO0N,QAAgB,IAAR/W,GACfA,IAAU,EAEd,OAAOqJ,EAEX,SAASisB,GAAQvwB,GACb,GAAI0K,MAAMN,QAAQpK,GAAS,CACvB,IAAIwwB,EAAU,GAId,GAHAxwB,EAAOwF,SAAQ,SAAUirB,GACrBD,EAAUA,EAAQ/d,OAAO8d,GAAQE,OAEjCD,EAAQp0B,QAAU,GAElB,OADAo0B,EAAQxe,QAAQ,IAAOwe,EAAQp0B,QACxBo0B,EAEX,MAAMp0B,EAASk0B,GAAgBE,EAAQp0B,QAEvC,OADAA,EAAO4V,QAAQ,IAAO5V,EAAOA,QACtBA,EAAOqW,OAAO+d,GAEzB,MAAMze,EAAOrH,MAAMsO,UAAUvS,MAAMhJ,KAAKoH,GAAO/B,SAAS9C,EAAQ,WAChE,GAAoB,IAAhB+R,EAAK3V,QAAgB2V,EAAK,IAAM,IAChC,OAAOA,EAEN,GAAIA,EAAK3V,QAAU,GAEpB,OADA2V,EAAKC,QAAQ,IAAOD,EAAK3V,QAClB2V,EAEX,MAAM3V,EAASk0B,GAAgBve,EAAK3V,QAEpC,OADAA,EAAO4V,QAAQ,IAAO5V,EAAOA,QACtBA,EAAOqW,OAAOV,GAGlB,SAAS2e,GAAU1wB,GACtB,IAAIsE,EAAS,KACb,IAAK,MAAM3I,KAAK40B,GAAQvwB,GACpBsE,GAJQ,mBAIU3I,GAAK,GACvB2I,GALQ,mBAKc,GAAJ3I,GAEtB,OAAO2I,ECxCX,SAASqsB,GAAY11B,GACjB,IAAIqJ,EAASrJ,EAAMyM,SAAS,IAC5B,KAAOpD,EAAOlI,OAAS,GACnBkI,EAAS,IAAMA,EAEnB,MAAO,KAAOA,EAElB,SAASssB,GAAkB7e,EAAMxN,EAAQnI,GACrC,IAAIkI,EAAS,EACb,IAAK,IAAInI,EAAI,EAAGA,EAAIC,EAAQD,IACxBmI,EAAmB,IAATA,EAAgByN,EAAKxN,EAASpI,GAE5C,OAAOmI,EAEX,SAASusB,GAAgB9e,EAAMxN,EAAQusB,EAAa10B,GAChD,MAAMkI,EAAS,GACf,KAAOwsB,EAAcvsB,EAAS,EAAInI,GAAQ,CACtC,MAAM20B,EAAUC,GAAQjf,EAAM+e,GAC9BxsB,EAAOxE,KAAKixB,EAAQzsB,SACpBwsB,GAAeC,EAAQnb,UACLrR,EAAS,EAAInI,GAC3ByI,GAAO5D,WAAW,uBAAwB,iBAAkB,CACxD+R,OAAQjB,EAAM3V,OAAAA,EAAQmI,OAAAA,IAIlC,MAAO,CAAEqR,SAAW,EAAIxZ,EAASkI,OAAQA,GAG7C,SAAS0sB,GAAQjf,EAAMxN,GACC,IAAhBwN,EAAK3V,QACLyI,GAAO5D,WAAW,iBAAkB,iBAAkB,CAClD+R,OAAQjB,EAAM3V,OAAQ,EAAGmI,OAAQ,IAGzC,MAAM0sB,EAAe1sB,IACbA,EAASwN,EAAK3V,QACdyI,GAAO5D,WAAW,+BAAgC,iBAAkB,CAChE+R,OAAQjB,EAAM3V,OAAQ2V,EAAK3V,OAAQmI,OAAAA,KAK/C,GAAIwN,EAAKxN,IAAW,IAAM,CACtB,MAAM2sB,EAAenf,EAAKxN,GAAU,IACpC0sB,EAAY1sB,EAAS,EAAI2sB,GACzB,MAAM90B,EAASw0B,GAAkB7e,EAAMxN,EAAS,EAAG2sB,GAEnD,OADAD,EAAY1sB,EAAS,EAAI2sB,EAAe90B,GACjCy0B,GAAgB9e,EAAMxN,EAAQA,EAAS,EAAI2sB,EAAcA,EAAe90B,GAE9E,GAAI2V,EAAKxN,IAAW,IAAM,CAC3B,MAAMnI,EAAS2V,EAAKxN,GAAU,IAE9B,OADA0sB,EAAY1sB,EAAS,EAAInI,GAClBy0B,GAAgB9e,EAAMxN,EAAQA,EAAS,EAAGnI,GAEhD,GAAI2V,EAAKxN,IAAW,IAAM,CAC3B,MAAM2sB,EAAenf,EAAKxN,GAAU,IACpC0sB,EAAY1sB,EAAS,EAAI2sB,GACzB,MAAM90B,EAASw0B,GAAkB7e,EAAMxN,EAAS,EAAG2sB,GACnDD,EAAY1sB,EAAS,EAAI2sB,EAAe90B,GAExC,MAAO,CAAEwZ,SAAW,EAAIsb,EAAe90B,EAASkI,OADjCgO,GAAQP,EAAKtL,MAAMlC,EAAS,EAAI2sB,EAAc3sB,EAAS,EAAI2sB,EAAe90B,KAGxF,GAAI2V,EAAKxN,IAAW,IAAM,CAC3B,MAAMnI,EAAS2V,EAAKxN,GAAU,IAC9B0sB,EAAY1sB,EAAS,EAAInI,GAEzB,MAAO,CAAEwZ,SAAW,EAAIxZ,EAASkI,OADlBgO,GAAQP,EAAKtL,MAAMlC,EAAS,EAAGA,EAAS,EAAInI,KAG/D,MAAO,CAAEwZ,SAAU,EAAGtR,OAAQqsB,GAAY5e,EAAKxN,KAE5C,SAAS4sB,GAAUrN,GACtB,MAAM/R,EAAOlN,GAAO/B,SAASghB,EAAO,QAC9BiN,EAAUC,GAAQjf,EAAM,GAI9B,OAHIgf,EAAQnb,WAAa7D,EAAK3V,QAC1ByI,GAAO3D,mBAAmB,oCAAqC,OAAQ4iB,GAEpEiN,EAAQzsB,OC1EZ,SAAS8sB,GAAiBC,GAC7B,MAAMtoB,EAAOmnB,GAAWmB,EAAGtoB,MAE3B,IAAIuoB,EADUzsB,GAAO1B,UAAUkuB,EAAGE,MAAO,YACpB7pB,SAAS,IAU9B,OARI4pB,EADa,MAAbA,EACW,KAENA,EAASl1B,OAAS,EACZ,MAAQk1B,EAGR,KAAOA,EAEfpB,GAAWrd,GAAUuU,GAAUsJ,GAAU,CAAC3nB,EAAMuoB,KAAa,KAEjE,SAASE,GAAkBC,EAAO5W,EAAO6W,GAC5C,MAAM3oB,EAAOmnB,GAAWuB,GAClBnX,EAAOzV,GAAO/B,SAAS+X,EAAO,QAC9B8W,EAAe9sB,GAAO/B,SAAS4uB,EAAe,gBAOpD,OANoB,KAAhBpX,EAAKle,QACLyI,GAAO3D,mBAAmB,wBAAyB,OAAQ2Z,GAEnC,KAAxB8W,EAAav1B,QACbyI,GAAO3D,mBAAmB,gCAAiC,eAAgBwwB,GAExExB,GAAWrd,GAAUuU,GAAU3U,GAAO,CAAC,OAAQ1J,EAAMuR,EAAMqX,KAAiB,KC7BhF,SAASC,GAAc32B,GAC1B,OAAQA,GAAuC,mBAAtBA,EAAgB,WAEtC,SAAS42B,GAAU52B,GACtB,IAEI,OADAi1B,GAAWj1B,IACJ,EAEX,MAAOuD,IACP,OAAO,EAOJzD,eAAe+2B,GAAev1B,EAAQw1B,GAEzC,GAAwB,iBAAZ,EAAsB,CAC9B,GAAIx1B,EAAO8H,MAAM,qBACb,OAAO6rB,GAAW3zB,GAEtB,GAAgB,MAAZw1B,EACA,OAAOltB,GAAO5D,WAAW,qCAAsC,wBAAyB,CACpFY,UAAW,gBAGnB,MAAMyC,QAAeytB,EAASC,YAAYz1B,GAC1C,OAAc,MAAV+H,GAA6B,+CAAXA,EACXO,GAAO5D,WAAW,oBAAqB,oBAAqB,CAAEhG,MAAOsB,IAEzE2zB,GAAW5rB,GAEjB,GAAIstB,GAAcr1B,GAAS,CAC5B,MAAM+H,QAAe/H,EAAO2zB,aAI5B,OAHc,MAAV5rB,GACAO,GAAO3D,mBAAmB,+BAAgC,SAAU3E,GAEjE2zB,GAAW5rB,GAEtB,OAAOO,GAAO3D,mBAAmB,gCAAiC,SAAU3E,GC1ChF,IAWI01B,GAXAh1B,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAIxF,MAAM+0B,GAAS,GACf,SAAS9Z,GAAEnd,EAAOuS,GACd,IAAI6B,GAAS,EAMb,OALI7B,EAAQ,IACR6B,GAAS,EACT7B,IAAU,GAGP,IAAI2kB,GAAMD,GAAQ,GAAG7iB,EAAS,GAAK,SAAS7B,IAASvS,EAAO,CAAEoU,OAAAA,EAAQ7B,MAAAA,IAEjF,SAASqC,GAAE5U,EAAOmO,GAEd,OAAO,IAAI+oB,GAAMD,GAAQ,QAAQ,GAAgB,KAAMj3B,EAAO,CAAEmO,KAAAA,IAEpE,MAAMgpB,GAAe7oB,OAAOC,IAAI,iBACzB,MAAM2oB,GACTr0B,YAAYu0B,EAAOv2B,EAAMb,EAAOq3B,EAAU,MAEtC,GADAL,GAAev0B,IAAIR,UAAM,GACrBm1B,IAAUH,GACV,MAAM,IAAI71B,MAAM,uBAEpBC,EAAiBY,KAAM,CAAEk1B,aAAAA,GAAct2B,KAAAA,EAAMb,MAAAA,IAC7CgC,GAAuBC,KAAM+0B,GAAgBK,EAAS,KAEtDp1B,KAAK4M,SAETA,SACI,GAAkB,UAAd5M,KAAKpB,KACL,MAAM,IAAIO,MAAM,IAEf,GAAkB,iBAAda,KAAKpB,KACV,MAAM,IAAIO,MAAM,IAEf,MAAkB,UAAda,KAAKpB,KACH,SAASoB,KAAKjC,MAAMK,KAAKK,GAAMA,EAAEmO,WAAU9I,KAAK,QAEpD9D,KAAKpB,KAEhByT,eACI,OAAO,EAEXxL,WACI,OAAO,EAEX7D,WACI,OAAO,EAEXqyB,WACI,QAAUr1B,KAAKpB,KAAKuI,MAAM,iBAE9BmuB,SACI,MAAsC,UAA9Bt1B,KAAKpB,KAAK2I,UAAU,EAAG,GAEnCguB,WACI,MAAsB,WAAdv1B,KAAKpB,KAEb42B,gBACA,GAAkB,UAAdx1B,KAAKpB,KACL,MAAMyB,UAAU,eAEpB,OAAOI,GAAuBT,KAAM+0B,GAAgB,KAMpDroB,kBACA,GAAkB,UAAd1M,KAAKpB,KACL,MAAMyB,UAAU,gBAEpB,OAA0D,IAAtDI,GAAuBT,KAAM+0B,GAAgB,MACrC,GAE8C,IAAtDt0B,GAAuBT,KAAM+0B,GAAgB,KACrC/0B,KAAU,MAAEd,OAEjB,KAEXqH,YAAY3H,EAAMb,GACd,OAAO,IAAIk3B,GAAMD,GAAQp2B,EAAMb,GAEnCwI,aAAa9H,GAAK,OAAOyc,GAAEzc,EAAG,GAC9B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,EAAG,IAC/B8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,eAAe9H,GAAK,OAAOyc,GAAEzc,EAAG,KAChC8H,YAAY9H,GAAK,OAAOyc,GAAEzc,EAAG,KAC7B8H,YAAY9H,GAAK,OAAOyc,GAAEzc,GAAI,GAC9B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,aAAa9H,GAAK,OAAOyc,GAAEzc,GAAI,IAC/B8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,cAAc9H,GAAK,OAAOyc,GAAEzc,GAAI,KAChC8H,WAAW9H,GAAK,OAAOyc,GAAEzc,GAAI,KAC7B8H,aAAa9H,GAAK,OAAOkU,GAAElU,GAC3B8H,cAAc9H,GAAK,OAAOkU,GAAElU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOkU,GAAElU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOkU,GAAElU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOkU,GAAElU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOkU,GAAElU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOkU,GAAElU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOkU,GAAElU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOkU,GAAElU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOkU,GAAElU,EAAG,GAC/B8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOkU,GAAElU,EAAG,IAChC8H,eAAe9H,GAAK,OAAO,IAAIw2B,GAAMD,GAAQ,UAAWv2B,GACxD8H,YAAY9H,GAAK,OAAO,IAAIw2B,GAAMD,GAAQ,SAAUv2B,GACpD8H,cAAc9H,GAAK,OAAO,IAAIw2B,GAAMD,GAAQ,SAAUv2B,GACtD8H,aAAa9H,EAAGoZ,GACZ,MAAM,IAAI1Y,MAAM,uBAGpBoH,aAAa9H,EAAGsE,GACZ,MAAM,IAAI5D,MAAM,uBAGpBoH,iBAAiB9H,GACb,OAAO,IAAIw2B,GAAMD,GAAQ,YAAa/2B,OAAO8N,OAAO,GAAItN,IAE5D8H,eAAexI,GACX,OAAQA,GAASA,EAAMm3B,eAAiBA,GAE5C3uB,mBAAmBxI,EAAOa,GACtB,GAAIq2B,GAAMQ,QAAQ13B,GAAQ,CACtB,GAAIA,EAAMa,OAASA,EACf,MAAM,IAAIO,MAAM,0BAA0BP,UAAab,EAAMa,QAEjE,OAAOb,EAAMA,MAEjB,OAAOA,GAGfg3B,GAAiB,IAAItzB,QCxNd,MAAMi0B,WAAqB/d,GAC9B/W,YAAYgX,GACR9I,MAAM,UAAW,UAAW8I,GAAW,GAE3CvF,eACI,MAAO,6CAEX0I,OAAO9C,EAAQ/H,GACX,IAAInS,EAAQk3B,GAAMU,YAAYzlB,EAAQ,UACtC,IACInS,EAAQi1B,GAAWj1B,GAEvB,MAAOuD,GACH,OAAOtB,KAAK8X,YAAYxW,EAAMoC,QAASwM,GAE3C,OAAO+H,EAAOG,WAAWra,GAE7B63B,OAAOC,GACH,OAAO7C,GAAW5iB,GAAMylB,EAAO/c,YAAa,MCpB7C,MAAMgd,WAAuBne,GAChC/W,YAAYm1B,GACRjnB,MAAMinB,EAAMhzB,KAAMgzB,EAAMn3B,KAAM,IAAKm3B,EAAMle,SACzC7X,KAAK+1B,MAAQA,EAEjB1jB,eACI,OAAOrS,KAAK+1B,MAAM1jB,eAEtB0I,OAAO9C,EAAQla,GACX,OAAOiC,KAAK+1B,MAAMhb,OAAO9C,EAAQla,GAErC63B,OAAOC,GACH,OAAO71B,KAAK+1B,MAAMH,OAAOC,ICR1B,SAASG,GAAK/d,EAAQge,EAAQ32B,GACjC,IAAI42B,EAAc,GAClB,GAAI1oB,MAAMN,QAAQ5N,GACd42B,EAAc52B,OAEb,GAAIA,GAA8B,iBAApB,EAA8B,CAC7C,IAAI62B,EAAS,GACbD,EAAcD,EAAO73B,KAAK23B,IACtB,MAAMhzB,EAAOgzB,EAAMne,UAgBnB,OAfK7U,GACD4E,EAAO5D,WAAW,wDAAyD,mBAAoB,CAC3FE,SAAU,SACV/B,KAAM,CAAE6zB,MAAAA,GACRh4B,MAAOuB,IAGX62B,EAAOpzB,IACP4E,EAAO5D,WAAW,0DAA2D,mBAAoB,CAC7FE,SAAU,SACV/B,KAAM,CAAE6zB,MAAAA,GACRh4B,MAAOuB,IAGf62B,EAAOpzB,IAAQ,EACRzD,EAAOyD,WAIlB4E,EAAO3D,mBAAmB,sBAAuB,QAAS1E,GAE1D22B,EAAO/2B,SAAWg3B,EAAYh3B,QAC9ByI,EAAO3D,mBAAmB,8BAA+B,QAAS1E,GAEtE,IAAI82B,EAAe,IAAIre,GACnBse,EAAgB,IAAIte,GACpBue,EAAc,GAClBL,EAAO3tB,SAAQ,CAACytB,EAAOr3B,KACnB,IAAIX,EAAQm4B,EAAYx3B,GACxB,GAAIq3B,EAAMle,QAAS,CAEf,IAAI0e,EAAgBF,EAAcn3B,OAElC62B,EAAMhb,OAAOsb,EAAet4B,GAE5B,IAAIy4B,EAAaJ,EAAa/d,sBAC9Bie,EAAY1zB,MAAM6zB,IACdD,EAAWC,EAAaF,WAI5BR,EAAMhb,OAAOqb,EAAcr4B,MAInCu4B,EAAYhuB,SAAS0e,IAAWA,EAAKoP,EAAal3B,WAClD,IAAIA,EAAS+Y,EAAOD,aAAaoe,GAEjC,OADAl3B,GAAU+Y,EAAOD,aAAaqe,GACvBn3B,EAEJ,SAASw3B,GAAOb,EAAQI,GAC3B,IAAI32B,EAAS,GACTtB,EAAO,GAEP24B,EAAad,EAAOld,UAAU,GAyClC,OAxCAsd,EAAO3tB,SAASytB,IACZ,IAAIh4B,EAAQ,KACZ,GAAIg4B,EAAMle,QAAS,CACf,IAAIxQ,EAASwuB,EAAO9c,YAChB6d,EAAeD,EAAWhe,UAAUtR,GACxC,IACItJ,EAAQg4B,EAAMH,OAAOgB,GAEzB,MAAOt1B,GAEH,GAAID,EAAQC,EAAO,kBACf,MAAMA,EAEVvD,EAAQuD,EACRvD,EAAMwO,SAAWwpB,EAAMhzB,KACvBhF,EAAMgF,KAAOgzB,EAAMne,UACnB7Z,EAAMa,KAAOm3B,EAAMn3B,WAIvB,IACIb,EAAQg4B,EAAMH,OAAOC,GAEzB,MAAOv0B,GAEH,GAAID,EAAQC,EAAO,kBACf,MAAMA,EAEVvD,EAAQuD,EACRvD,EAAMwO,SAAWwpB,EAAMhzB,KACvBhF,EAAMgF,KAAOgzB,EAAMne,UACnB7Z,EAAMa,KAAOm3B,EAAMn3B,KAG3B,GAAac,MAAT3B,EACA,MAAM,IAAIoB,MAAM,eAEpBG,EAAOsD,KAAK7E,GACZC,EAAK4E,KAAKmzB,EAAMne,WAAa,SAE1BT,GAAO0f,UAAUv3B,EAAQtB,GAE7B,MAAM84B,WAAmBnf,GAC5B/W,YAAYm1B,EAAO72B,EAAQ0Y,GAGvB9I,MAAM,QAFQinB,EAAMn3B,KAAO,KAAOM,GAAU,EAAIA,EAAS,IAAM,IAE1C0Y,GADQ,IAAZ1Y,GAAiB62B,EAAMle,SAExCzY,EAAiBY,KAAM,CAAE+1B,MAAAA,EAAO72B,OAAAA,IAEpCmT,eAEI,MAAM0kB,EAAe/2B,KAAK+1B,MAAM1jB,eAC1BjL,EAAS,GACf,IAAK,IAAInI,EAAI,EAAGA,EAAIe,KAAKd,OAAQD,IAC7BmI,EAAOxE,KAAKm0B,GAEhB,OAAO3vB,EAEX2T,OAAO9C,EAAQ/H,GACX,MAAMnS,EAAQk3B,GAAMU,YAAYzlB,EAAQ,SACnC1C,MAAMN,QAAQnP,IACfiC,KAAK8X,YAAY,uBAAwB/Z,GAE7C,IAAIsH,EAAQrF,KAAKd,QACF,IAAXmG,IACAA,EAAQtH,EAAMmB,OACd+Y,EAAOG,WAAWra,EAAMmB,SAE5ByI,EAAOvC,oBAAoBrH,EAAMmB,OAAQmG,EAAO,eAAiBrF,KAAK4X,UAAa,IAAM5X,KAAK4X,UAAa,KAC3G,IAAIqe,EAAS,GACb,IAAK,IAAIh3B,EAAI,EAAGA,EAAIlB,EAAMmB,OAAQD,IAC9Bg3B,EAAOrzB,KAAK5C,KAAK+1B,OAErB,OAAOC,GAAK/d,EAAQge,EAAQl4B,GAEhC63B,OAAOC,GACH,IAAIxwB,EAAQrF,KAAKd,QACF,IAAXmG,IACAA,EAAQwwB,EAAO9c,YlCpIH,GkC0IR1T,EAAmBwwB,EAAOngB,YAC1B/N,EAAO5D,WAAW,2BAA4B,iBAAkB,CAC5D+R,OAAQ+f,EAAOxgB,MACfhO,OlC7II,GkC6IIhC,EACRnG,OAAQ22B,EAAOngB,cAI3B,IAAIugB,EAAS,GACb,IAAK,IAAIh3B,EAAI,EAAGA,EAAIoG,EAAOpG,IACvBg3B,EAAOrzB,KAAK,IAAIkzB,GAAe91B,KAAK+1B,QAExC,OAAOF,EAAOpd,OAAOzY,KAAK+C,KAAM2zB,GAAOb,EAAQI,KCpKhD,MAAMe,WAAqBrf,GAC9B/W,YAAYgX,GACR9I,MAAM,OAAQ,OAAQ8I,GAAW,GAErCvF,eACI,OAAO,EAEX0I,OAAO9C,EAAQ/H,GACX,MAAMnS,EAAQk3B,GAAMU,YAAYzlB,EAAQ,QACxC,OAAO+H,EAAOG,WAAWra,EAAQ,EAAI,GAEzC63B,OAAOC,GACH,OAAOA,EAAOpd,OAAOzY,KAAKpB,MAAOi3B,EAAO/c,cCZzC,MAAMme,WAA0Btf,GACnC/W,YAAYhC,EAAMgZ,GACd9I,MAAMlQ,EAAMA,EAAMgZ,GAAW,GAEjCvF,eACI,MAAO,KAEX0I,OAAO9C,EAAQla,GACXA,EAAQ6W,GAAS7W,GACjB,IAAImB,EAAS+Y,EAAOG,WAAWra,EAAMmB,QAErC,OADAA,GAAU+Y,EAAOC,WAAWna,GACrBmB,EAEX02B,OAAOC,GACH,OAAOA,EAAOjd,UAAUid,EAAO9c,aAAa,IAG7C,MAAMme,WAAmBD,GAC5Br2B,YAAYgX,GACR9I,MAAM,QAAS8I,GAEnBge,OAAOC,GACH,OAAOA,EAAOpd,OAAOzY,KAAK+C,KAAMqS,GAAQtG,MAAM8mB,OAAOC,MCpBtD,MAAMsB,WAAwBxf,GACjC/W,YAAYsL,EAAM0L,GACd,IAAI7U,EAAO,QAAUL,OAAOwJ,GAC5B4C,MAAM/L,EAAMA,EAAM6U,GAAW,GAC7BxY,EAAiBY,KAAM,CAAEkM,KAAAA,GAAQ,CAAEA,KAAM,WAE7CmG,eACI,MAAO,qEAAuE9K,UAAU,EAAG,EAAgB,EAAZvH,KAAKkM,MAExG6O,OAAO9C,EAAQ/H,GACX,IAAI2E,EAAOD,GAASqgB,GAAMU,YAAYzlB,EAAQlQ,KAAKpB,OAInD,OAHIiW,EAAK3V,SAAWc,KAAKkM,MACrBlM,KAAK8X,YAAY,wBAAyB5H,GAEvC+H,EAAOC,WAAWrD,GAE7B+gB,OAAOC,GACH,OAAOA,EAAOpd,OAAOzY,KAAK+C,KAAMqS,GAAQygB,EAAOjd,UAAU5Y,KAAKkM,SCpBtE,MAAMkrB,GAAQ,IAAIlwB,WAAW,IACtB,MAAMmwB,WAAkB1f,GAC3B/W,YAAYgX,GACR9I,MAAM,OAAQ,GAAI8I,GAAW,GAEjCvF,eACI,OAAO,KAEX0I,OAAO9C,EAAQla,GAIX,OAHa,MAATA,GACAiC,KAAK8X,YAAY,WAAY/Z,GAE1Bka,EAAOC,WAAWkf,IAE7BxB,OAAOC,GAEH,OADAA,EAAOjd,UAAU,GACVid,EAAOpd,OAAOzY,KAAK+C,KAAM,OCZxC,MAAMiN,GAAOjK,OAAO,GACd0K,GAAO1K,OAAO,GACduxB,GAAiBvxB,OAAO,sEACvB,MAAMwxB,WAAoB5f,GAC7B/W,YAAYsL,EAAMiG,EAAQyF,GACtB,MAAM7U,GAASoP,EAAS,MAAQ,QAAkB,EAAPjG,EAC3C4C,MAAM/L,EAAMA,EAAM6U,GAAW,GAC7BxY,EAAiBY,KAAM,CAAEkM,KAAAA,EAAMiG,OAAAA,GAAU,CAAEjG,KAAM,SAAUiG,OAAQ,YAEvEE,eACI,OAAO,EAEX0I,OAAO9C,EAAQ/H,GACX,IAAInS,EAAQ4J,EAAO1B,UAAUgvB,GAAMU,YAAYzlB,EAAQlQ,KAAKpB,OAExD44B,EAAe5mB,GAAK0mB,GAAgBG,KACxC,GAAIz3B,KAAKmS,OAAQ,CACb,IAAIulB,EAAS9mB,GAAK4mB,EAA2B,EAAZx3B,KAAKkM,KAAY,IAC9CnO,EAAQ25B,GAAU35B,IAAU25B,EAASjnB,MACrCzQ,KAAK8X,YAAY,sBAAuB5H,QAGvCnS,EAAQiS,IAAQjS,EAAQ6S,GAAK4mB,EAA0B,EAAZx3B,KAAKkM,QACrDlM,KAAK8X,YAAY,sBAAuB5H,GAM5C,OAJAnS,EAAQ6S,GAAKD,GAAO5S,EAAmB,EAAZiC,KAAKkM,MAAuB,EAAZlM,KAAKkM,MAC5ClM,KAAKmS,SACLpU,EAAQ4S,GAAOD,GAAS3S,EAAmB,EAAZiC,KAAKkM,MAAW,MAE5C+L,EAAOG,WAAWra,GAE7B63B,OAAOC,GACH,IAAI93B,EAAQ6S,GAAKilB,EAAO/c,YAAyB,EAAZ9Y,KAAKkM,MAI1C,OAHIlM,KAAKmS,SACLpU,EAAQ2S,GAAS3S,EAAmB,EAAZiC,KAAKkM,OAE1B2pB,EAAOpd,OAAOzY,KAAK+C,KAAMhF,ICzCjC,MCEM4J,GAAS,IAAIrE,EDFH,uCEEb,IAACq0B,GASAC,GA+BX,SAASC,GAAWC,EAAQzwB,EAAQgO,EAAO0iB,EAAQC,GAE/C,GAAIF,IAAWF,GAAgBK,YAAcH,IAAWF,GAAgBM,oBAAqB,CACzF,IAAIj5B,EAAI,EACR,IAAK,IAAI0Q,EAAItI,EAAS,EAAGsI,EAAI0F,EAAMnW,QAC3BmW,EAAM1F,IAAM,GAAM,EADiBA,IAIvC1Q,IAEJ,OAAOA,EAIX,OAAI64B,IAAWF,GAAgBO,QACpB9iB,EAAMnW,OAASmI,EAAS,EAG5B,GAzDX,SAAWswB,GACPA,EAAkC,QAAI,GACtCA,EAA8B,IAAI,MAClCA,EAA8B,IAAI,MAClCA,EAA+B,KAAI,OACnCA,EAA+B,KAAI,OALvC,CAMGA,KAA6BA,GAA2B,KAG3D,SAAWC,GAGPA,EAAqC,oBAAI,+BAGzCA,EAA4B,WAAI,uBAGhCA,EAAyB,QAAI,iBAG7BA,EAAkC,iBAAI,4BAItCA,EAA8B,aAAI,qBAIlCA,EAAiC,gBAAI,mBAIrCA,EAA0B,SAAI,0BAxBlC,CAyBGA,KAAoBA,GAAkB,KAqC7B,MAACQ,GAAiBn6B,OAAOsK,OAAO,CACxCjH,MApCJ,SAAmBw2B,EAAQzwB,EAAQgO,EAAO0iB,EAAQC,GAC9C,OAAOrwB,GAAO3D,mBAAmB,+BAA+BqD,MAAWywB,IAAU,QAASziB,IAoC9FgjB,OAAQR,GACRS,QAfJ,SAAqBR,EAAQzwB,EAAQgO,EAAO0iB,EAAQC,GAEhD,OAAIF,IAAWF,GAAgBW,UAC3BR,EAAOn1B,KAAsB,MAAhBo1B,EAAwBA,GAAgB,GAC9C,IAGXD,EAAOn1B,KAAK,OAELi1B,GAAWC,EAAQzwB,EAAQgO,OAStC,SAASmjB,GAAkBC,EAAQC,GAChB,MAAXA,IACAA,EAAUN,GAAe92B,OAE7B,MAAM+T,EAAQ1N,GAAO/B,SAAS6yB,EAAQ,SAChCrxB,EAAS,GACf,IAAInI,EAAI,EAER,KAAOA,EAAIoW,EAAMnW,QAAQ,CACrB,MAAM8N,EAAIqI,EAAMpW,KAEhB,GAAI+N,GAAK,GAAM,EAAG,CACd5F,EAAOxE,KAAKoK,GACZ,SAGJ,IAAI2rB,EAAc,KACdC,EAAe,KAEnB,GAAmB,MAAV,IAAJ5rB,GACD2rB,EAAc,EACdC,EAAe,SAGd,GAAmB,MAAV,IAAJ5rB,GACN2rB,EAAc,EACdC,EAAe,SAGd,CAAA,GAAmB,MAAV,IAAJ5rB,GAIL,CAEG/N,GAAKy5B,EADU,MAAV,IAAJ1rB,GACY4qB,GAAgBM,oBAGhBN,GAAgBK,WAHqBh5B,EAAI,EAAGoW,EAAOjO,GAKpE,SAVAuxB,EAAc,EACdC,EAAe,MAYnB,GAAI35B,EAAI,EAAI05B,GAAetjB,EAAMnW,OAAQ,CACrCD,GAAKy5B,EAAQd,GAAgBO,QAASl5B,EAAI,EAAGoW,EAAOjO,GACpD,SAGJ,IAAIoY,EAAMxS,GAAM,GAAM,EAAI2rB,EAAc,GAAM,EAC9C,IAAK,IAAI9Q,EAAI,EAAGA,EAAI8Q,EAAa9Q,IAAK,CAClC,IAAIgR,EAAWxjB,EAAMpW,GAErB,GAAyB,MAAT,IAAX45B,GAA0B,CAC3B55B,GAAKy5B,EAAQd,GAAgBkB,iBAAkB75B,EAAGoW,EAAOjO,GACzDoY,EAAM,KACN,MAGJA,EAAOA,GAAO,EAAiB,GAAXqZ,EACpB55B,IAGQ,OAARugB,IAIAA,EAAM,QACNvgB,GAAKy5B,EAAQd,GAAgBmB,aAAc95B,EAAI,EAAI05B,EAAatjB,EAAOjO,EAAQoY,GAI/EA,GAAO,OAAUA,GAAO,MACxBvgB,GAAKy5B,EAAQd,GAAgBoB,gBAAiB/5B,EAAI,EAAI05B,EAAatjB,EAAOjO,EAAQoY,GAIlFA,GAAOoZ,EACP35B,GAAKy5B,EAAQd,GAAgBW,SAAUt5B,EAAI,EAAI05B,EAAatjB,EAAOjO,EAAQoY,GAG/EpY,EAAOxE,KAAK4c,IAEhB,OAAOpY,EAGJ,SAAS6xB,GAAYpe,EAAKtY,EAAOo1B,GAAyBuB,SACzD32B,GAAQo1B,GAAyBuB,UACjCvxB,GAAO9C,gBAAgBtC,GACvBsY,EAAMA,EAAIrY,UAAUD,IAExB,IAAI6E,EAAS,GACb,IAAK,IAAInI,EAAI,EAAGA,EAAI4b,EAAI3b,OAAQD,IAAK,CACjC,MAAM+N,EAAI6N,EAAI2X,WAAWvzB,GACzB,GAAI+N,EAAI,IACJ5F,EAAOxE,KAAKoK,QAEX,GAAIA,EAAI,KACT5F,EAAOxE,KAAMoK,GAAK,EAAK,KACvB5F,EAAOxE,KAAU,GAAJoK,EAAY,UAExB,GAAoB,QAAX,MAAJA,GAAuB,CAC7B/N,IACA,MAAMk6B,EAAKte,EAAI2X,WAAWvzB,GAC1B,GAAIA,GAAK4b,EAAI3b,QAA4B,QAAZ,MAALi6B,GACpB,MAAM,IAAIh6B,MAAM,wBAGpB,MAAMi6B,EAAO,QAAgB,KAAJpsB,IAAe,KAAY,KAALmsB,GAC/C/xB,EAAOxE,KAAMw2B,GAAQ,GAAM,KAC3BhyB,EAAOxE,KAAOw2B,GAAQ,GAAM,GAAQ,KACpChyB,EAAOxE,KAAOw2B,GAAQ,EAAK,GAAQ,KACnChyB,EAAOxE,KAAa,GAAPw2B,EAAe,UAG5BhyB,EAAOxE,KAAMoK,GAAK,GAAM,KACxB5F,EAAOxE,KAAOoK,GAAK,EAAK,GAAQ,KAChC5F,EAAOxE,KAAU,GAAJoK,EAAY,KAGjC,OAAO,IAAI9F,WAAWE,GAG1B,SAASiyB,GAAWt7B,GAChB,MAAMyS,EAAO,OAASzS,EAAMyM,SAAS,IACrC,MAAO,MAAQgG,EAAIjJ,UAAUiJ,EAAItR,OAAS,GAEvC,SAASo6B,GAAqBjkB,EAAOqjB,GACxC,MAAO,IAAMF,GAAkBnjB,EAAOqjB,GAASt6B,KAAKm7B,IAChD,GAAIA,EAAY,IAAK,CACjB,OAAQA,GACJ,KAAK,EAAG,MAAO,MACf,KAAK,EAAG,MAAO,MACf,KAAK,GAAI,MAAO,MAChB,KAAK,GAAI,MAAO,MAChB,KAAK,GAAI,MAAO,MAChB,KAAK,GAAI,MAAO,OAEpB,GAAIA,GAAa,IAAMA,EAAY,IAC/B,OAAO72B,OAAOC,aAAa42B,GAGnC,OAAIA,GAAa,MACNF,GAAWE,GAGfF,GAAyC,QADhDE,GAAa,QACoB,GAAM,OAAmBF,GAAiC,OAAT,KAAZE,OACvEz1B,KAAK,IAAM,IAEX,SAAS01B,GAAcC,GAC1B,OAAOA,EAAWr7B,KAAKm7B,GACfA,GAAa,MACN72B,OAAOC,aAAa42B,IAE/BA,GAAa,MACN72B,OAAOC,aAA4C,OAA5B42B,GAAa,GAAM,MAAyC,OAAT,KAAZA,OACtEz1B,KAAK,IAEL,SAAS41B,GAAarkB,EAAOqjB,GAChC,OAAOc,GAAchB,GAAkBnjB,EAAOqjB,IAE3C,SAASiB,GAAiB9e,EAAKtY,EAAOo1B,GAAyBuB,SAClE,OAAOV,GAAkBS,GAAYpe,EAAKtY,IC9OvC,SAASq3B,GAAoB9vB,GAEhC,MAAMuL,EAAQ4jB,GAAYnvB,GAE1B,GAAIuL,EAAMnW,OAAS,GACf,MAAM,IAAIC,MAAM,6CAGpB,OAAOiX,GAAaf,EAAO,IAExB,SAASwkB,GAAmBpB,GAC/B,MAAM5jB,EAAOlN,GAAO/B,SAAS6yB,EAAQ,SAErC,GAAoB,KAAhB5jB,EAAK3V,OACL,MAAM,IAAIC,MAAM,uCAEpB,GAAiB,IAAb0V,EAAK,IACL,MAAM,IAAI1V,MAAM,+CAGpB,IAAID,EAAS,GACb,KAA4B,IAArB2V,EAAK3V,EAAS,IACjBA,IAGJ,OAAOw6B,GAAa7kB,EAAKtL,MAAM,EAAGrK,IChBtC,SAAS46B,GAAYjlB,EAAMklB,GACvB,MAAM/S,EAAO+S,GAAS,SAAUh8B,GAAS,MAAO,CAACuJ,SAASvJ,EAAO,MACjE,IAAIi8B,EAAK,EACL5yB,EAAS,GAMb,OALAyN,EAAK/V,MAAM,KAAKwJ,SAAS8wB,IACrB,IAAIvrB,EAAQurB,EAAKt6B,MAAM,KACvBk7B,GAAM1yB,SAASuG,EAAM,GAAI,IACzBzG,EAAO4yB,GAAMhT,EAAKnZ,EAAM,OAErBzG,EAEX,SAAS6yB,GAAiBplB,GACtB,IAAIqlB,EAAK,EACT,OAAOrlB,EAAK/V,MAAM,KAAKV,KAAKK,IACxB,IAAIoP,EAAQpP,EAAEK,MAAM,KACC,IAAjB+O,EAAM3O,OACN2O,EAAM,GAAK,IAEO,KAAbA,EAAM,KACXA,EAAM,GAAK,KAEf,IAAImsB,EAAKE,EAAK5yB,SAASuG,EAAM,GAAI,IAEjC,OADAqsB,EAAK5yB,SAASuG,EAAM,GAAI,IACjB,CAAEwR,EAAG2a,EAAI5a,EAAG8a,MAG3B,SAASC,GAASp8B,EAAOq8B,GACrB,IAAIJ,EAAK,EACT,IAAK,IAAI/6B,EAAI,EAAGA,EAAIm7B,EAAOl7B,OAAQD,IAAK,CACpC,IAAIo7B,EAAQD,EAAOn7B,GAEnB,GADA+6B,GAAMK,EAAMhb,EACRthB,GAASi8B,GAAMj8B,GAASi8B,EAAKK,EAAMjb,IAAOrhB,EAAQi8B,IAAOK,EAAM5kB,GAAK,IAAQ,EAAG,CAC/E,GAAI4kB,EAAMr0B,IAAsC,IAAjCq0B,EAAMr0B,EAAElB,QAAQ/G,EAAQi8B,GACnC,SAEJ,OAAOK,GAGf,OAAO,KAEX,MAAMC,GAAmBL,GAAiB,g8CAEpCM,GAAkB,sDAAsDz7B,MAAM,KAAKV,KAAKK,GAAM6I,SAAS7I,EAAG,MAC1G+7B,GAAmB,CACrB,CAAEpb,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,IACnB,CAAED,EAAG,GAAIkC,EAAG,GAAItb,EAAG,CAAC,IAAKqZ,EAAG,KAC5B,CAAED,EAAG,GAAIkC,EAAG,EAAGtb,EAAG,CAAC,IAAKqZ,EAAG,GAAI5J,EAAG,GAClC,CAAE2J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI5J,EAAG,GACzB,CAAE2J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI5J,EAAG,GACzB,CAAE2J,EAAG,GAAIkC,EAAG,EAAGtb,EAAG,CAAC,EAAG,EAAG,GAAIqZ,EAAG,GAAI5J,EAAG,GACvC,CAAE2J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI5J,EAAG,GACzB,CAAE2J,EAAG,GAAIkC,EAAG,EAAGtb,EAAG,CAAC,GAAI,GAAI,IAAKqZ,EAAG,GAAI5J,EAAG,GAC1C,CAAE2J,EAAG,GAAIkC,EAAG,GAAItb,EAAG,CAAC,IAAKqZ,EAAG,KAC5B,CAAED,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI5J,EAAG,GACzB,CAAE2J,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,IACnB,CAAED,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,IACnB,CAAED,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI5J,EAAG,GACzB,CAAE2J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI5J,EAAG,GACzB,CAAE2J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI5J,EAAG,GACzB,CAAE2J,EAAG,GAAIkC,EAAG,EAAGtb,EAAG,CAAC,IAAKqZ,EAAG,GAAI5J,EAAG,GAClC,CAAE2J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI5J,EAAG,GACzB,CAAE2J,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,IACnB,CAAED,EAAG,IAAKkC,EAAG,EAAGjC,EAAG,KAAM5J,EAAG,GAC5B,CAAE2J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,IAAK5J,EAAG,GAC1B,CAAE2J,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,KACnB,CAAED,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,KACnB,CAAED,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,OACnB,CAAED,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,MACnB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,OACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQtb,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAAKqZ,EAAG,IACxD,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQtb,EAAG,CAAC,EAAG,EAAG,EAAG,IAAKqZ,EAAG,IAC1C,CAAED,EAAG,GAAIkC,GAAI,OAAQtb,EAAG,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,IAAKqZ,EAAG,IACnD,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQtb,EAAG,CAAC,IAAKqZ,EAAG,IACjC,CAAED,EAAG,GAAIkC,GAAI,OAAQtb,EAAG,CAAC,IAAKqZ,EAAG,IACjC,CAAED,EAAG,GAAIkC,GAAI,OAAQtb,EAAG,CAAC,IAAKqZ,EAAG,IACjC,CAAED,EAAG,GAAIkC,GAAI,OAAQtb,EAAG,CAAC,IAAKqZ,EAAG,IACjC,CAAED,EAAG,GAAIkC,GAAI,OAAQtb,EAAG,CAAC,IAAKqZ,EAAG,KAE/Bob,GAAoBX,GAAY,yfAChCY,GAAoBZ,GAAY,0dAChCa,GAAoBb,GAAY,03DAnGtC,SAAgBjlB,GACZ,GAAKA,EAAK3V,OAAS,GAAO,EACtB,MAAM,IAAIC,MAAM,+BAEpB,IAAIiI,EAAS,GACb,IAAK,IAAInI,EAAI,EAAGA,EAAI4V,EAAK3V,OAAQD,GAAK,EAClCmI,EAAOxE,KAAK0E,SAASuN,EAAKtN,UAAUtI,EAAGA,EAAI,GAAI,KAEnD,OAAOmI,KA4FLwzB,GAAiBX,GAAiB,2LAmCjC,SAASY,GAAS98B,GAIrB,GAAIA,EAAMoJ,MAAM,kBAAoBpJ,EAAMmB,QAAU,GAChD,OAAOnB,EAAM2I,cAGjB,IAAIo0B,EAAQnB,GAAiB57B,GA1CjC,IAAiBuB,EAAAA,EA2CGw7B,EAAM18B,KAAKmD,IAEvB,GAAIg5B,GAAgBz1B,QAAQvD,IAAS,EACjC,MAAO,GAEX,GAAIA,GAAQ,OAAUA,GAAQ,MAC1B,MAAO,GAGX,IAAIw5B,EA3CL,SAA0BC,GAC7B,MAAMX,EAAQF,GAASa,EAAWR,IAClC,GAAIH,EAAO,CACP,GAAe,MAAXA,EAAM/Y,EACN,MAAM,IAAIniB,MAAM,gCAEpB,MAAO,CAAC67B,EAAYX,EAAM/Y,GAE9B,MAAMwZ,EAAQL,GAAkBO,GAChC,GAAIF,EACA,OAAOA,EAEX,MAAMnhB,EAAQ+gB,GAAkBM,GAChC,OAAIrhB,EACO,CAACqhB,EAAYrhB,EAAM,IAEdghB,GAAkBK,IAI3B,KAuBgBC,CAAiB15B,GACpC,OAAIw5B,GAIG,CAACx5B,MAdZu5B,EA1COx7B,EAAOf,QAAO,CAACC,EAAOT,KACzBA,EAAMuK,SAASvK,IAAYS,EAAMoE,KAAK7E,MAC/BS,IACR,IAwDHs8B,EAAQnB,GAAiBH,GAAcsB,GAAQnD,GAAyBuD,MAExEJ,EAAMxyB,SAAS/G,IA9BN44B,GA+Be54B,EA/BKq5B,KAgCrBjzB,GAAO3D,mBAAmB,iCAAkC,QAASjG,MAI7E+8B,EAAMxyB,SAAS/G,IA7DN44B,GA8DgB54B,EA9DI+4B,KA+DrB3yB,GAAO3D,mBAAmB,iCAAkC,QAASjG,MAI7E,IAAIgF,EAAOy2B,GAAcsB,GASzB,MAP6B,MAAzB/3B,EAAKwE,UAAU,EAAG,IAAuC,OAAzBxE,EAAKwE,UAAU,EAAG,IAAmD,MAApCxE,EAAKwE,UAAUxE,EAAK7D,OAAS,IAC9FyI,GAAO3D,mBAAmB,iBAAkB,QAASjG,GAGrDgF,EAAK7D,OAAS,IACdyI,GAAO3D,mBAAmB,WAAY,QAASjG,GAE5CgF,ECvLJ,MAAMo4B,WAAoBlE,GAC7Br2B,YAAYgX,GACR9I,MAAM,SAAU8I,GAEpBvF,eACI,MAAO,GAEX0I,OAAO9C,EAAQ/H,GACX,OAAOpB,MAAMiM,OAAO9C,EAAQghB,GAAYhE,GAAMU,YAAYzlB,EAAQ,YAEtE0lB,OAAOC,GACH,OAAO6D,GAAa5qB,MAAM8mB,OAAOC,KCVlC,MAAMuF,WAAmBzjB,GAC5B/W,YAAYq1B,EAAQre,GAChB,IAAIC,GAAU,EACd,MAAMhZ,EAAQ,GACdo3B,EAAO3tB,SAASytB,IACRA,EAAMle,UACNA,GAAU,GAEdhZ,EAAM+D,KAAKmzB,EAAMn3B,SAGrBkQ,MAAM,QADQ,SAAWjQ,EAAMiF,KAAK,KAAO,IACtB8T,EAAWC,GAChCzY,EAAiBY,KAAM,CAAEi2B,OAAQh4B,OAAOsK,OAAO0tB,EAAO1sB,WAE1D8I,eACI,MAAM/S,EAAS,GACfU,KAAKi2B,OAAO3tB,SAASytB,IACjBz2B,EAAOsD,KAAKmzB,EAAM1jB,mBAGtB,MAAMgpB,EAAcr7B,KAAKi2B,OAAO13B,QAAO,CAACC,EAAOu3B,KAC3C,MAAMhzB,EAAOgzB,EAAMne,UAOnB,OANI7U,IACKvE,EAAMuE,KACPvE,EAAMuE,GAAQ,GAElBvE,EAAMuE,MAEHvE,IACR,IAeH,OAbAwB,KAAKi2B,OAAO3tB,SAAQ,CAACytB,EAAOr3B,KACxB,IAAIqE,EAAOgzB,EAAMne,UACZ7U,GAA8B,IAAtBs4B,EAAYt4B,KAGZ,WAATA,IACAA,EAAO,WAES,MAAhBzD,EAAOyD,KAGXzD,EAAOyD,GAAQzD,EAAOZ,QAEnBT,OAAOsK,OAAOjJ,GAEzByb,OAAO9C,EAAQ/H,GACX,MAAMnS,EAAQk3B,GAAMU,YAAYzlB,EAAQ,SACxC,OAAO8lB,GAAK/d,EAAQjY,KAAKi2B,OAAQl4B,GAErC63B,OAAOC,GACH,OAAOA,EAAOpd,OAAOzY,KAAK+C,KAAM2zB,GAAOb,EAAQ71B,KAAKi2B,UCvD5D,IAKIqF,GAAqBC,GALrB96B,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAkBxF,MAAMu7B,GAAiB,IAAIvyB,OAAO,mBAC5BwyB,GAAkB,IAAIxyB,OAAO,qBAyBnCqyB,GAAsB,IAAI10B,QAAW20B,GAAqB,SAASA,EAAmBrtB,GAClF,GAAIA,EAAMhB,UACN,OAAO,IAAI4pB,GAAWr2B,GAAuBT,KAAMs7B,GAAqB,IAAKC,GAAoBh7B,KAAKP,KAAMkO,EAAMvB,eAAgBuB,EAAMxB,YAAawB,EAAMnL,MAE/J,GAAImL,EAAMnB,UACN,OAAO,IAAIquB,GAAWltB,EAAMzB,WAAWrO,KAAK4O,GAAMvM,GAAuBT,KAAMs7B,GAAqB,IAAKC,GAAoBh7B,KAAKP,KAAMgN,KAAKkB,EAAMnL,MAEvJ,OAAQmL,EAAM3B,UACV,IAAK,UACD,OAAO,IAAImpB,GAAaxnB,EAAMnL,MAClC,IAAK,OACD,OAAO,IAAIi0B,GAAa9oB,EAAMnL,MAClC,IAAK,SACD,OAAO,IAAIo4B,GAAYjtB,EAAMnL,MACjC,IAAK,QACD,OAAO,IAAIm0B,GAAWhpB,EAAMnL,MAChC,IAAK,GACD,OAAO,IAAIs0B,GAAUnpB,EAAMnL,MAGnC,IAAIoE,EAAQ+G,EAAMtP,KAAKuI,MAAMs0B,IAC7B,GAAIt0B,EAAO,CACP,IAAI+E,EAAO5E,SAASH,EAAM,IAAM,OAIhC,OAHa,IAAT+E,GAAcA,EAAO,KAAQA,EAAO,GAAO,IAC3CvE,EAAO3D,mBAAmB,WAAamD,EAAM,GAAK,cAAe,QAAS+G,GAEvE,IAAIqpB,GAAYrrB,EAAO,EAAiB,QAAb/E,EAAM,GAAe+G,EAAMnL,MAIjE,GADAoE,EAAQ+G,EAAMtP,KAAKuI,MAAMq0B,IACrBr0B,EAAO,CACP,IAAI+E,EAAO5E,SAASH,EAAM,IAI1B,OAHa,IAAT+E,GAAcA,EAAO,KACrBvE,EAAO3D,mBAAmB,uBAAwB,QAASkK,GAExD,IAAIipB,GAAgBjrB,EAAMgC,EAAMnL,MAE3C,OAAO4E,EAAO3D,mBAAmB,eAAgB,OAAQkK,EAAMtP,OAE5D,MAAM88B,GAAkB,IA/DxB,MACH96B,YAAY2X,GACR+iB,GAAoB93B,IAAIxD,MACxBZ,EAAiBY,KAAM,CAAEuY,WAAAA,GAAc,GAAI,CAAEA,WAAY,OAE7DojB,gBAAgB98B,GACZ,MAAMo3B,EAASp3B,EAAMT,KAAKQ,GAAS6B,GAAuBT,KAAMs7B,GAAqB,IAAKC,IAAoBh7B,KAAKP,KAAMyL,GAAUI,KAAKjN,MAExI,OADc,IAAIw8B,GAAWnF,EAAQ,KACxB5jB,eAEjB0I,OAAOlc,EAAOS,GACVqI,EAAOvC,oBAAoB9F,EAAOJ,OAAQL,EAAMK,OAAQ,gCACxD,MAAM+2B,EAASp3B,EAAMT,KAAKQ,GAAS6B,GAAuBT,KAAMs7B,GAAqB,IAAKC,IAAoBh7B,KAAKP,KAAMyL,GAAUI,KAAKjN,MAClIm3B,EAAK,IAAQqF,GAAWnF,EAAQ,KAChChe,EAAS,IAAIF,GAEnB,OADAge,EAAMhb,OAAO9C,EAAQ3Y,GACd2Y,EAAOpD,KAElB+gB,OAAO/2B,EAAOgW,EAAMgE,GAChB,MAAMod,EAASp3B,EAAMT,KAAKQ,GAAS6B,GAAuBT,KAAMs7B,GAAqB,IAAKC,IAAoBh7B,KAAKP,KAAMyL,GAAUI,KAAKjN,MAExI,OADc,IAAIw8B,GAAWnF,EAAQ,KACxBL,OAAO,IAAItd,GAAOzD,EAAM7U,KAAKuY,WAAYM,MC1CvD,SAAS+iB,GAAG79B,GACf,OAAOmsB,GAAU+O,GAAYl7B,ICH1B,MCEM4J,GAAS,IAAIrE,EDFH,oCEIjBu4B,GAAQ,IAAI30B,WAAW,IAC7B20B,GAAM3lB,KAAK,GACX,MAAM4lB,GAAY,IAAI7yB,OAAO,uBACtB,SAAS8yB,GAAYh5B,GACxB,IACI,MAAM8K,EAAQ9K,EAAKjE,MAAM,KACzB,IAAK,IAAIG,EAAI,EAAGA,EAAI4O,EAAM3O,OAAQD,IAC9B,GAAkC,IAA9B47B,GAAShtB,EAAM5O,IAAIC,OACnB,MAAM,IAAIC,MAAM,SAGxB,OAAO,EAEX,MAAOmC,IACP,OAAO,EAEJ,SAAS06B,GAASj5B,GACC,iBAAV,GACR4E,GAAO3D,mBAAmB,iCAAkC,OAAQjB,GAExE,IAAIm2B,EAAUn2B,EACVqE,EAASy0B,GACb,KAAO3C,EAAQh6B,QAAQ,CACnB,MAAM+8B,EAAY/C,EAAQ/xB,MAAM20B,IAChC,GAAiB,MAAbG,GAAsC,KAAjBA,EAAU,GAC/B,OAAOt0B,GAAO3D,mBAAmB,sCAAuC,OAAQjB,GAGpFqE,EAAS8iB,GAAU3U,GAAO,CAACnO,EAAQ8iB,GADrB+O,GAAY4B,GAASoB,EAAU,SAE7C/C,EAAU+C,EAAU,IAAM,GAE9B,OAAO7mB,GAAQhO,GAEZ,SAAS80B,GAAUn5B,GAItB,MAHsB,iBAAV,GACR4E,GAAO3D,mBAAmB,iCAAkC,OAAQjB,GAE3D,KAATA,EACO,OAGJwS,GAAOxS,EAAKjE,MAAM,KAAKV,KAAK+O,IAClB,KAATA,GACAxF,GAAO3D,mBAAmB,sCAAuC,OAAQjB,GAI7E,MAAMsS,EAAQ4jB,GAAY,IAAM4B,GAAS1tB,IAEzC,OADAkI,EAAM,GAAKA,EAAMnW,OAAS,EACnBmW,MACL,KCnDE,MAAC8mB,GAAgB,8BACtB,SAASC,GAAY14B,GAIxB,MAHyB,iBAAb,IACRA,EAAUu1B,GAAYv1B,IAEnBwmB,GAAU3U,GAAO,CACpB0jB,GAAYkD,IACZlD,GAAYv2B,OAAOgB,EAAQxE,SAC3BwE,KCXR,IAWI24B,GAA6BC,GAAyBC,GAA6BC,GAAgCC,GAXnH18B,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAWxF,MAAMy8B,GAAU,IAAIx1B,WAAW,IAC/Bw1B,GAAQxmB,KAAK,GACb,MAAMymB,GAAQ52B,QAAQ,GAChBiK,GAAOjK,OAAO,GACd0K,GAAO1K,OAAO,GACduxB,GAAiBvxB,OAAO,sEAW9B,MAAM62B,GAAUxsB,GAAMK,GAAM,IACtBosB,GAAWzsB,GAAMJ,GAAM,IACvB8sB,GAAmB,CACrB/5B,KAAM,SACNQ,QAAS,SACTw5B,QAAS,UACTC,kBAAmB,UACnB5f,KAAM,WAEJ6f,GAAmB,CACrB,OAAQ,UAAW,UAAW,oBAAqB,QAEvD,SAASC,GAAY19B,GACjB,OAAO,SAAUzB,GAIb,MAHuB,iBAAX,GACR4J,GAAO3D,mBAAmB,4BAA4BJ,KAAKC,UAAUrE,KAAQ,UAAUA,IAAOzB,GAE3FA,GAGf,MAAMo/B,GAAe,CACjBp6B,KAAMm6B,GAAY,QAClB35B,QAAS25B,GAAY,WACrBH,QAAS,SAAUh/B,GACf,OAAO4J,GAAO1B,UAAUlI,EAAO,mBAEnCi/B,kBAAmB,SAAUj/B,GACzB,IACI,OAAOi1B,GAAWj1B,GAAO2I,cAE7B,MAAOpF,IACP,OAAOqG,GAAO3D,mBAAmB,2CAA4C,2BAA4BjG,IAE7Gqf,KAAM,SAAUrf,GACZ,MAAMsX,EAAQ1N,GAAO/B,SAAS7H,EAAO,eAIrC,OAHqB,KAAjBsX,EAAMnW,QACNyI,GAAO3D,mBAAmB,8BAA+B,cAAejG,GAErEqX,GAAQC,KAGvB,SAAS+nB,GAAex+B,GAEpB,CACI,MAAMuI,EAAQvI,EAAKuI,MAAM,kBACzB,GAAIA,EAAO,CACP,MAAMgL,EAAuB,KAAbhL,EAAM,GAChBmJ,EAAQhJ,SAASH,EAAM,IAAM,QAC/BmJ,EAAQ,GAAM,GAAKA,EAAQ,KAAQnJ,EAAM,IAAMA,EAAM,KAAOzE,OAAO4N,KACnE3I,GAAO3D,mBAAmB,wBAAyB,OAAQpF,GAE/D,MAAMy+B,EAAczsB,GAAK0mB,GAAgBnlB,EAAU7B,EAAQ,EAAKA,GAC1DgtB,EAAcnrB,GAAWkrB,EAAc5sB,IAAQksB,GAAS3sB,GAC9D,OAAO,SAAUE,GACb,MAAMnS,EAAQ4J,GAAO1B,UAAUiK,EAAQ,SAIvC,OAHInS,EAAQu/B,GAAev/B,EAAQs/B,IAC/B11B,GAAO3D,mBAAmB,2BAA2BpF,IAAQ,QAASb,GAEnEqS,GAAMO,GAAO5S,EAAO,KAAM,MAK7C,CACI,MAAMoJ,EAAQvI,EAAKuI,MAAM,gBACzB,GAAIA,EAAO,CACP,MAAMmJ,EAAQhJ,SAASH,EAAM,IAI7B,OAHc,IAAVmJ,GAAeA,EAAQ,IAAMnJ,EAAM,KAAOzE,OAAO4N,KACjD3I,GAAO3D,mBAAmB,sBAAuB,OAAQpF,GAEtD,SAAUb,GAKb,OAJc6W,GAAS7W,GACbmB,SAAWoR,GACjB3I,GAAO3D,mBAAmB,sBAAsBpF,IAAQ,QAASb,GAjFrF,SAAqBA,GACjB,MAAMsX,EAAQT,GAAS7W,GACjB0gB,EAAYpJ,EAAMnW,OAAS,GACjC,OAAIuf,EACOlJ,GAAO,CAACF,EAAOqnB,GAAQnzB,MAAMkV,KAEjCrJ,GAAQC,GA6EIkoB,CAAYx/B,KAI/B,OAAQa,GACJ,IAAK,UAAW,OAAO,SAAUb,GAC7B,OAAOoY,GAAY6c,GAAWj1B,GAAQ,KAE1C,IAAK,OAAQ,OAAO,SAAUA,GAC1B,OAAUA,EAAoB6+B,GAAXC,IAEvB,IAAK,QAAS,OAAO,SAAU9+B,GAC3B,OAAOmsB,GAAUnsB,IAErB,IAAK,SAAU,OAAO,SAAUA,GAC5B,OAAO69B,GAAG79B,IAGlB,OAAO,KAEX,SAASy/B,GAAWz6B,EAAM06B,GACtB,MAAO,GAAG16B,KAAQ06B,EAAOr/B,KAAI,EAAG2E,KAAAA,EAAMnE,KAAAA,KAAYA,EAAO,IAAMmE,IAAOe,KAAK,QAExE,MAAM45B,GACT98B,YAAY/B,GACRw9B,GAA4B74B,IAAIxD,MAChCs8B,GAAwB97B,IAAIR,UAAM,GAClCu8B,GAA4B/7B,IAAIR,UAAM,GACtCw8B,GAA+Bh8B,IAAIR,UAAM,GACzCD,GAAuBC,KAAMs8B,GAAyB14B,KAAKC,UAAUhF,GAAQ,KAC7EkB,GAAuBC,KAAMu8B,GAA6B,IAAInlB,IAAO,KACrErX,GAAuBC,KAAMw8B,GAAgC,IAAIplB,IAAO,KAExE,MAAMumB,EAAQ,IAAIvmB,IAEZwmB,EAAU,IAAIxmB,IAEdymB,EAAW,IAAIzmB,IACrBnZ,OAAOD,KAAKa,GAAOyJ,SAAS1J,IACxB++B,EAAMn9B,IAAI5B,EAAM,IAAIyJ,KACpBu1B,EAAQp9B,IAAI5B,EAAM,IAClBi/B,EAASr9B,IAAI5B,EAAM,IAAIyJ,QAE3B,IAAK,MAAMtF,KAAQlE,EAAO,CACtB,MAAMw8B,EAAc,IAAIhzB,IACxB,IAAK,MAAMy1B,KAASj/B,EAAMkE,GAAO,CAEzBs4B,EAAY/6B,IAAIw9B,EAAM/6B,OACtB4E,GAAO3D,mBAAmB,2BAA2BJ,KAAKC,UAAUi6B,EAAM/6B,YAAYa,KAAKC,UAAUd,KAAS,QAASlE,GAE3Hw8B,EAAY73B,IAAIs6B,EAAM/6B,MAEtB,MAAMwJ,EAAYuxB,EAAMl/B,KAAKuI,MAAM,uBAAwB,IAAM,KAC7DoF,IAAaxJ,GACb4E,GAAO3D,mBAAmB,8BAA8BJ,KAAKC,UAAU0I,KAAa,QAAS1N,GAGjFu+B,GAAe7wB,KAI1BqxB,EAAQt9B,IAAIiM,IACb5E,GAAO3D,mBAAmB,gBAAgBJ,KAAKC,UAAU0I,KAAa,QAAS1N,GAGnF++B,EAAQl9B,IAAI6L,GAAU3J,KAAKG,GAC3B46B,EAAMj9B,IAAIqC,GAAMS,IAAI+I,KAI5B,MAAMwxB,EAAevwB,MAAM3B,KAAK+xB,EAAQ5/B,QAAQ+C,QAAQma,GAAiC,IAA1B0iB,EAAQl9B,IAAIwa,GAAGhc,SAClD,IAAxB6+B,EAAa7+B,OACbyI,GAAO3D,mBAAmB,uBAAwB,QAASnF,GAEtDk/B,EAAa7+B,OAAS,GAC3ByI,GAAO3D,mBAAmB,4CAA4C+5B,EAAa3/B,KAAKW,GAAO6E,KAAKC,UAAU9E,KAAK+E,KAAK,QAAS,QAASjF,GAE9IO,EAAiBY,KAAM,CAAEg+B,YAAaD,EAAa,KAEnD,SAASE,EAAcr/B,EAAMs/B,GACrBA,EAAM59B,IAAI1B,IACV+I,GAAO3D,mBAAmB,8BAA8BJ,KAAKC,UAAUjF,KAAS,QAASC,GAE7Fq/B,EAAM16B,IAAI5E,GACV,IAAK,MAAM20B,KAASoK,EAAMj9B,IAAI9B,GAC1B,GAAKg/B,EAAQt9B,IAAIizB,GAAjB,CAIA0K,EAAc1K,EAAO2K,GAErB,IAAK,MAAMC,KAAWD,EAClBL,EAASn9B,IAAIy9B,GAAS36B,IAAI+vB,GAGlC2K,EAAME,OAAOx/B,GAEjBq/B,CAAcj+B,KAAKg+B,YAAa,IAAI31B,KAEpC,IAAK,MAAOtF,EAAMvC,KAAQq9B,EAAU,CAChC,MAAMQ,EAAK7wB,MAAM3B,KAAKrL,GACtB69B,EAAGC,OACH79B,GAAuBT,KAAMu8B,GAA6B,KAAK/7B,IAAIuC,EAAMy6B,GAAWz6B,EAAMlE,EAAMkE,IAASs7B,EAAGjgC,KAAKW,GAAMy+B,GAAWz+B,EAAGF,EAAME,MAAK+E,KAAK,MAGzJjF,YACA,OAAO+E,KAAKqJ,MAAMxM,GAAuBT,KAAMs8B,GAAyB,MAE5EiC,WAAW3/B,GACP,IAAI4/B,EAAU/9B,GAAuBT,KAAMw8B,GAAgC,KAAK97B,IAAI9B,GAKpF,OAJK4/B,IACDA,EAAU/9B,GAAuBT,KAAMq8B,GAA6B,IAAKI,IAA8Bl8B,KAAKP,KAAMpB,GAClH6B,GAAuBT,KAAMw8B,GAAgC,KAAKh8B,IAAI5B,EAAM4/B,IAEzEA,EAEXhB,WAAWz6B,GACP,MAAMqE,EAAS3G,GAAuBT,KAAMu8B,GAA6B,KAAK77B,IAAIqC,GAClF,OAAKqE,GACMO,GAAO3D,mBAAmB,iBAAiBJ,KAAKC,UAAUd,KAAS,OAAQA,GAI1F07B,WAAW7/B,EAAMb,GACb,OAAOiC,KAAKu+B,WAAW3/B,EAAhBoB,CAAsBjC,GAEjC2gC,WAAW37B,EAAMhF,GACb,OAAOmsB,GAAUlqB,KAAKy+B,WAAW17B,EAAMhF,IAE3Cgd,OAAOhd,GACH,OAAOiC,KAAKy+B,WAAWz+B,KAAKg+B,YAAajgC,GAE7Csd,KAAKtd,GACD,OAAOiC,KAAK0+B,WAAW1+B,KAAKg+B,YAAajgC,GAE7C4gC,OAAO//B,EAAMb,EAAO6gC,GAIZ,GADgBxB,GAAex+B,GAE3B,OAAOggC,EAAShgC,EAAMb,GAI9B,MAAMoJ,EAAQvI,EAAKuI,MAAM,yBACzB,GAAIA,EAAO,CACP,MAAMg3B,EAAUh3B,EAAM,GAChBjI,EAASoI,SAASH,EAAM,IAI9B,OAHIjI,GAAU,GAAKnB,EAAMmB,SAAWA,GAChCyI,GAAO3D,mBAAmB,0DAA2D,QAASjG,GAE3FA,EAAMK,KAAKK,GAAMuB,KAAK2+B,OAAOR,EAAS1/B,EAAGmgC,KAGpD,MAAMnB,EAASz9B,KAAKnB,MAAMD,GAC1B,OAAI6+B,EACOA,EAAOl/B,QAAO,CAACC,GAASuE,KAAAA,EAAMnE,KAAAA,MACjCJ,EAAMuE,GAAQ/C,KAAK2+B,OAAO//B,EAAMb,EAAMgF,GAAO67B,GACtCpgC,IACR,IAEAmJ,GAAO3D,mBAAmB,iBAAiBpF,IAAQ,OAAQA,GAEtEigC,MAAM9gC,EAAO6gC,GACT,OAAO5+B,KAAK2+B,OAAO3+B,KAAKg+B,YAAajgC,EAAO6gC,GAEhDr4B,YAAY1H,GACR,OAAO,IAAI6+B,GAAiB7+B,GAEhC0H,sBAAsB1H,GAClB,OAAO6+B,GAAiB7xB,KAAKhN,GAAOm/B,YAExCz3B,kBAAkBxD,EAAMlE,EAAOd,GAC3B,OAAO2/B,GAAiB7xB,KAAKhN,GAAO6/B,WAAW37B,EAAMhF,GAEzDwI,kBAAkBu4B,GACd,MAAMC,EAAe,GACrB,IAAK,MAAMh8B,KAAQ+7B,EAAQ,CACvB,MAAMlgC,EAAOk+B,GAAiB/5B,GACzBnE,GACD+I,GAAO3D,mBAAmB,kCAAkCJ,KAAKC,UAAUd,KAAS,SAAU+7B,GAElGC,EAAan8B,KAAK,CAAEG,KAAAA,EAAMnE,KAAAA,IAK9B,OAHAmgC,EAAaT,MAAK,CAAC5rB,EAAGC,IACXsqB,GAAiBn4B,QAAQ4N,EAAE3P,MAAQk6B,GAAiBn4B,QAAQ6N,EAAE5P,QAElE26B,GAAiBgB,WAAW,eAAgB,CAAEM,aAAcD,GAAgBD,GAEvFv4B,cAAcu4B,EAAQjgC,EAAOd,GACzB,OAAOwX,GAAO,CACV,SACAmoB,GAAiBuB,WAAWH,GAC5BpB,GAAiB7xB,KAAKhN,GAAOwc,KAAKtd,KAG1CwI,YAAYu4B,EAAQjgC,EAAOd,GACvB,OAAOmsB,GAAUwT,GAAiB3iB,OAAO+jB,EAAQjgC,EAAOd,IAG5DwI,0BAA0Bu4B,EAAQjgC,EAAOd,EAAO+2B,GAE5CgK,EAAS7gC,OAAO8N,OAAO,GAAI+yB,GAE3B,MAAMI,EAAW,GAEbJ,EAAO9B,oBAAsBxoB,GAAYsqB,EAAO9B,kBAAmB,MACnEkC,EAASJ,EAAO9B,mBAAqB,MAGzC,MAAMwB,EAAUd,GAAiB7xB,KAAKhN,GAEtC2/B,EAAQK,MAAM9gC,GAAO,CAACa,EAAMb,KACX,YAATa,GAAuB4V,GAAYzW,EAAO,MAC1CmhC,EAASnhC,GAAS,MAEfA,KAGX,IAAK,MAAMgF,KAAQm8B,EACfA,EAASn8B,SAAc+xB,EAAY/xB,GAavC,OAVI+7B,EAAO9B,mBAAqBkC,EAASJ,EAAO9B,qBAC5C8B,EAAO9B,kBAAoBkC,EAASJ,EAAO9B,oBASxC,CAAE8B,OAAAA,EAAQ/gC,MANjBA,EAAQygC,EAAQK,MAAM9gC,GAAO,CAACa,EAAMb,IACnB,YAATa,GAAsBsgC,EAASnhC,GACxBmhC,EAASnhC,GAEbA,KAIfwI,kBAAkBu4B,EAAQjgC,EAAOd,GAE7B2/B,GAAiBuB,WAAWH,GAE5B,MAAMK,EAAe,GACfC,EAAc,GACpBnC,GAAiB30B,SAASvF,IACtB,MAAMhF,EAAQ+gC,EAAO/7B,GACR,MAAThF,IAGJohC,EAAap8B,GAAQo6B,GAAap6B,GAAMhF,GACxCqhC,EAAYx8B,KAAK,CAAEG,KAAAA,EAAMnE,KAAMk+B,GAAiB/5B,SAEpD,MAAMy7B,EAAUd,GAAiB7xB,KAAKhN,GAChCwgC,EAAkBphC,OAAO8N,OAAO,GAAIlN,GAS1C,OARIwgC,EAAgBL,aAChBr3B,GAAO3D,mBAAmB,2CAA4C,qBAAsBnF,GAG5FwgC,EAAgBL,aAAeI,EAGnCZ,EAAQzjB,OAAOhd,GACR,CACHc,MAAOwgC,EACPP,OAAQK,EACRnB,YAAaQ,EAAQR,YACrBt6B,QAAS86B,EAAQK,MAAM9gC,GAAO,CAACa,EAAMb,KAEjC,GAAIa,EAAKuI,MAAM,eACX,OAAOiO,GAAQzN,GAAO/B,SAAS7H,IAGnC,GAAIa,EAAKuI,MAAM,UACX,OAAOQ,GAAO1B,UAAUlI,GAAOyM,WAEnC,OAAQ5L,GACJ,IAAK,UACD,OAAOb,EAAM2I,cACjB,IAAK,OACD,QAAS3I,EACb,IAAK,SAID,MAHuB,iBAAX,GACR4J,GAAO3D,mBAAmB,iBAAkB,QAASjG,GAElDA,EAEf,OAAO4J,GAAO3D,mBAAmB,mBAAoB,OAAQpF,QAK7E09B,GAA0B,IAAI76B,QAAW86B,GAA8B,IAAI96B,QAAW+6B,GAAiC,IAAI/6B,QAAW46B,GAA8B,IAAIz1B,QAAW61B,GAA+B,SAAsC79B,GAEpP,CACI,MAAM4/B,EAAUpB,GAAex+B,GAC/B,GAAI4/B,EACA,OAAOA,EAIf,MAAMr3B,EAAQvI,EAAKuI,MAAM,yBACzB,GAAIA,EAAO,CACP,MAAMg3B,EAAUh3B,EAAM,GAChBm4B,EAAat/B,KAAKu+B,WAAWJ,GAC7Bj/B,EAASoI,SAASH,EAAM,IAC9B,OAAQpJ,IACAmB,GAAU,GAAKnB,EAAMmB,SAAWA,GAChCyI,GAAO3D,mBAAmB,0DAA2D,QAASjG,GAElG,IAAIqJ,EAASrJ,EAAMK,IAAIkhC,GAIvB,OAHI7+B,GAAuBT,KAAMu8B,GAA6B,KAAKj8B,IAAI69B,KACnE/2B,EAASA,EAAOhJ,IAAI8rB,KAEjBA,GAAU3U,GAAOnO,KAIhC,MAAMq2B,EAASz9B,KAAKnB,MAAMD,GAC1B,GAAI6+B,EAAQ,CACR,MAAM8B,EAAc3D,GAAGn7B,GAAuBT,KAAMu8B,GAA6B,KAAK77B,IAAI9B,IAC1F,OAAQb,IACJ,MAAMuB,EAASm+B,EAAOr/B,KAAI,EAAG2E,KAAAA,EAAMnE,KAAAA,MAC/B,MAAMwI,EAASpH,KAAKu+B,WAAW3/B,EAAhBoB,CAAsBjC,EAAMgF,IAC3C,OAAItC,GAAuBT,KAAMu8B,GAA6B,KAAKj8B,IAAI1B,GAC5DsrB,GAAU9iB,GAEdA,KAGX,OADA9H,EAAOwV,QAAQyqB,GACRhqB,GAAOjW,IAGtB,OAAOqI,GAAO3D,mBAAmB,iBAAiBpF,IAAQ,OAAQA,ICxbtE,IAWI4gC,GAAsBC,GAAmBC,GAAmBC,GAAsBC,GAAqBC,GAAwBC,GAX/H//B,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAajF,MAAM8/B,GACTn/B,YAAYo/B,EAAUC,EAAO/5B,GACzB,MAAMnD,EAAOi9B,EAASj9B,KAAMm9B,EAAYF,EAASpzB,SACjDxN,EAAiBY,KAAM,CACnBggC,SAAAA,EAAUj9B,KAAAA,EAAMm9B,UAAAA,EAAWD,MAAAA,EAAO/5B,KAAAA,KAIvC,MAAMi6B,GACTv/B,YAAYo/B,EAAUI,EAAUl6B,EAAMnI,GAClC,MAAMgF,EAAOi9B,EAASj9B,KAAMm9B,EAAYF,EAASpzB,SACjDxN,EAAiBY,KAAM,CACnBggC,SAAAA,EAAUj9B,KAAAA,EAAMmD,KAAAA,EAAMg6B,UAAAA,EAAWE,SAAAA,EAAUriC,MAAAA,KAIhD,MAAMsiC,GACTz/B,YAAYo/B,EAAUI,EAAUl6B,GAC5B,MAAMnD,EAAOi9B,EAASj9B,KAAMm9B,EAAYF,EAASpzB,SACjDxN,EAAiBY,KAAM,CACnBggC,SAAAA,EAAUj9B,KAAAA,EAAMmD,KAAAA,EAAMg6B,UAAAA,EAAWE,SAAAA,KAItC,MAAME,GACT1/B,YAAYya,GACRjc,EAAiBY,KAAM,CAAEqb,KAAAA,EAAMklB,YAAY,IAE/Ch6B,iBAAiBxI,GACb,SAAUA,IAASA,EAAMwiC,aAIjC,MAAMC,GAAe,CACjB,EAAK,gBACL,EAAK,gBACL,GAAM,sBACN,GAAM,6BACN,GAAM,gBACN,GAAM,8CACN,GAAM,wDACN,GAAM,6CACN,GAAM,gBACN,GAAM,0BAEJC,GAAgB,CAClB,aAAc,CACVP,UAAW,gBACXn9B,KAAM,QACNsL,OAAQ,CAAC,UACTypB,OAASp0B,GACE,+BAA+BE,KAAKC,UAAUH,MAG7D,aAAc,CACVw8B,UAAW,iBACXn9B,KAAM,QACNsL,OAAQ,CAAC,WACTypB,OAASv2B,IACL,IAAIu2B,EAAS,qBAIb,OAHIv2B,GAAQ,GAAKA,GAAQ,KAAQi/B,GAAaj/B,EAAKiJ,cAC/CstB,EAAS0I,GAAaj/B,EAAKiJ,aAExB,8BAA8BjJ,EAAKiJ,SAAS,QAAQstB,QAIhE,MAAM4I,GACT9/B,YAAY+/B,GACRnB,GAAqBh8B,IAAIxD,MACzBy/B,GAAkBj/B,IAAIR,UAAM,GAC5B0/B,GAAkBl/B,IAAIR,UAAM,GAC5B2/B,GAAqBn/B,IAAIR,UAAM,GAE/B4/B,GAAoBp/B,IAAIR,UAAM,GAC9B,IAAI4gC,EAAM,GAENA,EADuB,iBAAf,EACFh9B,KAAKqJ,MAAM0zB,GAGXA,EAEV5gC,GAAuBC,KAAM2/B,GAAsB,IAAIvoB,IAAO,KAC9DrX,GAAuBC,KAAMy/B,GAAmB,IAAIroB,IAAO,KAC3DrX,GAAuBC,KAAM0/B,GAAmB,IAAItoB,IAAO,KAE3DhY,EAAiBY,KAAM,CACnB2gC,UAAW1iC,OAAOsK,OAAOq4B,EAAIxiC,KAAKgC,GAAMgO,GAASvC,KAAKzL,KAAIW,QAAQX,GAAY,MAALA,OAE7EL,GAAuBC,KAAM4/B,GAAqB5/B,KAAK6gC,cAAe,KAEtE7gC,KAAK2gC,UAAUr4B,SAAS03B,IACpB,IAAIc,EACJ,OAAQd,EAASphC,MACb,IAAK,cACD,OAAIoB,KAAK+gC,YACLp5B,EAAOtB,KAAK,2CAIhBjH,EAAiBY,KAAM,CAAE+gC,OAAQf,IAErC,IAAK,WAGDc,EAASrgC,GAAuBT,KAAM2/B,GAAsB,KAC5D,MACJ,IAAK,QAEDmB,EAASrgC,GAAuBT,KAAM0/B,GAAmB,KACzD,MACJ,IAAK,QACDoB,EAASrgC,GAAuBT,KAAMy/B,GAAmB,KACzD,MACJ,QACI,OAER,MAAMS,EAAYF,EAASpzB,SACvBk0B,EAAOxgC,IAAI4/B,GACXv4B,EAAOtB,KAAK,0BAA4B65B,GAG5CY,EAAOtgC,IAAI0/B,EAAWF,MAGrBhgC,KAAK+gC,QACN3hC,EAAiBY,KAAM,CACnB+gC,OAAQvyB,GAAoBF,WAAW,mBAKnD1B,OAAOA,GACEA,IACDA,EAAS1E,EAAWkF,MAEpBR,IAAW1E,EAAW2E,SACtBlF,EAAO3D,mBAAmB,gDAAiD,SAAU4I,GAEzF,MAAMg0B,EAAM5gC,KAAK2gC,UAAUviC,KAAKgC,GAAMA,EAAEwM,OAAOA,KAE/C,OAAIA,IAAW1E,EAAW4E,KACflJ,KAAKC,UAAU+8B,EAAIxiC,KAAKypB,GAAMjkB,KAAKqJ,MAAM4a,MAE7C+Y,EAEXC,cACI,OAAOnF,GAEXsF,gBAAgBxhC,GACZ,OAAQiB,GAAuBT,KAAMw/B,GAAsB,IAAKK,IAAwBt/B,KAAKP,KAAMR,EAAK,MAAM,GAAQuD,KAE1Hk+B,YAAYzhC,EAAKF,GACb,OAAOmB,GAAuBT,KAAMw/B,GAAsB,IAAKK,IAAwBt/B,KAAKP,KAAMR,EAAKF,GAAU,MAAM,GAE3H4hC,aAAa1hC,GACT,OAAQiB,GAAuBT,KAAMw/B,GAAsB,IAAKM,IAAqBv/B,KAAKP,KAAMR,EAAK,MAAM,GAAQuD,KAEvHo+B,SAAS3hC,EAAKF,GACV,OAAOmB,GAAuBT,KAAMw/B,GAAsB,IAAKM,IAAqBv/B,KAAKP,KAAMR,EAAKF,GAAU,MAAM,GAGxH8hC,SAAS5hC,EAAKF,GACV,GAAIkV,GAAYhV,GAAM,CAClB,MAAM4gC,EAAW5gC,EAAIkH,cACrB,IAAK,MAAMs5B,KAAYv/B,GAAuBT,KAAMy/B,GAAmB,KAAKngC,SACxE,GAAI8gC,IAAapgC,KAAKqhC,YAAYrB,GAC9B,OAAOA,EAGfr4B,EAAO3D,mBAAmB,oBAAqB,WAAYxE,GAG/D,IAA0B,IAAtBA,EAAIsF,QAAQ,KAAa,CACzB,MAAMw8B,EAAW,GACjB,IAAK,MAAOv+B,EAAMi9B,KAAav/B,GAAuBT,KAAMy/B,GAAmB,KACvE18B,EAAKjE,MAAM,KAAiB,KAAOU,GACnC8hC,EAAS1+B,KAAKo9B,GAUtB,OAPwB,IAApBsB,EAASpiC,OACTyI,EAAO3D,mBAAmB,oBAAqB,OAAQxE,GAElD8hC,EAASpiC,OAAS,GAEvByI,EAAO3D,mBAAmB,2BAA4B,OAAQxE,GAE3D8hC,EAAS,GAGpB,MAAMl6B,EAAS3G,GAAuBT,KAAMy/B,GAAmB,KAAK/+B,IAAI+N,GAAcH,WAAW9O,GAAKoN,UACtG,OAAIxF,GAGGO,EAAO3D,mBAAmB,oBAAqB,YAAaxE,GAGvE6hC,YAAYrB,GAiBR,OAAOrqB,GAAUimB,GAAGoE,EAASpzB,UAAW,EAAG,GAG/C20B,cAAcvB,GAEV,OAAOpE,GAAGoE,EAASpzB,UAEvB40B,cAAcxyB,EAAQ6F,GAClB,OAAOpU,GAAuBT,KAAM4/B,GAAqB,KAAKhK,OAAO5mB,EAAQ6F,GAEjF4sB,cAAczyB,EAAQ1P,GAClB,OAAOmB,GAAuBT,KAAM4/B,GAAqB,KAAK7kB,OAAO/L,EAAQ1P,GAEjFoiC,aAAapiC,GACT,OAAOU,KAAKyhC,cAAczhC,KAAK+gC,OAAO1yB,OAAQ/O,GAAU,IAE5DqiC,kBAAkB3B,EAAUnrB,GAOxB,MAN0B,iBAAd,IACRmrB,EAAWhgC,KAAKohC,SAASpB,IAEzBrqB,GAAUd,EAAM,EAAG,KAAO7U,KAAKqhC,YAAYrB,IAC3Cr4B,EAAO3D,mBAAmB,uCAAuCg8B,EAASj9B,QAAS,OAAQ8R,GAExF7U,KAAKwhC,cAAcxB,EAAS3xB,OAAQsH,GAAUd,EAAM,IAE/D+sB,kBAAkB5B,EAAU1gC,GAIxB,MAH0B,iBAAd,IACR0gC,EAAWhgC,KAAKohC,SAASpB,IAEtBzqB,GAAO,CACVvV,KAAKqhC,YAAYrB,GACjBhgC,KAAKyhC,cAAczB,EAAS3xB,OAAQ/O,GAAU,MAItDuiC,mBAAmB7B,EAAUnrB,GAOzB,MAN0B,iBAAd,IACRmrB,EAAWhgC,KAAKihC,YAAYjB,IAE5BrqB,GAAUd,EAAM,EAAG,KAAO7U,KAAKqhC,YAAYrB,IAC3Cr4B,EAAO3D,mBAAmB,0CAA0Cg8B,EAASj9B,QAAS,OAAQ8R,GAE3F7U,KAAKwhC,cAAcxB,EAAS3xB,OAAQsH,GAAUd,EAAM,IAG/DitB,mBAAmB9B,EAAU1gC,GAIzB,MAH0B,iBAAd,IACR0gC,EAAWhgC,KAAKihC,YAAYjB,IAEzBzqB,GAAO,CACVvV,KAAKqhC,YAAYrB,GACjBhgC,KAAKyhC,cAAczB,EAAS3xB,OAAQ/O,GAAU,MAItDyiC,qBAAqB/B,EAAUnrB,GACD,iBAAd,IACRmrB,EAAWhgC,KAAKihC,YAAYjB,IAEhC,IAAIt8B,EAAU,iCACd,MAAM2R,EAAQT,GAASC,GACvB,GAAKQ,EAAMnW,OAAS,IAAQ,EACxB,IACI,OAAOuB,GAAuBT,KAAM4/B,GAAqB,KAAKhK,OAAOoK,EAASxwB,QAAS6F,GAE3F,MAAO/T,GACHoC,EAAU,+BAIlB,OAAOiE,EAAO5D,WAAWL,EAAS,WAAY,CAC1C3F,MAAOqX,GAAQC,GACfnT,KAAM,CAAEiD,OAAQ66B,EAASj9B,KAAMm9B,UAAWF,EAASpzB,YAG3DnJ,UAAUu8B,EAAUpZ,EAAOuN,GACG,iBAAd,IACR6L,EAAWhgC,KAAKihC,YAAYjB,IAEhC,MAAMnrB,EAAOlN,EAAO/B,SAASghB,GAC7B,IAAI1gB,EASA87B,EACAC,EACAC,EAVJ,GAAI/N,EACA,IACIjuB,EAAOzF,GAAuBT,KAAM4/B,GAAqB,KAAKhK,OAAOoK,EAAS3xB,OAAQ8lB,EAAGtf,MAAQ,MAErG,MAAOvT,GACHkG,QAAQC,IAAInG,GAMpB,IAAIw2B,EAAS,iBACb,GAAoB,IAAhBjjB,EAAK3V,OACL44B,EAAS,4BAER,GAAKjjB,EAAK3V,OAAS,IAAQ,EAAG,CAC/B,MAAMkhC,EAAWhrB,GAAQP,EAAKtL,MAAM,EAAG,IACjC44B,EAAU1B,GAAcL,GAC9B,GAAI+B,EACA,IACIF,EAAYE,EAAQp/B,KACpBm/B,EAAiBC,EAAQjC,UACzB8B,EAAYvhC,GAAuBT,KAAM4/B,GAAqB,KAAKhK,OAAOuM,EAAQ9zB,OAAQwG,EAAKtL,MAAM,IACrGuuB,EAASqK,EAAQrK,UAAUkK,GAE/B,MAAO1gC,GACHkG,QAAQC,IAAInG,OAGf,CACDw2B,EAAS,uBACT,IACI,MAAMx2B,EAAQtB,KAAKohC,SAAShB,GAC5B6B,EAAY3gC,EAAMyB,KAClBm/B,EAAiB5gC,EAAMsL,SACvBkrB,EAAS,iBAAiBoK,IAC1B,IACIF,EAAYvhC,GAAuBT,KAAM4/B,GAAqB,KAAKhK,OAAOt0B,EAAM+M,OAAQwG,EAAKtL,MAAM,IAEvG,MAAOjI,GACHw2B,EAAS,iBAAiBoK,mCAGlC,MAAO5gC,GACHkG,QAAQC,IAAInG,KAIxB,OAAOqG,EAAOlE,UAAU,wBAAyB,iBAAkB,CAC/DoR,KAAMO,GAAQP,GAAOutB,YAAa,KAClCj9B,OAAQ66B,EAASj9B,KAAMm9B,UAAWF,EAASpzB,SAAU1G,KAAAA,EACrD87B,UAAAA,EAAWC,UAAAA,EAAWC,eAAAA,EAAgBpK,OAAAA,IAI9CuK,qBAAqBC,EAAkBhjC,GAInC,MAHkC,iBAAtB,IACRgjC,EAAmBtiC,KAAKihC,YAAYqB,IAEjCltB,GAAQ3U,GAAuBT,KAAM4/B,GAAqB,KAAK7kB,OAAOunB,EAAiB9yB,QAASlQ,GAAU,KAiCrHijC,mBAAmBC,EAAeljC,GACC,iBAAnB,IACRkjC,EAAgBxiC,KAAKmhC,SAASqB,IAE9BljC,EAAOJ,OAASsjC,EAAcn0B,OAAOnP,QACrCyI,EAAO5D,WAAW,0BAA4By+B,EAAc51B,SAAU,sBAAuB,CACzFvH,MAAO/F,EAAOJ,OACdoG,cAAek9B,EAAcn0B,OAAOnP,SAG5C,MAAMujC,EAAS,GACVD,EAAcrzB,WACfszB,EAAO7/B,KAAK5C,KAAKuhC,cAAciB,IAEnC,MAAME,EAAc,CAACx0B,EAAOnQ,IACL,WAAfmQ,EAAMtP,KACCg9B,GAAG79B,GAEU,UAAfmQ,EAAMtP,KACJsrB,GAAU9U,GAAQrX,KAGV,YAAfmQ,EAAMtP,MACN6B,GAAuBT,KAAM4/B,GAAqB,KAAK7kB,OAAO,CAAC,WAAY,CAAChd,IAEzEoY,GAAYf,GAAQrX,GAAQ,KAyBvC,IAtBAuB,EAAOgJ,SAAQ,CAACvK,EAAOW,KACnB,MAAMwP,EAAQs0B,EAAcn0B,OAAO3P,GAC9BwP,EAAM1B,QAME,MAATzO,EACA0kC,EAAO7/B,KAAK,MAEY,UAAnBsL,EAAM3B,UAA2C,UAAnB2B,EAAM3B,SACzC5E,EAAO3D,mBAAmB,gDAAkD,YAAckK,EAAMnL,KAAOhF,GAElGyP,MAAMN,QAAQnP,GACnB0kC,EAAO7/B,KAAK7E,EAAMK,KAAKL,GAAU2kC,EAAYx0B,EAAOnQ,MAGpD0kC,EAAO7/B,KAAK8/B,EAAYx0B,EAAOnQ,IAflB,MAATA,GACA4J,EAAO3D,mBAAmB,qDAAuD,YAAckK,EAAMnL,KAAOhF,MAkBjH0kC,EAAOvjC,QAAwC,OAA9BujC,EAAOA,EAAOvjC,OAAS,IAC3CujC,EAAO14B,MAEX,OAAO04B,EAEXE,eAAeH,EAAeljC,GACK,iBAAnB,IACRkjC,EAAgBxiC,KAAKmhC,SAASqB,IAElC,MAAMC,EAAS,GACTG,EAAY,GACZC,EAAa,GA6BnB,OA5BKL,EAAcrzB,WACfszB,EAAO7/B,KAAK5C,KAAKuhC,cAAciB,IAE/BljC,EAAOJ,SAAWsjC,EAAcn0B,OAAOnP,QACvCyI,EAAO3D,mBAAmB,kCAAmC,SAAU1E,GAE3EkjC,EAAcn0B,OAAO/F,SAAQ,CAAC4F,EAAOxP,KACjC,MAAMX,EAAQuB,EAAOZ,GACrB,GAAIwP,EAAM1B,QACN,GAAmB,WAAf0B,EAAMtP,KACN6jC,EAAO7/B,KAAKg5B,GAAG79B,SAEd,GAAmB,UAAfmQ,EAAMtP,KACX6jC,EAAO7/B,KAAKsnB,GAAUnsB,QAErB,CAAA,GAAuB,UAAnBmQ,EAAM3B,UAA2C,UAAnB2B,EAAM3B,SAEzC,MAAM,IAAIpN,MAAM,mBAGhBsjC,EAAO7/B,KAAKnC,GAAuBT,KAAM4/B,GAAqB,KAAK7kB,OAAO,CAAC7M,EAAMtP,MAAO,CAACb,UAI7F6kC,EAAUhgC,KAAKsL,GACf20B,EAAWjgC,KAAK7E,MAGjB,CACH8W,KAAMpU,GAAuBT,KAAM4/B,GAAqB,KAAK7kB,OAAO6nB,EAAWC,GAC/EJ,OAAQA,GAIhBK,eAAeN,EAAe3tB,EAAM4tB,GAIhC,GAH+B,iBAAnB,IACRD,EAAgBxiC,KAAKmhC,SAASqB,IAEpB,MAAVC,IAAmBD,EAAcrzB,UAAW,CAC5C,MAAM4zB,EAAa/iC,KAAKuhC,cAAciB,GACjChuB,GAAYiuB,EAAO,GAAI,KAAOA,EAAO,GAAG/7B,gBAAkBq8B,GAC3Dp7B,EAAO3D,mBAAmB,0BAA2B,YAAay+B,EAAO,IAE7EA,EAASA,EAAOl5B,MAAM,GAE1B,MAAMiD,EAAU,GACVw2B,EAAa,GACbnrB,EAAU,GAChB2qB,EAAcn0B,OAAO/F,SAAQ,CAAC4F,EAAOxP,KAC7BwP,EAAM1B,QACa,WAAf0B,EAAMtP,MAAoC,UAAfsP,EAAMtP,MAAuC,UAAnBsP,EAAM3B,UAA2C,UAAnB2B,EAAM3B,UACzFC,EAAQ5J,KAAK6I,GAAU8C,WAAW,CAAE3P,KAAM,UAAWmE,KAAMmL,EAAMnL,QACjE8U,EAAQjV,MAAK,KAGb4J,EAAQ5J,KAAKsL,GACb2J,EAAQjV,MAAK,KAIjBogC,EAAWpgC,KAAKsL,GAChB2J,EAAQjV,MAAK,OAGrB,MAAMqgC,EAA2B,MAAVR,EAAkBhiC,GAAuBT,KAAM4/B,GAAqB,KAAKhK,OAAOppB,EAAS+I,GAAOktB,IAAW,KAC5HS,EAAmBziC,GAAuBT,KAAM4/B,GAAqB,KAAKhK,OAAOoN,EAAYnuB,GAAM,GAEnGvV,EAAS,GACTtB,EAAO,GACb,IAAImlC,EAAkB,EAAGC,EAAe,EA8BxC,OA7BAZ,EAAcn0B,OAAO/F,SAAQ,CAAC4F,EAAOxP,KACjC,IAAIX,EAAQ,KACZ,GAAImQ,EAAM1B,QACN,GAAqB,MAAjBy2B,EACAllC,EAAQ,IAAIuiC,GAAQ,WAEnB,GAAIzoB,EAAQnZ,GACbX,EAAQ,IAAIuiC,GAAQ2C,EAAcG,WAGlC,IACIrlC,EAAQklC,EAAcG,KAE1B,MAAO9hC,GACHvD,EAAQuD,OAKhB,IACIvD,EAAQmlC,EAAiBC,KAE7B,MAAO7hC,GACHvD,EAAQuD,EAGhBhC,EAAOsD,KAAK7E,GACZC,EAAK4E,KAAKsL,EAAMnL,MAAQ,SAErBoU,GAAO0f,UAAUv3B,EAAQtB,GAIpCqlC,iBAAiBlP,GACb,MAAMtf,EAAOlN,EAAO/B,SAASuuB,EAAGtf,KAAM,WAChC9W,EAAQ4J,EAAO1B,UAAuB,MAAZkuB,EAAGp2B,MAAiBo2B,EAAGp2B,MAAQ,EAAG,YAC5DiiC,EAAWhgC,KAAKihC,YAAY7rB,GAAQP,EAAKtL,MAAM,EAAG,KACxD,IAAKy2B,EACD,OAAO,KAEX,MAAM95B,EAAOzF,GAAuBT,KAAM4/B,GAAqB,KAAKhK,OAAOoK,EAAS3xB,OAAQwG,EAAKtL,MAAM,IACvG,OAAO,IAAI42B,GAAuBH,EAAUhgC,KAAKqhC,YAAYrB,GAAW95B,EAAMnI,GAMlFulC,SAAS77B,GACL,MAAMu4B,EAAWhgC,KAAKmhC,SAAS15B,EAAIg7B,OAAO,IAC1C,OAAKzC,GAAYA,EAAS7wB,UACf,KAKJ,IAAI4wB,GAAeC,EAAUhgC,KAAKuhC,cAAcvB,GAAWhgC,KAAK8iC,eAAe9C,EAAUv4B,EAAIoN,KAAMpN,EAAIg7B,SAElHc,WAAW1uB,GACP,MAAM2uB,EAAUpuB,GAAQP,GAClBmrB,EAAWhgC,KAAKohC,SAASzrB,GAAU6tB,EAAS,EAAG,IACrD,IAAKxD,EACD,OAAO,KAEX,MAAM95B,EAAOzF,GAAuBT,KAAM4/B,GAAqB,KAAKhK,OAAOoK,EAAS3xB,OAAQsH,GAAU6tB,EAAS,IAC/G,OAAO,IAAInD,GAAiBL,EAAUhgC,KAAKqhC,YAAYrB,GAAW95B,GAEtEK,YAAYxI,GAER,OAAIA,aAAiB2iC,GACV3iC,EAGY,iBAAX,EACD,IAAI2iC,GAAU98B,KAAKqJ,MAAMlP,IAGN,mBAAlBA,EAAY,OACb,IAAI2iC,GAAU3iC,EAAM6O,OAAO1E,EAAW4E,OAG1C,IAAI4zB,GAAU3iC,IAG7B0hC,GAAoB,IAAIh+B,QAAWi+B,GAAoB,IAAIj+B,QAAWk+B,GAAuB,IAAIl+B,QAAWm+B,GAAsB,IAAIn+B,QAAW+9B,GAAuB,IAAI54B,QAAWi5B,GAAyB,SAAgCrgC,EAAKF,EAAQmkC,GAEzP,GAAIjvB,GAAYhV,GAAM,CAClB,MAAM4gC,EAAW5gC,EAAIkH,cACrB,IAAK,MAAMs5B,KAAYv/B,GAAuBT,KAAM2/B,GAAsB,KAAKrgC,SAC3E,GAAI8gC,IAAapgC,KAAKqhC,YAAYrB,GAC9B,OAAOA,EAGfr4B,EAAO3D,mBAAmB,uBAAwB,WAAYxE,GAGlE,IAA0B,IAAtBA,EAAIsF,QAAQ,KAAa,CACzB,MAAMw8B,EAAW,GACjB,IAAK,MAAOv+B,EAAMi9B,KAAav/B,GAAuBT,KAAM2/B,GAAsB,KAC1E58B,EAAKjE,MAAM,KAAiB,KAAOU,GACnC8hC,EAAS1+B,KAAKo9B,GAGtB,GAAI1gC,EAAQ,CACR,MAAMokC,EAAapkC,EAAOJ,OAAS,EAAKI,EAAOA,EAAOJ,OAAS,GAAK,KACpE,IAAIykC,EAAcrkC,EAAOJ,OACrB0kC,GAAe,EACf3O,GAAMQ,QAAQiO,IAAiC,cAAnBA,EAAU9kC,OACtCglC,GAAe,EACfD,KAIJ,IAAK,IAAI1kC,EAAIqiC,EAASpiC,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC3C,MAAMoP,EAASizB,EAASriC,GAAGoP,OAAOnP,OAC9BmP,IAAWs1B,GAAiBC,GAAgBv1B,IAAWs1B,EAAc,GACrErC,EAASuC,OAAO5kC,EAAG,GAI3B,IAAK,IAAIA,EAAIqiC,EAASpiC,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC3C,MAAMoP,EAASizB,EAASriC,GAAGoP,OAC3B,IAAK,IAAIwZ,EAAI,EAAGA,EAAIvoB,EAAOJ,OAAQ2oB,IAE/B,GAAKoN,GAAMQ,QAAQn2B,EAAOuoB,IAA1B,CAIA,GAAIA,GAAKxZ,EAAOnP,OAAQ,CACpB,GAAuB,cAAnBI,EAAOuoB,GAAGjpB,KACV,SAEJ0iC,EAASuC,OAAO5kC,EAAG,GACnB,MAGJ,GAAIK,EAAOuoB,GAAGjpB,OAASyP,EAAOwZ,GAAGtb,SAAU,CACvC+0B,EAASuC,OAAO5kC,EAAG,GACnB,SAOhB,GAAwB,IAApBqiC,EAASpiC,QAAgBI,GAAUA,EAAOJ,SAAWoiC,EAAS,GAAGjzB,OAAOnP,OAAQ,CAChF,MAAM4kC,EAAUxkC,EAAOA,EAAOJ,OAAS,IACxB,MAAX4kC,GAAmBt2B,MAAMN,QAAQ42B,IAAiC,iBAArB,IAC7CxC,EAASuC,OAAO,EAAG,GAG3B,GAAwB,IAApBvC,EAASpiC,OACTyI,EAAO3D,mBAAmB,uBAAwB,OAAQxE,QAEzD,GAAI8hC,EAASpiC,OAAS,GAAKukC,EAAa,CACzC,MAAMM,EAAWzC,EAASljC,KAAK4lC,GAAMpgC,KAAKC,UAAUmgC,EAAEp3B,YAAW9I,KAAK,MACtE6D,EAAO3D,mBAAmB,qCAAqC+/B,KAAa,OAAQvkC,GAExF,OAAO8hC,EAAS,GAGpB,MAAMl6B,EAAS3G,GAAuBT,KAAM2/B,GAAsB,KAAKj/B,IAAIiO,GAAiBL,WAAW9O,GAAKoN,UAC5G,OAAIxF,GAGGO,EAAO3D,mBAAmB,uBAAwB,YAAaxE,IACvEsgC,GAAsB,SAA6BtgC,EAAKF,EAAQmkC,GAE/D,GAAIjvB,GAAYhV,GAAM,CAClB,MAAMujC,EAAavjC,EAAIkH,cACvB,IAAK,MAAMs5B,KAAYv/B,GAAuBT,KAAM0/B,GAAmB,KAAKpgC,SACxE,GAAIyjC,IAAe/iC,KAAKuhC,cAAcvB,GAClC,OAAOA,EAGfr4B,EAAO3D,mBAAmB,oBAAqB,aAAcxE,GAGjE,IAA0B,IAAtBA,EAAIsF,QAAQ,KAAa,CACzB,MAAMw8B,EAAW,GACjB,IAAK,MAAOv+B,EAAMi9B,KAAav/B,GAAuBT,KAAM0/B,GAAmB,KACvE38B,EAAKjE,MAAM,KAAiB,KAAOU,GACnC8hC,EAAS1+B,KAAKo9B,GAGtB,GAAI1gC,EAAQ,CAER,IAAK,IAAIL,EAAIqiC,EAASpiC,OAAS,EAAGD,GAAK,EAAGA,IAClCqiC,EAASriC,GAAGoP,OAAOnP,OAASI,EAAOJ,QACnCoiC,EAASuC,OAAO5kC,EAAG,GAI3B,IAAK,IAAIA,EAAIqiC,EAASpiC,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC3C,MAAMoP,EAASizB,EAASriC,GAAGoP,OAC3B,IAAK,IAAIwZ,EAAI,EAAGA,EAAIvoB,EAAOJ,OAAQ2oB,IAE/B,GAAKoN,GAAMQ,QAAQn2B,EAAOuoB,KAItBvoB,EAAOuoB,GAAGjpB,OAASyP,EAAOwZ,GAAGtb,SAAU,CACvC+0B,EAASuC,OAAO5kC,EAAG,GACnB,QAYhB,OAPwB,IAApBqiC,EAASpiC,OACTyI,EAAO3D,mBAAmB,oBAAqB,OAAQxE,GAElD8hC,EAASpiC,OAAS,GAAKukC,GAE5B97B,EAAO3D,mBAAmB,2BAA4B,OAAQxE,GAE3D8hC,EAAS,GAGpB,MAAMl6B,EAAS3G,GAAuBT,KAAM0/B,GAAmB,KAAKh/B,IAAIgO,GAAcJ,WAAW9O,GAAKoN,UACtG,OAAIxF,GAGGO,EAAO3D,mBAAmB,oBAAqB,YAAaxE,IC1vBhE,MCEMmI,GAAS,IAAIrE,EDFH,mCEAvB,IAWI2gC,GAAsBC,GAXtBnkC,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAQjF,MAAMkkC,GACTvjC,YAAYwjC,EAAYC,EAAeC,EAASC,EAAMC,GAClDP,GAAqBzjC,IAAIR,UAAM,GAC/BkkC,GAAqB1jC,IAAIR,UAAM,GAC/BD,GAAuBC,KAAMikC,GAAsB,CAC/CG,WAAAA,EACAC,cAAAA,EACAC,QAASrmC,OAAOsK,OAAOtK,OAAO8N,OAAO,GAAI9N,OAAOD,KAAKsmC,GAAS/lC,QAAO,CAACC,EAAOH,KACzEG,EAAMH,EAAEqI,eAAiB49B,EAAQjmC,GAC1BG,IACR,MACH+lC,KAAgB,MAARA,EAAgB,KAAO,IAAIr9B,WAAWq9B,GAC9CC,QAAUA,GAAW,MACtB,KACHzkC,GAAuBC,KAAMkkC,GAAsB,CAAExgC,QAAS,IAAM,KAExE8G,WACI,MAAM+5B,EAAOtjC,EAASR,GAAuBT,KAAMikC,GAAsB,KAAM,QAC/E,MAAO,oBAAoBjkC,KAAKokC,mBAAmBG,EAAOnvB,GAAQmvB,GAAQ,UAE1EH,iBAAe,OAAOnjC,EAASR,GAAuBT,KAAMikC,GAAsB,KAAM,cACxFI,oBAAkB,OAAOpjC,EAASR,GAAuBT,KAAMikC,GAAsB,KAAM,iBAC3FK,cAAY,OAAOrjC,EAASR,GAAuBT,KAAMikC,GAAsB,KAAM,WACrFM,WACA,MAAMA,EAAOtjC,EAASR,GAAuBT,KAAMikC,GAAsB,KAAM,QAC/E,OAAgB,MAARM,EAAgB,KAAO,IAAIr9B,WAAWq9B,GAE9CE,eACA,IACI,MAAMF,EAAOtjC,EAASR,GAAuBT,KAAMikC,GAAsB,KAAM,QAC/E,OAAgB,MAARM,EAAgB,GAAK7K,GAAa6K,GAE9C,MAAOjjC,GACH,OAAOqG,GAAO5D,WAAW,wCAAyC,wBAAyB,CACvFY,UAAW,WAAYzC,KAAM,CAAEwiC,SAAU1kC,SAIjD2kC,eACA,IACI,OAAO/gC,KAAKqJ,MAAMjN,KAAKykC,UAE3B,MAAOnjC,GACH,OAAOqG,GAAO5D,WAAW,kCAAmC,wBAAyB,CACjFY,UAAW,WAAYzC,KAAM,CAAEwiC,SAAU1kC,SAIrD,EAAEikC,GAAuB,IAAIxiC,QAAWyiC,GAAuB,IAAIziC,QAAW4K,OAAOu4B,aACjF,MAAMN,EAAUtkC,KAAKskC,QACftmC,EAAOC,OAAOD,KAAKsmC,GACzB,IAAI5lC,EAAQ,EACZ,MAAO,CACHmmC,KAAM,KACF,GAAInmC,EAAQV,EAAKkB,OAAQ,CACrB,MAAMM,EAAMxB,EAAKU,KACjB,MAAO,CACHX,MAAO,CAACyB,EAAK8kC,EAAQ9kC,IAAOslC,MAAM,GAG1C,MAAO,CAAE/mC,WAAO2B,EAAWolC,MAAM,KAI7CC,gBAAgBrhC,EAASpC,GACrB,IAAI+iC,EAMAA,EALC3gC,EAKe,kCAAkC1D,KAAKokC,cAAcpkC,KAAKqkC,kBAAkB3gC,KAH5E,kCADhBA,EAAU,GAAG1D,KAAKokC,cAAcpkC,KAAKqkC,mBAMzC,MAAMK,EAAW,IAAIP,GAAc,IAAKE,EAAerkC,KAAKskC,QAAStkC,KAAKukC,KAAMtjC,EAASR,GAAuBT,KAAMikC,GAAsB,KAAM,iBAAcvkC,GAEhK,OADAK,GAAuB2kC,EAAUR,GAAsB,CAAExgC,QAAAA,EAASpC,MAAAA,GAAS,KACpEojC,EAEXM,mBAAmBthC,EAASuhC,GACX,MAATA,IACAA,EAAQ,MAEW,iBAAX,IAAwBzgC,OAAOC,UAAUwgC,IAAUA,EAAQ,IACnEt9B,GAAO3D,mBAAmB,wBAAyB,QAASihC,GAEhE,MAAM3jC,EAAQ,IAAInC,MAAMuE,GAAW,uBAEnC,MADAtE,EAAiBkC,EAAO,CAAE2jC,MAAAA,EAAOC,UAAU,IACrC5jC,EAEV6jC,UAAU3lC,GACN,OAAOQ,KAAKskC,QAAQ9kC,EAAIkH,eAE5B0+B,UAEI,OAAgB,MADHnkC,EAASR,GAAuBT,KAAMikC,GAAsB,KAAM,QAG/EO,cAAY,OAAOvjC,EAASR,GAAuBT,KAAMikC,GAAsB,KAAM,WACzFoB,KACI,MAA4E,KAApE5kC,GAAuBT,KAAMkkC,GAAsB,KAAKxgC,SAAkB1D,KAAKokC,YAAc,KAAOpkC,KAAKokC,WAAa,IAElIkB,WACI,GAAItlC,KAAKqlC,KACL,OAEJ,IAAI3hC,QAAEA,EAAOpC,MAAEA,GAAUb,GAAuBT,KAAMkkC,GAAsB,KAC5D,KAAZxgC,IACAA,EAAU,mBAAmB1D,KAAKokC,cAAcpkC,KAAKqkC,iBAEzD18B,GAAO5D,WAAWL,EAAS,eAAgB,CACvC8gC,QAAUxkC,KAAKwkC,SAAW,kBAAoBE,SAAU1kC,KAAMsB,MAAAA,KC3HnEzD,eAAe0nC,GAAOC,EAAKC,GAC9B,MAAMC,EAAWF,EAAIG,IAAI7mC,MAAM,KAAK,GAAG4H,cACtB,SAAbg/B,GAAoC,UAAbA,GACvB/9B,GAAO5D,WAAW,wBAAwB2hC,IAAY,wBAAyB,CAC3ExjC,KAAM,CAAEwjC,SAAAA,GACR/gC,UAAW,YAGf6gC,EAAII,cAAgBJ,EAAIK,6BACxBl+B,GAAO5D,WAAW,8CAA+C,wBAAyB,CACtFY,UAAW,YAGnB,MAAMmhC,EAAO,CACT3gC,OAAQqgC,EAAIrgC,OACZm/B,QAAS,IAAIyB,QAAQv4B,MAAM3B,KAAK25B,IAChCjB,KAAMiB,EAAIjB,WAAQ7kC,GAEhBsmC,QAAaC,MAAMT,EAAIG,IAAKG,GAC5BxB,EAAU,GAChB0B,EAAK1B,QAAQh8B,SAAQ,CAACvK,EAAOyB,KACzB8kC,EAAQ9kC,EAAIkH,eAAiB3I,KAEjC,MAAMwmC,EAAO,IAAIr9B,iBAAiB8+B,EAAKE,eACvC,OAAO,IAAI/B,GAAc6B,EAAKG,OAAQH,EAAKI,WAAY9B,EAASC,EAAMiB,GC1B1E,IAWIa,GAXAtmC,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAMxF,SAASwC,GAAM1E,EAAOa,EAAMmE,GACxB,UAAY,IAAWnE,EACnB,MAAM,IAAIO,MAAM,WAAW4D,KAE/B,OAAOhF,EAEJ,MAAMuoC,GACT1lC,YAAY+kC,GACRU,GAAoB7lC,IAAIR,UAAM,GAC9BD,GAAuBC,KAAMqmC,GAAqB,CAC9CE,eAAe,EACfC,MAAM,EACNlC,QAAS,GACTn/B,OAAQ,GACRsgC,QAAS,IACTE,IAAKljC,GAAMkjC,EAAK,SAAU,QAC3B,KAGHA,UAAQ,OAAO1kC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,OAChFV,QAAIA,GACJxkC,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,MAAO5jC,GAAMkjC,EAAK,SAAU,QAG7FpB,WACA,MAAMA,EAAOtjC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,QAC9E,OAAY,MAAR9B,EACO,KAEPvkC,KAAKoB,WACE,IAAI8F,WAAWq9B,GAEnBA,EAEPA,SAAKA,GACL,GAAY,MAARA,EACApjC,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,YAAQ3mC,GACzEyB,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,gBAAY3mC,QAE5E,GAAsB,iBAAV,EAEbyB,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,OAAQpN,GAAYsL,IACrFpjC,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,WAAY,mBAE5E,GAAI9B,aAAgBr9B,WACrB/F,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,OAAQ9B,GACzEpjC,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,WAAY,gCAE5E,CAAA,GAAsB,iBAAV,EAKb,MAAM,IAAIlnC,MAAM,gBAJhBgC,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,OAAQpN,GAAYr1B,KAAKC,UAAU0gC,KACpGpjC,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,WAAY,qBAMrFjB,UACI,OAAoF,MAA5EnkC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,QAGzElhC,aACA,MAAMA,EAASlE,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,UAChF,OAAIlhC,EACOA,EAAOutB,cAEd1yB,KAAKukC,KACE,OAEJ,MAEPp/B,WAAOA,GACO,MAAVA,IACAA,EAAS,IAEbhE,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,SAAU5jC,GAAM0C,EAAQ,SAAU,WAGnGm/B,cACA,MAAMA,EAAUrmC,OAAO8N,OAAO,GAAI9K,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,YAC7FI,EAAWxlC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,YAYlF,OAXIrmC,KAAK4lC,YAEL5lC,KAAK0mC,YACLpC,EAAQ,mBAAqB,QAEF,MAA3BA,EAAQ,iBAA2BmC,IACnCnC,EAAQ,gBAAkBmC,GAE1BzmC,KAAKukC,OACLD,EAAQ,kBAAoB5hC,OAAO1C,KAAKukC,KAAKrlC,SAE1CjB,OAAOsK,OAAO+7B,GAEzBa,UAAU3lC,GACN,OAAOQ,KAAKskC,QAAQ9kC,EAAIkH,eAE5BigC,UAAUnnC,EAAKzB,GACX,MAAMumC,EAAUrjC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,WACjFllC,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,UAAW/B,GAC5EA,EAAQ7hC,GAAMjD,EAAK,SAAU,OAAOkH,eAAiBhE,OAAO3E,GAEhE6oC,eACIzlC,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,UAAW,IAEhF,EAAEA,GAAsB,IAAI5kC,QAAW4K,OAAOu4B,aAC1C,MAAMN,EAAUtkC,KAAKskC,QACftmC,EAAOC,OAAOD,KAAKsmC,GACzB,IAAI5lC,EAAQ,EACZ,MAAO,CACHmmC,KAAM,KACF,GAAInmC,EAAQV,EAAKkB,OAAQ,CACrB,MAAMM,EAAMxB,EAAKU,KACjB,MAAO,CACHX,MAAO,CAACyB,EAAK8kC,EAAQ9kC,IAAOslC,MAAM,GAG1C,MAAO,CAAE/mC,WAAO2B,EAAWolC,MAAM,KAKzCc,kBACA,OAAO3kC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,UAAY,KAExFQ,eAAeC,EAAU3pB,GACjB2pB,EAAS3/B,MAAM,MACfQ,GAAO3D,mBAAmB,wCAAyC,WAAY,cAEnF7C,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,QAAS,GAAGS,KAAY3pB,KAOzFupB,gBACA,OAAOzlC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,QAExEK,cAAU3oC,GACVoD,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,SAAUtoC,GAG3E8nC,kCACA,QAAS5kC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,iBAE1ER,gCAA4B9nC,GAC5BoD,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,gBAAiB5jC,GAAM1E,EAAO,UAAW,gCAG1G0nC,cAAY,OAAOxkC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,WACpFZ,YAAQA,GAER,IADAA,EAAUhjC,GAAMgjC,EAAS,SAAU,aACpB,EACX,MAAM,IAAItmC,MAAM,oBAEpBgC,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,UAAWZ,GAEhFsB,SAASC,GAEL,MAAM9N,EAAUl5B,KAAK2lC,IAAI7mC,MAAM,KAAK,GAAG4H,cACjCrH,EAAS2nC,EAASloC,MAAM,KAAK,GAAG4H,cACtC,GAAoB,QAAhB1G,KAAKmF,QAAiC,UAAZ+zB,GAAkC,SAAX75B,IAChD2nC,EAAS7/B,MAAM,aAChB,OAAOQ,GAAO5D,WAAW,uBAAwB,wBAAyB,CACtEY,UAAW,YAAY3E,KAAKmF,UAAUvB,KAAKC,UAAU7D,KAAK2lC,WAAW/hC,KAAKC,UAAUmjC,QAI5F,MAAMxB,EAAM,IAAIc,GAAaU,GAW7B,OAVAxB,EAAIrgC,OAAS,MACbqgC,EAAIkB,UAAY1mC,KAAK0mC,UACrBlB,EAAIC,QAAUzlC,KAAKylC,QACnBtkC,EAASV,GAAuB+kC,EAAKa,GAAqB,KAAM,OAAQplC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,SACzIllC,EAASV,GAAuB+kC,EAAKa,GAAqB,KAAM,UAAWpoC,OAAO8N,OAAO,GAAI9K,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,aAC9JllC,EAASV,GAAuB+kC,EAAKa,GAAqB,KAAM,WAAYplC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,aAKtIb,EAEXh8B,QACI,MAAMA,EAAQ,IAAI88B,GAAatmC,KAAK2lC,KAEpCxkC,EAASV,GAAuB+I,EAAO68B,GAAqB,KAAM,SAAUplC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,WAE7I,MAAM9B,EAAOtjC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,QAc9E,OAbAllC,EAASV,GAAuB+I,EAAO68B,GAAqB,KAAM,OAAiB,MAAR9B,OAAgB7kC,EAAY,IAAIwH,WAAWq9B,IACtHpjC,EAASV,GAAuB+I,EAAO68B,GAAqB,KAAM,WAAYplC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,aAE/IllC,EAASV,GAAuB+I,EAAO68B,GAAqB,KAAM,UAAWpoC,OAAO8N,OAAO,GAAI9K,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,aAEhKllC,EAASV,GAAuB+I,EAAO68B,GAAqB,KAAM,QAASplC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,UACxIrmC,KAAK0mC,YACLl9B,EAAMk9B,WAAY,GAEtBl9B,EAAMi8B,QAAUzlC,KAAKylC,QACjBzlC,KAAK6lC,8BACLr8B,EAAMq8B,6BAA8B,GAEjCr8B,EAEXjB,SAEI,MAAMg8B,EAAOtjC,EAASR,GAAuBT,KAAMqmC,GAAqB,KAAM,QAM9E,OALY,MAAR9B,GACApjC,EAASV,GAAuBT,KAAMqmC,GAAqB,KAAM,OAAQ,IAAIn/B,WAAWq9B,IAE5FtmC,OAAOsK,OAAO9H,GAAuBT,KAAMqmC,GAAqB,KAAK/B,SACrErmC,OAAOsK,OAAO9H,GAAuBT,KAAMqmC,GAAqB,MACzDrmC,KAEXoB,WACI,OAAOnD,OAAOmD,SAASX,GAAuBT,KAAMqmC,GAAqB,OC9NjFxoC,eAAeopC,GAAMC,GACjB,OAAO,IAAIhpC,SAASI,IAAc6b,WAAW7b,EAAS4oC,MAG1D,SAASC,KAAY,OAAO,IAAK1sB,MAAQ0sB,UAOzC,IAAIC,IAAe,EAGZvpC,eAAewpC,GAAUC,GAC5B,MAAMC,EAAgC,mBAAY,CAC9C/C,QAAS,IAAI8B,GAAagB,IACzBA,aAAsBhB,GAAgB,CACvC9B,QAAS8C,GACTrpC,OAAO8N,OAAO,GAAIu7B,GACtB,GAAoB,MAAhBC,EAAK/C,QACL,OAAO78B,GAAO3D,mBAAmB,kBAAmB,aAAcsjC,GAEtE,IAAI9B,EAAM+B,EAAK/C,QAAQh7B,QAAQjB,SAC/B,OAAQg/B,EAAK/C,QAAQmB,IAAI7mC,MAAM,KAAK,IAChC,IAAK,OAAQ,CACT,MAAMqI,EAAQq+B,EAAIG,IAAIx+B,MAAM,oCAC5B,GAAIA,EACA,IACI,MAAMm9B,EAAU,CACZ,eAAiBn9B,EAAM,GAAKA,EAAM,GAAK,cAErCo9B,EAAQp9B,EAAM,GAAK6N,GAAa7N,EAAM,IAvBrD8xB,GAuBqE9xB,EAAM,GA1BpEmxB,QAAQ,yBAAyB,CAACn6B,EAAKoD,IAC1CmB,OAAOC,aAAa2E,SAAS/F,EAAM,QA0B9B,OAAO,IAAI4iC,GAAc,IAAK,KAAMG,EAASC,EAAMiB,EAAIh8B,SAE3D,MAAOlI,GACH,OAAO,IAAI6iC,GAAc,IAAK,4CAA6C,GAAI,KAAMqB,EAAIh8B,SAGjG,OAAO,IAAI26B,GAAc,IAAK,+CAAgD,GAAI,KAAMqB,EAAIh8B,SAEhG,IAAK,OACL,IAAK,OACL,IAAK,KACD,MAAM,IAAIrK,MAAM,uBAEpB,IAAK,OACL,IAAK,QACD,MACJ,QACI,MAAM,IAAIA,MAAM,sBAExB,MAAMqoC,EAAkC,MAAtBD,EAAKE,cAAyBF,EAAKE,cAAgB,GACrE,IAAKjjC,OAAOC,UAAU+iC,IAAaA,EAAW,EAC1C,OAAO7/B,GAAO3D,mBAAmB,wBAAyB,aAAcsjC,GAE5E,MAAMI,EAA6C,MAA7BH,EAAKI,qBAAgCJ,EAAKI,qBAAuB,IAEvF,IAAKnjC,OAAOC,UAAUijC,IAAiBF,EAAW,EAC9C,OAAO7/B,GAAO3D,mBAAmB,+BAAgC,aAAcsjC,GAEnF,MAAMM,EAAmC,MAAtBL,EAAKM,cAAyBN,EAAKM,cAAgB,KACtE,GAAID,GAAoC,mBAAvB,EACb,OAAOjgC,GAAO3D,mBAAmB,iCAAkC,aAAcsjC,GAErF,MAAMQ,EAAmBP,EAAKO,kBAAoB,KAClD,GAAIA,GAAkD,mBAA9B,EACpB,OAAOngC,GAAO3D,mBAAmB,oCAAqC,aAAcsjC,GAExF,MAAMS,EAAkBR,EAAKQ,iBAAmB,KAChD,GAAIA,GAAgD,mBAA7B,EACnB,OAAOpgC,GAAO3D,mBAAmB,mCAAoC,aAAcsjC,GAGvF,MAAMU,EAAKb,KACX,IAAIzC,EAAW,KACf,IAAK,IAAIhyB,EAAI,EAAGA,EAAI80B,EAAU90B,IAAK,CAC/B,IAAI8xB,EAAUgB,EAAIh8B,QACds+B,IACAtD,SAAiBsD,EAAiBtD,EAAQj8B,WAAWiB,SAGzD,GADsB29B,KAAYa,EACd,EAChB,OAAOrgC,GAAO5D,WAAW,UAAW,UAAW,CAAEY,UAAW,UAAW6/B,QAAAA,IAI3E,GAFAE,QAAiBa,GAAOf,GAEpB9xB,EAAI80B,EAAU,CACd,GAA4B,MAAxB9C,EAASN,YAA8C,MAAxBM,EAASN,WAAoB,CAG5D,IACIoB,EAAMhB,EAAQuC,SAASrC,EAASJ,QAAQ0C,UAAY,IACpD,SAEJ,MAAO1lC,IAGP,OAAOojC,EAEN,GAA4B,MAAxBA,EAASN,aACG,MAAbwD,SAA4BA,EAAUpD,EAAQj8B,SAAUm8B,EAAUhyB,IAAK,CACvE,MAAMu1B,EAAavD,EAASJ,QAAQ,eACR,iBAAxB,GAAoC2D,EAAW9gC,MAAM,uBAC/C8/B,GAAM3/B,SAAS2gC,UAGfhB,GAAMS,EAAe3gC,KAAKmhC,MAAMnhC,KAAKohC,SAAWphC,KAAKqhC,IAAI,EAAG11B,KAEtE,UAOZ,GAAIq1B,EACA,IACI,aAAaA,EAAgBvD,EAASE,GAE1C,MAAOpjC,GAEH,GAAIA,EAAM4jC,UAAqC,iBAAjB5jC,EAAW,MAAgB,CACrD,GAAIoR,EAAI80B,EAAU,OACRP,GAAM3lC,EAAM2jC,OAClB,SAGJ,OAAOP,EAASK,gBAAgB,+BAAgCzjC,GAGpEojC,EAASK,gBAAgB,oCAAqCzjC,GAAOgkC,WAG7E,OAAOZ,EAGX,OAAOA,EAASK,gBAAgB,gCAEpCsC,GAAUvgB,KAAO,WACbsgB,IAAe,GAGnBC,GAAUgB,WAAa,SAAUC,KAEjCjB,GAAUkB,eAAiB,SAAUD,GAC7BlB,IACAz/B,GAAO5D,WAAW,sBAAuB,wBAAyB,CAC9DY,UAAW,oBAKvB0iC,GAAUmB,aAAe,SAAUF,GAC3BlB,IACAz/B,GAAO5D,WAAW,sBAAuB,wBAAyB,CAC9DY,UAAW,kBClKhB,MCEMgD,GAAS,IAAIrE,EDFH,yCEAvB,IAWIiH,GAAIk+B,GAA2BC,GAX/B3oC,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAUxF,MAAMwQ,GAAO1K,OAAO,GACdqxB,GAAQ,IAAIlwB,WAAW,IACvByhC,GAAW,qEACjB,SAASC,GAAWxhC,EAAQwO,GACxB,GAAe,OAAXxO,EACA,OAAO,KAEX,MAAMC,EAAS8I,GAASwF,GAAUvO,EAAQwO,EAAOA,EAAQ,KACnD1W,EAASiR,GAASwF,GAAUvO,EAAQC,EAAQA,EAAS,KAC3D,OAAOsO,GAAUvO,EAAQC,EAAS,GAAIA,EAAS,GAAKnI,GAExD,SAAS2pC,GAAYzhC,EAAQwO,GACzB,IACI,MAAMP,EAAQuzB,GAAWxhC,EAAQwO,GACjC,GAAa,MAATP,EACA,OAAOqkB,GAAarkB,GAG5B,MAAO/T,IACP,OAAO,KAEX,SAASwnC,GAAO/qC,GACZ,MAAMqJ,EAASmJ,GAAQxS,GACvB,GAAIqJ,EAAOlI,OAAS,GAChB,MAAM,IAAIC,MAAM,+BAEpB,MAAM4pC,EAAS,IAAI7hC,WAAW,IAE9B,OADA6hC,EAAOvoC,IAAI4G,EAAQ,GAAKA,EAAOlI,QACxB6pC,EAEX,SAASC,GAASjrC,GACd,GAAKA,EAAMmB,OAAS,IAAQ,EACxB,OAAOnB,EAEX,MAAMqJ,EAAS,IAAIF,WAA0C,GAA/BH,KAAKkS,KAAKlb,EAAMmB,OAAS,KAEvD,OADAkI,EAAO5G,IAAIzC,GACJqJ,EAGX,SAAS6hC,GAAYzzB,GACjB,MAAMpO,EAAS,GACf,IAAI8hC,EAAY,EAEhB,IAAK,IAAIjqC,EAAI,EAAGA,EAAIuW,EAAMtW,OAAQD,IAC9BmI,EAAOxE,KAAKw0B,IACZ8R,GAAa,GAEjB,IAAK,IAAIjqC,EAAI,EAAGA,EAAIuW,EAAMtW,OAAQD,IAAK,CACnC,MAAM4V,EAAOlN,GAAO/B,SAAS4P,EAAMvW,IAEnCmI,EAAOnI,GAAK6pC,GAAOI,GAEnB9hC,EAAOxE,KAAKkmC,GAAOj0B,EAAK3V,SACxBkI,EAAOxE,KAAKomC,GAASn0B,IACrBq0B,GAAa,GAAmC,GAA9BniC,KAAKkS,KAAKpE,EAAK3V,OAAS,IAE9C,OAAOqW,GAAOnO,GAIlB,SAAS+hC,GAAYh/B,GAUjB,OATIA,EAAKhD,MAAM,qBACXgD,EAAOA,EAAK5C,UAAU,IAEjB4C,EAAKhD,MAAM,eAChBgD,EAAOA,EAAK5C,UAAU,GAGtBI,GAAO3D,mBAAmB,0BAA2B,OAAQmG,GAE1D,gCAAiCA,IAIrC,MAAMi/B,GACTxoC,YAAYmC,GACR3D,EAAiBY,KAAM,CAAE+C,KAAAA,IAE7BsmC,SAASC,GACL,OAAOtpC,KAEXupC,iBAAiBC,GACb,OAAO,EAEX3rC,oBAAoB2rC,EAAUnX,GAC1B,MAAM,IAAIlzB,MAAM,oBAEpBtB,oBAAoB2rC,EAAU30B,GAC1B,MAAM,IAAI1V,MAAM,qBASxB,MAAMsqC,GAAc,IAAIxgC,OAAO,kBAAoB,KAC7CygC,GAAW,CACb,IAAIzgC,OAAO,mBAAqB,KAChC,IAAIA,OAAO,gBAAiB,KAC5BwgC,GACA,IAAIxgC,OAAO,mCAAoC,MAE5C,MAAM0gC,GACT/oC,YAAYgpC,EAAUvX,EAAStvB,GAE3B0lC,GAA0BjoC,IAAIR,UAAM,GACpCZ,EAAiBY,KAAM,CAAE4pC,SAAAA,EAAUvX,QAAAA,EAAStvB,KAAAA,IAC5ChD,GAAuBC,KAAMyoC,GAA2B,KAAM,KAElE5qC,yBAiBI,OAhBK4C,GAAuBT,KAAMyoC,GAA2B,MAEzD1oC,GAAuBC,KAAMyoC,GAA2BzoC,KAAK4pC,SAASrpC,KAAK,CACvEuL,GAAI9L,KAAKqyB,QACTxd,KAAM,+EACP1G,MAAM/G,GACGO,GAAO1B,UAAUmB,KAAYqJ,KACtCo5B,OAAOvoC,IACN,GAAmB,mBAAfA,EAAMC,KACN,OAAO,EAIX,MADAxB,GAAuBC,KAAMyoC,GAA2B,KAAM,KACxDnnC,KACN,WAEKb,GAAuBT,KAAMyoC,GAA2B,KAEzE5qC,aAAauiC,EAAU0J,EAAa,MAEhC,MAAMC,EAAWx0B,GAAO,CAAC6qB,EAAUpE,GAASh8B,KAAK+C,MAAO+mC,IAClD3V,EAAK,CACProB,GAAI9L,KAAKqyB,QACT2X,gBAAgB,EAChBn1B,KAAMk1B,GAGV,IAAIryB,GAAU,QACJ1X,KAAKiqC,qBACXvyB,GAAU,EAEVyc,EAAGtf,KAAOU,GAAO,CAAC,aAAc0zB,GAAY,CAAC/M,GAAUl8B,KAAK+C,MAAOgnC,OAEvE,IACI,IAAIl1B,QAAa7U,KAAK4pC,SAASrpC,KAAK4zB,GACpC,OAAKxsB,GAAO/B,SAASiP,GAAM3V,OAAS,IAAQ,EACjCyI,GAAO5D,WAAW,uBAAwB,iBAAkB,CAC/Dq+B,YAAajO,EAAItf,KAAAA,IAGrB6C,EACOkxB,GAAW/zB,EAAM,GAErBA,EAEX,MAAOvT,GACH,GAAmB,mBAAfA,EAAMC,KACN,MAAMD,EAGd,OAAO,KAEXzD,iBAAiB2rC,EAAW,IACxB,GAAiB,KAAbA,EACA,IAEI,MAAMpiC,QAAepH,KAAKkqC,OAAO,cAEjC,GAAe,OAAX9iC,GAAmBA,IAAWuhC,GAC9B,OAAO,KAGX,aADsB3oC,KAAK4pC,SAASO,cACrBC,UAAUC,YAAYjjC,GAEzC,MAAO9F,GACH,GAAmB,mBAAfA,EAAMC,KACN,OAAO,KAEX,MAAMD,EAGd,IAAIgpC,EAAa,KACjB,IAAK,MAAMC,KAAUvqC,KAAK4pC,SAASY,QAC/B,GAAMD,aAAkBnB,IAGpBmB,EAAOhB,iBAAiBC,GAAW,CACnCc,EAAaC,EACb,MAGR,GAAkB,MAAdD,EACA,OAAO,KAGX,MAAMz1B,EAAO+zB,SAAkB5oC,KAAKkqC,OAAO,aAAcpB,GAAOU,KAAe,KAAM,GAErF,GAAY,MAAR30B,GAAyB,OAATA,EAChB,OAAO,KAGX,MAAMwd,QAAgBiY,EAAWG,cAAcjB,EAAU30B,GACzD,OAAe,MAAXwd,EACOA,EAEJ1qB,GAAO5D,WAAW,oBAAqB,wBAAyB,CACnEY,UAAW,cAAc6kC,KACzBtnC,KAAM,CAAEsnC,SAAAA,EAAU30B,KAAAA,KAG1BhX,cAAc2B,GAEV,IAAIkrC,EAAWzR,GAAYz5B,GAG3B,MAAMmrC,EAAWhjC,GAAO/B,SAAS2P,GAAO,CAACuzB,GAAO,IAAKA,GAAO4B,EAASxrC,QAASwrC,KACxEE,EAAWhC,SAAkB5oC,KAAKkqC,OAAO,aAAclB,GAAS2B,KAAe,KAAM,GAC3F,OAAgB,MAAZC,GAAiC,OAAbA,EACb,KAEJlR,GAAakR,GAExB/sC,uBAEI,MAAM+sC,EAAWhC,SAAkB5oC,KAAKkqC,OAAO,eAAkB,KAAM,GAEvE,GAAgB,MAAZU,GAAiC,OAAbA,EACpB,OAAO,KAGX,MAAMC,EAAOD,EAASzjC,MAAM,4EAC5B,GAAI0jC,EAAM,CACN,MAAMC,EAAsB,aAAZD,EAAK,GAAqB,OAAS,OAC7C3rC,EAASoI,SAASujC,EAAK,GAAI,IACjC,GAAIA,EAAK,GAAG3rC,SAAoB,EAATA,EACnB,MAAO,GAAG4rC,OAAax2B,GAAa,KAAOu2B,EAAK,MAIxD,MAAME,EAAQH,EAASzjC,MAAM,iCAC7B,OAAI4jC,GAA6B,KAApBA,EAAM,GAAG7rC,OACX,SAAU6rC,EAAM,KAEpBpjC,GAAO5D,WAAW,2CAA4C,wBAAyB,CAC1FY,UAAW,mBACXzC,KAAM,CAAE2S,KAAM+1B,KAGtB/sC,kBACI,aAAcmC,KAAKgrC,cAAcrF,IAErC9nC,mBACI,MAAMotC,EAAU,CAAC,CAAErsC,KAAM,OAAQb,MAAOiC,KAAK+C,OAC7C,IAGI,MAAMmoC,QAAelrC,KAAKmrC,QAAQ,UAClC,GAAc,MAAVD,EAEA,MADAD,EAAQroC,KAAK,CAAEhE,KAAM,UAAWb,MAAO,KACjC,IAAIoB,MAAM,WAEpB8rC,EAAQroC,KAAK,CAAEhE,KAAM,SAAUb,MAAOmtC,IACtC,IAAK,IAAIjsC,EAAI,EAAGA,EAAIyqC,GAASxqC,OAAQD,IAAK,CACtC,MAAMkI,EAAQ+jC,EAAO/jC,MAAMuiC,GAASzqC,IACpC,GAAa,MAATkI,EACA,SAEJ,MAAM2jC,EAAS3jC,EAAM,GAAGT,cACxB,OAAQokC,GACJ,IAAK,QACL,IAAK,OAED,OADAG,EAAQroC,KAAK,CAAEhE,KAAM,MAAOb,MAAOmtC,IAC5B,CAAED,QAAAA,EAAStF,IAAKuF,GAC3B,IAAK,OAAQ,CACT,MAAMvF,EAAMwD,GAAY+B,GAGxB,OAFAD,EAAQroC,KAAK,CAAEhE,KAAM,OAAQb,MAAOmtC,IACpCD,EAAQroC,KAAK,CAAEhE,KAAM,MAAOb,MAAO4nC,IAC5B,CAAEsF,QAAAA,EAAStF,IAAAA,GAEtB,IAAK,SACL,IAAK,UAAW,CAEZ,MAAMvF,EAAuB,WAAX0K,EAAuB,aAAe,aACxDG,EAAQroC,KAAK,CAAEhE,KAAMksC,EAAQ/sC,MAAOmtC,IAEpC,MAAME,QAAcprC,KAAKgzB,aACzB,GAAa,MAAToY,EAEA,MADAH,EAAQroC,KAAK,CAAEhE,KAAM,SAAUb,MAAO,KAChC,IAAIoB,MAAM,UAEpB,MAAM0O,GAAS1G,EAAM,IAAM,IAAIrI,MAAM,KACrC,GAAqB,IAAjB+O,EAAM3O,OAEN,MADA+rC,EAAQroC,KAAK,CAAEhE,KAAM,IAAIksC,QAAc/sC,MAAQoJ,EAAM,IAAM,KACrD,IAAIhI,MAAM,SAEpB,MAAMirC,SAAmBpqC,KAAK4pC,SAASO,cAAcC,UAC/CiB,EAAOjB,EAAU/X,QAAQxkB,EAAM,IAC/By9B,EAAUxC,GAAOj7B,EAAM,IAE7B,GAAe,WAAXi9B,EAAqB,CAErB,MAAMS,EAAanB,EAAUC,kBAAkBrqC,KAAK4pC,SAASrpC,KAAK,CAC9DuL,GAAIu/B,EAAMx2B,KAAMU,GAAO,CAAC,aAAc+1B,OAE1C,GAAIF,IAAUG,EAEV,MADAN,EAAQroC,KAAK,CAAEhE,KAAM,SAAUb,MAAOwtC,IAChC,IAAIpsC,MAAM,UAEpB8rC,EAAQroC,KAAK,CAAEhE,KAAM,QAASb,MAAOwtC,SAEpC,GAAe,YAAXT,EAAsB,CAE3B,MAAMU,EAAU7jC,GAAO1B,gBAAgBjG,KAAK4pC,SAASrpC,KAAK,CACtDuL,GAAIu/B,EAAMx2B,KAAMU,GAAO,CAAC,aAAcY,GAAYi1B,EAAO,IAAKE,OAElE,IAAKE,EAED,MADAP,EAAQroC,KAAK,CAAEhE,KAAM,WAAYb,MAAO,MAClC,IAAIoB,MAAM,YAEpB8rC,EAAQroC,KAAK,CAAEhE,KAAM,UAAWb,MAAOytC,EAAQhhC,aAGnD,MAAM2pB,EAAK,CACProB,GAAI+B,EAAM,GACVgH,KAAMU,GAAO,CAAC6qB,EAAUkL,KAE5B,IAAIG,EAAc5C,SAAkB7oC,KAAK4pC,SAASrpC,KAAK4zB,GAAK,GAC5D,GAAmB,MAAfsX,EAEA,MADAR,EAAQroC,KAAK,CAAEhE,KAAM,gBAAiBb,MAAO,KACvC,IAAIoB,MAAM,iBAEpB8rC,EAAQroC,KAAK,CAAEhE,KAAM,oBAAqBb,MAAO0tC,IAElC,YAAXX,IACAW,EAAcA,EAAYnT,QAAQ,OAAQljB,GAAQk2B,GAAS/jC,UAAU,IACrE0jC,EAAQroC,KAAK,CAAEhE,KAAM,wBAAyBb,MAAO0tC,KAGrDA,EAAYtkC,MAAM,aAClBskC,EAActC,GAAYsC,IAE9BR,EAAQroC,KAAK,CAAEhE,KAAM,eAAgBb,MAAO0tC,IAE5C,IAAIC,EAAW,GACf,MAAMhH,QAAiB2C,GAAUoE,GACjC,IACIC,EAAWhH,EAASC,SAExB,MAAOrjC,GACH,IACI2pC,EAAQroC,KAAK,CAAEhE,KAAM,YAAab,MAAO2mC,EAASD,WAEtD,MAAOnjC,GACH,MAAM+T,EAAQqvB,EAASH,KAIvB,MAHIlvB,GACA41B,EAAQroC,KAAK,CAAEhE,KAAM,YAAab,MAAOqX,GAAQC,KAE/C/T,EAEV,MAAMA,EAEV,IAAKoqC,EAED,MADAT,EAAQroC,KAAK,CAAEhE,KAAM,YAAab,MAAO,KACnC,IAAIoB,MAAM,aAEpB8rC,EAAQroC,KAAK,CAAEhE,KAAM,WAAYb,MAAO6F,KAAKC,UAAU6nC,KAEvD,IAAIC,EAAWD,EAASE,MACxB,GAA0B,iBAAd,EAER,MADAX,EAAQroC,KAAK,CAAEhE,KAAM,YAAab,MAAO,KACnC,IAAIoB,MAAM,aAEpB,GAAIwsC,EAASxkC,MAAM,6BAGd,CAGD,GAAY,MADCwkC,EAASxkC,MAAMsiC,IAGxB,MADAwB,EAAQroC,KAAK,CAAEhE,KAAM,iBAAkBb,MAAO4tC,IACxC,IAAIxsC,MAAM,kBAEpB8rC,EAAQroC,KAAK,CAAEhE,KAAM,gBAAiBb,MAAO4tC,IAC7CA,EAAWxC,GAAYwC,GAG3B,OADAV,EAAQroC,KAAK,CAAEhE,KAAM,MAAOb,MAAO4tC,IAC5B,CAAEV,QAAAA,EAAStF,IAAKgG,MAKvC,MAAOrqC,GACHkG,QAAQC,IAAI,KAAMnG,GAEtB,MAAO,CAAE2pC,QAAAA,EAAStF,IAAK,MAE3Bp/B,sBAAsBqjC,EAAU7mC,GAC5B,IAAI8oC,EAAc9oC,EAClB,OAAa,CACT,GAAoB,KAAhB8oC,GAAsC,MAAhBA,EACtB,OAAO,KAIX,GAAa,QAAT9oC,GAAkC,QAAhB8oC,EAClB,OAAO,KAGX,MAAMR,QAAa5qC,GAAuBkpC,GAAap/B,GAAI,IAAKm+B,IAA0BnoC,KAAKopC,GAAaC,EAAUiC,GAEtH,GAAY,MAARR,EAAc,CACd,MAAMxW,EAAW,IAAI8U,GAAYC,EAAUyB,EAAMtoC,GAEjD,OAAI8oC,IAAgB9oC,SAAgB8xB,EAASoV,mBAGtCpV,EAFI,KAKfgX,EAAcA,EAAY/sC,MAAM,KAAKyK,MAAM,GAAGzF,KAAK,OAI/DyG,GAAKo/B,GAAalB,GAA4B,IAAIhnC,QAAWinC,GAA2B7qC,eAAwC+rC,EAAU7mC,GACtI,MAAM+oC,QAAgBlC,EAASO,aACzB4B,EAAYD,EAAQE,UAAU,0BAEpC,IAAKD,EACD,OAAOpkC,GAAO5D,WAAW,+BAAgC,wBAAyB,CAC9EY,UAAW,cAAezC,KAAM,CAAE4pC,QAASA,EAAQ/oC,QAG3D,IAEI,MAAMgnC,QAAiBH,EAASrpC,KAAK,CACjCuL,GAAIigC,EAAU1Z,QACdxd,KAAMU,GAAO,CAAC,aAAeymB,GAASj5B,KACtCinC,gBAAgB,IAEdqB,EAAOS,EAAQ1B,UAAUC,YAAYN,GAC3C,OAAIsB,IAAS11B,GAAUgzB,GAAU,EAAG,IACzB,KAEJ0C,EAEX,MAAO/pC,GAGH,MAAMA,EAEV,OAAO,MCvdJ,MCEMqG,GAAS,IAAIrE,EDFH,2CEAvB,IAWI2oC,GAXAlsC,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAQxF,MAAM+P,GAAOjK,OAAO,GACd0K,GAAO1K,OAAO,GACdmmC,GAAOnmC,OAAO,GACdomC,GAAQpmC,OAAO,IACfqmC,GAAQrmC,OAAO,IACfsmC,GAAQtmC,OAAO,IACf4O,GAAS5O,OAAO,KAChBumC,IAAe77B,IAAQkE,IAAUlE,GACjCtE,GAAS,GACTogC,GAAO,qEACN,MAAMC,GACT5rC,YAAYqE,EAAO8qB,EAAGzO,EAAG7iB,GACrBwtC,GAAiBzrC,IAAIR,UAAM,GAC3B2H,GAAO5C,cAAcE,EAAOkH,GAAQ,aACpCpM,GAAuBC,KAAMisC,GAAkB,CAAElc,EAAAA,EAAGzO,EAAAA,EAAG7iB,EAAAA,EAAGguC,SAAU,MAAQ,KAE5E1c,QAAM,OAAO9uB,EAASR,GAAuBT,KAAMisC,GAAkB,KAAM,KAC3Elc,MAAEhyB,GACwB,KAAtB2X,GAAW3X,IACX4J,GAAO3D,mBAAmB,YAAa,QAASjG,GAEpDoD,EAASV,GAAuBT,KAAMisC,GAAkB,KAAM,IAAK72B,GAAQrX,IAE3EujB,QAAM,OAAOrgB,EAASR,GAAuBT,KAAMisC,GAAkB,KAAM,KAC3E3qB,MAAEvjB,GACwB,KAAtB2X,GAAW3X,GACX4J,GAAO3D,mBAAmB,YAAa,QAASjG,GAEtB,IAArB6W,GAAS7W,GAAO,IACrB4J,GAAO3D,mBAAmB,kBAAmB,QAASjG,GAE1DoD,EAASV,GAAuBT,KAAMisC,GAAkB,KAAM,IAAK72B,GAAQrX,IAE3EU,QAAM,OAAOwC,EAASR,GAAuBT,KAAMisC,GAAkB,KAAM,KAC3ExtC,MAAEV,GACF,MAAMU,EAAIkJ,GAAO7B,UAAU/H,EAAO,SAClC,GAAU,KAANU,GAAkB,KAANA,EACZ,MAAM,IAAIU,MAAM,SAEpBgC,EAASV,GAAuBT,KAAMisC,GAAkB,KAAM,IAAKxtC,GAEnEguC,eAAa,OAAOxrC,EAASR,GAAuBT,KAAMisC,GAAkB,KAAM,YAClFS,oBACA,MAAMjuC,EAAIuB,KAAKysC,SACf,OAAS,MAALhuC,EACO,KAEJ+tC,GAAUG,WAAWluC,GAE5BmuC,SAEA,MAAMA,EAAKh4B,GAAS5U,KAAKshB,GAIzB,OAHIthB,KAAK6sC,UACLD,EAAG,IAAM,KAENx3B,GAAQw3B,GAEfC,cACA,OAAe,KAAX7sC,KAAKvB,EACE,EAEJ,EAUPquC,iBACA,OAAOv3B,GAAO,CAACvV,KAAK+vB,EAAG/vB,KAAKshB,EAAIthB,KAAK6sC,QAAU,OAAS,SAE5D,EAAEZ,GAAmB,IAAIxqC,QAAW4K,OAAOC,IAAI,kCAC3C,MAAO,mBAAmBtM,KAAK+vB,WAAW/vB,KAAKshB,gBAAgBthB,KAAK6sC,sBAAsB7sC,KAAKysC,aAEnGjjC,QACQvI,EAASR,GAAuBT,KAAMisC,GAAkB,KAAM,aAC9DtkC,GAAO5D,WAAW,kCAAmC,wBAAyB,CAC1EY,UAAW,UAGnB,MAAMorB,EAAEA,EAACzO,EAAEA,EAAC7iB,EAAEA,GAAMgC,GAAuBT,KAAMisC,GAAkB,KACnE,OAAO,IAAIO,GAAUrgC,GAAQ4jB,EAAGzO,EAAG7iB,GAEvC8J,SAEI,OADAtK,OAAOsK,OAAO9H,GAAuBT,KAAMisC,GAAkB,MACtDjsC,KAEXoB,WACI,OAAOnD,OAAOmD,SAASX,GAAuBT,KAAMisC,GAAkB,MAE1Ec,SACI,MAAMhd,EAAEA,EAACzO,EAAEA,EAAC7iB,EAAEA,EAACguC,SAAEA,GAAazsC,KAC9B,MAAO,CACHgtC,MAAO,YACPP,SAAwB,MAAZA,EAAoBA,EAASjiC,WAAa,KACtDulB,EAAAA,EAAGzO,EAAAA,EAAG7iB,EAAAA,GAGd8H,gBACI,OAAO,IAAIimC,GAAUrgC,GAAQogC,GAAMA,GAAM,IAG7ChmC,kBAAkB9H,GACd,MAAMwuC,EAAKtlC,GAAO1B,UAAUxH,EAAG,KAE/B,OAAKwuC,GAAMd,IAAWc,GAAMb,GACjBp8B,IAGPi9B,EAAKZ,IACL1kC,GAAO3D,mBAAmB,oBAAqB,IAAKvF,IAEhDwuC,EAAKZ,IAASH,IAG1B3lC,mBAAmBw2B,EAASt+B,GACxB,OAAQkJ,GAAO1B,UAAU82B,GAAWmP,GAAQnmC,OAAO,GAAKtH,EAAI,IAGhE8H,sBAAsB9H,GAClB,MAAMwuC,EAAKtlC,GAAO1B,UAAUxH,GAC5B,OAAIwuC,GAAMj9B,GACC,GAEPi9B,GAAMx8B,GACC,GAGHw8B,EAAKx8B,GAAQ,GAAK,GAE9BlK,uBAAuBwpB,EAAGzO,EAAG4rB,GACzB,MAAMzuC,EAAIkJ,GAAO1B,UAAUinC,EAAI,KACzBC,EAAMX,GAAU3gC,KAAK,CAAEkkB,EAAAA,EAAGzO,EAAAA,EAAG7iB,EAAAA,IAEnC,OADA0C,EAASV,GAAuB0sC,EAAKlB,GAAkB,KAAM,WAAYxtC,GAClE0uC,EAAI5kC,SAEfhC,YAAY4mC,GACR,MAAMppC,EAAcL,GACTiE,GAAO3D,mBAAmBN,EAAS,YAAaypC,GAE3D,GAAqB,iBAAT,EAAmB,CACH,KAApBz3B,GAAWy3B,IACXppC,EAAW,gCAEf,MAAMgsB,EAAIpa,GAAUw3B,EAAK,EAAG,IACtB7rB,EAAI3L,GAAUw3B,EAAK,GAAI,IACzBpnC,OAAOub,IAAM3M,IACb5Q,EAAW,mBAEf,MAAMtF,EAAI+tC,GAAUY,eAAez3B,GAAUw3B,EAAK,GAAI,KACtD,OAAO,IAAIX,GAAUrgC,GAAQ4jB,EAAGzO,EAAG7iB,GAEvC,GAAI0uC,aAAeX,GACf,OAAOW,EAAI3jC,QAEf,MAAMumB,EAAIod,EAAIpd,EACL,MAALA,GACAhsB,EAAW,aAEVyQ,GAAYub,EAAG,KAChBhsB,EAAW,aAEf,MAAMud,EAAI,SAAWA,EAAGsrB,GACpB,OAAItrB,GACK9M,GAAY8M,EAAG,KAChBvd,EAAW,aAERud,GAEPsrB,GACKp4B,GAAYo4B,EAAI,KACjB7oC,EAAW,cAERqM,GAAMrK,OAAO6mC,GAAMN,GAAa,KAEpCvoC,EAAW,aAbZ,CAcPopC,EAAI7rB,EAAG6rB,EAAIP,IACV7mC,OAAOub,IAAM3M,IACb5Q,EAAW,mBAEf,MAAMtF,EAAI,SAAWA,EAAGmuC,EAAIC,GACxB,GAAIpuC,EACA,OAAO+tC,GAAUY,eAAe3uC,GAEpC,GAAImuC,EAIA,OAHKp4B,GAAYo4B,EAAI,KACjB7oC,EAAW,cAEY,IAAlB6Q,GAASg4B,GAAI,GAAa,GAAK,GAE5C,GAAIC,EAAS,CACT,OAAQA,GACJ,KAAK,EAAG,OAAO,GACf,KAAK,EAAG,OAAO,GAEnB,OAAO9oC,EAAW,mBAGtB,OAAOA,EAAW,aAlBZ,CAmBPopC,EAAI1uC,EAAG0uC,EAAIP,GAAIO,EAAIN,SAEhBzlC,EAAS,IAAIolC,GAAUrgC,GAAQ4jB,EAAGzO,EAAG7iB,GAO3C,OANI0uC,EAAIN,UAAWM,EAAIN,QAAYzlC,EAAOylC,SAEtCM,EAAIP,KAAMO,EAAIP,GAAOxlC,EAAOwlC,IAIzBxlC;yECnOf,MACMggB,GAAMrhB,OAAO,GACbshB,GAAMthB,OAAO,GACbuhB,GAAMvhB,OAAO,GACbsnC,GAAMtnC,OAAO,GACbunC,GAAMvnC,OAAO,GACbwnC,GAAYjmB,IAAOvhB,OAAO,KAC1BynC,GAAQ,CACV96B,EAAG0U,GACHzU,EAAG5M,OAAO,GACV0nC,EAAGF,GAAYjmB,IAAOvhB,OAAO,IAAMA,OAAO,KAC1CmV,EAAGqyB,GAAYxnC,OAAO,2CACtBqZ,EAAGiI,GACHqmB,GAAI3nC,OAAO,iFACX4nC,GAAI5nC,OAAO,iFACX6nC,KAAM7nC,OAAO,uEAGjB,SAAS8nC,GAAUlmB,GACf,MAAMjV,EAAEA,EAACC,EAAEA,GAAM66B,GACXM,EAAKC,GAAIpmB,EAAIA,GACbqmB,EAAKD,GAAID,EAAKnmB,GACpB,OAAOomB,GAAIC,EAAKt7B,EAAIiV,EAAIhV,GAE5B,MAAMs7B,GAAmBT,GAAM96B,IAAM0U,GACrC,MAAM8mB,GACFttC,YAAY+mB,EAAGC,EAAGoD,GACdhrB,KAAK2nB,EAAIA,EACT3nB,KAAK4nB,EAAIA,EACT5nB,KAAKgrB,EAAIA,EAEbzkB,kBAAkB0I,GACd,KAAMA,aAAak/B,IACf,MAAM,IAAI9tC,UAAU,4CAExB,OAAO,IAAI6tC,GAAcj/B,EAAE0Y,EAAG1Y,EAAE2Y,EAAGP,IAEvC9gB,qBAAqB6nC,GACjB,MAAMC,EAsjBd,SAAqBC,EAAMr/B,EAAIu+B,GAAMC,GACjC,MAAMc,EAAU,IAAI/gC,MAAM8gC,EAAKpvC,QAOzBsvC,EAAWC,GANMH,EAAK/vC,QAAO,CAACmwC,EAAKC,EAAK1vC,IACtC0vC,IAAQvnB,GACDsnB,GACXH,EAAQtvC,GAAKyvC,EACNX,GAAIW,EAAMC,EAAK1/B,KACvBoY,IACqCpY,GAOxC,OANAq/B,EAAKM,aAAY,CAACF,EAAKC,EAAK1vC,IACpB0vC,IAAQvnB,GACDsnB,GACXH,EAAQtvC,GAAK8uC,GAAIW,EAAMH,EAAQtvC,GAAIgQ,GAC5B8+B,GAAIW,EAAMC,EAAK1/B,KACvBu/B,GACID,EArkBWM,CAAYT,EAAOhwC,KAAK6Q,GAAMA,EAAE+b,KAC9C,OAAOojB,EAAOhwC,KAAI,CAAC6Q,EAAGhQ,IAAMgQ,EAAE6/B,SAAST,EAAMpvC,MAEjDsH,kBAAkB6nC,GACd,OAAOF,GAAca,cAAcX,GAAQhwC,IAAI8vC,GAAcc,YAEjEC,OAAOx8B,GACH,KAAMA,aAAiBy7B,IACnB,MAAM,IAAI7tC,UAAU,0BACxB,MAAQsnB,EAAGunB,EAAItnB,EAAGunB,EAAInkB,EAAGokB,GAAOpvC,MACxB2nB,EAAG0nB,EAAIznB,EAAG0nB,EAAItkB,EAAGukB,GAAO98B,EAC1B+8B,EAAOzB,GAAIqB,GAAM9nB,IACjBmoB,EAAO1B,GAAIwB,GAAMjoB,IACjBooB,EAAK3B,GAAImB,EAAKO,GACdE,EAAK5B,GAAIsB,EAAKG,GACdI,EAAK7B,GAAIA,GAAIoB,EAAKI,GAAME,GACxBI,EAAK9B,GAAIA,GAAIuB,EAAKF,GAAMI,GAC9B,OAAOE,IAAOC,GAAMC,IAAOC,EAE/BC,SACI,OAAO,IAAI5B,GAAcluC,KAAK2nB,EAAGomB,IAAK/tC,KAAK4nB,GAAI5nB,KAAKgrB,GAExD+kB,SACI,MAAQpoB,EAAGunB,EAAItnB,EAAGunB,EAAInkB,EAAGokB,GAAOpvC,KAC1B+f,EAAIguB,GAAImB,GAAM5nB,IACdtH,EAAI+tB,GAAIoB,GAAM7nB,IACdrH,EAAI8tB,GAAI/tB,GAAKsH,IACbpH,EAAI6tB,GAAIzmB,IAAOymB,IAAKmB,EAAKlvB,IAAMsH,IAAOvH,EAAIE,IAC1CE,EAAI4tB,GAAIV,GAAMttB,GACdK,EAAI2tB,GAAI5tB,GAAKmH,IACb0oB,EAAKjC,GAAI3tB,EAAIkH,GAAMpH,GACnB+vB,EAAKlC,GAAI5tB,GAAKD,EAAI8vB,GAAM1C,GAAMrtB,GAC9BiwB,EAAKnC,GAAIzmB,GAAM6nB,EAAKC,GAC1B,OAAO,IAAIlB,GAAc8B,EAAIC,EAAIC,GAErC1sC,IAAIiP,GACA,KAAMA,aAAiBy7B,IACnB,MAAM,IAAI7tC,UAAU,0BACxB,MAAQsnB,EAAGunB,EAAItnB,EAAGunB,EAAInkB,EAAGokB,GAAOpvC,MACxB2nB,EAAG0nB,EAAIznB,EAAG0nB,EAAItkB,EAAGukB,GAAO98B,EAChC,GAAI48B,IAAOjoB,IAAOkoB,IAAOloB,GACrB,OAAOpnB,KACX,GAAIkvC,IAAO9nB,IAAO+nB,IAAO/nB,GACrB,OAAO3U,EACX,MAAM+8B,EAAOzB,GAAIqB,GAAM9nB,IACjBmoB,EAAO1B,GAAIwB,GAAMjoB,IACjBooB,EAAK3B,GAAImB,EAAKO,GACdE,EAAK5B,GAAIsB,EAAKG,GACdI,EAAK7B,GAAIA,GAAIoB,EAAKI,GAAME,GACxBI,EAAK9B,GAAIA,GAAIuB,EAAKF,GAAMI,GACxBlvB,EAAIytB,GAAI4B,EAAKD,GACb3f,EAAIge,GAAI8B,EAAKD,GACnB,GAAItvB,IAAM8G,GACN,OAAI2I,IAAM3I,GACCpnB,KAAK+vC,SAGL7B,GAAciC,KAG7B,MAAMC,EAAKrC,GAAIztB,GAAKgH,IACd+oB,EAAMtC,GAAIztB,EAAI8vB,GACd1f,EAAIqd,GAAI2B,EAAKU,GACbJ,EAAKjC,GAAIhe,GAAKzI,GAAM+oB,EAAM/oB,GAAMoJ,GAChCuf,EAAKlC,GAAIhe,GAAKW,EAAIsf,GAAMJ,EAAKS,GAC7BH,EAAKnC,GAAIqB,EAAKG,EAAKjvB,GACzB,OAAO,IAAI4tB,GAAc8B,EAAIC,EAAIC,GAErCI,SAAS79B,GACL,OAAOzS,KAAKwD,IAAIiP,EAAMq9B,UAE1BS,eAAeC,GACX,IAAIt1B,EAAIu1B,GAAgBD,GAExB,MAAME,EAAKxC,GAAciC,KACzB,GAAIj1B,IAAMkM,GACN,OAAOspB,EACX,GAAIx1B,IAAMmM,GACN,OAAOrnB,KACX,IAAKiuC,GAAkB,CACnB,IAAIh/B,EAAIyhC,EACJj7B,EAAIzV,KACR,KAAOkb,EAAIkM,IACHlM,EAAImM,KACJpY,EAAIA,EAAEzL,IAAIiS,IACdA,EAAIA,EAAEs6B,SACN70B,IAAMmM,GAEV,OAAOpY,EAEX,IAAI0hC,MAAEA,EAAKC,GAAEA,EAAEC,MAAEA,EAAKC,GAAEA,GAAOC,GAAgB71B,GAC3C81B,EAAMN,EACNO,EAAMP,EACNj7B,EAAIzV,KACR,KAAO4wC,EAAKxpB,IAAO0pB,EAAK1pB,IAChBwpB,EAAKvpB,KACL2pB,EAAMA,EAAIxtC,IAAIiS,IACdq7B,EAAKzpB,KACL4pB,EAAMA,EAAIztC,IAAIiS,IAClBA,EAAIA,EAAEs6B,SACNa,IAAOvpB,GACPypB,IAAOzpB,GAOX,OALIspB,IACAK,EAAMA,EAAIlB,UACVe,IACAI,EAAMA,EAAInB,UACdmB,EAAM,IAAI/C,GAAcH,GAAIkD,EAAItpB,EAAI6lB,GAAMI,MAAOqD,EAAIrpB,EAAGqpB,EAAIjmB,GACrDgmB,EAAIxtC,IAAIytC,GAEnBC,iBAAiBC,GACb,MAAMC,EAAUnD,GAAmB,IAAMkD,EAAI,EAAI,IAAMA,EAAI,EACrD/C,EAAS,GACf,IAAIn/B,EAAIjP,KACJqxC,EAAOpiC,EACX,IAAK,IAAI6W,EAAS,EAAGA,EAASsrB,EAAStrB,IAAU,CAC7CurB,EAAOpiC,EACPm/B,EAAOxrC,KAAKyuC,GACZ,IAAK,IAAIpyC,EAAI,EAAGA,EAAI,IAAMkyC,EAAI,GAAIlyC,IAC9BoyC,EAAOA,EAAK7tC,IAAIyL,GAChBm/B,EAAOxrC,KAAKyuC,GAEhBpiC,EAAIoiC,EAAKtB,SAEb,OAAO3B,EAEXkD,KAAKp2B,EAAGq2B,IACCA,GAAevxC,KAAKivC,OAAOf,GAAcsD,QAC1CD,EAAcpD,GAAMqD,MACxB,MAAML,EAAKI,GAAeA,EAAYE,cAAiB,EACvD,GAAI,IAAMN,EACN,MAAM,IAAIhyC,MAAM,iEAEpB,IAAIuyC,EAAcH,GAAeI,GAAiBjxC,IAAI6wC,GACjDG,IACDA,EAAc1xC,KAAKkxC,iBAAiBC,GAChCI,GAAqB,IAANJ,IACfO,EAAcxD,GAAc0D,WAAWF,GACvCC,GAAiBnxC,IAAI+wC,EAAaG,KAG1C,IAAIziC,EAAIi/B,GAAciC,KAClB/vC,EAAI8tC,GAAciC,KACtB,MAAMiB,EAAU,GAAKnD,GAAmB,IAAMkD,EAAI,IAAMA,GAClDU,EAAa,IAAMV,EAAI,GACvBvgC,EAAO7K,OAAO,GAAKorC,EAAI,GACvBW,EAAY,GAAKX,EACjBY,EAAUhsC,OAAOorC,GACvB,IAAK,IAAIrrB,EAAS,EAAGA,EAASsrB,EAAStrB,IAAU,CAC7C,MAAMze,EAASye,EAAS+rB,EACxB,IAAIG,EAAQxtC,OAAO0W,EAAItK,GAMvB,GALAsK,IAAM62B,EACFC,EAAQH,IACRG,GAASF,EACT52B,GAAKmM,IAEK,IAAV2qB,EAAa,CACb,IAAIC,EAAKP,EAAYrqC,GACjBye,EAAS,IACTmsB,EAAKA,EAAGnC,UACZ1vC,EAAIA,EAAEoD,IAAIyuC,OAET,CACD,IAAIC,EAASR,EAAYrqC,EAASN,KAAKorC,IAAIH,GAAS,GAChDA,EAAQ,IACRE,EAASA,EAAOpC,UACpB7gC,EAAIA,EAAEzL,IAAI0uC,IAGlB,MAAO,CAAEjjC,EAAAA,EAAG7O,EAAAA,GAEhBgyC,SAAS5B,EAAQe,GACb,IACIc,EACAC,EAFAp3B,EAAIu1B,GAAgBD,GAGxB,GAAIvC,GAAkB,CAClB,MAAM0C,MAAEA,EAAKC,GAAEA,EAAEC,MAAEA,EAAKC,GAAEA,GAAOC,GAAgB71B,GACjD,IAAMjM,EAAG+hC,EAAK5wC,EAAGmyC,GAAQvyC,KAAKsxC,KAAKV,EAAIW,IACjCtiC,EAAGgiC,EAAK7wC,EAAGoyC,GAAQxyC,KAAKsxC,KAAKR,EAAIS,GACnCZ,IACAK,EAAMA,EAAIlB,UACVe,IACAI,EAAMA,EAAInB,UACdmB,EAAM,IAAI/C,GAAcH,GAAIkD,EAAItpB,EAAI6lB,GAAMI,MAAOqD,EAAIrpB,EAAGqpB,EAAIjmB,GAC5DqnB,EAAQrB,EAAIxtC,IAAIytC,GAChBqB,EAAOC,EAAI/uC,IAAIgvC,OAEd,CACD,MAAMvjC,EAAEA,EAAC7O,EAAEA,GAAMJ,KAAKsxC,KAAKp2B,EAAGq2B,GAC9Bc,EAAQpjC,EACRqjC,EAAOlyC,EAEX,OAAO8tC,GAAc0D,WAAW,CAACS,EAAOC,IAAO,GAEnDxD,SAAS2D,EAAOhE,GAAOzuC,KAAKgrB,IACxB,MAAMrD,EAAEA,EAACC,EAAEA,EAACoD,EAAEA,GAAMhrB,KACd0yC,EAAMD,EACNE,EAAM5E,GAAI2E,EAAMA,GAChBE,EAAM7E,GAAI4E,EAAMD,GAChBG,EAAK9E,GAAIpmB,EAAIgrB,GACbG,EAAK/E,GAAInmB,EAAIgrB,GAEnB,GADW7E,GAAI/iB,EAAI0nB,KACRrrB,GACP,MAAM,IAAIloB,MAAM,oBACpB,OAAO,IAAIgvC,GAAM0E,EAAIC,IAG7B5E,GAAcsD,KAAO,IAAItD,GAAcV,GAAME,GAAIF,GAAMG,GAAItmB,IAC3D6mB,GAAciC,KAAO,IAAIjC,GAAc9mB,GAAKC,GAAKD,IACjD,MAAMuqB,GAAmB,IAAIlwC,QACtB,MAAM0sC,GACTvtC,YAAY+mB,EAAGC,GACX5nB,KAAK2nB,EAAIA,EACT3nB,KAAK4nB,EAAIA,EAEbmrB,eAAelB,GACX7xC,KAAKyxC,aAAeI,EACpBF,GAAiBvT,OAAOp+B,MAE5BuG,yBAAyB8O,GACrB,MAAM29B,EAA2B,KAAjB39B,EAAMnW,OAChByoB,EAAIsrB,GAAcD,EAAU39B,EAAQA,EAAM+I,SAAS,IACzD,IAAK80B,GAAoBvrB,GACrB,MAAM,IAAIxoB,MAAM,yBAEpB,IAAIyoB,EA2SZ,SAAiBD,GACb,MAAM8lB,EAAEA,GAAMD,GACR2F,EAAMptC,OAAO,GACbqtC,EAAOrtC,OAAO,IACdstC,EAAOttC,OAAO,IACdutC,EAAOvtC,OAAO,IACdwtC,EAAOxtC,OAAO,IACdytC,EAAOztC,OAAO,IACd0tC,EAAM9rB,EAAIA,EAAIA,EAAK8lB,EACnBiG,EAAMD,EAAKA,EAAK9rB,EAAK8lB,EACrBkG,EAAMC,GAAKF,EAAIrG,IAAOqG,EAAMjG,EAC5BoG,EAAMD,GAAKD,EAAItG,IAAOqG,EAAMjG,EAC5BqG,EAAOF,GAAKC,EAAIvsB,IAAOmsB,EAAMhG,EAC7BsG,EAAOH,GAAKE,EAAKV,GAAQU,EAAOrG,EAChCuG,EAAOJ,GAAKG,EAAKV,GAAQU,EAAOtG,EAChCwG,EAAOL,GAAKI,EAAKT,GAAQS,EAAOvG,EAChCyG,EAAQN,GAAKK,EAAKT,GAAQS,EAAOxG,EACjC0G,EAAQP,GAAKM,EAAMX,GAAQS,EAAOvG,EAClC2G,EAAQR,GAAKO,EAAM9G,IAAOqG,EAAMjG,EAChC4G,EAAMT,GAAKQ,EAAMd,GAAQS,EAAOtG,EAChC6G,EAAMV,GAAKS,EAAIlB,GAAOM,EAAMhG,EAClC,OAAOmG,GAAKU,EAAIhtB,IAhUJitB,CADG1G,GAAUlmB,IAErB,MAAM6sB,GAAU5sB,EAAIP,MAASA,GAC7B,GAAI2rB,EACIwB,IACA5sB,EAAImmB,IAAKnmB,QAEZ,CACyC,IAAP,EAAXvS,EAAM,MACPm/B,IACnB5sB,EAAImmB,IAAKnmB,IAEjB,MAAMyqB,EAAQ,IAAIlE,GAAMxmB,EAAGC,GAE3B,OADAyqB,EAAMoC,iBACCpC,EAEX9rC,2BAA2B8O,GACvB,MAAMsS,EAAIsrB,GAAc59B,EAAM+I,SAAS,EAAG,KACpCwJ,EAAIqrB,GAAc59B,EAAM+I,SAAS,GAAI,KACrCi0B,EAAQ,IAAIlE,GAAMxmB,EAAGC,GAE3B,OADAyqB,EAAMoC,iBACCpC,EAEX9rC,eAAeiK,GACX,MAAM6E,EAAQq/B,GAAYlkC,GACpBmO,EAAMtJ,EAAMnW,OACZy1C,EAASt/B,EAAM,GACrB,GAAY,KAARsJ,GAAuB,KAARA,IAA0B,IAAXg2B,GAA8B,IAAXA,GACjD,OAAO30C,KAAK40C,kBAAkBv/B,GAElC,GAAY,KAARsJ,GAAyB,IAAXg2B,EACd,OAAO30C,KAAK60C,oBAAoBx/B,GACpC,MAAM,IAAIlW,MAAM,wGAAwGwf,KAE5HpY,sBAAsBuuC,GAClB,OAAO3G,GAAMqD,KAAKY,SAAS2C,GAAoBD,IAEnDvuC,qBAAqByuC,EAAS9U,EAAW+U,GAErC,MAAM71B,EAuVd,SAAsB/D,GAClB,MAAMH,EAAEA,GAAMsyB,GAER0H,EAAqB,EADR75B,EAAKnc,OACO,IAC/B,IAAIkgB,EAAI6zB,GAAc53B,GAClB65B,EAAQ,IACR91B,IAASrZ,OAAOmvC,IAChB91B,GAAKlE,IACLkE,GAAKlE,GACT,OAAOkE,EAhWO+1B,CADVH,EAAUN,GAAYM,KAEhBjlB,EAAEA,EAACzO,EAAEA,GA2cnB,SAA4B4e,GACxB,GAAIA,aAAqBsM,GAErB,OADAtM,EAAUuU,iBACHvU,EAEX,IACI,OAAOsM,GAAU4I,QAAQlV,GAE7B,MAAO5+B,GACH,OAAOkrC,GAAU6I,YAAYnV,IApdZoV,CAAmBpV,GACpC,GAAiB,IAAb+U,GAA+B,IAAbA,EAClB,MAAM,IAAI91C,MAAM,kDAEpB,GAAIigB,IAAMgI,GACN,MAAM,IAAIjoB,MAAM,iDACpB,MAAMo2C,EAAoB,EAAXN,EAAe,KAAO,KAC/BvtB,EAAIymB,GAAMqH,QAAQD,EAASE,GAAY1lB,KACvC7U,EAAEA,GAAMsyB,GACRkI,EAAOjH,GAAO1e,EAAG7U,GACjBy6B,EAAK5H,IAAK3uB,EAAIs2B,EAAMx6B,GACpB06B,EAAK7H,GAAIzsB,EAAIo0B,EAAMx6B,GACnB26B,EAAI1H,GAAMqD,KAAKsE,qBAAqBpuB,EAAGiuB,EAAIC,GACjD,IAAKC,EACD,MAAM,IAAI12C,MAAM,+CAEpB,OADA02C,EAAEpB,iBACKoB,EAEXE,WAAWC,GAAe,GACtB,OAAOC,GAAWj2C,KAAKoQ,MAAM4lC,IAEjC5lC,MAAM4lC,GAAe,GACjB,MAAMruB,EAAI8tB,GAAYz1C,KAAK2nB,GAC3B,GAAIquB,EAAc,CAEd,MAAO,GADQh2C,KAAK4nB,EAAIP,GAAM,KAAO,OAClBM,IAGnB,MAAO,KAAKA,IAAI8tB,GAAYz1C,KAAK4nB,KAGzCsuB,SACI,OAAOl2C,KAAKoQ,OAAM,GAAM7G,MAAM,GAElC4sC,SACI,OAAOn2C,KAAK+1C,YAAW,GAAMxsC,MAAM,GAEvCkrC,iBACI,MAAM3qB,EAAM,kCACNnC,EAAEA,EAACC,EAAEA,GAAM5nB,KACjB,IAAKkzC,GAAoBvrB,KAAOurB,GAAoBtrB,GAChD,MAAM,IAAIzoB,MAAM2qB,GACpB,MAAM7T,EAAO83B,GAAInmB,EAAIA,GAErB,GAAImmB,GAAI93B,EADM43B,GAAUlmB,MACEP,GACtB,MAAM,IAAIjoB,MAAM2qB,GAExBmlB,OAAOx8B,GACH,OAAOzS,KAAK2nB,IAAMlV,EAAMkV,GAAK3nB,KAAK4nB,IAAMnV,EAAMmV,EAElDkoB,SACI,OAAO,IAAI3B,GAAMnuC,KAAK2nB,EAAGomB,IAAK/tC,KAAK4nB,IAEvCmoB,SACI,OAAO7B,GAAcc,WAAWhvC,MAAM+vC,SAASjB,WAEnDtrC,IAAIiP,GACA,OAAOy7B,GAAcc,WAAWhvC,MAAMwD,IAAI0qC,GAAcc,WAAWv8B,IAAQq8B,WAE/EwB,SAAS79B,GACL,OAAOzS,KAAKwD,IAAIiP,EAAMq9B,UAE1BsC,SAAS5B,GACL,OAAOtC,GAAcc,WAAWhvC,MAAMoyC,SAAS5B,EAAQxwC,MAAM8uC,WAEjEgH,qBAAqBD,EAAGnjC,EAAGC,GACvB,MACMyjC,EADIlI,GAAcc,WAAWhvC,MACtBoyC,SAAS1/B,GAChB2jC,EAAKnI,GAAcc,WAAW6G,GAAGtF,eAAe59B,GAChD2jC,EAAMF,EAAG5yC,IAAI6yC,GACnB,OAAOC,EAAIrH,OAAOf,GAAciC,WAAQzwC,EAAY42C,EAAIxH,YAKhE,SAASyH,GAASj1B,GACd,OAAO9c,OAAO8C,SAASga,EAAE,GAAI,KAAO,EAAI,KAAOA,EAAIA,EAEvD,SAASk1B,GAAY3hC,GACjB,GAAIA,EAAK3V,OAAS,GAAiB,IAAZ2V,EAAK,GACxB,MAAM,IAAI1V,MAAM,kCAAkCs3C,GAAW5hC,MAEjE,MAAM8J,EAAM9J,EAAK,GACX2K,EAAM3K,EAAKuJ,SAAS,EAAGO,EAAM,GACnC,IAAKA,GAAOa,EAAItgB,SAAWyf,EACvB,MAAM,IAAIxf,MAAM,2CAEpB,GAAe,IAAXqgB,EAAI,IAAeA,EAAI,IAAM,IAC7B,MAAM,IAAIrgB,MAAM,8CAEpB,MAAO,CAAE0V,KAAMo+B,GAAczzB,GAAMvJ,KAAMpB,EAAKuJ,SAASO,EAAM,IAjBjEwvB,GAAMqD,KAAO,IAAIrD,GAAMX,GAAME,GAAIF,GAAMG,IACvCQ,GAAMgC,KAAO,IAAIhC,GAAM/mB,GAAKA,IAgCrB,MAAMolB,GACT5rC,YAAYmvB,EAAGzO,GACXthB,KAAK+vB,EAAIA,EACT/vB,KAAKshB,EAAIA,EACTthB,KAAKy0C,iBAETluC,mBAAmBiK,GACf,MAAM2I,EAAMu9B,GAASlmC,GACfzN,EAAO,wBACb,GAAmB,iBAARyN,IAAqB2I,EAC5B,MAAM,IAAI9Y,UAAU,GAAG0C,oCAC3B,MAAM8X,EAAM1B,EAAMs9B,GAAWjmC,GAAOA,EACpC,GAAmB,MAAfqK,EAAI3b,OACJ,MAAM,IAAIC,MAAM,GAAG4D,2BACvB,OAAO,IAAIypC,GAAUmK,GAAY97B,EAAItR,MAAM,EAAG,KAAMotC,GAAY97B,EAAItR,MAAM,GAAI,OAElFhD,eAAeiK,GACX,MAAM2I,EAAMu9B,GAASlmC,GACrB,GAAmB,iBAARA,IAAqB2I,EAC5B,MAAM,IAAI9Y,UAAU,oDACxB,MAAM0vB,EAAEA,EAACzO,EAAEA,GAlCnB,SAA2BzM,GACvB,GAAIA,EAAK3V,OAAS,GAAgB,IAAX2V,EAAK,GACxB,MAAM,IAAI1V,MAAM,0BAA0Bs3C,GAAW5hC,MAEzD,GAAIA,EAAK,KAAOA,EAAK3V,OAAS,EAC1B,MAAM,IAAIC,MAAM,uCAEpB,MAAQ0V,KAAMkb,EAAG9Z,KAAM2gC,GAAWJ,GAAY3hC,EAAKuJ,SAAS,KACpDvJ,KAAMyM,EAAGrL,KAAM4gC,GAAeL,GAAYI,GAClD,GAAIC,EAAW33C,OACX,MAAM,IAAIC,MAAM,gDAAgDs3C,GAAWI,MAE/E,MAAO,CAAE9mB,EAAAA,EAAGzO,EAAAA,GAsBSw1B,CAAkB39B,EAAM3I,EAAMylC,GAAWzlC,IAC1D,OAAO,IAAIg8B,GAAUzc,EAAGzO,GAE5B/a,eAAeiK,GACX,OAAOxQ,KAAKo1C,QAAQ5kC,GAExBikC,iBACI,MAAM1kB,EAAEA,EAACzO,EAAEA,GAAMthB,KACjB,IAAK+2C,GAAmBhnB,GACpB,MAAM,IAAI5wB,MAAM,0CACpB,IAAK43C,GAAmBz1B,GACpB,MAAM,IAAIniB,MAAM,0CAExB63C,WACI,MAAMC,EAAOzJ,GAAMtyB,GAAKmM,GACxB,OAAOrnB,KAAKshB,EAAI21B,EAEpBC,aACI,OAAOl3C,KAAKg3C,WAAa,IAAIxK,GAAUxsC,KAAK+vB,EAAGyd,GAAMtyB,EAAIlb,KAAKshB,GAAKthB,KAEvEm3C,cAAcnB,GAAe,GACzB,OAAOC,GAAWj2C,KAAKo3C,SAASpB,IAEpCoB,SAASpB,GAAe,GACpB,MAAMqB,EAAOd,GAASe,GAAoBt3C,KAAKshB,IAC/C,GAAI00B,EACA,OAAOqB,EACX,MAAME,EAAOhB,GAASe,GAAoBt3C,KAAK+vB,IACzCynB,EAAOF,GAAoBC,EAAKr4C,OAAS,GACzCu4C,EAAOH,GAAoBD,EAAKn4C,OAAS,GAE/C,MAAO,KADQo4C,GAAoBC,EAAKr4C,OAAS,EAAIm4C,EAAKn4C,OAAS,EAAI,OAChDs4C,IAAOD,MAASE,IAAOJ,IAElDtB,aACI,OAAO/1C,KAAKm3C,gBAEhB/mC,QACI,OAAOpQ,KAAKo3C,WAEhBM,oBACI,OAAOzB,GAAWj2C,KAAK23C,gBAE3BA,eACI,OAAOlC,GAAYz1C,KAAK+vB,GAAK0lB,GAAYz1C,KAAKshB,IAGtD,SAASs2B,MAAeC,GACpB,IAAKA,EAAOC,MAAMpB,IACd,MAAM,IAAIv3C,MAAM,4BACpB,GAAsB,IAAlB04C,EAAO34C,OACP,OAAO24C,EAAO,GAClB,MAAM34C,EAAS24C,EAAOt5C,QAAO,CAACmU,EAAGyG,IAAQzG,EAAIyG,EAAIja,QAAQ,GACnDkI,EAAS,IAAIF,WAAWhI,GAC9B,IAAK,IAAID,EAAI,EAAGyd,EAAM,EAAGzd,EAAI44C,EAAO34C,OAAQD,IAAK,CAC7C,MAAMka,EAAM0+B,EAAO54C,GACnBmI,EAAO5G,IAAI2Y,EAAKuD,GAChBA,GAAOvD,EAAIja,OAEf,OAAOkI,EAEX,SAASsvC,GAASrhC,GACd,OAAOA,aAAiBnO,WAE5B,MAAM6wC,GAAQvqC,MAAM3B,KAAK,CAAE3M,OAAQ,MAAO,CAACT,EAAGQ,IAAMA,EAAEuL,SAAS,IAAIoP,SAAS,EAAG,OAC/E,SAAS68B,GAAWuB,GAChB,KAAMA,aAAkB9wC,YACpB,MAAM,IAAI/H,MAAM,uBACpB,IAAIqR,EAAM,GACV,IAAK,IAAIvR,EAAI,EAAGA,EAAI+4C,EAAO94C,OAAQD,IAC/BuR,GAAOunC,GAAMC,EAAO/4C,IAExB,OAAOuR,EAEX,SAASilC,GAAY9G,GACjB,GAAIA,EAAMpB,GACN,MAAM,IAAIpuC,MAAM,2BACpB,OAAOwvC,EAAInkC,SAAS,IAAIoP,SAAS,GAAI,KAKzC,SAAS09B,GAAoB3I,GACzB,MAAMn+B,EAAMm+B,EAAInkC,SAAS,IACzB,OAAoB,EAAbgG,EAAItR,OAAa,IAAIsR,IAAQA,EAExC,SAASmmC,GAAYnmC,GACjB,GAAmB,iBAARA,EACP,MAAM,IAAInQ,UAAU,4CAA8CmQ,GAEtE,OAAOzK,OAAO,KAAKyK,KAEvB,SAASylC,GAAWzlC,GAChB,GAAmB,iBAARA,EACP,MAAM,IAAInQ,UAAU,2CAA6CmQ,GAErE,GAAIA,EAAItR,OAAS,EACb,MAAM,IAAIC,MAAM,4CAA8CqR,EAAItR,QACtE,MAAM+4C,EAAQ,IAAI/wC,WAAWsJ,EAAItR,OAAS,GAC1C,IAAK,IAAID,EAAI,EAAGA,EAAIg5C,EAAM/4C,OAAQD,IAAK,CACnC,MAAM4oB,EAAQ,EAAJ5oB,EACJi5C,EAAU1nC,EAAIjH,MAAMse,EAAGA,EAAI,GAC3BswB,EAAO3zC,OAAO8C,SAAS4wC,EAAS,IACtC,GAAI1zC,OAAOsC,MAAMqxC,IAASA,EAAO,EAC7B,MAAM,IAAIh5C,MAAM,yBACpB84C,EAAMh5C,GAAKk5C,EAEf,OAAOF,EAEX,SAAShF,GAAc59B,GACnB,OAAOshC,GAAYF,GAAWphC,IAElC,SAASq/B,GAAYlkC,GACjB,OAAOA,aAAetJ,WAAaA,WAAW2E,KAAK2E,GAAOylC,GAAWzlC,GAEzE,SAASigC,GAAgB9B,GACrB,GAAmB,iBAARA,GAAoBnqC,OAAO2W,cAAcwzB,IAAQA,EAAM,EAC9D,OAAO5oC,OAAO4oC,GAClB,GAAmB,iBAARA,GAAoBoI,GAAmBpI,GAC9C,OAAOA,EACX,MAAM,IAAItuC,UAAU,uDAExB,SAAS0tC,GAAIr7B,EAAGC,EAAI66B,GAAMC,GACtB,MAAMrmC,EAASsL,EAAIC,EACnB,OAAOvL,GAAUggB,GAAMhgB,EAASuL,EAAIvL,EAExC,SAASwsC,GAAKjsB,EAAGywB,GACb,MAAM3K,EAAEA,GAAMD,GACd,IAAIhuB,EAAMmI,EACV,KAAOywB,KAAUhxB,IACb5H,GAAOA,EACPA,GAAOiuB,EAEX,OAAOjuB,EAyBX,SAASivB,GAAO4J,EAAQC,EAAS9K,GAAMC,GACnC,GAAI4K,IAAWjxB,IAAOkxB,GAAUlxB,GAC5B,MAAM,IAAIjoB,MAAM,6CAA6Ck5C,SAAcC,KAE/E,IAAI5lC,EAAIq7B,GAAIsK,EAAQC,GAChB3lC,EAAI2lC,EACJ3wB,EAAIP,GAAcpJ,EAAIqJ,GAC1B,KAAO3U,IAAM0U,IAAK,CACd,MACM2I,EAAIpd,EAAID,EACRsxB,EAAIrc,EAAI3J,GAFJrL,EAAID,GAIdC,EAAID,EAAGA,EAAIqd,EAAGpI,EAAI3J,EAAUA,EAAIgmB,EAGpC,GADYrxB,IACA0U,GACR,MAAM,IAAIloB,MAAM,0BACpB,OAAO4uC,GAAIpmB,EAAG2wB,GAmBlB,MAAMC,GAAa,CAAC7lC,EAAGC,KAAOD,EAAIC,EAAI2U,IAAO3U,EACvC6lC,GAAYlxB,IAAOvhB,OAAO,KAChC,SAASgrC,GAAgB1yC,GACrB,MAAM6c,EAAEA,GAAMsyB,GACRiL,EAAK1yC,OAAO,sCACZ2yC,GAAMrxB,GAAMthB,OAAO,sCACnB4yC,EAAK5yC,OAAO,uCACZ0tC,EAAKgF,EACLG,EAAKL,GAAW9E,EAAKp1C,EAAG6c,GACxBie,EAAKof,IAAYG,EAAKr6C,EAAG6c,GAC/B,IAAI01B,EAAK7C,GAAI1vC,EAAIu6C,EAAKH,EAAKtf,EAAKwf,EAAIz9B,GAChC41B,EAAK/C,IAAK6K,EAAKF,EAAKvf,EAAKsa,EAAIv4B,GACjC,MAAMy1B,EAAQC,EAAK4H,GACb3H,EAAQC,EAAK0H,GAKnB,GAJI7H,IACAC,EAAK11B,EAAI01B,GACTC,IACAC,EAAK51B,EAAI41B,GACTF,EAAK4H,IAAa1H,EAAK0H,GACvB,MAAM,IAAIr5C,MAAM,2CAA6Cd,GAEjE,MAAO,CAAEsyC,MAAAA,EAAOC,GAAAA,EAAIC,MAAAA,EAAOC,GAAAA,GAa/B,MAAM+H,GACFj4C,cACIZ,KAAKvB,EAAI,IAAIyI,WAAW,IAAIgP,KAAK,GACjClW,KAAK3B,EAAI,IAAI6I,WAAW,IAAIgP,KAAK,GACjClW,KAAK84C,QAAU,EAEnB77B,QAAQ3d,GACJ,OAAOy5C,GAAMC,WAAWh5C,KAAK3B,KAAMiB,GAEvC25C,YAAY35C,GACR,GAAoC,mBAAzBy5C,GAAMG,eACb,MAAM,IAAI/5C,MAAM,yDACpB,MAAMqgB,EAAMu5B,GAAMG,eAAel5C,KAAK3B,KAAMiB,GAC5C,GAAIkgB,aAAethB,QACf,MAAM,IAAIiB,MAAM,uDACpB,OAAOqgB,EAEX25B,OACI,GAAIn5C,KAAK84C,SAAW,IAChB,MAAM,IAAI35C,MAAM,qDAEpBa,KAAK84C,SAAW,EAEpBj7C,aAAau7C,EAAO,IAAIlyC,YACpBlH,KAAK3B,QAAU2B,KAAKid,KAAKjd,KAAKvB,EAAGyI,WAAW2E,KAAK,CAAC,IAAQutC,GAC1Dp5C,KAAKvB,QAAUuB,KAAKid,KAAKjd,KAAKvB,GACV,IAAhB26C,EAAKl6C,SAETc,KAAK3B,QAAU2B,KAAKid,KAAKjd,KAAKvB,EAAGyI,WAAW2E,KAAK,CAAC,IAAQutC,GAC1Dp5C,KAAKvB,QAAUuB,KAAKid,KAAKjd,KAAKvB,IAElC46C,WAAWD,EAAO,IAAIlyC,YAClBlH,KAAK3B,EAAI2B,KAAKi5C,SAASj5C,KAAKvB,EAAGyI,WAAW2E,KAAK,CAAC,IAAQutC,GACxDp5C,KAAKvB,EAAIuB,KAAKi5C,SAASj5C,KAAKvB,GACR,IAAhB26C,EAAKl6C,SAETc,KAAK3B,EAAI2B,KAAKi5C,SAASj5C,KAAKvB,EAAGyI,WAAW2E,KAAK,CAAC,IAAQutC,GACxDp5C,KAAKvB,EAAIuB,KAAKi5C,SAASj5C,KAAKvB,IAEhCZ,iBAGI,OAFAmC,KAAKm5C,OACLn5C,KAAKvB,QAAUuB,KAAKid,KAAKjd,KAAKvB,GACvBuB,KAAKvB,EAEhB66C,eAGI,OAFAt5C,KAAKm5C,OACLn5C,KAAKvB,EAAIuB,KAAKi5C,SAASj5C,KAAKvB,GACrBuB,KAAKvB,GAGpB,SAASs4C,GAAmBpI,GACxB,OAAOvnB,GAAMunB,GAAOA,EAAMnB,GAAMtyB,EAEpC,SAASg4B,GAAoBvE,GACzB,OAAOvnB,GAAMunB,GAAOA,EAAMnB,GAAMC,EAEpC,SAAS8L,GAASC,EAAQxV,EAAGvuB,GACzB,MAAMpX,EAAI40C,GAAcuG,GACxB,IAAKzC,GAAmB14C,GACpB,OACJ,MAAM6c,EAAEA,GAAMsyB,GACRiM,EAAItL,GAAMqD,KAAKY,SAAS/zC,GACxB0xB,EAAIge,GAAI0L,EAAE9xB,EAAGzM,GACnB,GAAI6U,IAAM3I,GACN,OACJ,MAAM9F,EAAIysB,GAAIU,GAAOpwC,EAAG6c,GAAK6yB,GAAI/J,EAAIvuB,EAAIsa,EAAG7U,GAAIA,GAChD,GAAIoG,IAAM8F,GACN,OACJ,MAAM+lB,EAAM,IAAIX,GAAUzc,EAAGzO,GAE7B,MAAO,CAAE6rB,IAAAA,EAAK8H,UADIwE,EAAE9xB,IAAMwlB,EAAIpd,EAAI,EAAI,GAAKvrB,OAAOi1C,EAAE7xB,EAAIP,KAG5D,SAAS0tB,GAAoBv1C,GACzB,IAAImvC,EACJ,GAAmB,iBAARnvC,EACPmvC,EAAMnvC,OAEL,GAAmB,iBAARA,GAAoBgF,OAAO2W,cAAc3b,IAAQA,EAAM,EACnEmvC,EAAM5oC,OAAOvG,QAEZ,GAAmB,iBAARA,EAAkB,CAC9B,GAAmB,KAAfA,EAAIN,OACJ,MAAM,IAAIC,MAAM,oCACpBwvC,EAAMgI,GAAYn3C,OAEjB,CAAA,IAAIk3C,GAASl3C,GAMd,MAAM,IAAIa,UAAU,8BALpB,GAAmB,KAAfb,EAAIN,OACJ,MAAM,IAAIC,MAAM,oCACpBwvC,EAAMsE,GAAczzC,GAKxB,IAAKu3C,GAAmBpI,GACpB,MAAM,IAAIxvC,MAAM,qCACpB,OAAOwvC,EA6BX,SAAS+K,GAAMniC,GACX,MAAM4B,EAAMu9B,GAASn/B,GACfsD,EAAsB,iBAATtD,EACboH,GAAOxF,GAAO0B,IAAQtD,EAAKrY,OACjC,OAAIia,EACe,KAARwF,GAAsB,KAARA,EACrB9D,EACe,KAAR8D,GAAsB,MAARA,EACrBpH,aAAgB42B,GAIjB,SAASwL,GAAgBC,EAAUC,EAAS7D,GAAe,GAC9D,GAAI0D,GAAME,GACN,MAAM,IAAIv5C,UAAU,kDACxB,IAAKq5C,GAAMG,GACP,MAAM,IAAIx5C,UAAU,kDACxB,MAAMsS,GA5CkBmnC,EA4CKD,aA3CJ1L,IACrB2L,EAAUrF,iBACHqF,GAGA3L,GAAMqH,QAAQsE,GAN7B,IAA4BA,EA8CxB,OADAnnC,EAAE8hC,iBACK9hC,EAAEy/B,SAAS2C,GAAoB6E,IAAW7D,WAAWC,GAEhE,SAAS+D,GAAS1kC,GAEd,OAAO49B,GADO59B,EAAMnW,OAAS,GAAKmW,EAAM9L,MAAM,EAAG,IAAM8L,GAG3D,SAAS2kC,GAAY3kC,GACjB,MAAM4kC,EAAKF,GAAS1kC,GACd6kC,EAAKnM,GAAIkM,EAAIzM,GAAMtyB,GACzB,OAAOi/B,GAAWD,EAAK9yB,GAAM6yB,EAAKC,GAEtC,SAASC,GAAWxL,GAChB,GAAmB,iBAARA,EACP,MAAM,IAAIxvC,MAAM,mBAEpB,OAAO82C,GADKR,GAAY9G,IAwC5B,SAASyL,GAASpF,EAASqF,EAASh9B,EAAO,IACvC,MAAM+7B,KAAEA,EAAIpV,EAAEA,EAACvuB,EAAEA,GAtCrB,SAAqBu/B,EAASF,EAAYwF,GACtC,GAAe,MAAXtF,EACA,MAAM,IAAI71C,MAAM,2CAA2C61C,MAC/D,MAAM5pB,EAAKspB,GAAYM,GACjBv/B,EAAIs/B,GAAoBD,GACxByF,EAAW,CAACJ,GAAW1kC,GAAIukC,GAAY5uB,IAC7C,GAAoB,MAAhBkvB,EAAsB,EACD,IAAjBA,IACAA,EAAevB,GAAMvrB,YAAY,KACrC,MAAMxnB,EAAI0uC,GAAY4F,GACtB,GAAiB,KAAbt0C,EAAE9G,OACF,MAAM,IAAIC,MAAM,yCACpBo7C,EAAS33C,KAAKoD,GAIlB,MAAO,CAAEozC,KAFIxB,MAAe2C,GAEbvW,EADL+V,GAAS3uB,GACD3V,EAAAA,GAsBK+kC,CAAYxF,EAASqF,EAASh9B,EAAKi9B,cAC1D,IAAInN,EACJ,MAAMsN,EAAO,IAAI5B,GAEjB,IADA4B,EAAKpB,WAAWD,KACPjM,EAAMoM,GAASkB,EAAKnB,eAAgBtV,EAAGvuB,KAC5CglC,EAAKpB,aACT,OA1BJ,SAAqBqB,EAAQr9B,GACzB,IAAI8vB,IAAEA,EAAG8H,SAAEA,GAAayF,EACxB,MAAMC,UAAEA,EAASC,IAAEA,EAAGC,UAAEA,GAAc58C,OAAO8N,OAAO,CAAE4uC,WAAW,EAAMC,KAAK,GAAQv9B,GAChFs9B,GAAaxN,EAAI6J,aACjB7J,EAAMA,EAAI+J,aACVjC,GAAY,GAEhB,MAAMxiB,EAASmoB,EAAMzN,EAAIgK,gBAAkBhK,EAAIuK,oBAC/C,OAAOmD,EAAY,CAACpoB,EAAQwiB,GAAYxiB,EAkBjCqoB,CAAY3N,EAAK9vB,GAyI5B8wB,GAAMqD,KAAKuB,eAAe,GAC1B,MAAM9sB,GAAS,CACX80B,KAt+B4Br7C,UAu+B5Bs7C,IAAqB,iBAATn1B,MAAqB,WAAYA,KAAOA,KAAKI,YAASvmB,GAEzDq5C,GAAQ,CACjBkC,kBAAkBnG,GACd,IAEI,OADAC,GAAoBD,IACb,EAEX,MAAOxzC,GACH,OAAO,IAGf45C,iBAAmB7/B,IAEf,IADAA,EAAOq5B,GAAYr5B,IACVnc,OAAS,IAAMmc,EAAKnc,OAAS,KAClC,MAAM,IAAIC,MAAM,yDACpB,MAAMwvC,EAAMZ,GAAIkF,GAAc53B,GAAOmyB,GAAMtyB,GAC3C,GAAIyzB,IAAQvnB,IAAOunB,IAAQtnB,GACvB,MAAM,IAAIloB,MAAM,uBACpB,OAhgBR,SAAkBwvC,GACd,OAAOsH,GAAWR,GAAY9G,IA+fnBwM,CAASxM,IAEpBnhB,YAAa,CAAC4tB,EAAc,MACxB,GAAIn1B,GAAO+0B,IACP,OAAO/0B,GAAO+0B,IAAI3tB,gBAAgB,IAAInmB,WAAWk0C,IAOjD,MAAM,IAAIj8C,MAAM,sDAGxBk8C,iBAAkB,IACPtC,GAAMmC,iBAAiBnC,GAAMvrB,YAAY,KAEpDipB,WAAAA,GACA1I,IAAAA,GACAjtB,OAAQjjB,MAAO6F,IACX,GAAIuiB,GAAO+0B,IAAK,CACZ,MAAMllC,QAAemQ,GAAO+0B,IAAIM,OAAOn/B,OAAO,UAAWzY,EAAQoS,QACjE,OAAO,IAAI5O,WAAW4O,GAOtB,MAAM,IAAI3W,MAAM,iDAGxB65C,WAAYn7C,MAAO2B,KAAQ+7C,KACvB,GAAIt1B,GAAO+0B,IAAK,CACZ,MAAMQ,QAAav1B,GAAO+0B,IAAIM,OAAOG,UAAU,MAAOj8C,EAAK,CAAEuD,KAAM,OAAQsY,KAAM,CAAEtY,KAAM,aAAe,EAAO,CAAC,SAC1GW,EAAUk0C,MAAe2D,GACzBzlC,QAAemQ,GAAO+0B,IAAIM,OAAOI,KAAK,OAAQF,EAAM93C,GAC1D,OAAO,IAAIwD,WAAW4O,GAStB,MAAM,IAAI3W,MAAM,sDAGxBw8C,gBAAYj8C,EACZw5C,oBAAgBx5C,EAChBk8C,WAAW/J,EAAa,EAAGQ,EAAQlE,GAAMqD,MACrC,MAAMU,EAASG,IAAUlE,GAAMqD,KAAOa,EAAQ,IAAIlE,GAAMkE,EAAM1qB,EAAG0qB,EAAMzqB,GAGvE,OAFAsqB,EAAOa,eAAelB,GACtBK,EAAOE,SAAS/E,IACT6E,ICljCf,IAWI2J,GAXA97C,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAUxF67C,GAAgB5C,eAAiB,SAAU15C,KAAQ+7C,GAC/C,OAAO3mC,GAAS+R,GAAY,SAAUnnB,EAAK+V,GAAOgmC,MAE/C,MAAMQ,GACTn7C,YAAYk0C,GACR+G,GAAuBr7C,IAAIR,UAAM,GACjC2H,GAAOvD,eAA2C,KAA3BsR,GAAWo/B,GAAqB,6BAA8B,aAAc,cACnG/0C,GAAuBC,KAAM67C,GAAwBzmC,GAAQ0/B,GAAa,KAE1EA,iBAAe,OAAOr0C,GAAuBT,KAAM67C,GAAwB,KAC3E/B,gBAAc,OAAOiC,GAAWC,iBAAiBv7C,GAAuBT,KAAM67C,GAAwB,MACtGI,0BAAwB,OAAOF,GAAWC,iBAAiBv7C,GAAuBT,KAAM67C,GAAwB,MAAM,GAC1HH,KAAKv/B,GACDxU,GAAOvD,eAAuC,KAAvBsR,GAAWyG,GAAiB,wBAAyB,SAAUA,GACtF,MAAO+/B,EAAQC,GAASC,GAAmBxnC,GAASuH,GAASvH,GAASnU,GAAuBT,KAAM67C,GAAwB,MAAO,CAC9HhB,WAAW,EACXF,WAAW,IAETxN,EAAMkP,GAAoB7G,QAAQ0G,GACxC,OAAO1P,GAAU3gC,KAAK,CAClBkkB,EAAG3f,GAAM,KAAO+8B,EAAIpd,EAAEvlB,SAAS,IAAK,IACpC8W,EAAGlR,GAAM,KAAO+8B,EAAI7rB,EAAE9W,SAAS,IAAK,IACpC/L,EAAI09C,EAAQ,GAAO,KACpB5zC,SAEP+zC,mBAAmB7pC,GACf,MAAM8pC,EAASR,GAAWC,iBAAiBvpC,GAC3C,OAAO2C,GAAQonC,GAA0B5nC,GAASnU,GAAuBT,KAAM67C,GAAwB,MAAOU,IAElHh2C,wBAAwB/G,EAAKi9C,GACzB,IAAIpnC,EAAQ1N,GAAO/B,SAASpG,EAAK,OACjC,GAAqB,KAAjB6V,EAAMnW,OAAe,CAErB,OAAOkW,GDktBZ,SAAsB0/B,EAAYkB,GAAe,GACpD,OAAO7H,GAAMuO,eAAe5H,GAAYiB,WAAWC,GCptB5B2G,CAAuBtnC,IAASonC,IAGnD,GAAqB,KAAjBpnC,EAAMnW,OAAe,CACrB,MAAM09C,EAAM,IAAI11C,WAAW,IAC3B01C,EAAI,GAAK,EACTA,EAAIp8C,IAAI6U,EAAO,GACfA,EAAQunC,EAGZ,OAAOxnC,GADOynC,GAAgBrH,QAAQngC,GACjB0gC,WAAW0G,IAEpCl2C,wBAAwB4V,EAAQ+jB,GAC5B,MAAMiN,EAAMX,GAAU3gC,KAAKq0B,GACrB0a,EAAMyB,GAAoBhH,YAAYzgC,GAASW,GAAO,CAAC43B,EAAIpd,EAAGod,EAAI7rB,MAAM61B,gBACxEoF,EDusBP,SAA0BvH,EAAS9U,EAAW+U,EAAUe,GAAe,GAC1E,OAAO7H,GAAM2O,cAAc9H,EAAS9U,EAAW+U,GAAUc,WAAWC,GCxsBjD+G,CAA2BnoC,GAASuH,GAASy+B,EAAKzN,EAAIN,SACrE,OAAc,MAAV0P,EACOnnC,GAAQmnC,GAEZ50C,GAAO3D,mBAAmB,+BAAgC,YAAak8B,GAElF35B,kBAAkBy2C,EAAIC,EAAIR,GACtB,MAAMS,EAAOL,GAAgBrH,QAAQuG,GAAWC,iBAAiBgB,GAAIz1C,UAAU,IACzE41C,EAAON,GAAgBrH,QAAQuG,GAAWC,iBAAiBiB,GAAI11C,UAAU,IAC/E,MAAO,KAAO21C,EAAK15C,IAAI25C,GAAM/sC,QAAQqsC,ICzE7C,SAASW,GAAa/R,EAAMgS,GACxB,MAAO,CACHhrB,QAASW,GAAWqY,GACpBgS,aAAcA,GAAe,IAAIj/C,KAAI,CAACk/C,EAAY5+C,KAC9C,GAA+B,KAA3BgX,GAAW4nC,GAEX,MAAM,IAAIn+C,MAAM,IAEpB,OAAOm+C,EAAW52C,kBAIvB,SAAS62C,GAAcx/C,GAC1B,GAAIyP,MAAMN,QAAQnP,GACd,OAAOA,EAAMK,KAAI,CAACoC,EAAK9B,KACnB,GAAI8O,MAAMN,QAAQ1M,GAAM,CACpB,GAAIA,EAAItB,OAAS,EAEb,MAAM,IAAIC,MAAM,IAEpB,OAAOi+C,GAAa58C,EAAI,GAAIA,EAAI,IAEpC,OAAO48C,GAAa58C,EAAI6xB,QAAS7xB,EAAI68C,gBAG7C,MAAMj2C,EAASnJ,OAAOD,KAAKD,GAAOK,KAAKitC,IACnC,MAAMgS,EAAct/C,EAAMstC,GAAM9sC,QAAO,CAACC,EAAO8+C,KAC3C9+C,EAAM8+C,IAAc,EACb9+C,IACR,IACH,OAAO4+C,GAAa/R,EAAMptC,OAAOD,KAAKq/C,GAAa/e,WAGvD,OADAl3B,EAAOk3B,MAAK,CAAC5rB,EAAGC,IAAOD,EAAE2f,QAAQmrB,cAAc7qC,EAAE0f,WAC1CjrB,ED2CXy0C,GAAyB,IAAIp6C,QE9EtB,MCEMkG,GAAS,IAAIrE,EDFH,4CEAvB,IAWIm6C,GAXA19C,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAYxF,MAAM+P,GAAOjK,OAAO,GACpB,SAAS23C,GAAaxtC,EAAQnN,GAC1B,MAAMhF,EAAQ4J,GAAO1B,UAAUiK,EAAQ,SACjC9I,EAASmJ,GAAQxS,GAIvB,OAHIqJ,EAAOlI,OAAS,IAChByI,GAAO3D,mBAAmB,kBAAmB,MAAMjB,IAAQhF,GAExDqJ,EAEX,SAASu2C,GAAiB5/C,GACtB,OAAOw/C,GAAcx/C,GAAOK,KAAKoC,GAAQ,CAACA,EAAI6xB,QAAS7xB,EAAI68C,eAK/D,SAASO,GAAiBzpB,EAAIgZ,GAC1B,MAAM1P,EAAS,CACXigB,GAAavpB,EAAGE,OAAS,EAAG,SAC5BqpB,GAAavpB,EAAG0pB,UAAY,EAAG,YAC/BH,GAAavpB,EAAG2pB,UAAY,EAAG,YACpB,MAAT3pB,EAAGroB,GAAcknB,GAAWmB,EAAGroB,IAAM,KACvC4xC,GAAavpB,EAAGp2B,OAAS,EAAG,SAC3Bo2B,EAAGtf,MAAQ,MAEhB,IAAIkoB,EAAU/sB,GACd,GAAkB,MAAdmkB,EAAG4I,QAEHA,EAAUp1B,GAAO1B,UAAUkuB,EAAG4I,QAAS,cAGnCoQ,GAAuB,MAAhBA,EAAIV,UAAoBU,EAAIT,gBAAkB3P,GACrDp1B,GAAO3D,mBAAmB,4BAA6B,MAAOmpC,QAGjE,GAAIA,EAAK,CAEV,MAAM4Q,EAAS5Q,EAAIT,cACL,MAAVqR,IACAhhB,EAAUghB,GAIlB,IAAK5Q,EAOD,OALIpQ,IAAY/sB,KACZytB,EAAO76B,KAAK2N,GAAQwsB,IACpBU,EAAO76B,KAAK,MACZ66B,EAAO76B,KAAK,OAET4wB,GAAUiK,GAGrB,IAAIh/B,EAAIsH,OAAO,GAAKonC,EAAIN,SAUxB,OATI9P,IAAY/sB,GACZvR,EAAI+tC,GAAUwR,YAAYjhB,EAASoQ,EAAI1uC,GAElCsH,OAAOonC,EAAI1uC,KAAOA,GACvBkJ,GAAO3D,mBAAmB,4BAA6B,MAAOmpC,GAElE1P,EAAO76B,KAAK2N,GAAQ9R,IACpBg/B,EAAO76B,KAAK2N,GAAQ48B,EAAIpd,IACxB0N,EAAO76B,KAAK2N,GAAQ48B,EAAI7rB,IACjBkS,GAAUiK,GAKrB,SAASwgB,GAAkB9pB,EAAIgZ,GAS3B,MAAM1P,EAAS,CACXigB,GAAavpB,EAAG4I,SAAW,EAAG,WAC9B2gB,GAAavpB,EAAGE,OAAS,EAAG,SAC5BqpB,GAAavpB,EAAG+pB,sBAAwB,EAAG,wBAC3CR,GAAavpB,EAAGgqB,cAAgB,EAAG,gBACnCT,GAAavpB,EAAG2pB,UAAY,EAAG,YACpB,MAAT3pB,EAAGroB,GAAcknB,GAAWmB,EAAGroB,IAAM,KACvC4xC,GAAavpB,EAAGp2B,OAAS,EAAG,SAC3Bo2B,EAAGtf,MAAQ,KACX8oC,GAAiBxpB,EAAGiqB,YAAc,KAOvC,OALIjR,IACA1P,EAAO76B,KAAK86C,GAAavQ,EAAIN,QAAS,YACtCpP,EAAO76B,KAAK2N,GAAQ48B,EAAIpd,IACxB0N,EAAO76B,KAAK2N,GAAQ48B,EAAI7rB,KAErB/L,GAAO,CAAC,OAAQie,GAAUiK,KAKrC,SAAS4gB,GAAkBlqB,EAAIgZ,GAC3B,MAAM1P,EAAS,CACXigB,GAAavpB,EAAG4I,SAAW,EAAG,WAC9B2gB,GAAavpB,EAAGE,OAAS,EAAG,SAC5BqpB,GAAavpB,EAAG0pB,UAAY,EAAG,YAC/BH,GAAavpB,EAAG2pB,UAAY,EAAG,YACpB,MAAT3pB,EAAGroB,GAAcknB,GAAWmB,EAAGroB,IAAM,KACvC4xC,GAAavpB,EAAGp2B,OAAS,EAAG,SAC3Bo2B,EAAGtf,MAAQ,KACX8oC,GAAiBxpB,EAAGiqB,YAAc,KAOvC,OALIjR,IACA1P,EAAO76B,KAAK86C,GAAavQ,EAAIN,QAAS,kBACtCpP,EAAO76B,KAAK2N,GAAQ48B,EAAIpd,IACxB0N,EAAO76B,KAAK2N,GAAQ48B,EAAI7rB,KAErB/L,GAAO,CAAC,OAAQie,GAAUiK,KAE9B,MAAM6gB,GACT19C,cACI68C,GAAmBj9C,IAAIR,UAAM,GAC7BD,GAAuBC,KAAMy9C,GAAoB,CAC7C7+C,KAAM,KACNkN,GAAI,KACJuoB,MAAO,EACPypB,SAAU/3C,OAAO,GACjB83C,SAAU,KACVK,qBAAsB,KACtBC,aAAc,KACdtpC,KAAM,KACN9W,MAAOgI,OAAO,GACdg3B,QAASh3B,OAAO,GAChBonC,IAAK,KACLiR,WAAY,MACb,KAGHx/C,WAAS,OAAOqC,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,QAChFc,eACA,OAAQv+C,KAAKpB,MACT,KAAK,EAAG,MAAO,SACf,KAAK,EAAG,MAAO,WACf,KAAK,EAAG,MAAO,WAEnB,OAAO,KAEPA,SAAKb,GACL,OAAQA,GACJ,KAAK,KACDoD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,OAAQ,MACxE,MACJ,KAAK,EACL,IAAK,SACDt8C,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,OAAQ,GACxE,MACJ,KAAK,EACL,IAAK,SACL,IAAK,WACDt8C,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,OAAQ,GACxE,MACJ,KAAK,EACL,IAAK,SACL,IAAK,WACDt8C,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,OAAQ,GACxE,MACJ,QACI,MAAM,IAAIt+C,MAAM,iCAoBxB2M,SAAO,OAAO7K,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,MAC9E3xC,OAAG/N,GACHoD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,KAAgB,MAAT1/C,EAAiB,KAAOi1B,GAAWj1B,IAE1Gs2B,YAAU,OAAOpzB,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,SACjFppB,UAAMt2B,GAASoD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,QAAS91C,GAAO7B,UAAU/H,EAAO,UAChH+/C,eAAa,OAAO78C,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,YACpFK,aAAS//C,GAASoD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,WAAY91C,GAAO1B,UAAUlI,IAC/G8/C,eAAa,OAAO58C,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,YACpFI,aAAS9/C,GACToD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,WAAsB,MAAT1/C,EAAiB,KAAO4J,GAAO1B,UAAUlI,IAEtHmgD,2BAAyB,OAAOj9C,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,wBAChGS,yBAAqBngD,GACrBoD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,uBAAkC,MAAT1/C,EAAiB,KAAO4J,GAAO1B,UAAUlI,IAElIogD,mBAAiB,OAAOl9C,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,gBACxFU,iBAAapgD,GACboD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,eAA0B,MAAT1/C,EAAiB,KAAO4J,GAAO1B,UAAUlI,IAE1H8W,WAAS,OAAO5T,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,QAChF5oC,SAAK9W,GAASoD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,OAAQroC,GAAQrX,IAC9FA,YAAU,OAAOkD,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,SACjF1/C,UAAMA,GACNoD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,QAAS91C,GAAO1B,UAAUlI,IAE1Fg/B,cAAY,OAAO97B,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,WACnF1gB,YAAQh/B,GAASoD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,UAAW91C,GAAO1B,UAAUlI,IAC7GmiC,gBAAc,OAAOj/B,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,QAAU,KAC/Fvd,cAAUniC,GACVoD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,MAAiB,MAAT1/C,EAAiB,KAAOyuC,GAAU3gC,KAAK9N,IAE/GqgD,iBAAe,OAAOn9C,EAASR,GAAuBT,KAAMy9C,GAAoB,KAAM,eAAiB,KACvGW,eAAWrgD,GACXoD,EAASV,GAAuBT,KAAMy9C,GAAoB,KAAM,aAAwB,MAAT1/C,EAAiB,KAAOw/C,GAAcx/C,IAErHsd,WACA,GAAsB,MAAlBrb,KAAKkgC,UACL,MAAM,IAAI/gC,MAAM,mEAEpB,OAAO+qB,GAAUlqB,KAAK8sC,YAEtB0R,mBACA,OAAOt0B,GAAUlqB,KAAKy+C,oBAEtB5yC,WACA,OAAsB,MAAlB7L,KAAKkgC,UACE,KAGJ,GAEPwe,oBACA,OAAsB,MAAlB1+C,KAAKkgC,UACE,KAGJ,GAEXye,WACI,OAAyB,MAAlB3+C,KAAKkgC,UAEZ4M,iBACA,GAAsB,MAAlB9sC,KAAKkgC,UACL,MAAM,IAAI/gC,MAAM,8EAEpB,MAAMN,EAAQmB,KAAK4+C,aACnB,GAAqB,IAAjB//C,EAAMK,OACN,MAAM,IAAIC,MAAM,4DAEpB,OAAQN,EAAM,IACV,KAAK,EACD,OAAO++C,GAAiB59C,KAAMA,KAAKkgC,WACvC,KAAK,EACD,OAAOme,GAAkBr+C,KAAMA,KAAKkgC,WACxC,KAAK,EACD,OAAO+d,GAAkBj+C,KAAMA,KAAKkgC,WAE5C,MAAM,IAAI/gC,MAAM,oBAEhBs/C,yBACA,GAAsB,MAAlBz+C,KAAKkgC,UACL,MAAM,IAAI/gC,MAAM,8EAEpB,MAAMN,EAAQmB,KAAK4+C,aACnB,GAAqB,IAAjB//C,EAAMK,OACN,MAAM,IAAIC,MAAM,4DAEpB,OAAQN,EAAM,IACV,KAAK,EACD,OAAO++C,GAAiB59C,MAC5B,KAAK,EACD,OAAOq+C,GAAkBr+C,MAC7B,KAAK,EACD,OAAOi+C,GAAkBj+C,MAEjC,MAAM,IAAIb,MAAM,oBAGpBy/C,aAEI,MAAMC,EAA+B,MAAjB7+C,KAAK69C,SACnBiB,EAA+B,MAArB9+C,KAAKm+C,cAAqD,MAA7Bn+C,KAAKk+C,qBAC5Ca,EAAoC,MAAnB/+C,KAAKo+C,WAI5B,GAAMp+C,KAAKm+C,cAAkBn+C,KAAKk+C,sBAC1Bl+C,KAAKm+C,aAAen+C,KAAKk+C,qBACzB,MAAM,IAAI/+C,MAAM,0CAMxB,IAAmB,IAAda,KAAKpB,MAA4B,IAAdoB,KAAKpB,OAAekgD,EACxC,MAAM,IAAI3/C,MAAM,qEAEpB,GAAkB,IAAda,KAAKpB,MAAcmgD,EACnB,MAAM,IAAI5/C,MAAM,6CAEpB,MAAMN,EAAQ,GA0Bd,OAxBiB,MAAbmB,KAAKpB,KACLC,EAAM+D,KAAK5C,KAAKpB,MAGZkgD,EACAjgD,EAAM+D,KAAK,GAENi8C,GACLhgD,EAAM+D,KAAK,GACNm8C,GACDlgD,EAAM+D,KAAK,IAGVm8C,GACLlgD,EAAM+D,KAAK,GACX/D,EAAM+D,KAAK,KAGX/D,EAAM+D,KAAK,GACX/D,EAAM+D,KAAK,GACX/D,EAAM+D,KAAK,IAGnB/D,EAAMy/B,OACCz/B,EAEX2K,QACI,OAAO80C,GAAYzyC,KAAK7L,MAE5BuI,SAWI,OAVI9H,GAAuBT,KAAMy9C,GAAoB,KAAKtQ,MACtD1sC,GAAuBT,KAAMy9C,GAAoB,KAAKtQ,IAAO1sC,GAAuBT,KAAMy9C,GAAoB,KAAKtQ,IAAI3jC,QAAQjB,UAE/H9H,GAAuBT,KAAMy9C,GAAoB,KAAKW,aACtD39C,GAAuBT,KAAMy9C,GAAoB,KAAKW,WAAangD,OAAOsK,OAAO9H,GAAuBT,KAAMy9C,GAAoB,KAAKW,WAAWhgD,KAAKoC,IACnJvC,OAAOsK,OAAO/H,EAAI68C,aACXp/C,OAAOsK,OAAO/H,QAG7BvC,OAAOsK,OAAO9H,GAAuBT,KAAMy9C,GAAoB,MACxDz9C,KAEXoB,WACI,OAAOnD,OAAOmD,SAASX,GAAuBT,KAAMy9C,GAAoB,MAE5El3C,YAAY4tB,GACR,GAAoB,iBAAR,EAAkB,CAC1B,MAAMb,EAAU1e,GAASuf,GACzB,GAAIb,EAAQ,IAAM,IACd,OAAOgrB,GAAYzyC,KAtVxB,IAwVC,OAAQynB,EAAQ,IACZ,KAAK,EACL,KAAK,EAAG,OAAOgrB,GAAYzyC,KAvS3C,SAAuBgJ,GACnB,MAAM,IAAI1V,MAAM,SAsS4B6/C,CAAc1rB,EAAQ/pB,MAAM,KAEhE,MAAM,IAAIpK,MAAM,gCAEpB,MAAMiI,EAAS,IAAIk3C,GAwCnB,OAvCe,MAAXnqB,EAAGv1B,OACHwI,EAAOxI,KAAOu1B,EAAGv1B,MAER,MAATu1B,EAAGroB,KACH1E,EAAO0E,GAAKqoB,EAAGroB,IAEH,MAAZqoB,EAAGE,QACHjtB,EAAOitB,MAAQF,EAAGE,OAEH,MAAfF,EAAG2pB,WACH12C,EAAO02C,SAAW3pB,EAAG2pB,UAEN,MAAf3pB,EAAG0pB,WACHz2C,EAAOy2C,SAAW1pB,EAAG0pB,UAEM,MAA3B1pB,EAAG+pB,uBACH92C,EAAO82C,qBAAuB/pB,EAAG+pB,sBAEd,MAAnB/pB,EAAGgqB,eACH/2C,EAAO+2C,aAAehqB,EAAGgqB,cAEd,MAAXhqB,EAAGtf,OACHzN,EAAOyN,KAAOsf,EAAGtf,MAEL,MAAZsf,EAAGp2B,QACHqJ,EAAOrJ,MAAQo2B,EAAGp2B,OAEJ,MAAdo2B,EAAG4I,UACH31B,EAAO21B,QAAU5I,EAAG4I,SAEJ,MAAhB5I,EAAG+L,YACH94B,EAAO84B,UAAYsM,GAAU3gC,KAAKsoB,EAAG+L,YAEpB,MAAjB/L,EAAGiqB,aACHh3C,EAAOg3C,WAAajqB,EAAGiqB,YAKpBh3C,GAGfq2C,GAAqB,IAAIh8C,QC3azB,IAWIw9C,GAAqBC,GAXrBn/C,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IASxF,SAASwX,GAAS1Z,GACd,OAAa,MAATA,EACO,KAEJA,EAEX,SAASohD,GAAOphD,GACZ,OAAa,MAATA,EACO,KAEJA,EAAMyM,WAGV,MAAM40C,GACTx+C,YAAYi9C,EAAUM,EAAcD,GAChC9+C,EAAiBY,KAAM,CACnB69C,SAAUpmC,GAASomC,GACnBM,aAAc1mC,GAAS0mC,GACvBD,qBAAsBzmC,GAASymC,KAGvCnR,SACI,MAAM8Q,SAAEA,EAAQM,aAAEA,EAAYD,qBAAEA,GAAyBl+C,KACzD,MAAO,CACHgtC,MAAO,UACP6Q,SAAUsB,GAAOtB,GACjBM,aAAcgB,GAAOhB,GACrBD,qBAAsBiB,GAAOjB,KA8ClC,MAAMmB,GACTz+C,YAAYiyB,EAAO+W,GACfqV,GAAoBz+C,IAAIR,UAAM,GACd,MAAZ4pC,IACAA,EAAW0V,IAEfv/C,GAAuBC,KAAMi/C,GAAqBhhD,OAAOsK,OAAOsqB,EAAM0sB,aAAanhD,KAAK+1B,IACpF,GAAoB,iBAAhB,GAA4BA,EAAGyV,WAAaA,EAC5C,MAAM,IAAIzqC,MAAM,qBAEpB,OAAOg1B,MACN,KAEL/0B,EAAiBY,KAAM,CACnB4pC,SAAAA,EACAvuB,KAAM5D,GAASob,EAAMxX,MACrBg9B,OAAQxlB,EAAMwlB,OACdmH,UAAW3sB,EAAM2sB,UACjBC,WAAY5sB,EAAM4sB,WAClBprB,MAAOxB,EAAMwB,MACbqrB,WAAY7sB,EAAM6sB,WAClB5B,SAAUjrB,EAAMirB,SAChB6B,QAAS9sB,EAAM8sB,QACfC,MAAO/sB,EAAM+sB,MACbC,UAAWhtB,EAAMgtB,UACjBC,cAAeroC,GAASob,EAAMitB,iBAGlCP,mBAAiB,OAAO9+C,GAAuBT,KAAMi/C,GAAqB,KAI9ElS,SACI,MAAM+S,cAAEA,EAAaJ,WAAEA,EAAUG,UAAEA,EAAS/B,SAAEA,EAAQ6B,QAAEA,EAAOtkC,KAAEA,EAAIukC,MAAEA,EAAKvrB,MAAEA,EAAKgkB,OAAEA,EAAMoH,WAAEA,EAAUD,UAAEA,EAASD,aAAEA,GAAiBv/C,KACrI,MAAO,CACHgtC,MAAO,QACP8S,cAAeX,GAAOW,GACtBJ,WAAYP,GAAOO,GACnBG,UAAAA,EACA/B,SAAUqB,GAAOrB,GACjB6B,QAASR,GAAOQ,GAChBtkC,KAAAA,EAAMukC,MAAAA,EAAOvrB,MAAAA,EAAOgkB,OAAAA,EAAQoH,WAAAA,EAAYD,UAAAA,EACxCD,aAAAA,GAGR,EAAEN,GAAsB,IAAIx9C,QAAW4K,OAAOu4B,aAC1C,IAAIlmC,EAAQ,EACZ,MAAO,CACHmmC,KAAM,IACEnmC,EAAQsB,KAAKd,OACN,CACHnB,MAAOiC,KAAKu/C,aAAa7gD,KAAUomC,MAAM,GAG1C,CAAE/mC,WAAO2B,EAAWolC,MAAM,IAIzC5lC,aAAW,OAAOc,KAAKu/C,aAAargD,OACpC6gD,WACA,OAAsB,MAAlB//C,KAAKw/C,UACE,KAEJ,IAAI/kC,KAAsB,IAAjBza,KAAKw/C,WAEzB3hD,qBAAqBa,GACjB,MAAMy1B,EAAKn0B,KAAKu/C,aAAa7gD,GAC7B,GAAU,MAANy1B,EACA,MAAM,IAAIh1B,MAAM,cAEpB,MAAoB,iBAAR,QACMa,KAAK4pC,SAASoW,eAAe7rB,GAGpCA,EAGf8rB,UAAY,QAASjgD,KAAKqb,KAC1B6kC,WAAa,QAASlgD,KAAK8/C,cAC3BK,gBACI,IAAKngD,KAAKigD,UACN,MAAM,IAAI9gD,MAAM,IAEpB,MA+OG,CAAEihD,OAAQ,aAAc/kC,MADAwX,EA9OM7yB,MA+OMqb,KAAMg9B,OAAQxlB,EAAMwlB,QADnE,IAAmCxlB,GA3O5B,MAAMwtB,GACTz/C,YAAY6G,EAAKmiC,GACG,MAAZA,IACAA,EAAW0V,IAEft/C,KAAK4pC,SAAWA,EAChB,MAAMnH,EAASxkC,OAAOsK,OAAOd,EAAIg7B,OAAOl5B,SACxCnK,EAAiBY,KAAM,CACnBsgD,gBAAiB74C,EAAI64C,gBACrBC,UAAW94C,EAAI84C,UACfC,YAAa/4C,EAAI+4C,YACjBC,QAASh5C,EAAIg5C,QACbpuB,QAAS5qB,EAAI4qB,QACbxd,KAAMpN,EAAIoN,KACV4tB,OAAAA,EACA/jC,MAAO+I,EAAI/I,MACXgiD,iBAAkBj5C,EAAIi5C,mBAM9B3T,SACI,MAAM1a,QAAEA,EAAOkuB,UAAEA,EAASC,YAAEA,EAAW3rC,KAAEA,EAAInW,MAAEA,EAAK+hD,QAAEA,EAAOhe,OAAEA,EAAM6d,gBAAEA,EAAeI,iBAAEA,GAAqB1gD,KAC7G,MAAO,CACHgtC,MAAO,MACP3a,QAAAA,EAASkuB,UAAAA,EAAWC,YAAAA,EAAa3rC,KAAAA,EAAMnW,MAAAA,EACvC+hD,QAAAA,EAAShe,OAAAA,EAAQ6d,gBAAAA,EAAiBI,iBAAAA,GAG1C7iD,iBACI,aAAcmC,KAAK4pC,SAAS+W,SAAS3gD,KAAKugD,WAE9C1iD,uBACI,aAAcmC,KAAK4pC,SAASoW,eAAehgD,KAAKsgD,iBAEpDziD,8BACI,aAAcmC,KAAK4pC,SAASgX,sBAAsB5gD,KAAKsgD,iBAE3DO,eACI,MA6MG,CAAET,OAAQ,WAAY34C,IAAK,CAC1B64C,iBAFoB74C,EA5MMzH,MA8MLsgD,gBACrBC,UAAW94C,EAAI84C,UACfC,YAAa/4C,EAAI+4C,YACjBnuB,QAAS5qB,EAAI4qB,QACbxd,KAAMpN,EAAIoN,KACV4tB,OAAQxkC,OAAOsK,OAAOd,EAAIg7B,OAAOl5B,SACjC7K,MAAO+I,EAAI/I,QARvB,IAAgC+I,GAzMzB,MAAMq5C,GACTlgD,YAAYuzB,EAAIyV,GACZsV,GAAyB1+C,IAAIR,UAAM,GACnB,MAAZ4pC,IACAA,EAAW0V,IAEfv/C,GAAuBC,KAAMk/C,GAA0BjhD,OAAOsK,OAAO4rB,EAAG4sB,KAAK3iD,KAAKqJ,IAC9E,GAAImiC,IAAaniC,EAAImiC,SAEjB,MAAM,IAAIzqC,MAAM,qBAEpB,OAAOsI,MACN,KACLrI,EAAiBY,KAAM,CACnB4pC,SAAAA,EACA99B,GAAIqoB,EAAGroB,GACPD,KAAMsoB,EAAGtoB,KACTm1C,gBAAiB7sB,EAAG6sB,gBACpB3lC,KAAM8Y,EAAG9Y,KACT3c,MAAOy1B,EAAGz1B,MACV6hD,UAAWpsB,EAAGosB,UACdC,YAAarsB,EAAGqsB,YAChBS,UAAW9sB,EAAG8sB,UACdtB,QAASxrB,EAAGwrB,QACZuB,kBAAmB/sB,EAAG+sB,kBACtBrD,SAAW1pB,EAAGgtB,mBAAqBhtB,EAAG0pB,SACtCuD,UAAWjtB,EAAGitB,UACdjb,OAAQhS,EAAGgS,OACXkb,KAAMltB,EAAGktB,OAGbN,WAAS,OAAOtgD,GAAuBT,KAAMk/C,GAA0B,KAI3EnS,SACI,MAAMjhC,GAAEA,EAAED,KAAEA,EAAIm1C,gBAAEA,EAAe3lC,KAAEA,EAAI3c,MAAEA,EAAK6hD,UAAEA,EAASC,YAAEA,EAAWS,UAAEA,EAASF,KAAEA,EAAIK,UAAEA,EAASjb,OAAEA,EAAMkb,KAAEA,GAASrhD,KACrH,MAAO,CACHgtC,MAAO,qBACPuT,UAAAA,EAAWC,YAAAA,EAAaY,UAAAA,EAAWJ,gBAAAA,EACnCE,kBAAmB/B,GAAOn/C,KAAKkhD,mBAC/Br1C,KAAAA,EACAgyC,SAAUsB,GAAOn/C,KAAK69C,UACtB8B,QAASR,GAAOn/C,KAAK2/C,SACrBtkC,KAAAA,EAAM3c,MAAAA,EAAOqiD,KAAAA,EAAME,UAAAA,EAAWI,KAAAA,EAAMlb,OAAAA,EAAQr6B,GAAAA,GAGhD5M,aAAW,OAAOc,KAAK+gD,KAAK7hD,OAChC,EAAEggD,GAA2B,IAAIz9C,QAAW4K,OAAOu4B,aAC/C,IAAIlmC,EAAQ,EACZ,MAAO,CACHmmC,KAAM,IACEnmC,EAAQsB,KAAKd,OACN,CAAEnB,MAAOiC,KAAK+gD,KAAKriD,KAAUomC,MAAM,GAEvC,CAAE/mC,WAAO2B,EAAWolC,MAAM,IAIzCwc,UACA,OAAOthD,KAAK2/C,QAAU3/C,KAAK69C,SAE/BhgD,iBACI,MAAMg1B,QAAc7yB,KAAK4pC,SAAS+W,SAAS3gD,KAAKugD,WAChD,GAAa,MAAT1tB,EACA,MAAM,IAAI1zB,MAAM,QAEpB,OAAO0zB,EAEXh1B,uBACI,MAAMs2B,QAAWn0B,KAAK4pC,SAASoW,eAAehgD,KAAKqb,MACnD,GAAU,MAAN8Y,EACA,MAAM,IAAIh1B,MAAM,QAEpB,OAAOg1B,EAEXt2B,sBACI,aAAcmC,KAAK4pC,SAAS2X,iBAAoBvhD,KAAKwgD,YAAc,EAEvEK,eACI,OAAOW,GAA+BxhD,MAE1CyhD,eAAehvC,GACX,OAAIA,IAAUA,EAAMwtC,UACTt4C,GAAO5D,WAAW,gDAAiD,wBAAyB,CAC/FY,UAAW,0BAGZ+8C,GAAiC1hD,KAAMyS,IAI/C,MAAMkvC,GACT/gD,YAAYuzB,EAAIyV,GACI,MAAZA,IACAA,EAAW0V,IAEft/C,KAAK4pC,SAAWA,EAChB5pC,KAAKwgD,YAAiC,MAAlBrsB,EAAGqsB,YAAuBrsB,EAAGqsB,YAAc,KAC/DxgD,KAAKugD,UAA6B,MAAhBpsB,EAAGosB,UAAqBpsB,EAAGosB,UAAY,KACzDvgD,KAAKqb,KAAO8Y,EAAG9Y,KACfrb,KAAKtB,MAAQy1B,EAAGz1B,MAChBsB,KAAKpB,KAAOu1B,EAAGv1B,KACfoB,KAAK6L,KAAOsoB,EAAGtoB,KACf7L,KAAK8L,GAAKqoB,EAAGroB,IAAM,KACnB9L,KAAK89C,SAAW3pB,EAAG2pB,SACnB99C,KAAKq0B,MAAQF,EAAGE,MAChBr0B,KAAK6U,KAAOsf,EAAGtf,KACf7U,KAAKjC,MAAQo2B,EAAGp2B,MAChBiC,KAAK69C,SAAW1pB,EAAG0pB,SACnB79C,KAAKk+C,qBAAmD,MAA3B/pB,EAAG+pB,qBAAgC/pB,EAAG+pB,qBAAuB,KAC1Fl+C,KAAKm+C,aAAmC,MAAnBhqB,EAAGgqB,aAAwBhqB,EAAGgqB,aAAe,KAClEn+C,KAAK+8B,QAAU5I,EAAG4I,QAClB/8B,KAAKkgC,UAAY/L,EAAG+L,UACpBlgC,KAAKo+C,WAA+B,MAAjBjqB,EAAGiqB,WAAsBjqB,EAAGiqB,WAAa,KAKhErR,SACI,MAAMyT,YAAEA,EAAWD,UAAEA,EAAS7hD,MAAEA,EAAK2c,KAAEA,EAAIzc,KAAEA,EAAIkN,GAAEA,EAAED,KAAEA,EAAIwoB,MAAEA,EAAKxf,KAAEA,EAAIqrB,UAAEA,EAASke,WAAEA,GAAep+C,KACpG,MAAO,CACHgtC,MAAO,qBACPoR,WAAAA,EAAYoC,YAAAA,EAAaD,UAAAA,EACzBxjB,QAASoiB,GAAOn/C,KAAK+8B,SACrBloB,KAAAA,EAAMhJ,KAAAA,EACNiyC,SAAUqB,GAAOn/C,KAAK89C,UACtBD,SAAUsB,GAAOn/C,KAAK69C,UACtBxiC,KAAAA,EACA8iC,aAAcgB,GAAOn/C,KAAKm+C,cAC1BD,qBAAsBiB,GAAOn/C,KAAKk+C,sBAClC7pB,MAAAA,EAAO6L,UAAAA,EAAWp0B,GAAAA,EAAIpN,MAAAA,EAAOE,KAAAA,EAC7Bb,MAAOohD,GAAOn/C,KAAKjC,QAG3BF,iBACI,IAAI2iD,EAAcxgD,KAAKwgD,YACvB,GAAmB,MAAfA,EAAqB,CACrB,MAAMrsB,QAAWn0B,KAAKggD,iBAClB7rB,IACAqsB,EAAcrsB,EAAGqsB,aAGzB,GAAmB,MAAfA,EACA,OAAO,KAEX,MAAM3tB,EAAQ7yB,KAAK4pC,SAAS+W,SAASH,GACrC,GAAa,MAAT3tB,EACA,MAAM,IAAI1zB,MAAM,QAEpB,OAAO0zB,EAEXh1B,uBACI,OAAOmC,KAAK4pC,SAASoW,eAAehgD,KAAKqb,MAE7Cxd,WAAW+jD,GACP,OAAO5hD,KAAK4pC,SAASiY,mBAAmB7hD,KAAKqb,KAAMumC,GAEvD3B,UACI,OAA0B,MAAlBjgD,KAAKugD,UAEjBuB,WACI,OAAsB,IAAd9hD,KAAKpB,KAEjBmjD,WACI,OAAsB,IAAd/hD,KAAKpB,KAEjBshD,WACI,OAAsB,IAAdlgD,KAAKpB,KAEjBiiD,eACI,OAAK7gD,KAAKigD,UAKHuB,GAA+BxhD,MAJ3B2H,GAAO5D,WAAW,wCAAyC,wBAAyB,CACvFY,UAAW,kBAKvB88C,eAAehvC,GACX,OAAKzS,KAAKigD,UAKNxtC,IAAUA,EAAMwtC,UACTt4C,GAAO5D,WAAW,gDAAiD,wBAAyB,CAC/FY,UAAW,kBAGZ+8C,GAAiC1hD,KAAMyS,GATnC9K,GAAO5D,WAAW,wCAAyC,wBAAyB,CACvFY,UAAW,mBAc3B,SAAS+8C,GAAiCvtB,EAAI1hB,GAC1C,MAAO,CAAE2tC,OAAQ,sBAAuBjsB,GAAAA,EAAI1hB,MAAAA,GAEhD,SAAS+uC,GAA+BrtB,GACpC,MAAO,CAAEisB,OAAQ,mBAAoBjsB,GAAAA,GAazC,SAAS6tB,KACL,MAAM,IAAI7iD,MAAM,oCAiER,MAACmgD,GAAgB,IA/D7B,MACIzhD,mBAAqB,OAAOmkD,KAC5BnkD,mBAAqB,OAAOmkD,KAC5BnkD,kBAAkBs2B,GAAM,OAAO6tB,KAC/BnkD,WAAWs2B,GAAM,OAAO6tB,KACxBnkD,kBAAkBkF,GAAQ,OAAOi/C,KAEjCnkD,uBAAyB,OAAOmkD,KAEhCnkD,mBAAmBw0B,EAAS4vB,GACxB,OAAOD,KAEXnkD,4BAA4Bw0B,EAAS4vB,GACjC,OAAOD,KAEXnkD,cAAcw0B,EAAS4vB,GACnB,OAAOD,KAEXnkD,mBAAmBw0B,EAAS6vB,EAAUD,GAClC,OAAOD,KAGXnkD,2BAA2BskD,GAAY,OAAOH,KAE9CnkD,eAAeukD,GACX,OAAOJ,KAEXnkD,+BAA+BukD,GAC3B,OAAOJ,KAEXnkD,qBAAqBwd,GACjB,OAAO2mC,KAEXnkD,4BAA4Bwd,GACxB,OAAO2mC,KAGXnkD,cAAckD,GACV,OAAOihD,KAGXnkD,oBAAoBw0B,GAChB,OAAO2vB,KAEXnkD,yBAAyBwd,EAAMumC,EAAUnc,GACrC,OAAOuc,KAEXnkD,mBAAmBokD,GACf,OAAOD,KAGXnkD,SAASuR,EAAOtO,GAAY,OAAOkhD,KACnCnkD,WAAWuR,EAAOtO,GAAY,OAAOkhD,KACrCnkD,WAAWuR,KAAUlJ,GAAQ,OAAO87C,KACpCnkD,oBAAoBuR,GAAS,OAAO4yC,KACpCnkD,gBAAgBuR,GAAS,OAAO4yC,KAChCnkD,UAAUuR,EAAOtO,GAAY,OAAOkhD,KACpCnkD,yBAAyBuR,GAAS,OAAO4yC,KACzCnkD,kBAAkBuR,EAAOtO,GAAY,OAAOkhD,KAC5CnkD,qBAAqBuR,EAAOtO,GAAY,OAAOkhD,OC5enD,IAWIK,GAAmBC,GAXnBviD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAuBxF,MAAMq3B,GAAiBvxB,OAAO,sEAM9B,SAASlC,GAAU9F,GACf,GAAuB,iBAAX,EACR,MAAM,IAAIoB,MAAM,kBAEpB,OAAOpB,EAEJ,MAAMwkD,GACT3hD,cACIyhD,GAAkB7hD,IAAIR,UAAM,GAC5BsiD,GAAqB9hD,IAAIR,UAAM,GAC/B,MAAMqyB,EAAUryB,KAAKqyB,QAAQpY,KAAKja,MAC5BwiD,EAAYxiD,KAAKwiD,UAAUvoC,KAAKja,MAChCiiD,EAAWjiD,KAAKiiD,SAAShoC,KAAKja,MAC9B6U,EAAO7U,KAAK6U,KAAKoF,KAAKja,MACtBqb,EAAOrb,KAAKqb,KAAKpB,KAAKja,MACtBq4C,EAASr4C,KAAKq4C,OAAOp+B,KAAKja,MAC1ByiD,EAAUziD,KAAKyiD,QAAQxoC,KAAKja,MAC5ByiC,EAASziC,KAAK0iD,QAAQrnC,GAC5Btb,GAAuBC,KAAMqiD,GAAmB,CAC5ChwB,QAAAA,EACAmwB,UAAAA,EACAP,SAAAA,EACAptC,KAAAA,EACAwG,KAAAA,EACAg9B,OAAAA,EACAoK,QAAAA,EACAhgB,OAAAA,EACA1hC,OAAQf,KAAK8C,OAAO,CAChB6/C,UAAW3iD,KAAK4iD,UAAUX,OAAUviD,GACpCmjD,QAAS7iD,KAAK4iD,UAAUX,OAAUviD,GAClC6gD,UAAWvgD,KAAK4iD,UAAUvnC,OAAM3b,GAChC2yB,QAASryB,KAAK4iD,UAAUvwB,OAAS3yB,GACjC+iC,OAAQziC,KAAK4iD,UAAUngB,OAAQ/iC,KAEnCojD,mBAAoB9iD,KAAK8C,OAAO,CAC5B+I,KAAM7L,KAAK4iD,UAAUvwB,GACrBzzB,KAAMoB,KAAK4iD,UAAUvK,GACrBvsC,GAAI9L,KAAK4iD,UAAUvwB,GACnBgC,MAAOr0B,KAAK4iD,UAAUvK,GACtByF,SAAU99C,KAAK4iD,UAAUH,GACzB5E,SAAU79C,KAAK4iD,UAAUH,GACzBtE,aAAcn+C,KAAK4iD,UAAUH,GAC7BvE,qBAAsBl+C,KAAK4iD,UAAUH,GACrC5tC,KAAM7U,KAAK4iD,UAAU/tC,GACrB9W,MAAOiC,KAAK4iD,UAAUH,KAE1BM,oBAAqB/iD,KAAK8C,OAAO,CAC7BuY,KAAMA,EACN3c,MAAO25C,EACPz5C,KAAMoB,KAAK4iD,UAAUvK,EAAQ,GAE7BkI,UAAWvgD,KAAK4iD,UAAUvnC,GAC1BmlC,YAAaxgD,KAAK4iD,UAAUvK,GAE5Btb,QAAS/8B,KAAK4iD,UAAUvK,GACxBxsC,KAAMwmB,EACNvmB,GAAI9L,KAAKqyB,QACTyrB,SAAU0E,EACV3E,SAAU79C,KAAK4iD,UAAUJ,GACzBrE,aAAcn+C,KAAK4iD,UAAUJ,GAC7BtE,qBAAsBl+C,KAAK4iD,UAAUJ,GACrCzkD,MAAOykD,EACP3tC,KAAMA,EACNwf,MAAOgkB,EACPtoB,EAAG1U,EACHiG,EAAGjG,EACH5c,EAAG45C,EACH+F,WAAYp+C,KAAK4iD,UAAU5iD,KAAKo+C,aACjC,CACC1/C,MAAO,CAAC,uBAEb,KACHqB,GAAuBC,KAAMsiD,GAAsBtiD,KAAK8C,OAAO,CAC3Du1C,OAAQA,EACRh9B,KAAMrb,KAAK4iD,UAAUvnC,EAAM,MAC3BmkC,UAAWnH,EACXoH,WAAYpkC,EACZgZ,MAAOr0B,KAAK4iD,UAAU/+C,GAAW,sBACjC67C,WAAY8C,EACZ1E,SAAU0E,EACV7C,QAAS6C,EACT5C,MAAO5/C,KAAK4iD,UAAUvwB,EAAS,8CAC/BwtB,UAAWh8C,GACXi8C,cAAe9/C,KAAK4iD,UAAUJ,KAC9B,KAGRnwB,QAAQt0B,GACJ,OAAOi1B,GAAWj1B,GAGtBssC,YAAYtsC,GAIR,OAH0B,KAAtB2X,GAAW3X,IAA6C,+BAA5B4X,GAAU5X,EAAO,EAAG,KAChD4J,GAAO3D,mBAAmB,uBAAwB,QAASjG,GAExDiC,KAAKqyB,QAAQ1c,GAAU5X,EAAO,KAGzCijD,gBAAgBjjD,GACZ,OAAOm2B,GAAiB,CACpBroB,KAAM7L,KAAKqyB,QAAQt0B,EAAM8N,MACzBwoB,MAAO1sB,GAAO7B,UAAU/H,EAAMs2B,MAAO,iBAI7C4tB,SAASlkD,GACL,GAAa,MAATA,EACA,MAAO,SAEX,OAAQA,GACJ,IAAK,WACD,MAAO,MACX,IAAK,SACL,IAAK,UACD,OAAOA,EAEf,MAAuB,iBAAX,GAAwByW,GAAYzW,IAAU2X,GAAW3X,GAAS,GACnEuX,GAASvX,GAEb4J,GAAO3D,mBAAmB,mBAAoB,QAASjG,GAGlE80B,MAAM90B,EAAO6rC,GACT,MAAM56B,EAASvO,GAAuBT,KAAMsiD,GAAsB,KAAK/hD,KAAKP,KAAMjC,GAElF,OADAiR,EAAOuwC,aAAexhD,EAAMwhD,aAAanhD,KAAKW,GAAMiB,KAAKqb,KAAKtc,KACvD,IAAIsgD,GAAMrwC,EAAQ46B,GAE7BoZ,sBAAsBjlD,EAAO6rC,GACzB,MAAM,IAAIzqC,MAGd2jD,mBAAmB/kD,EAAO6rC,GACtB,OAAOnpC,GAAuBT,KAAMqiD,GAAmB,KAAKS,mBAAmB/kD,GAEnFglD,oBAAoBhlD,EAAO6rC,GAGL,OAFlB7rC,EAAQE,OAAO8N,OAAO,GAAIhO,IAEhB8W,MAA+B,MAAf9W,EAAMmR,QAC5BnR,EAAM8W,KAAO9W,EAAMmR,OAED,MAAlBnR,EAAM+/C,UAAoB//C,EAAMuR,MAChCvR,EAAM+/C,SAAW//C,EAAMuR,KAE3BvR,EAAQ0C,GAAuBT,KAAMqiD,GAAmB,KAAKU,oBAAoBhlD,GACjF,MAAMovC,EAAMX,GAAUyW,gBAAgBllD,EAAMgyB,EAAGhyB,EAAMujB,EAAGvjB,EAAMU,GAK9D,OAJAV,EAAMmiC,UAAYiN,EACG,MAAjBpvC,EAAMg/B,UACNh/B,EAAMg/B,QAAUoQ,EAAIT,eAEjB,IAAIiV,GAAoB5jD,EAAO6rC,GAG1CniC,IAAI1J,EAAO6rC,GACP,MAAMniC,EAAMzH,KAAK8C,OAAO,CACpBuvB,QAASryB,KAAKqyB,QACdkuB,UAAWvgD,KAAKqb,KAChBmlC,YAAaxgD,KAAKq4C,OAClBxjC,KAAM7U,KAAK6U,KACXnW,MAAOsB,KAAKq4C,OACZoI,QAASzgD,KAAKkjD,QACdzgB,OAAQziC,KAAKyiC,OACb6d,gBAAiBtgD,KAAKqb,KACtBqlC,iBAAkB1gD,KAAKq4C,QACxB,CACC35C,MAAO,CAAC,aAXAsB,CAYTjC,GACH,OAAO,IAAIsiD,GAAI54C,EAAKmiC,GAExBuZ,QAAQplD,EAAO6rC,GACX,MAAMuZ,EAAUnjD,KAAK8C,OAAO,CACxBy9C,UAAWvgD,KAAKqb,KAChBmlC,YAAaxgD,KAAKq4C,OAClB2I,gBAAiBhhD,KAAK4iD,UAAU5iD,KAAKqyB,SACrC6uB,kBAAmBlhD,KAAKwiD,UACxB32C,KAAM7L,KAAKqyB,QACXstB,QAAS3/C,KAAKwiD,UACdzB,KAAM/gD,KAAK0iD,SAASjkD,GAAOuB,KAAKyH,IAAIhJ,EAAGmrC,KACvCqX,UAAWjhD,KAAK6U,KAChBwsC,KAAMrhD,KAAK4iD,UAAU5iD,KAAK6U,MAC1BsxB,OAAQnmC,KAAK4iD,UAAU5iD,KAAKq4C,QAC5BvsC,GAAI9L,KAAKqyB,QACTwrB,SAAU79C,KAAK4iD,UAAU5iD,KAAKwiD,WAC9BnnC,KAAMrb,KAAKqb,KACX3c,MAAOsB,KAAKq4C,OACZz5C,KAAMoB,KAAK4iD,UAAU5iD,KAAKq4C,OAAQ,IACnC,CACCh9B,KAAM,CAAC,mBACPwiC,SAAU,CAAC,qBACXn/C,MAAO,CAAC,qBAnBIsB,CAoBbjC,GAEH,GAAoB,MAAhBolD,EAAQ9B,KACR,GAAI8B,EAAQ9B,KAAKniD,QAAU,EAAG,CAE1B,MAAMnB,EAAQuJ,SAAS67C,EAAQ9B,MAC/B,GAAc,IAAVtjD,GAAyB,IAAVA,EAWf,OAAO4J,GAAO5D,WAAW,0BAA2B,WAAY,CAC5DhG,MAAOolD,EAAQ9B,OAVnB,GAAsB,MAAlB8B,EAAQhd,QAAkBgd,EAAQhd,SAAWpoC,EAC7C,OAAO4J,GAAO5D,WAAW,kCAAmC,WAAY,CACpEhG,MAAO,CAAEsjD,KAAM8B,EAAQ9B,KAAMlb,OAAQgd,EAAQhd,UAGrDgd,EAAQhd,OAASpoC,SACVolD,EAAQ9B,UAQlB,IAAK7sC,GAAY2uC,EAAQ9B,KAAM,IAEhC,OAAO15C,GAAO5D,WAAW,4BAA6B,WAAY,CAC9DhG,MAAOolD,EAAQ9B,OAK3B,OAAO,IAAIP,GAAmBqC,EAASvZ,GAG3CnH,OAAO1kC,GACH,OAAO0C,GAAuBT,KAAMqiD,GAAmB,KAAK5f,OAAO1kC,GAEvEgD,OAAOhD,GACH,OAAO0C,GAAuBT,KAAMqiD,GAAmB,KAAKthD,OAAOhD,GAEvEqlD,UAAUrlD,GAEN,OADAyJ,QAAQC,IAAI,KAAM1J,GACX,KAGXqkC,YAAYrkC,GACR,MAAM,IAAIoB,MAKdi/C,WAAWrgD,GACP,OAAOw/C,GAAcx/C,GAGzBslD,aAAaz2C,EAAQ02C,GACjB,OAASvlD,GACAA,EAGE6O,EAAOrM,KAAKP,KAAMjC,GAFdulD,EAMnBV,UAAUh2C,EAAQ22C,GACd,OAASxlD,GACQ,MAATA,EACOwlD,EAEJ32C,EAAOrM,KAAKP,KAAMjC,GAIjC2kD,QAAQ91C,GACJ,OAASqrC,IACL,IAAKzqC,MAAMN,QAAQ+qC,GACf,MAAM,IAAI94C,MAAM,gBAEpB,OAAO84C,EAAM75C,KAAKa,GAAM2N,EAAOrM,KAAKP,KAAMf,MAIlDujD,UAAUzkD,GACN,OAAO4J,GAAO1B,UAAUlI,EAAO,SAEnC0kD,QAAQ1kD,GACJ,MAAMqJ,EAASpH,KAAKwiD,UAAUzkD,GAI9B,OAHIqJ,EAAS,GAAKA,EAASkwB,KACvB3vB,GAAO3D,mBAAmB,kBAAmB,QAASjG,GAEnDqJ,EAGX87C,QAAQnlD,GACJ,OAAQA,GACJ,KAAK,EACL,IAAK,OACD,OAAO,EACX,KAAK,EACL,IAAK,QACD,OAAO,EAEf,OAAO4J,GAAO3D,mBAAmB,oBAAoBJ,KAAKC,UAAU9F,KAAU,QAASA,GAK3FylD,WAAWC,GAIP,OAHoB,MAAhBA,IACAA,GAAe,GAEnB,SAAkB1lD,GACd,GAAIyW,GAAYzW,EAAO0lD,GACnB,OAAO1lD,EAAM2I,cAEjB,MAAM,IAAIvH,MAAM,kBAGxB0V,KAAK9W,GAID,OAHyB,MAArB2X,GAAW3X,IACX4J,GAAO3D,mBAAmB,GAAI,QAASjG,GAEpCA,EAGXsd,KAAKtd,GAID,OAH0B,KAAtB2X,GAAW3X,IACX4J,GAAO3D,mBAAmB,GAAI,QAASjG,GAEpC0C,GAAuBT,KAAMqiD,GAAmB,KAAKxtC,KAAK9W,GAGrEs6C,OAAOt6C,GACH,OAAO4J,GAAO7B,UAAU/H,GAK5B+E,OAAO8J,EAAQ82C,GACX,OAAS3lD,IACL,MAAMqJ,EAAS,GACf,IAAK,MAAM5H,KAAOoN,EAAQ,CACtB,IAAI+2C,EAASnkD,EACb,GAAIkkD,GAAYlkD,KAAOkkD,KAAcC,KAAU5lD,GAC3C,IAAK,MAAM6lD,KAAUF,EAASlkD,GAC1B,GAAIokD,KAAU7lD,EAAO,CACjB4lD,EAASC,EACT,MAIZ,IACI,MAAMC,EAAKj3C,EAAOpN,GAAKe,KAAKP,KAAMjC,EAAM4lD,SAC7BjkD,IAAPmkD,IACAz8C,EAAO5H,GAAOqkD,GAGtB,MAAOviD,GACH,MAAMoC,EAAWpC,aAAiBnC,MAASmC,EAAMoC,QAAU,eAC3DiE,GAAO5D,WAAW,2BAA2BvE,MAAQkE,KAAY,WAAY,CAAE3F,MAAAA,KAGvF,OAAOqJ,GAIf08C,YAAY/lD,GACR,OAAOqS,GAAMzI,GAAO1B,UAAUlI,GAAQ,KAG9CskD,GAAoB,IAAI5gD,QAAW6gD,GAAuB,IAAI7gD,QC3YvD,MAAMsiD,GACTnjD,YAAYmC,GACR3D,EAAiBY,KAAM,CAAE+C,KAAAA,IAE7ByG,QACI,OAAO,IAAIu6C,GAAc/jD,KAAK+C,MAElCsmC,SAASyC,GACL,OAAO9rC,MAGR,MAAMgkD,WAAsBD,GAC/BnjD,YAAYqjD,EAAiB,EAAGC,GAC5Bp1C,MAAM,+BAAgCm1C,GAAkB,KACxD,MAAME,EAAQ,CAAEF,eAAAA,GAChB,SAASzjD,EAAIuC,EAAMqhD,GACf,IAAIrmD,GAASmmD,GAAS,IAAInhD,GACb,MAAThF,IACAA,EAAQqmD,GAEW,iBAAX,GACRz8C,GAAO3D,mBAAmB,qBAAqBjB,IAAQ,QAASmhD,GAEpEC,EAAMphD,GAAQhF,EAElByC,EAAI,SAAU,MACdA,EAAI,WAAY,MAChBA,EAAI,aAAc,GAClBA,EAAI,gBAAiB,IACrBA,EAAI,yBAA0B,MAC9BA,EAAI,sBAAuB,MAC3BpB,EAAiBY,KAAMmkD,GAE3B36C,QACI,OAAO,IAAIw6C,GAAchkD,KAAKikD,eAAgBjkD,OAK/C,MAAMqkD,WAAkBN,GAC3BnjD,YAAYyxB,EAASiyB,GACjBx1C,MAAM,0BACN1P,EAAiBY,KAAM,CACnBqyB,QAAUA,GA5CH,6CA6CPiyB,cAAkC,MAAjBA,EAAyB,EAAIA,IAGtD96C,QACI,OAAO,IAAI66C,GAAUrkD,KAAKqyB,QAASryB,KAAKskD,eAE5Cjb,SAASyC,GAEL,OADAA,EAAQ1B,UAAU/X,QAAQryB,KAAKqyB,SACxBryB,MAGR,MAAMukD,WAA6BR,GACtCnjD,YAAY4jD,GACR11C,MAAM,uCACN1P,EAAiBY,KAAM,CACnBwkD,YAAa78C,GAAO1B,UAAUu+C,KAGtC3mD,qBAAqB+rC,GACjB,OAAO5pC,KAAKwkD,YAEhBh7C,QACI,OAAO,IAAI+6C,GAAqBvkD,KAAKwkD,cCrE7C,IAWIC,GAXA1kD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAyDxF,MAAMykD,GAAW,IAAIttC,IACfutC,GAAmB,IAAIpC,GACtB,MAAMqC,GACThkD,YAAYmC,EAAM8hD,EAAUza,GACxBqa,GAAejkD,IAAIR,UAAM,GACzB,MAAM+8B,EAAUp1B,GAAO1B,UAAU4+C,GAChB,MAAbza,IACAA,EAAYua,IAEhB,MAAMna,EAAU,IAAIpzB,IACpBrX,GAAuBC,KAAMykD,GAAgB,CAAE1hD,KAAAA,EAAMg6B,QAAAA,EAASqN,UAAAA,EAAWI,QAAAA,GAAW,KAExFuC,SACI,MAAO,CAAEhqC,KAAM/C,KAAK+C,KAAMg6B,QAAS/8B,KAAK+8B,SAExCh6B,WAAS,OAAO9B,EAASR,GAAuBT,KAAMykD,GAAgB,KAAM,QAC5E1hD,SAAKhF,GAASoD,EAASV,GAAuBT,KAAMykD,GAAgB,KAAM,OAAQ1mD,GAClFg/B,cAAY,OAAO97B,EAASR,GAAuBT,KAAMykD,GAAgB,KAAM,WAC/E1nB,YAAQh/B,GAASoD,EAASV,GAAuBT,KAAMykD,GAAgB,KAAM,UAAW98C,GAAO1B,UAAUlI,EAAO,YAChHqsC,gBAAc,OAAOnpC,EAASR,GAAuBT,KAAMykD,GAAgB,KAAM,aACjFra,cAAUrsC,GAASoD,EAASV,GAAuBT,KAAMykD,GAAgB,KAAM,YAAa1mD,GAC5FysC,cACA,OAAOh9B,MAAM3B,KAAKpL,GAAuBT,KAAMykD,GAAgB,KAAKja,QAAQlrC,UAEhFwlD,aAAava,GACT,GAAIvqC,KAAKoB,WACL,MAAM,IAAIjC,MAAM,UAEpB,GAAIsB,GAAuBT,KAAMykD,GAAgB,KAAKja,QAAQ9pC,IAAI6pC,EAAOxnC,MACrE,MAAM,IAAI5D,MAAM,mCAAmCorC,EAAOxnC,SAG9D,OADAtC,GAAuBT,KAAMykD,GAAgB,KAAKja,QAAQhqC,IAAI+pC,EAAOxnC,KAAMwnC,EAAOlB,SAASrpC,OACpFA,KAEXgsC,UAAUjpC,GACN,OAAQtC,GAAuBT,KAAMykD,GAAgB,KAAKja,QAAQ9pC,IAAIqC,IAAU,KAGpFgiD,WAAWC,GACP,OAAQhlD,KAAKwqC,QAAQzpC,QAAQkO,GAAOA,EAAElM,KAAKjE,MAAM,KAAK,KAAOkmD,IAEjEx7C,QACI,MAAMA,EAAQ,IAAIo7C,GAAQ5kD,KAAK+C,KAAM/C,KAAK+8B,QAAS/8B,KAAKoqC,WAIxD,OAHApqC,KAAKwqC,QAAQliC,SAASiiC,IAClB/gC,EAAMs7C,aAAava,EAAO/gC,YAEvBA,EAEXjB,SAEI,OADAtK,OAAOsK,OAAO9H,GAAuBT,KAAMykD,GAAgB,MACpDzkD,KAEXoB,WACI,OAAOnD,OAAOmD,SAASX,GAAuBT,KAAMykD,GAAgB,MAExEQ,oBAAoB9wB,GAChB,MAAM+vB,EAAQlkD,KAAKgsC,UAAU,wBAA2B,IAAIgY,GAC5D,IAAI10C,EAAM40C,EAAMgB,OAIhB,GAHa,MAAT/wB,EAAGroB,KACHwD,GAAO40C,EAAMiB,UAEbhxB,EAAGtf,KACH,IAAK,IAAI5V,EAAI,EAAGA,EAAIk1B,EAAGtf,KAAK3V,OAAQD,GAAK,EACD,OAAhCk1B,EAAGtf,KAAKtN,UAAUtI,EAAGA,EAAI,GACzBqQ,GAAO40C,EAAMkB,WAGb91C,GAAO40C,EAAMmB,cAIzB,GAAIlxB,EAAGiqB,WAAY,CACf,MAAMA,EAAap+C,KAAKoqC,UAAUgU,WAAWjqB,EAAGiqB,YAChD,IAAK,MAAM/S,KAAQ+S,EACf9uC,GAAO40C,EAAMoB,oBAAsBpB,EAAMqB,uBAAyBnH,EAAW/S,GAAMgS,YAAYn+C,OAGvG,OAAOoQ,EAEX/I,YAAYulC,GAER,GAAe,MAAXA,EACA,OAAO8Y,GAAQ/4C,KAAK,aAMxB,GAHyB,iBAAb,IACRigC,EAAU/lC,OAAO+lC,IAEI,iBAArB,GAAsD,iBAArB,EAA+B,CAChE,MAAM0Z,EAAcd,GAAShkD,IAAIorC,GACjC,GAAI0Z,EACA,OAAOA,IAEX,GAAyB,iBAAb,EACR,OAAO,IAAIZ,GAAQ,UAAW9Y,GAElCnkC,GAAO3D,mBAAmB,kBAAmB,UAAW8nC,GAG5D,GAA+B,mBAAnBA,EAAa,MAAkB,CAIvC,OAHcA,EAAQtiC,QAM1B,GAAyB,iBAAb,EAAuB,CACD,iBAAlBsiC,EAAY,MAA+C,iBAArBA,EAAe,SAC7DnkC,GAAO3D,mBAAmB,yCAA0C,UAAW8nC,GAEnF,MAAM2Z,EAAS,IAAIb,GAAS9Y,EAAY,KAAIA,EAAe,SAO3D,OANIA,EAAQ4Z,YAAoC,MAAtB5Z,EAAQ6Z,aAC9BF,EAAOX,aAAa,IAAIT,GAAUvY,EAAQ4Z,WAAY5Z,EAAQ6Z,aAK3DF,EAEX,OAAO99C,GAAO3D,mBAAmB,kBAAmB,UAAW8nC,GAEnEvlC,gBAAgBq/C,EAAeJ,GACI,iBAAnB,IACRI,EAAgB7/C,OAAO6/C,IAE3B,MAAMC,EAAWnB,GAAShkD,IAAIklD,GAC1BC,GACAl+C,GAAO3D,mBAAmB,2BAA2BJ,KAAKC,UAAUgiD,EAAS9iD,QAAS,gBAAiB6iD,GAE3GlB,GAASlkD,IAAIolD,EAAeJ,IAGpCf,GAAiB,IAAIhjD,QCtMrB,IAWIqkD,GAAmCC,GAAkCC,GAAgCC,GAAkCC,GAAqCC,GAA8BC,GAA6BC,GAAyBC,GAAiCC,GAAoCC,GAAmCC,GAAkCC,GAAgCC,GAAgCC,GAAqCC,GAX/e9mD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAKxF,SAASgH,GAAKyG,GACV,OAAO9J,KAAKqJ,MAAMrJ,KAAKC,UAAU6J,IAc9B,MAAMo5C,GACTlmD,YAAYgpC,GACRkc,GAAkCtiD,IAAIxD,MACtC+lD,GAAiCvlD,IAAIR,UAAM,GAC3CgmD,GAA+BxlD,IAAIR,UAAM,GACzCimD,GAAiCzlD,IAAIR,UAAM,GAG3CkmD,GAAoC1lD,IAAIR,UAAM,GAC9CD,GAAuBC,KAAM+lD,GAAkCnc,EAAU,KACzE7pC,GAAuBC,KAAMgmD,GAAgC,KAAM,KACnEjmD,GAAuBC,KAAMimD,GAAkC,IAAM,KACrElmD,GAAuBC,KAAMkmD,IAAsC,EAAG,KAEtEa,sBAAoB,OAAOtmD,GAAuBT,KAAMimD,GAAkC,KAC1Fc,oBAAgBhpD,GAASgC,GAAuBC,KAAMimD,GAAkCloD,EAAO,KACnG6X,QACI,GAAInV,GAAuBT,KAAMgmD,GAAgC,KAC7D,MAAM,IAAI7mD,MAAM,8BAEpBsB,GAAuBT,KAAM8lD,GAAmC,IAAKK,IAA8B5lD,KAAKP,MACxGD,GAAuBC,KAAMgmD,GAAgC7rC,WAAW1Z,GAAuBT,KAAM8lD,GAAmC,IAAKK,IAA8BlsC,KAAKja,MAAOS,GAAuBT,KAAMimD,GAAkC,MAAO,KAEjQe,OACI,IAAKvmD,GAAuBT,KAAMgmD,GAAgC,KAC9D,MAAM,IAAI7mD,MAAM,0BAEpB8nD,aAAaxmD,GAAuBT,KAAMgmD,GAAgC,MAC1EjmD,GAAuBC,KAAMgmD,GAAgC,KAAM,KAEvEkB,MAAMC,GACFnnD,KAAKgnD,OACDG,GACApnD,GAAuBC,KAAMkmD,IAAsC,EAAG,KAG9EkB,SACIpnD,KAAK4V,SAGbmwC,GAAmC,IAAItkD,QAAWukD,GAAiC,IAAIvkD,QAAWwkD,GAAmC,IAAIxkD,QAAWykD,GAAsC,IAAIzkD,QAAWqkD,GAAoC,IAAIl/C,QAAWu/C,GAA+BtoD,eAAesoD,IACtS,MAAM3F,QAAoB//C,GAAuBT,KAAM+lD,GAAkC,KAAKxE,iBAC9F,IAAgF,IAA5E9gD,GAAuBT,KAAMkmD,GAAqC,KAAtE,CAKA,GAAI1F,IAAgB//C,GAAuBT,KAAMkmD,GAAqC,KAAM,CACxF,IAAK,IAAIvzC,EAAIlS,GAAuBT,KAAMkmD,GAAqC,KAAO,EAAGvzC,GAAK6tC,EAAa7tC,IACvGlS,GAAuBT,KAAM+lD,GAAkC,KAAKsB,KAAK,QAAS10C,GAEtF5S,GAAuBC,KAAMkmD,GAAqC1F,EAAa,KAEnFzgD,GAAuBC,KAAMgmD,GAAgC7rC,WAAW1Z,GAAuBT,KAAM8lD,GAAmC,IAAKK,GAA8BlsC,KAAKja,MAAOS,GAAuBT,KAAMimD,GAAkC,MAAO,UAVzPlmD,GAAuBC,KAAMkmD,GAAqC1F,EAAa,MAYhF,MAAM8G,GACT1mD,YAAYgpC,GACRwc,GAA4B5lD,IAAIR,UAAM,GACtCqmD,GAAwB7lD,IAAIR,UAAM,GAClCD,GAAuBC,KAAMomD,GAA6Bxc,EAAU,KACpE7pC,GAAuBC,KAAMqmD,IAA0B7F,IACnDxgD,KAAKunD,MAAM/G,EAAa//C,GAAuBT,KAAMomD,GAA6B,QACnF,KAEPvoD,YAAY2iD,EAAa5W,GACrB,MAAM,IAAIzqC,MAAM,kCAEpByW,QACInV,GAAuBT,KAAMqmD,GAAyB,KAAK9lD,KAAKP,MAAO,GACvES,GAAuBT,KAAMomD,GAA6B,KAAKoB,GAAG,QAAS/mD,GAAuBT,KAAMqmD,GAAyB,MAErIW,OACIvmD,GAAuBT,KAAMomD,GAA6B,KAAKplD,IAAI,QAASP,GAAuBT,KAAMqmD,GAAyB,MAEtIa,MAAMC,GAAmBnnD,KAAKgnD,OAC9BI,SAAWpnD,KAAK4V,SAEpBwwC,GAA8B,IAAI3kD,QAAW4kD,GAA0B,IAAI5kD,QACpE,MAAMgmD,WAAgCH,GACzC1mD,YAAYgpC,EAAU7oC,GAClB+N,MAAM86B,GACN0c,GAAgC9lD,IAAIR,UAAM,GAC1CD,GAAuBC,KAAMsmD,GAAiCr/C,GAAKlG,GAAS,KAEhFlD,YAAY2iD,EAAa5W,GAErB,MADApiC,QAAQC,IAAIhH,GAAuBT,KAAMsmD,GAAiC,MACpE,IAAInnD,MAAM,UAGxBmnD,GAAkC,IAAI7kD,QAC/B,MAAMimD,WAAqCJ,GAC9C1mD,YAAYgpC,EAAUvuB,GAClBvM,MAAM86B,GACN2c,GAAmC/lD,IAAIR,UAAM,GAC7CD,GAAuBC,KAAMumD,GAAoClrC,EAAM,KAE3Exd,YAAY2iD,EAAa5W,GACrB,MAAMzV,QAAWyV,EAASgX,sBAAsBngD,GAAuBT,KAAMumD,GAAoC,MAC7GpyB,GACAyV,EAASyd,KAAK5mD,GAAuBT,KAAMumD,GAAoC,KAAMpyB,IAIjGoyB,GAAqC,IAAI9kD,QAClC,MAAMkmD,GACT/mD,YAAYgpC,EAAU7oC,GAClBylD,GAAkChjD,IAAIxD,MACtCymD,GAAiCjmD,IAAIR,UAAM,GAC3C0mD,GAA+BlmD,IAAIR,UAAM,GACzC2mD,GAA+BnmD,IAAIR,UAAM,GAGzC4mD,GAAoCpmD,IAAIR,UAAM,GAC9CD,GAAuBC,KAAMymD,GAAkC7c,EAAU,KACzE7pC,GAAuBC,KAAM0mD,GAAgCz/C,GAAKlG,GAAS,KAC3EhB,GAAuBC,KAAM2mD,GAAgClmD,GAAuBT,KAAMwmD,GAAmC,IAAKK,IAA8B5sC,KAAKja,MAAO,KAC5KD,GAAuBC,KAAM4mD,IAAsC,EAAG,KAE1EhxC,SACoF,IAA5EnV,GAAuBT,KAAM4mD,GAAqC,MAClEnmD,GAAuBT,KAAMymD,GAAkC,KAAKlF,iBAAiBpzC,MAAMqyC,IACvFzgD,GAAuBC,KAAM4mD,GAAqCpG,EAAa,QAGvF//C,GAAuBT,KAAMymD,GAAkC,KAAKe,GAAG,QAAS/mD,GAAuBT,KAAM2mD,GAAgC,MAEjJK,OACIvmD,GAAuBT,KAAMymD,GAAkC,KAAKzlD,IAAI,QAASP,GAAuBT,KAAM2mD,GAAgC,MAElJO,MAAMC,GACFnnD,KAAKgnD,OACDG,GACApnD,GAAuBC,KAAM4mD,IAAsC,EAAG,KAG9EQ,SACIpnD,KAAK4V,SAGb6wC,GAAmC,IAAIhlD,QAAWilD,GAAiC,IAAIjlD,QAAWklD,GAAiC,IAAIllD,QAAWmlD,GAAsC,IAAInlD,QAAW+kD,GAAoC,IAAI5/C,QAAWigD,GAA+BhpD,eAA4C2iD,GAEjU,IAAgF,IAA5E//C,GAAuBT,KAAM4mD,GAAqC,KAClE,OAEJ,MAAM7lD,EAASkG,GAAKxG,GAAuBT,KAAM0mD,GAAgC,MACjF3lD,EAAO4hD,UAAYliD,GAAuBT,KAAM4mD,GAAqC,KAAO,EAC5F7lD,EAAO8hD,QAAUrC,EACjBzgD,GAAuBC,KAAM4mD,GAAqCpG,EAAa,KAC/E,MAAMO,QAAatgD,GAAuBT,KAAMymD,GAAkC,KAAKmB,QAAQ7mD,GAC/F,IAAK,MAAM0G,KAAOs5C,EACdtgD,GAAuBT,KAAMymD,GAAkC,KAAKY,KAAK5mD,GAAuBT,KAAM0mD,GAAgC,KAAMj/C,IC5KpJ,IAWIogD,GAA6BC,GAAwBC,GAA2BC,GAA+BC,GAAkCC,GAA8BC,GAAgCC,GAA6BC,GAA0BC,GAAmCC,GAA2BC,GAAwBC,GAA4BC,GAA0BC,GAXlZ5oD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAgBxF,MAAMisC,GAAOnmC,OAAO,GAEpB,SAAS6iD,GAAOrT,EAAQx3C,GACpB,OAAOw3C,EAAS,IAAM3xC,KAAKC,UAAU9F,GAAO,CAACM,EAAGI,KAC5C,GAAmB,iBAAP,EACR,MAAO,UAAUA,EAAE+L,aAEvB,GAAmB,iBAAP,EACR,OAAO/L,EAAEiI,cAGb,GAAmB,iBAAf,IAA4B8G,MAAMN,QAAQzO,GAAI,CAC9C,MAAMT,EAAOC,OAAOD,KAAKS,GAEzB,OADAT,EAAKsgC,OACEtgC,EAAKO,QAAO,CAACC,EAAOgB,KACvBhB,EAAMgB,GAAOf,EAAEe,GACRhB,IACR,IAEP,OAAOC,KAGR,MAAMoqD,GACTjoD,YAAYmC,GAAQ3D,EAAiBY,KAAM,CAAE+C,KAAAA,IAC7C6S,SACAoxC,QACAE,MAAMC,IACNC,WAKJ,SAAS0B,GAAU1gD,GAGf,OAFAA,EAAQoF,MAAM3B,KAAK,IAAKxD,IAAID,GAAQ9I,WAC9Bg/B,OACCl2B,EAMXvK,eAAekrD,GAAgBC,EAAQpf,GACnC,GAAc,MAAVof,EACA,MAAM,IAAI7pD,MAAM,iBAMpB,GAHIqO,MAAMN,QAAQ87C,KACdA,EAAS,CAAEvmB,OAAQumB,IAEC,iBAAZ,EACR,OAAQA,GACJ,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,UACD,MAAO,CAAEpqD,KAAMoqD,EAAQC,IAAKD,GAIxC,GAAIx0C,GAAYw0C,EAAQ,IAAK,CACzB,MAAM3tC,EAAO2tC,EAAOtiD,cACpB,MAAO,CAAE9H,KAAM,cAAeqqD,IAAKL,GAAO,KAAM,CAAEvtC,KAAAA,IAASA,KAAAA,GAE/D,GAAI2tC,EAAO5I,OAAQ,CACf,MAAMhxC,EAAQ45C,EAEd,MAAO,CAAEpqD,KAAM,SAAUqqD,IAAKL,GAAO,SAAUx5C,GAAQrO,QArCjDhD,EAqC8DqR,EApCjExL,KAAKqJ,MAAMrJ,KAAKC,UAAU9F,MADrC,IAAcA,EAuCV,GAAKirD,EAAO32B,SAAW22B,EAAOvmB,OAAS,CACnC,MAAMrzB,EAAQ45C,EACRjoD,EAAS,CACX0hC,QAAUrzB,EAAMqzB,QAAU,IAAIrkC,KAAKW,GACtB,MAALA,EACO,KAEPyO,MAAMN,QAAQnO,GACP+pD,GAAU/pD,EAAEX,KAAKW,GAAMA,EAAE2H,iBAE7B3H,EAAE2H,iBAGjB,GAAI0I,EAAMijB,QAAS,CACf,MAAM62B,EAAY,GACZz7C,EAAW,GACX07C,EAAc9d,IACZ72B,GAAY62B,GACZ6d,EAAUtmD,KAAKyoC,GAGf59B,EAAS7K,KAAK,WACVsmD,EAAUtmD,WAAWgyB,GAAeyW,EAAMzB,KADhC,KAKlBp8B,MAAMN,QAAQkC,EAAMijB,SACpBjjB,EAAMijB,QAAQ/pB,QAAQ6gD,GAGtBA,EAAW/5C,EAAMijB,SAEjB5kB,EAASvO,cACHhB,QAAQC,IAAIsP,GAEtB1M,EAAOsxB,QAAUy2B,GAAUI,EAAU9qD,KAAKsU,GAAMA,EAAEhM,iBAEtD,MAAO,CAAE3F,OAAAA,EAAQkoD,IAAKL,GAAO,QAAS7nD,GAASnC,KAAM,SAEzD,OAAO+I,GAAO3D,mBAAmB,wBAAyB,QAASglD,GAEvE,SAAS7hB,KAAY,OAAO,IAAK1sB,MAAQ0sB,UAKlC,MAAMiiB,GAGTxoD,YAAYyoD,GAYR,GAXAxB,GAA4BrkD,IAAIxD,MAChC8nD,GAAuBtnD,IAAIR,UAAM,GACjC+nD,GAA0BvnD,IAAIR,UAAM,GAEpCgoD,GAA8BxnD,IAAIR,UAAM,GACxCioD,GAAiCznD,IAAIR,UAAM,GAC3CkoD,GAA6B1nD,IAAIR,UAAM,GACvCmoD,GAA+B3nD,IAAIR,UAAM,GACzCooD,GAA4B5nD,IAAIR,UAAM,GACtCqoD,GAAyB7nD,IAAIR,UAAM,GACnCsoD,GAAkC9nD,IAAIR,UAAM,GAC3B,QAAbqpD,EACAtpD,GAAuBC,KAAMkoD,IAA8B,EAAM,KACjEnoD,GAAuBC,KAAMioD,GAAkC,KAAM,UAEpE,GAAIoB,EAAU,CACf,MAAMvd,EAAU8Y,GAAQ/4C,KAAKw9C,GAC7BtpD,GAAuBC,KAAMkoD,IAA8B,EAAO,KAClEnoD,GAAuBC,KAAMioD,GAAkC/pD,QAAQI,QAAQwtC,GAAU,KACzF3xB,YAAW,KAAQna,KAAKqnD,KAAK,UAAWvb,EAAS,QAAU,QAG3D/rC,GAAuBC,KAAMkoD,IAA8B,EAAO,KAClEnoD,GAAuBC,KAAMioD,GAAkC,KAAM,KAIzEloD,GAAuBC,KAAMmoD,GAAgC,IAAI/wC,IAAO,KACxErX,GAAuBC,KAAM8nD,GAAwB,IAAI1wC,IAAO,KAChErX,GAAuBC,KAAM+nD,GAA2B,IAAI3wC,IAAO,KACnErX,GAAuBC,KAAMgoD,GAA+B,KAAM,KAClEjoD,GAAuBC,KAAMooD,GAA6B,EAAG,KAC7DroD,GAAuBC,KAAMqoD,GAA0B,IAAIjxC,IAAO,KAClErX,GAAuBC,KAAMsoD,IAAmC,EAAO,KAEvE9d,cACA,OAAOh9B,MAAM3B,KAAKpL,GAAuBT,KAAM+nD,GAA2B,KAAKzoD,UAEnFwlD,aAAava,GACT,GAAI9pC,GAAuBT,KAAM+nD,GAA2B,KAAKrnD,IAAI6pC,EAAOxnC,MACxE,MAAM,IAAI5D,MAAM,mCAAmCorC,EAAOxnC,SAG9D,OADAtC,GAAuBT,KAAM+nD,GAA2B,KAAKvnD,IAAI+pC,EAAOxnC,KAAMwnC,EAAOlB,SAASrpC,OACvFA,KAEXgsC,UAAUjpC,GACN,OAAQtC,GAAuBT,KAAM+nD,GAA2B,KAAKrnD,IAAIqC,IAAU,KAEnFumD,oBAAgBvrD,GAASgC,GAAuBC,KAAMsoD,KAAqCvqD,EAAO,KAClGurD,sBAAoB,OAAO7oD,GAAuBT,KAAMsoD,GAAmC,KAC/FzqD,oBAAoBs2B,EAAIwW,EAAU4e,GAC9B,GAAIvpD,KAAKspD,iBAAmC,IAAhBC,EAAKrqD,QAAyB,MAATi1B,EAAGroB,GAChD,OAAO,KAEX,MAAM09C,EAASr1B,EAAGroB,GAAGpF,cACfmO,EAAO81B,EAASjkC,cAChB+iD,EAAgB,GACtB,IAAK,IAAIxqD,EAAI,EAAGA,EAAIsqD,EAAKrqD,OAAQD,IAAK,CAClC,MAAM0mC,EAAM4jB,EAAKtqD,GAEXyqD,EAAO/jB,EAAIrN,QAAQ,WAAYkxB,GAAQlxB,QAAQ,SAAUzjB,GAOzD2vB,EAAU,IAAI8B,GAAaojB,IACF,IAA3B/jB,EAAI7gC,QAAQ,YACZ0/B,EAAQD,KAAO,CAAE1vB,KAAAA,EAAM20C,OAAAA,IAE3B,IAAIG,EAAe,gBACnB,MAAM3jB,QAAaqB,GAAU7C,GAC7B,IACI,MAAMp9B,EAAS4+B,EAAKrB,SACpB,GAAIv9B,EAAOyN,KACP,OAAOzN,EAAOyN,KAEdzN,EAAO1D,UACPimD,EAAeviD,EAAO1D,SAG9B,MAAOpC,IAEP,GAAI0kC,EAAK5B,YAAc,KAAO4B,EAAK5B,WAAa,IAC5C,OAAOz8B,GAAO5D,WAAW,yCAAyC4lD,IAAgB,iBAAkB,CAChG7xB,OAAQ,uBACRsK,YAAajO,EAAIjyB,KAAM,CAAEyjC,IAAAA,EAAKgkB,aAAAA,KAItCF,EAAc7mD,KAAK+mD,GAEvB,OAAOhiD,GAAO5D,WAAW,wCAAwC0lD,EAAcrrD,KAAK4lC,GAAMpgC,KAAKC,UAAUmgC,KAAIlgC,KAAK,QAAS,iBAAkB,CACzIg0B,OAAQ,mBACRsK,YAAajO,EAAIjyB,KAAM,CAAEqnD,KAAAA,EAAME,cAAAA,KAGvCG,iBAAiBz1B,EAAI9Y,EAAMmlC,GACvB,OAAOrsB,EAEX01B,iBACI,OAAOliD,GAAO5D,WAAW,kCAAmC,wBAAyB,CACjFY,UAAW,mBAGnB9G,eAAe2nC,GACX,OAAO79B,GAAO5D,WAAW,uBAAuByhC,EAAIrgC,SAAU,wBAAyB,CACnFR,UAAW6gC,EAAIrgC,OACfjD,KAAMsjC,IAId3nC,uBACI,OAAO8J,GAAO7B,gBAAgBrF,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAAEmF,OAAQ,mBAAqB,aAEtKtH,kBAAkBw0B,GACd,MAAyB,iBAAb,EACDA,QAEEA,EAAQW,aAEzBn1B,mBAAmBokD,GACf,MAAMnW,QAAgB9rC,KAAKmqC,aAC3B,GAA0B,iBAAd,GAA0B3lC,OAAO2W,cAAc8mC,IAAaA,EAAW,EAAG,CAElF,IAAIzB,QAAoBxgD,KAAKuhD,iBAK7B,OAJAf,GAAeyB,EACXzB,EAAc,IACdA,EAAc,GAEX1U,EAAQ1B,UAAU6X,SAASzB,GAEtC,OAAO1U,EAAQ1B,UAAU6X,SAASA,GAEtCpkD,mBAEI,GAA2E,MAAvE4C,GAAuBT,KAAMioD,GAAkC,KAAc,CAE7E,MAAM6B,EAAgB9pD,KAAK6pD,iBAAiB17C,MAAM29B,IAC9C9rC,KAAKqnD,KAAK,UAAWvb,EAAS,MACvBA,KACPxqC,IAKA,MAHIb,GAAuBT,KAAMioD,GAAkC,OAAS6B,GACxE/pD,GAAuBC,KAAMioD,GAAkC,KAAM,KAEnE3mD,KAGV,OADAvB,GAAuBC,KAAMioD,GAAkC6B,EAAe,WACjEA,EAEjB,MAAMC,EAAiBtpD,GAAuBT,KAAMioD,GAAkC,MAC/E+B,EAAUC,SAAgB/rD,QAAQC,IAAI,CACzC4rD,EACA/pD,KAAK6pD,mBAkBT,OAhBIG,EAASjtB,UAAYktB,EAAOltB,UACxBt8B,GAAuBT,KAAMkoD,GAA8B,MAE3DloD,KAAKqnD,KAAK,UAAW4C,EAAQD,GAEzBvpD,GAAuBT,KAAMioD,GAAkC,OAAS8B,GACxEhqD,GAAuBC,KAAMioD,GAAkC/pD,QAAQI,QAAQ2rD,GAAS,MAK5FtiD,GAAO5D,WAAW,oBAAoBimD,EAASjtB,cAAcktB,EAAOltB,WAAY,gBAAiB,CAC7F3tB,MAAO,aAIZ46C,EAASxgD,QAAQjB,SAE5B1K,mBACI,MAAMg1B,MAAEA,EAAKgrB,SAAEA,SAAmB//C,EAAkB,CAChD+0B,MAAO7yB,KAAK2gD,SAAS,UACrB9C,SAAW,WACP,IACI,MAAMA,QAAiBp9C,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAAEmF,OAAQ,gBACtI,OAAOwC,GAAO1B,UAAU43C,EAAU,aAEtC,MAAOv8C,IACP,OAAO,MANA,KASf,IAAI68C,EAAe,KAAMD,EAAuB,KAChD,GAAIrrB,GAASA,EAAMitB,cAAe,CAI9B5B,EAAuBn4C,OAAO,cAE9B,MAAMmkD,SAA2BlqD,KAAKmqC,cAAc6B,UAAU,uCAC1Dke,IACAhM,QAA6BgM,EAAkBC,eAAenqD,OAElEm+C,EAAgBtrB,EAAMitB,cAAgB5T,GAAQgS,EAElD,OAAO,IAAIkB,GAAQvB,EAAUM,EAAcD,GAE/CrgD,sBAAsBusD,GAClB,MAAMte,QAAgB9rC,KAAKmqC,aAErB3F,EAAUvmC,OAAO8N,OAAO,GAAIq+C,QAAgBtsD,EAAkB,CAChEgO,GAAKs+C,EAASt+C,GAAK8oB,GAAew1B,EAASt+C,GAAI9L,WAAQN,EACvDmM,KAAOu+C,EAASv+C,KAAO+oB,GAAew1B,EAASv+C,KAAM7L,WAAQN,KAEjE,OAAOosC,EAAQ1B,UAAU0Y,mBAAmBte,GAEhD3mC,kBAAkBwsD,GACd,MAAMjoB,QAAoBpiC,KAAKsqD,gBAAgBD,GAC/C,OAAO1iD,GAAO1B,gBAAgBxF,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAC/HmF,OAAQ,cAAei9B,YAAAA,IACvB,aAERvkC,WAAWwsD,GACP,MAAMl2B,GAAEA,EAAE8tB,SAAEA,SAAmBnkD,EAAkB,CAC7Cq2B,GAAIn0B,KAAKsqD,gBAAgBD,GACzBpI,SAAUjiD,KAAKuqD,aAAaF,EAAIpI,YAEpC,OAAOxhD,GAAuBT,KAAM6nD,GAA6B,IAAKW,IAAwBjoD,KAAKP,KAAMm0B,EAAI8tB,EAAUoI,EAAIrgB,eAAiB,GAAK,GAGrJnsC,mBAAmB2sD,EAAUC,GACzB,MAAMp4B,QAAEA,EAAO4vB,SAAEA,SAAmBnkD,EAAkB,CAClDu0B,QAASuC,GAAe41B,GACxBvI,SAAUjiD,KAAKuqD,aAAaE,KAEhC,OAAO9iD,GAAO1B,gBAAgBxF,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAC/HmF,OAAQ,aAAcktB,QAAAA,EAAS4vB,SAAAA,IAC/B,aAERpkD,4BAA4B2sD,EAAUC,GAClC,MAAMp4B,QAAEA,EAAO4vB,SAAEA,SAAmBnkD,EAAkB,CAClDu0B,QAASuC,GAAe41B,GACxBvI,SAAUjiD,KAAKuqD,aAAaE,KAEhC,OAAO9iD,GAAO7B,gBAAgBrF,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAC/HmF,OAAQ,sBAAuBktB,QAAAA,EAAS4vB,SAAAA,IACxC,aAERpkD,cAAc2sD,EAAUC,GACpB,MAAMp4B,QAAEA,EAAO4vB,SAAEA,SAAmBnkD,EAAkB,CAClDu0B,QAASuC,GAAe41B,GACxBvI,SAAUjiD,KAAKuqD,aAAaE,KAEhC,OAAOr1C,SAAc3U,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CACtHmF,OAAQ,UAAWktB,QAAAA,EAAS4vB,SAAAA,KAGpCpkD,mBAAmB2sD,EAAUE,EAAWD,GACpC,MAAMvI,EAAWv6C,GAAO1B,UAAUykD,IAC5Br4B,QAAEA,EAAO4vB,SAAEA,SAAmBnkD,EAAkB,CAClDu0B,QAASuC,GAAe41B,GACxBvI,SAAUjiD,KAAKuqD,aAAaE,KAEhC,OAAOr1C,SAAc3U,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CACtHmF,OAAQ,eAAgBktB,QAAAA,EAAS6vB,SAAAA,EAAUD,SAAAA,KAInDpkD,2BAA2BskD,GACvB,MAAM,IAAIhjD,MAIdtB,eAAeg1B,GACX,MAAMjmB,SAAgB5M,KAAKmqC,cAAcC,UACnCp7B,QAAevO,GAAuBT,KAAM6nD,GAA6B,IAAKY,IAA4BloD,KAAKP,KAAM6yB,GAAO,GAClI,OAAc,MAAV7jB,EACO,KAEJpC,EAAOimB,MAAM7jB,EAAQhP,MAEhCnC,+BAA+Bg1B,GAC3B,MAAMjmB,SAAgB5M,KAAKmqC,cAAcC,UACnCp7B,EAASvO,GAAuBT,KAAM6nD,GAA6B,IAAKY,IAA4BloD,KAAKP,KAAM6yB,GAAO,GAC5H,OAAc,MAAV7jB,EACO,KAEJpC,EAAOo2C,sBAAsBh0C,EAAQhP,MAEhDnC,qBAAqBwd,GACjB,MAAMzO,SAAgB5M,KAAKmqC,cAAcC,UACnCp7B,QAAevO,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAAEmF,OAAQ,iBAAkBkW,KAAAA,IACtJ,OAAOzO,EAAOm2C,oBAAoB/zC,EAAQhP,MAE9CnC,4BAA4Bwd,GACxB,MAAMzO,SAAgB5M,KAAKmqC,cAAcC,UACnC+Y,QAAgB1iD,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAAEmF,OAAQ,wBAAyBkW,KAAAA,IAC9J,GAAe,MAAX8nC,EACA,OAAO,KAIX,GAAwB,MAApBA,EAAQtF,UAAiD,MAA7BsF,EAAQhC,kBAA2B,CAC/D,MAAMhtB,QAAW1zB,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAAEmF,OAAQ,iBAAkBkW,KAAAA,IAClJ8nC,EAAQhC,kBAAoBhtB,EAAG0pB,SAEnC,OAAOjxC,EAAOu2C,QAAQA,EAASnjD,MAEnCnC,iBAAiBkD,GACb,MAAM4pD,EAAS,GACX5pD,EAAOsxB,UACH7kB,MAAMN,QAAQnM,EAAOsxB,SACrBs4B,EAAOt4B,QAAUn0B,QAAQC,IAAI4C,EAAOsxB,QAAQj0B,KAAKsU,GAAMkiB,GAAeliB,EAAG1S,SAGzE2qD,EAAOt4B,QAAUuC,GAAe7zB,EAAOsxB,QAASryB,OAGxD,MAAM4qD,EAAeprD,IACE,MAAfuB,EAAOvB,KAGXmrD,EAAOnrD,GAAOQ,KAAKuqD,aAAaxpD,EAAOvB,MAE3CorD,EAAY,aACZA,EAAY,WACZ,MAAMxjD,QAAetJ,EAAkB6sD,GAIvC,GAHIn9C,MAAMN,QAAQ9F,EAAOirB,UACrBjrB,EAAOirB,QAAQiM,OAEfv9B,EAAOw/C,UAAW,CAClB,GAAIx/C,EAAO4hD,WAAa5hD,EAAO8hD,QAC3B,MAAM,IAAI1jD,MAAM,kBAEpBiI,EAAOm5C,UAAYx/C,EAAOw/C,UAE9B,OAAOn5C,EAGXvJ,cAAcgtD,GACV,MAAM/e,QAAEA,EAAO/qC,OAAEA,SAAiBjD,EAAkB,CAChDguC,QAAS9rC,KAAKmqC,aACdppC,OAAQf,KAAK8qD,WAAWD,KAE5B,aAAcpqD,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAAEmF,OAAQ,UAAWpE,OAAAA,KAAW3C,KAAKihB,GAC7IysB,EAAQ1B,UAAU3iC,IAAI4X,EAAGrf,QAIxC+qD,aAAahuB,GACT,OAAOp1B,GAAO5D,WAAW,4CAA6C,wBAAyB,CAC3FY,UAAW,mBAGnB9G,kBAAkBkF,GACd,aAAa4mC,GAAYqhB,SAAShrD,KAAM+C,GAE5ClF,gBAAgBkF,GACZ,MAAM8xB,QAAiB70B,KAAKirD,YAAYloD,GACxC,OAAI8xB,QACaA,EAASq2B,YAEnB,KAEXrtD,kBAAkBkF,GACd,GAAsB,iBAAV,EAMP,CACD,MAAMsvB,QAAgBtvB,EAAKiwB,aAC3B,OAAe,MAAXX,EACO1qB,GAAO3D,mBAAmB,kCAAmC,OAAQjB,GAEzEsvB,EAXqB,CAC5B,MAAMwC,QAAiB70B,KAAKirD,YAAYloD,GACxC,GAAI8xB,EACA,aAAaA,EAAS7B,aAU9B,OAAO,KAEXn1B,oBAAoBw0B,GAChB,MAAM,IAAIlzB,MAGdtB,yBAAyBwd,EAAMumC,EAAW,EAAGnc,GACzC,OAAiB,IAAbmc,EACO5hD,KAAK4gD,sBAAsBvlC,GAE/B,IAAInd,SAAQL,MAAOS,EAAS6sD,KAC/B,IAAIC,EAAQ,KACZ,MAAMtqD,EAAY,MAAO0/C,IACrB,IACI,MAAM2C,QAAgBnjD,KAAK4gD,sBAAsBvlC,GACjD,GAAe,MAAX8nC,GACI3C,EAAc2C,EAAQ3C,YAAc,GAAKoB,EAOzC,OANAtjD,EAAQ6kD,GACRnjD,KAAKgB,IAAI,QAASF,QACdsqD,IACAnE,aAAamE,GACbA,EAAQ,OAMxB,MAAO9pD,GACHkG,QAAQC,IAAI,MAAOnG,GAEvBtB,KAAKqrD,KAAK,QAASvqD,IAER,MAAX2kC,IACA2lB,EAAQjxC,YAAW,KACF,MAATixC,IAGJA,EAAQ,KACRprD,KAAKgB,IAAI,QAASF,GAClBqqD,EAAOxjD,GAAOlE,UAAU,UAAW,UAAW,QAC/CgiC,IAEP3kC,QAAed,KAAKuhD,qBAG5B1jD,mBAAmBokD,GACf,MAAM,IAAI9iD,MAGdmsD,cAAcC,GACV,MAAMH,EAAQ3qD,GAAuBT,KAAMqoD,GAA0B,KAAK3nD,IAAI6qD,GACzEH,IAGDA,EAAMA,OACNnE,aAAamE,EAAMA,OAEvB3qD,GAAuBT,KAAMqoD,GAA0B,KAAKjqB,OAAOmtB,IAEvEC,YAAYzxB,EAAO0L,EAAU,GACzB,IAAIl7B,EAAIkhD,EACR,MAAMF,GAAWxrD,GAAuBC,KAAMooD,IAA8BqD,EAAKhrD,GAAuBT,KAAMooD,GAA6B,KAAM79C,EAAKkhD,IAAMA,GAAK,KAAMlhD,GACjKyc,EAAO,KACTvmB,GAAuBT,KAAMqoD,GAA0B,KAAKjqB,OAAOmtB,GACnExxB,KAEJ,GAAI/5B,KAAK0rD,OACLjrD,GAAuBT,KAAMqoD,GAA0B,KAAK7nD,IAAI+qD,EAAS,CAAEH,MAAO,KAAMpkC,KAAAA,EAAM2kC,KAAMlmB,QAEnG,CACD,MAAM2lB,EAAQjxC,WAAW6M,EAAMye,GAC/BhlC,GAAuBT,KAAMqoD,GAA0B,KAAK7nD,IAAI+qD,EAAS,CAAEH,MAAAA,EAAOpkC,KAAAA,EAAM2kC,KAAMxkB,OAElG,OAAOokB,EAEXK,mBAAmB5kC,GACf,IAAK,MAAM6kC,KAAOprD,GAAuBT,KAAM8nD,GAAwB,KAAKxoD,SACxE0nB,EAAK6kC,EAAIC,YAKjBC,eAAeF,GACX,OAAQA,EAAIjtD,MACR,IAAK,QACL,IAAK,UACD,OAAO,IAAIiqD,GAAoBgD,EAAIjtD,MACvC,IAAK,QACD,OAAO,IAAIkoD,GAAuB9mD,MACtC,IAAK,QACD,OAAO,IAAI2nD,GAAuB3nD,KAAM6rD,EAAI9qD,QAChD,IAAK,cACD,OAAO,IAAI2mD,GAA6B1nD,KAAM6rD,EAAIxwC,MACtD,IAAK,SACD,OAAO,IAAIosC,GAAwBznD,KAAM6rD,EAAI9qD,QAErD,MAAM,IAAI5B,MAAM,sBAAsB0sD,EAAIjtD,QAE9CotD,mBAAmBC,EAAQC,GACvB,IAAK,MAAML,KAAOprD,GAAuBT,KAAM8nD,GAAwB,KAAKxoD,SACxE,GAAIusD,EAAIC,aAAeG,EAAQ,CACvBJ,EAAIM,SACJN,EAAIC,WAAW9E,OAEnB6E,EAAIC,WAAaI,EACbL,EAAIM,SACJD,EAAOt2C,QAE6D,MAApEnV,GAAuBT,KAAMgoD,GAA+B,MAC5DkE,EAAOhF,MAAMzmD,GAAuBT,KAAMgoD,GAA+B,MAE7E,OAIZnqD,SAASuR,EAAOtO,GACZ,MAAM+qD,QAAYprD,GAAuBT,KAAM6nD,GAA6B,IAAKc,IAA0BpoD,KAAKP,KAAMoP,GAStH,OARAy8C,EAAIO,UAAUxpD,KAAK,CAAE9B,SAAAA,EAAUuqD,MAAM,IAChCQ,EAAIM,UACLN,EAAIC,WAAWl2C,QACfi2C,EAAIM,SAAU,EAC0D,MAApE1rD,GAAuBT,KAAMgoD,GAA+B,MAC5D6D,EAAIC,WAAW5E,MAAMzmD,GAAuBT,KAAMgoD,GAA+B,OAGlFhoD,KAEXnC,WAAWuR,EAAOtO,GACd,MAAM+qD,QAAYprD,GAAuBT,KAAM6nD,GAA6B,IAAKc,IAA0BpoD,KAAKP,KAAMoP,GAStH,OARAy8C,EAAIO,UAAUxpD,KAAK,CAAE9B,SAAAA,EAAUuqD,MAAM,IAChCQ,EAAIM,UACLN,EAAIC,WAAWl2C,QACfi2C,EAAIM,SAAU,EAC0D,MAApE1rD,GAAuBT,KAAMgoD,GAA+B,MAC5D6D,EAAIC,WAAW5E,MAAMzmD,GAAuBT,KAAMgoD,GAA+B,OAGlFhoD,KAEXnC,WAAWuR,KAAUlJ,GACjB,MAAM2lD,QAAYprD,GAAuBT,KAAM6nD,GAA6B,IAAKa,IAA0BnoD,KAAKP,KAAMoP,EAAOlJ,GAC7H,IAAK2lD,EACD,OAAO,EAGX,MAAMxmD,EAAQwmD,EAAIO,UAAUltD,OAM5B,OALA2sD,EAAIO,UAAYP,EAAIO,UAAUrrD,QAAO,EAAGD,SAAAA,EAAUuqD,KAAAA,MAC9C,MAAM/3B,EAAU,IAAI3yB,EAAaX,KAAOqrD,EAAO,KAAOvqD,EAAWsO,GAEjE,OADA+K,YAAW,KAAQrZ,EAASP,KAAKP,QAASkG,EAAMotB,KAAa,IACrD+3B,KAEJhmD,EAAQ,EAEpBxH,oBAAoBuR,GAChB,GAAIA,EAAO,CACP,MAAMy8C,QAAYprD,GAAuBT,KAAM6nD,GAA6B,IAAKa,IAA0BnoD,KAAKP,KAAMoP,GACtH,OAAKy8C,EAGEA,EAAIO,UAAUltD,OAFV,EAIf,IAAImtD,EAAQ,EACZ,IAAK,MAAMD,UAAEA,KAAe3rD,GAAuBT,KAAM8nD,GAAwB,KAAKxoD,SAClF+sD,GAASD,EAAUltD,OAEvB,OAAOmtD,EAEXxuD,gBAAgBuR,GACZ,GAAIA,EAAO,CACP,MAAMy8C,QAAYprD,GAAuBT,KAAM6nD,GAA6B,IAAKa,IAA0BnoD,KAAKP,KAAMoP,GACtH,OAAKy8C,EAGEA,EAAIO,UAAUhuD,KAAI,EAAG0C,SAAAA,KAAeA,IAFhC,GAIf,IAAIsG,EAAS,GACb,IAAK,MAAMglD,UAAEA,KAAe3rD,GAAuBT,KAAM8nD,GAAwB,KAAKxoD,SAClF8H,EAASA,EAAOmO,OAAO62C,EAAUhuD,KAAI,EAAG0C,SAAAA,KAAeA,KAE3D,OAAOsG,EAEXvJ,UAAUuR,EAAOtO,GACb,MAAM+qD,QAAYprD,GAAuBT,KAAM6nD,GAA6B,IAAKa,IAA0BnoD,KAAKP,KAAMoP,GACtH,IAAKy8C,EACD,OAAO7rD,KAEX,GAAIc,EAAU,CACV,MAAMpC,EAAQmtD,EAAIO,UAAUhuD,KAAI,EAAG0C,SAAAA,KAAeA,IAAUgE,QAAQhE,GAChEpC,GAAS,GACTmtD,EAAIO,UAAUvoB,OAAOnlC,EAAO,GASpC,OANKoC,GAAqC,IAAzB+qD,EAAIO,UAAUltD,SACvB2sD,EAAIM,SACJN,EAAIC,WAAW9E,OAEnBvmD,GAAuBT,KAAM8nD,GAAwB,KAAK1pB,OAAOytB,EAAI5C,MAElEjpD,KAEXnC,yBAAyBuR,GACrB,GAAIA,EAAO,CACP,MAAM65C,IAAEA,EAAGkD,QAAEA,EAAOL,WAAEA,SAAqBrrD,GAAuBT,KAAM6nD,GAA6B,IAAKc,IAA0BpoD,KAAKP,KAAMoP,GAC3I+8C,GACAL,EAAW9E,OAEfvmD,GAAuBT,KAAM8nD,GAAwB,KAAK1pB,OAAO6qB,QAGjE,IAAK,MAAOA,GAAKkD,QAAEA,EAAOL,WAAEA,MAAiBrrD,GAAuBT,KAAM8nD,GAAwB,KAC1FqE,GACAL,EAAW9E,OAEfvmD,GAAuBT,KAAM8nD,GAAwB,KAAK1pB,OAAO6qB,GAGzE,OAAOjpD,KAGXnC,kBAAkBuR,EAAOtO,GACrB,aAAad,KAAKwnD,GAAGp4C,EAAOtO,GAGhCjD,qBAAqBuR,EAAOtO,GACxB,OAAOd,KAAKgB,IAAIoO,EAAOtO,GAI3BjD,iBAEImC,KAAKssD,qBAEL,IAAK,MAAMf,KAAW9qD,GAAuBT,KAAMqoD,GAA0B,KAAKrqD,OAC9EgC,KAAKsrD,cAAcC,GAGvBG,aAAW,OAA4E,MAApEjrD,GAAuBT,KAAMgoD,GAA+B,KACnFd,MAAMC,GACF,GAAwE,MAApE1mD,GAAuBT,KAAMgoD,GAA+B,KAAc,CAC1E,GAAIvnD,GAAuBT,KAAMgoD,GAA+B,QAAUb,EACtE,OAEJ,OAAOx/C,GAAO5D,WAAW,yCAA0C,wBAAyB,CACxFY,UAAW,UAGnB3E,KAAK4rD,oBAAoBtqC,GAAMA,EAAE4lC,MAAMC,KACvCpnD,GAAuBC,KAAMgoD,KAAiCb,EAAiB,KAC/E,IAAK,MAAMiE,KAAS3qD,GAAuBT,KAAMqoD,GAA0B,KAAK/oD,SAExE8rD,EAAMA,OACNnE,aAAamE,EAAMA,OAGvBA,EAAMO,KAAOxkB,KAAYikB,EAAMO,KAGvCvE,SACI,GAAwE,MAApE3mD,GAAuBT,KAAMgoD,GAA+B,KAAhE,CAGAhoD,KAAK4rD,oBAAoBtqC,GAAMA,EAAE8lC,WACjCrnD,GAAuBC,KAAMgoD,GAA+B,KAAM,KAClE,IAAK,MAAMoD,KAAS3qD,GAAuBT,KAAMqoD,GAA0B,KAAK/oD,SAAU,CAEtF,IAAImmC,EAAU2lB,EAAMO,KAChBlmB,EAAU,IACVA,EAAU,GAGd2lB,EAAMO,KAAOxkB,KAEbhtB,WAAWixC,EAAMpkC,KAAMye,MAwGnC,SAAS8mB,GAAanlD,EAAQwO,GAC1B,IACI,MAAMP,EAAQm3C,GAAYplD,EAAQwO,GAClC,GAAIP,EACA,OAAOqkB,GAAarkB,GAG5B,MAAO/T,IACP,OAAO,KAEX,SAASkrD,GAAYplD,EAAQwO,GACzB,GAAe,OAAXxO,EACA,OAAO,KAEX,IACI,MAAMC,EAASM,GAAO7B,UAAU6P,GAAUvO,EAAQwO,EAAOA,EAAQ,KAC3D1W,EAASyI,GAAO7B,UAAU6P,GAAUvO,EAAQC,EAAQA,EAAS,KACnE,OAAOsO,GAAUvO,EAAQC,EAAS,GAAIA,EAAS,GAAKnI,GAExD,MAAOoC,IACP,OAAO,KAEX,SAASwnC,GAAO/qC,GACZ,MAAMqJ,EAASmJ,GAAQxS,GACvB,GAAIqJ,EAAOlI,OAAS,GAChB,MAAM,IAAIC,MAAM,+BAEpB,MAAM4pC,EAAS,IAAI7hC,WAAW,IAE9B,OADA6hC,EAAOvoC,IAAI4G,EAAQ,GAAKA,EAAOlI,QACxB6pC,EAEX,SAASC,GAASjrC,GACd,GAAKA,EAAMmB,OAAS,IAAQ,EACxB,OAAOnB,EAEX,MAAMqJ,EAAS,IAAIF,WAA0C,GAA/BH,KAAKkS,KAAKlb,EAAMmB,OAAS,KAEvD,OADAkI,EAAO5G,IAAIzC,GACJqJ,EAzIX0gD,GAAyB,IAAIrmD,QAAWsmD,GAA4B,IAAItmD,QAAWumD,GAAgC,IAAIvmD,QAAWwmD,GAAmC,IAAIxmD,QAAWymD,GAA+B,IAAIzmD,QAAW0mD,GAAiC,IAAI1mD,QAAW2mD,GAA8B,IAAI3mD,QAAW4mD,GAA2B,IAAI5mD,QAAW6mD,GAAoC,IAAI7mD,QAAWomD,GAA8B,IAAIjhD,QAAW2hD,GAEzc1qD,eAAyC2nC,GAErC,MAAMyjB,EAAML,GAAOpjB,EAAIrgC,OAAQqgC,GAC/B,IAAIinB,EAAUhsD,GAAuBT,KAAMmoD,GAAgC,KAAKznD,IAAIuoD,GAUpF,OATKwD,IACDA,EAAUzsD,KAAK0sD,SAASlnB,GACxB/kC,GAAuBT,KAAMmoD,GAAgC,KAAK3nD,IAAIyoD,EAAKwD,GAC3EtyC,YAAW,KACH1Z,GAAuBT,KAAMmoD,GAAgC,KAAKznD,IAAIuoD,KAASwD,GAC/EhsD,GAAuBT,KAAMmoD,GAAgC,KAAK/pB,OAAO6qB,KAE9E,YAEMwD,GACdjE,GAAyB3qD,eAAe2qD,EAAuBr0B,EAAI8tB,EAAU0K,GACxEA,GA/wBmB,IAgxBnBhlD,GAAO5D,WAAW,0CAA2C,iBAAkB,CAC3E+zB,OAAQ,qBACRsK,YAAankC,OAAO8N,OAAO,GAAIooB,EAAI,CAAE8tB,SAAAA,EAAUjY,gBAAgB,MAGvE,MAAM5H,EAA0BjO,EAChC,IACI,OAAO/e,SAAcpV,KAAK0sD,SAAS,CAAEvnD,OAAQ,OAAQi9B,YAAAA,EAAa6f,SAAAA,KAEtE,MAAO3gD,GAEH,IAAKtB,KAAKspD,iBAAmB9nD,EAAgBF,IAAUqrD,GAAW,GAAkB,WAAb1K,GAA2C,MAAlB7f,EAAYt2B,IAA8C,eAAhC6J,GAAUrU,EAAMuT,KAAM,EAAG,GAAqB,CACpK,MAAMA,EAAOvT,EAAMuT,KACb+3C,QAAiBh4B,GAAewN,EAAYt2B,GAAI9L,MAEtD,IAAI6sD,EACJ,IACIA,EA8HhB,SAA6Bh4C,GACzB,MAAMzN,EAAS,CACXoiD,OAAQ,GAAID,KAAM,GAAI5e,SAAU,GAAIvK,SAAU,GAAIyf,UAAW,GAAI7d,UAAW,IAEhF,GAAItsB,GAAWb,GAAQ,IACnB,MAAM,IAAI1V,MAAM,oCAEpB,MAAMqqD,EAAS7zC,GAAUd,EAAM,EAAG,IAClC,GAAIc,GAAU6zC,EAAQ,EAAG,MAAQ7zC,GAAUtE,GAAO,EAAG,IACjD,MAAM,IAAIlS,MAAM,iCAEpBiI,EAAOoiD,OAAS7zC,GAAU6zC,EAAQ,IAElC,IACI,MAAMD,EAAO,GACPuD,EAAanlD,GAAO7B,UAAU6P,GAAUd,EAAM,GAAI,KAClDk4C,EAAaplD,GAAO7B,UAAU6P,GAAUd,EAAMi4C,EAAYA,EAAa,KACvEE,EAAWr3C,GAAUd,EAAMi4C,EAAa,IAC9C,IAAK,IAAI9uC,EAAI,EAAGA,EAAI+uC,EAAY/uC,IAAK,CACjC,MAAM2nB,EAAM4mB,GAAaS,EAAc,GAAJhvC,GACnC,GAAW,MAAP2nB,EACA,MAAM,IAAIxmC,MAAM,SAEpBoqD,EAAK3mD,KAAK+iC,GAEdv+B,EAAOmiD,KAAOA,EAElB,MAAOjoD,GACH,MAAM,IAAInC,MAAM,+BAGpB,IACI,MAAMwrC,EAAW6hB,GAAY33C,EAAM,IACnC,GAAgB,MAAZ81B,EACA,MAAM,IAAIxrC,MAAM,SAEpBiI,EAAOujC,SAAWA,EAEtB,MAAOrpC,GACH,MAAM,IAAInC,MAAM,mCAGpB,GAAIwW,GAAUd,EAAM,IAAK,OAASc,GAAUtE,GAAO,EAAG,IAClD,MAAM,IAAIlS,MAAM,4CAEpBiI,EAAOg5B,SAAWzqB,GAAUd,EAAM,GAAI,KAEtC,IACI,MAAMgrC,EAAY2M,GAAY33C,EAAM,KACpC,GAAiB,MAAbgrC,EACA,MAAM,IAAI1gD,MAAM,SAEpBiI,EAAOy4C,UAAYA,EAEvB,MAAOv+C,GACH,MAAM,IAAInC,MAAM,oCAGpB,OADAiI,EAAO46B,UAAY,0CAA0CljC,MAAM,KAAKV,KAAKC,GAAM+I,EAAO/I,KACnF+I,EAxLgB6lD,CAAoBt3C,GAAUrU,EAAMuT,KAAM,IAEzD,MAAOvT,GACH,OAAOqG,GAAO5D,WAAWzC,EAAMoC,QAAS,iBAAkB,CACtDo0B,OAAQ,WACRsK,YAAAA,EAAalgC,KAAM,CAAE2S,KAAAA,KAI7B,GAAIg4C,EAASrD,OAAO9iD,gBAAkBkmD,EAASlmD,cAC3C,OAAOiB,GAAO5D,WAAW,4BAA6B,iBAAkB,CACpE8Q,KAAAA,EAAMutB,YAAAA,EACNF,eAAgB,sDAChBD,UAAW,iBACXD,UAAW6qB,EAAS7qB,YAG5B,MAAMkrB,QAAmBltD,KAAKmtD,cAAc/qB,EAAayqB,EAASliB,SAAUkiB,EAAStD,MACrF,OAAkB,MAAd2D,EACOvlD,GAAO5D,WAAW,iCAAkC,iBAAkB,CACzE+zB,OAAQ,eACRsK,YAAAA,EAAalgC,KAAM,CAAE2S,KAAMvT,EAAMuT,KAAMmtB,UAAW6qB,EAAS7qB,aAG5DvhC,GAAuBT,KAAM6nD,GAA6B,IAAKW,GAAwBjoD,KAAKP,KAAM,CACrG8L,GAAI8gD,EACJ/3C,KAAMU,GAAO,CACTs3C,EAASzsB,SAAU6I,GAAY,CAACikB,EAAYL,EAAShN,eAE1DoC,EAAU0K,EAAU,GAE3B,MAAMrrD,IAEXmnD,GAA6B5qD,eAA0Cg1B,EAAOu6B,GAC7E,MAAMxgD,SAAgB5M,KAAKmqC,cAAcC,UACzC,OAAI51B,GAAYqe,EAAO,UACNpyB,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAC9GmF,OAAQ,WAAYo7C,UAAW1tB,EAAOu6B,oBAAAA,UAGjC3sD,GAAuBT,KAAM6nD,GAA6B,IAAKU,IAA2BhoD,KAAKP,KAAM,CAC9GmF,OAAQ,WAAY88C,SAAUr1C,EAAOq1C,SAASpvB,GAAQu6B,oBAAAA,KAE3D1E,GAA2B7qD,eAAwCuR,EAAOi+C,GACzE,IAAIxB,QAAY9C,GAAgB35C,EAAOpP,MAMvC,MAHiB,UAAb6rD,EAAIjtD,MAAoByuD,GAAYA,EAASnuD,OAAS,IAA6B,IAAxBmuD,EAAS,GAAG5M,UACvEoL,QAAY9C,GAAgB,CAAE3I,OAAQ,WAAY34C,IAAK4lD,EAAS,IAAMrtD,OAEnES,GAAuBT,KAAM8nD,GAAwB,KAAKpnD,IAAImrD,EAAI5C,MAAQ,MAClFN,GAA2B9qD,eAAwCuR,GAClE,MAAMk+C,QAAqBvE,GAAgB35C,EAAOpP,MAE5CipD,EAAMqE,EAAarE,IACzB,IAAI4C,EAAMprD,GAAuBT,KAAM8nD,GAAwB,KAAKpnD,IAAIuoD,GACxE,IAAK4C,EAAK,CAINA,EAAM,CAAEC,WAHW9rD,KAAK+rD,eAAeuB,GAGnBrE,IAAAA,EAAKsE,eAFF,IAAI9rD,QAEc+rD,QADzB,IAAIp2C,IAC8B+0C,SAAS,EAAOC,UAAW,IAC7E3rD,GAAuBT,KAAM8nD,GAAwB,KAAKtnD,IAAIyoD,EAAK4C,GAEvE,OAAOA,GAyCX,MAAM4B,GAAQ,IAAIvmD,WAAW,IAE7B,SAAS+hC,GAAYzzB,GACjB,MAAMpO,EAAS,GACf,IAAI8hC,EAAY,EAEhB,IAAK,IAAIjqC,EAAI,EAAGA,EAAIuW,EAAMtW,OAAQD,IAC9BmI,EAAOxE,KAAK6qD,IACZvkB,GAAa,GAEjB,IAAK,IAAIjqC,EAAI,EAAGA,EAAIuW,EAAMtW,OAAQD,IAAK,CACnC,MAAM4V,EAAOlN,GAAO/B,SAAS4P,EAAMvW,IAEnCmI,EAAOnI,GAAK6pC,GAAOI,GAEnB9hC,EAAOxE,KAAKkmC,GAAOj0B,EAAK3V,SACxBkI,EAAOxE,KAAKomC,GAASn0B,IACrBq0B,GAAa,GAAmC,GAA9BniC,KAAKkS,KAAKpE,EAAK3V,OAAS,IAE9C,OAAOqW,GAAOnO,GAElB,MAAMiK,GAAQ,qEC/7Bd,IAWIq8C,GAA2BC,GAA+BC,GAAyBC,GAAuBC,GAA8BC,GAXxIttD,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAEpFF,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAMjG,MAAMiwD,GACTptD,YAAYgpC,GACR8jB,GAA0BlqD,IAAIxD,MAC9BZ,EAAiBY,KAAM,CAAE4pC,SAAWA,GAAY,OAEpD/rC,iBAAiBokD,GACb,OAAOxhD,GAAuBT,KAAM0tD,GAA2B,IAAKC,IAA+BptD,KAAKP,KAAM,cAAciuD,mBAAmBjuD,KAAKgzB,aAAcivB,GAEtKpkD,0BAA0BokD,GACtB,OAAOxhD,GAAuBT,KAAM0tD,GAA2B,IAAKC,IAA+BptD,KAAKP,KAAM,uBAAuBkuD,4BAA4BluD,KAAKgzB,aAAcivB,GAExLpkD,kBAAkBs2B,GACd,OAAO1zB,GAAuBT,KAAM0tD,GAA2B,IAAKC,IAA+BptD,KAAKP,KAAM,eAAemuD,kBAAkB1tD,GAAuBT,KAAM0tD,GAA2B,IAAKE,IAAyBrtD,KAAKP,KAAMm0B,IAEpPt2B,WAAWs2B,GACP,OAAO1zB,GAAuBT,KAAM0tD,GAA2B,IAAKC,IAA+BptD,KAAKP,KAAM,QAAQO,WAAWE,GAAuBT,KAAM0tD,GAA2B,IAAKE,IAAyBrtD,KAAKP,KAAMm0B,IAEtOt2B,0BAA0Bs2B,GACtB,MAAMyV,EAAWnpC,GAAuBT,KAAM0tD,GAA2B,IAAKC,IAA+BptD,KAAKP,KAAM,uBAExH,IAAI+J,EAAM9L,OAAO8N,OAAO,GAAIooB,GAS5B,GARc,MAAVpqB,EAAI+B,KACJ/B,EAAI+B,GAAK89B,EAAS9U,YAAY/qB,EAAI+B,IAAIqC,MAAMrC,GAC9B,MAANA,EACOnE,GAAO3D,mBAAmB,yCAA0C,QAAS+F,EAAI+B,IAErFA,KAGC,MAAZ/B,EAAI8B,KAAc,CAClB,MAAMA,EAAO9B,EAAI8B,KACjB9B,EAAI8B,KAAO3N,QAAQC,IAAI,CACnB6B,KAAKgzB,aACLhzB,KAAK80B,YAAYjpB,KAClBsC,MAAK,EAAEkkB,EAASxmB,KACVA,GAAQwmB,EAAQ3rB,gBAAkBmF,EAAKnF,cAGrC2rB,EAFI1qB,GAAO3D,mBAAmB,4BAA6B,UAAW6H,KAcrF,OATiB,MAAb9B,EAAIsqB,QACJtqB,EAAIsqB,MAAQr0B,KAAKouD,uBAErBrkD,EAAMjM,EAAkBiM,GACJ,MAAhBA,EAAI+zC,WACJ/zC,EAAI+zC,SAAWlU,EAASukB,YAAYpkD,IAExCA,EAAMjM,EAAkBiM,SAEXjM,EAAkBiM,GAEnClM,kBAAkBkF,GACd,MAAM6mC,EAAWnpC,GAAuBT,KAAM0tD,GAA2B,IAAKC,IAA+BptD,KAAKP,KAAM,eACxH,aAAa4pC,EAAS9U,YAAY/xB,GAEtClF,sBAAsBs2B,GAClB,MAAMyV,EAAWnpC,GAAuBT,KAAM0tD,GAA2B,IAAKC,IAA+BptD,KAAKP,KAAM,mBAClHquD,EAAQ/P,GAAYzyC,WAAW7L,KAAKsuD,oBAAoBn6B,IAC9D,aAAayV,EAAS2kB,2BAA2BvuD,KAAKwuD,gBAAgBH,KAG9EX,GAA4B,IAAI9mD,QAAW+mD,GAAgC,SAAuChpD,GAC9G,OAAI3E,KAAK4pC,SACE5pC,KAAK4pC,SAETjiC,GAAO5D,WAAW,mBAAoB,wBAAyB,CAAEY,UAAAA,KACzEipD,GAA0B/vD,eAAuCs2B,GAEhE,MAAMs6B,EAAU,GAChB,GAAe,OAFft6B,EAAKl2B,OAAO8N,OAAO,GAAIooB,IAEhBtoB,KAAc,CACjB,MAAMA,EAAOsoB,EAAGtoB,KAChB4iD,EAAQ7rD,KAAK1E,QAAQC,IAAI,CACrB6B,KAAKgzB,aACLhzB,KAAK80B,YAAYjpB,KAClBsC,MAAK,EAAEkkB,EAASxmB,MACVA,GAAQwmB,EAAQ3rB,gBAAkBmF,EAAKnF,eACxCiB,GAAO3D,mBAAmB,4BAA6B,UAAW6H,GAEtEsoB,EAAGtoB,KAAOwmB,MAIlB,aADMn0B,QAAQC,IAAIswD,GACXt6B,GAEJ,MAAMu6B,WAAmBV,GAC5BptD,YAAYyxB,EAASuX,GACjB96B,MAAM86B,GACNikB,GAAsBrqD,IAAIxD,MAC1BZ,EAAiBY,KAAM,CAAEqyB,QAAAA,IAE7Bx0B,mBAAqB,OAAOmC,KAAKqyB,QACjCs8B,QAAQ/kB,GACJ,OAAO,IAAI8kB,GAAW1uD,KAAKqyB,QAASuX,GAExC/rC,sBAAsBs2B,GAClB1zB,GAAuBT,KAAM6tD,GAAuB,IAAKC,IAA8BvtD,KAAKP,KAAM,eAAgB,mBAEtHnC,kBAAkB6F,GACdjD,GAAuBT,KAAM6tD,GAAuB,IAAKC,IAA8BvtD,KAAKP,KAAM,WAAY,eAElHnC,oBAAoBihC,EAAQjgC,EAAOd,GAC/B0C,GAAuBT,KAAM6tD,GAAuB,IAAKC,IAA8BvtD,KAAKP,KAAM,aAAc,kBAGxH6tD,GAAwB,IAAIjnD,QAAWknD,GAA+B,SAAsC9iD,EAAQrG,GAChH,OAAOgD,GAAO5D,WAAW,0BAA0BiH,IAAU,wBAAyB,CAClFrG,UAAAA,KAGD,MAAMiqD,WAAsBZ,GAE/BptD,YAAYiuD,GACR//C,MAAM+/C,EAAOjlB,UACbmkB,GAAsBvtD,IAAIR,UAAM,GAChCD,GAAuBC,KAAM+tD,GAAuBc,EAAQ,KAEhEhxD,mBACI,aAAa4C,GAAuBT,KAAM+tD,GAAuB,KAAK/6B,aAE1E27B,QAAQ/kB,GACJ,OAAO,IAAIglB,GAAcnuD,GAAuBT,KAAM+tD,GAAuB,KAAKY,QAAQ/kB,IAE9F/rC,sBAAsBs2B,GAClB,aAAa1zB,GAAuBT,KAAM+tD,GAAuB,KAAKS,gBAAgBr6B,GAE1Ft2B,sBAAsBs2B,GAClB,aAAa1zB,GAAuBT,KAAM+tD,GAAuB,KAAKe,gBAAgB36B,GAE1Ft2B,kBAAkB6F,GACd,aAAajD,GAAuBT,KAAM+tD,GAAuB,KAAKgB,YAAYrrD,GAEtF7F,oBAAoBihC,EAAQjgC,EAAOd,GAC/B,aAAa0C,GAAuBT,KAAM+tD,GAAuB,KAAKiB,cAAclwB,EAAQjgC,EAAOd,IAG3GgwD,GAAwB,IAAItsD,QCtJ5B,MAAMwtD,GAAQ,IAAI5mD,IACX,SAAS6mD,GAAoBC,GAC5BF,GAAM3uD,IAAI6uD,KAGdF,GAAMzrD,IAAI2rD,GACV3nD,QAAQC,IAAI,8BACZD,QAAQC,IAAI,6BAA6B0nD,yCACzC3nD,QAAQC,IAAI,IACZD,QAAQC,IAAI,6EACZD,QAAQC,IAAI,sEACZD,QAAQC,IAAI,IACZD,QAAQC,IAAI,2EACZD,QAAQC,IAAI,0EACZD,QAAQC,IAAI,iFACZD,QAAQC,IAAI,IACZD,QAAQC,IAAI,sDACZD,QAAQC,IAAI,+BClBhB,IAWI2nD,GAA+BC,GAA8BC,GAAqCC,GAA4BC,GAA6BC,GAA0BC,GAA8BC,GAXnN5vD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAOjF,MAAM2vD,GACThvD,YAAYgpC,GACRwlB,GAA8B5rD,IAAIxD,MAClCqvD,GAA6B7uD,IAAIR,UAAM,GACvCsvD,GAAoC9uD,IAAIR,UAAM,GAC9CuvD,GAA2B/uD,IAAIR,UAAM,GACrCwvD,GAA4BhvD,IAAIR,UAAM,GACtCD,GAAuBC,KAAMqvD,GAA8BzlB,EAAU,KACrE7pC,GAAuBC,KAAMsvD,GAAqC,KAAM,KACxEvvD,GAAuBC,KAAMuvD,GAA4B9uD,GAAuBT,KAAMovD,GAA+B,IAAKK,IAA0Bx1C,KAAKja,MAAO,KAChKD,GAAuBC,KAAMwvD,GAA6B,KAAM,KAEpEK,WAAWjmB,GACP,MAAM,IAAIzqC,MAAM,iCAEpB2wD,aAAalmB,EAAUxiC,GACnB,MAAM,IAAIjI,MAAM,iCAEpB4wD,SAASnmB,GACL,MAAM,IAAIzqC,MAAM,iCAEpByW,QAAUnV,GAAuBT,KAAMovD,GAA+B,IAAKK,IAA0BlvD,KAAKP,MAAO,GACjHgnD,OACIvmD,GAAuBT,KAAMovD,GAA+B,IAAKM,IAA8BnvD,KAAKP,MACpGS,GAAuBT,KAAMqvD,GAA8B,KAAKruD,IAAI,QAASP,GAAuBT,KAAMuvD,GAA4B,MAE1IrI,MAAMC,GACEA,GACA1mD,GAAuBT,KAAMovD,GAA+B,IAAKM,IAA8BnvD,KAAKP,MAExGS,GAAuBT,KAAMqvD,GAA8B,KAAKruD,IAAI,QAASP,GAAuBT,KAAMuvD,GAA4B,MAE1InI,SAAWpnD,KAAK4V,SAEpBy5C,GAA+B,IAAI5tD,QAAW6tD,GAAsC,IAAI7tD,QAAW8tD,GAA6B,IAAI9tD,QAAW+tD,GAA8B,IAAI/tD,QAAW2tD,GAAgC,IAAIxoD,QAAW6oD,GAA2B5xD,eAAwC2iD,GAC1S,IACkF,MAA1E//C,GAAuBT,KAAMsvD,GAAqC,MAClEvvD,GAAuBC,KAAMsvD,GAAqCtvD,KAAK6vD,WAAWpvD,GAAuBT,KAAMqvD,GAA8B,MAAO,KAExJ,MAAMW,QAAiBvvD,GAAuBT,KAAMsvD,GAAqC,KACzF,GAAgB,MAAZU,EAEA,YADAvvD,GAAuBT,KAAMqvD,GAA8B,KAAKrD,mBAAmBhsD,KAAMA,KAAK+vD,SAAStvD,GAAuBT,KAAMqvD,GAA8B,OAGtK,MAAMvjB,QAAgBrrC,GAAuBT,KAAMqvD,GAA8B,KAAKllB,aAItF,GAHK1pC,GAAuBT,KAAMwvD,GAA6B,MAC3DzvD,GAAuBC,KAAMwvD,GAA6B1jB,EAAS,KAEnErrC,GAAuBT,KAAMwvD,GAA6B,KAAKzyB,UAAY+O,EAAQ/O,QACnF,MAAM,IAAI59B,MAAM,iBAEpB,MAAMiI,QAAe3G,GAAuBT,KAAMqvD,GAA8B,KAAKY,KAAK,uBAAwB,CAACD,UAC7GhwD,KAAK8vD,aAAarvD,GAAuBT,KAAMqvD,GAA8B,KAAMjoD,GAE7F,MAAO9F,GACHkG,QAAQC,IAAI,QAASnG,GAEzBb,GAAuBT,KAAMqvD,GAA8B,KAAKhE,KAAK,QAAS5qD,GAAuBT,KAAMuvD,GAA4B,OACxIG,GAA+B,WAC9B,MAAMQ,EAAkBzvD,GAAuBT,KAAMsvD,GAAqC,KACtFY,IACAnwD,GAAuBC,KAAMsvD,GAAqC,KAAM,KACxEY,EAAgB/hD,MAAM6hD,IAClBvvD,GAAuBT,KAAMqvD,GAA8B,KAAKY,KAAK,sBAAuB,CAACD,SAIlG,MAAMG,WAAgCP,GACzChvD,YAAYgpC,EAAU7oC,GAvE1B,IAAc2M,EAwENoB,MAAM86B,GACN+lB,GAA+BnvD,IAAIR,UAAM,GACzCD,GAAuBC,KAAM2vD,IA1EvBjiD,EA0E4D3M,EAzE/D6C,KAAKqJ,MAAMrJ,KAAKC,UAAU6J,KAyE8C,KAE/EqiD,SAASnmB,GACL,OAAO,IAAI+d,GAAuB/d,EAAUnpC,GAAuBT,KAAM2vD,GAAgC,MAE7G9xD,iBAAiB+rC,GACb,MAAMomB,QAAiBpmB,EAASqmB,KAAK,gBAAiB,CAACxvD,GAAuBT,KAAM2vD,GAAgC,OAEpH,OADAnoD,QAAQC,IAAI,UAAWuoD,GAChBA,EAEXnyD,mBAAmB+rC,EAAUwmB,GACzB,MAAMtkB,QAAgBlC,EAASO,aAC/B,IAAK,MAAM/iC,KAAUgpD,EAAS,CAC1B,MAAM3oD,EAAMqkC,EAAQ1B,UAAU3iC,IAAIL,EAAQwiC,GAC1CA,EAASyd,KAAK5mD,GAAuBT,KAAM2vD,GAAgC,KAAMloD,KAI7FkoD,GAAiC,IAAIluD,QAC9B,MAAM4uD,WAAkCT,GAC3C/xD,iBAAiB+rC,GACb,aAAaA,EAASqmB,KAAK,kCAAmC,IAElEpyD,mBAAmB+rC,EAAUwmB,GACzB,MAAMtkB,QAAgBlC,EAASO,aAC/B,IAAK,MAAM/iC,KAAUgpD,EACjBxmB,EAASyd,KAAK,UAAWvb,EAAQ1B,UAAU/uB,KAAKjU,KC/G5D,IAWIkpD,GAA4BC,GAA6BC,GAA0BC,GAXnF1wD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAkBxF,MAAMywD,GAAY,+CAA+C5xD,MAAM,MAEvE,SAAS6xD,GAAS5yD,GACd,GAAa,MAATA,GAAiB2yD,GAAU5rD,mBAA2B,EACtD,OAAO/G,EAGX,GAAkC,mBAAtBA,EAAgB,WACxB,OAAOA,EAEX,GAAIyP,MAAMN,QAAQnP,GACd,OAAQA,EAAMK,IAAIuyD,IAEtB,GAAuB,iBAAX,EACR,OAAO1yD,OAAOD,KAAKD,GAAOQ,QAAO,CAACC,EAAOgB,KACrChB,EAAMgB,GAAOzB,EAAMyB,GACZhB,IACR,IAEP,MAAM,IAAIW,MAAM,sBAAsBpB,mBAE1C,SAAS6yD,GAAa7yD,GAClB,OAAIA,EACOA,EAAM2I,cAEV3I,EAKX,MAAM8yD,GAAiB,CAGnBC,SAAS,EAETC,aAAe,GAAK,GAEpBC,eAAgB,KAGb,MAAMC,GACTrwD,YAAYgpC,EAAUvX,GAClBjzB,EAAiBY,KAAM,CAAE4pC,SAAAA,EAAUvX,QAAAA,IAEvCs8B,QAAQ/kB,GACJ,OAAOjiC,GAAO5D,WAAW,iCAAkC,wBAAyB,CAChFY,UAAW,mBAGnB9G,mBACI,OAAOmC,KAAKqyB,QAEhBx0B,mBACI,aAAamC,KAAK4pC,SAASO,aAE/BtsC,mBACI,aAAamC,KAAK4pC,SAASsnB,aAE/BrzD,kBAAkBs2B,GACd,aAAan0B,KAAK4pC,SAASukB,YAAYh6B,GAE3Ct2B,WAAWs2B,GACP,aAAan0B,KAAK4pC,SAASrpC,KAAK4zB,GAEpCt2B,kBAAkBkF,GACd,aAAa/C,KAAK4pC,SAAS9U,YAAY/xB,GAE3ClF,iBAAiBokD,GACb,aAAajiD,KAAK4pC,SAASqkB,aAAajuD,KAAKqyB,SAEjDx0B,0BAA0BokD,GACtB,aAAajiD,KAAK4pC,SAASskB,sBAAsBluD,KAAKqyB,SAI1Dx0B,+BAA+BwsD,GAC3B,MAAMl2B,EAAKw8B,GAAStG,GACd58C,EAAW,GAEjB,GAAI0mB,EAAGtoB,KAAM,CACT,MAAM0oB,EAAQJ,EAAGtoB,KACjB4B,EAAS7K,KAAK,WACV,MAAMiJ,QAAa+oB,GAAeL,EAAOv0B,KAAK4pC,UAClC,MAAR/9B,GAAgBA,EAAKnF,gBAAkB1G,KAAKqyB,QAAQ3rB,eACpDiB,GAAO3D,mBAAmB,wBAAyB,cAAeqmD,GAEtEl2B,EAAGtoB,KAAOA,GALA,SASdsoB,EAAGtoB,KAAO7L,KAAKqyB,QAWnB,GANmB,MAAf8B,EAAG2pB,UACHrwC,EAAS7K,KAAK,WACVuxB,EAAG2pB,eAAiB99C,KAAK4pC,SAASukB,YAAYlwD,OAAO8N,OAAO9N,OAAO8N,OAAO,GAAIooB,GAAK,CAAEtoB,KAAM7L,KAAKqyB,YADtF,IAKL,MAAT8B,EAAGroB,GAAY,CACf,MAAMqlD,EAAMh9B,EAAGroB,GACf2B,EAAS7K,KAAK,WACVuxB,EAAGroB,SAAW8oB,GAAeu8B,EAAKnxD,KAAK4pC,WAD7B,IAKdn8B,EAASvO,cACHhB,QAAQC,IAAIsP,GAEtB,MAAM2jD,EAAQpxD,KAAK4pC,SAASynB,kBAAkBl9B,GAC9C,OAAOn0B,KAAK4pC,SAASqmB,KAAK,sBAAuB,CAACmB,IAEtDvzD,sBAAsBs2B,GAElB,MAAMqsB,QAAoBxgD,KAAK4pC,SAAS2X,iBAElClmC,QAAarb,KAAKsxD,yBAAyBn9B,GAIjD,iBAAkBj2B,SAAQ,CAACI,EAAS6sD,KAChC,MAAMoG,EAAU1zD,MAAOqpC,IAEnB,MAAM/S,QAAWn0B,KAAK4pC,SAASoW,eAAe3kC,GACpC,MAAN8Y,EAKJn0B,KAAK4pC,SAAS4hB,aAAY,KAAQ+F,EAAQ,OAAUrqB,GAJhD5oC,EAAQ0B,KAAK4pC,SAASggB,iBAAiBz1B,EAAI9Y,EAAMmlC,KAMzD+Q,EAAQ,QAGhB1zD,sBAAsBwsD,GAClB,MAAMl2B,EAAKw8B,GAAStG,GAEpB,GAAIl2B,EAAGtoB,KAAM,CACT,MAAMA,QAAa+oB,GAAeT,EAAGtoB,KAAM7L,KAAK4pC,UAChD,GAAY,MAAR/9B,GAAgBA,EAAKnF,gBAAkB1G,KAAKqyB,QAAQ3rB,cACpD,OAAOiB,GAAO3D,mBAAmB,wBAAyB,cAAeqmD,GAE7El2B,EAAGtoB,KAAOA,OAGVsoB,EAAGtoB,KAAO7L,KAAKqyB,QAEnB,MAAM++B,EAAQpxD,KAAK4pC,SAASynB,kBAAkBl9B,GAC9C,aAAan0B,KAAK4pC,SAASqmB,KAAK,uBAAwB,CAACmB,IAE7DvzD,kBAAkB2zD,GACd,MAAM9tD,EAAkC,iBAAtB,EAAkCu1B,GAAYu4B,GAAYA,EAC5E,aAAaxxD,KAAK4pC,SAASqmB,KAAK,gBAAiB,CAC7C76C,GAAQ1R,GAAU1D,KAAKqyB,QAAQ3rB,gBAGvC7I,oBAAoBihC,EAAQjgC,EAAOqR,GAC/B,MAAMnS,EAAQ4yD,GAASzgD,GAEjBuhD,QAAkB/zB,GAAiBg0B,aAAa5yB,EAAQjgC,EAAOd,GAAOF,MAAOE,IAC/E,MAAMs0B,QAAgBuC,GAAe72B,GACrC,OAAe,MAAXs0B,EACO1qB,GAAO3D,mBAAmB,0CAA2C,QAASjG,GAElFs0B,KAEX,aAAaryB,KAAK4pC,SAASqmB,KAAK,uBAAwB,CACpDjwD,KAAKqyB,QAAQ3rB,cACb9C,KAAKC,UAAU65B,GAAiBi0B,WAAWF,EAAU3yB,OAAQjgC,EAAO4yD,EAAU1zD,UAGtFF,aAAasf,GACT,OAAOnd,KAAK4pC,SAASqmB,KAAK,yBAA0B,CAChDjwD,KAAKqyB,QAAQ3rB,cAAeyW,EAAU,OAI9Ctf,yBAAyB2zD,GACrB,MAAM9tD,EAAkC,iBAAtB,EAAkCu1B,GAAYu4B,GAAYA,EAC5E,aAAaxxD,KAAK4pC,SAASqmB,KAAK,WAAY,CACxCjwD,KAAKqyB,QAAQ3rB,cAAe0O,GAAQ1R,MAIzC,MAAMkuD,WAA2BxI,GACpCxoD,YAAYkrC,GACRh9B,MAAMg9B,GACNwkB,GAA2B9vD,IAAIR,UAAM,GACrCuwD,GAA4B/vD,IAAIR,UAAM,GACtCD,GAAuBC,KAAMswD,GAA4B,EAAG,KAC5DvwD,GAAuBC,KAAMuwD,GAA6BtyD,OAAO8N,OAAO,GAAI8kD,IAAiB,KAEjGgB,YAAYryD,GACR,OAAOiB,GAAuBT,KAAMuwD,GAA6B,KAAK/wD,GAE1EsyD,YAAY18B,GAER,IAAK,MAAM9Y,KAAQ8Y,EAAS,CACxB,MAAM51B,EAAM8c,EACNve,EAAQq3B,EAAQ51B,GACtB,UAAY,UAAmBiB,GAAuBT,KAAMuwD,GAA6B,KAAK/wD,GAC1F,OAAOmI,GAAO3D,mBAAmB,uBAAwB,WAAWxE,IAAOzB,GAInF,IAAK,MAAMue,KAAQ8Y,EAAS,CACxB,MAAM51B,EAAM8c,EACZ7b,GAAuBT,KAAMuwD,GAA6B,KAAK/wD,GAAQ41B,EAAQ51B,IAGvFuyD,eAAe5sD,EAAQ6J,GACnB,IAAIzE,EAAIkhD,EACR,MAAO,CACHtmD,OAAAA,EAAQ6J,OAAAA,EAAQ4sB,IAAK77B,GAAuBC,KAAMswD,IAA6B7E,EAAKhrD,GAAuBT,KAAMswD,GAA4B,KAAM/lD,EAAKkhD,IAAMA,GAAK,KAAMlhD,GAAKynD,QAAS,OAO/Ln0D,WAAWsH,EAAQ6J,GAEf,MAAM,IAAI7P,MAAM,iCAEpBtB,gBAAgBw0B,EAAU,GACtB,MAAMyZ,QAAgB9rC,KAAKmqC,aACrB8nB,QAAiBjyD,KAAKiwD,KAAK,eAAgB,IAEjD,GAAyB,iBAAb,EAAuB,CAC/B,GAAI59B,EAAU4/B,EAAS/yD,OACnB,MAAM,IAAIC,MAAM,mBAEpB,OAAO,IAAI8xD,GAAcjxD,KAAMiyD,EAAS5/B,IAG5CA,EAAUyZ,EAAQ1B,UAAU/X,QAAQA,GACpC,IAAK,MAAM6/B,KAAWD,EAClB,GAAInmB,EAAQ1B,UAAU/X,QAAQ6/B,KAAaA,EACvC,OAAO,IAAIjB,GAAcjxD,KAAMkyD,GAGvC,MAAM,IAAI/yD,MAAM,mBAIpBtB,uBACI,OAAO+mD,GAAQ/4C,KAAKlE,GAAO1B,gBAAgBjG,KAAK0sD,SAAS,CAAEvnD,OAAQ,cAEvE4mD,eAAeF,GAEX,MAAiB,YAAbA,EAAIjtD,KACG,IAAIyxD,GAA0BrwD,MAExB,UAAb6rD,EAAIjtD,KACG,IAAIuxD,GAAwBnwD,KAAM6rD,EAAI9qD,QAIhC,WAAb8qD,EAAIjtD,MAA2C,aAAtBitD,EAAI9qD,OAAOq/C,OAC7B,IAAIyI,GAAoB,UAE5B/5C,MAAMi9C,eAAeF,GAEhCwF,kBAAkBl9B,GACd,MAAM/sB,EAAS,GAuBf,MArBA,CAAC,UAAW,WAAY,WAAY,OAAQ,eAAgB,uBAAwB,QAAS,SAASkB,SAAS9I,IAC3G,GAAe,MAAX20B,EAAG30B,GACH,OAEJ,IAAI2yD,EAAS3yD,EACD,aAARA,IACA2yD,EAAS,OAEb/qD,EAAO+qD,GAAU78C,GAAS6e,EAAG30B,OAGjC,CAAC,OAAQ,KAAM,QAAQ8I,SAAS9I,IACb,MAAX20B,EAAG30B,KAGP4H,EAAO5H,GAAO4V,GAAQ+e,EAAG30B,QAGzB20B,EAAGiqB,aACHh3C,EAAmB,WAAIm2C,GAAcppB,EAAGiqB,aAErCh3C,EAEXgrD,cAAc5sB,GACV,OAAQA,EAAIrgC,QACR,IAAK,UACD,MAAO,CAAEA,OAAQ,cAAee,KAAM,IAC1C,IAAK,iBACD,MAAO,CAAEf,OAAQ,kBAAmBe,KAAM,IAC9C,IAAK,cACD,MAAO,CAAEf,OAAQ,eAAgBe,KAAM,IAC3C,IAAK,aACD,MAAO,CACHf,OAAQ,iBACRe,KAAM,CAAC0qD,GAAaprB,EAAInT,SAAUmT,EAAIyc,WAE9C,IAAK,sBACD,MAAO,CACH98C,OAAQ,0BACRe,KAAM,CAAC0qD,GAAaprB,EAAInT,SAAUmT,EAAIyc,WAE9C,IAAK,UACD,MAAO,CACH98C,OAAQ,cACRe,KAAM,CAAC0qD,GAAaprB,EAAInT,SAAUmT,EAAIyc,WAE9C,IAAK,eACD,MAAO,CACH98C,OAAQ,mBACRe,KAAM,CACF0qD,GAAaprB,EAAInT,SAChB,KAAOmT,EAAI0c,SAAS13C,SAAS,IAC9Bg7B,EAAIyc,WAGhB,IAAK,kBACD,MAAO,CACH98C,OAAQ,yBACRe,KAAM,CAACs/B,EAAI6sB,oBAEnB,IAAK,WACD,GAAI,aAAc7sB,EACd,MAAO,CACHrgC,OAAQ,uBACRe,KAAM,CAACs/B,EAAIyc,WAAYzc,EAAI4nB,sBAG9B,GAAI,cAAe5nB,EACpB,MAAO,CACHrgC,OAAQ,qBACRe,KAAM,CAACs/B,EAAI+a,YAAa/a,EAAI4nB,sBAGpC,MACJ,IAAK,iBACD,MAAO,CACHjoD,OAAQ,2BACRe,KAAM,CAACs/B,EAAInqB,OAEnB,IAAK,wBACD,MAAO,CACHlW,OAAQ,4BACRe,KAAM,CAACs/B,EAAInqB,OAEnB,IAAK,OACD,MAAO,CACHlW,OAAQ,WACRe,KAAM,CAAClG,KAAKqxD,kBAAkB7rB,EAAIpD,aAAcoD,EAAIyc,WAE5D,IAAK,cACD,MAAO,CACH98C,OAAQ,kBACRe,KAAM,CAAClG,KAAKqxD,kBAAkB7rB,EAAIpD,eAG1C,IAAK,UASD,OARIoD,EAAIzkC,QAAgC,MAAtBykC,EAAIzkC,OAAOsxB,UACrB7kB,MAAMN,QAAQs4B,EAAIzkC,OAAOsxB,SACzBmT,EAAIzkC,OAAOsxB,QAAUmT,EAAIzkC,OAAOsxB,QAAQj0B,IAAIwyD,IAG5CprB,EAAIzkC,OAAOsxB,QAAUu+B,GAAaprB,EAAIzkC,OAAOsxB,UAG9C,CAAEltB,OAAQ,cAAee,KAAM,CAACs/B,EAAIzkC,SAEnD,OAAO,KAEXuxD,YAAYntD,EAAQe,EAAM5E,GACtB,GAAe,aAAX6D,EAAuB,CACvB,MAAMiC,EAASmrD,GAAYjxD,GAC3B,OAAI8F,EAGOO,GAAOlE,UAAU,0CAA2C,iBAAkB,CACjFoR,KAAMzN,EAAOyN,KACbutB,YAAal8B,EAAK,KAGnByB,GAAOlE,UAAU,2CAA4C,iBAAkB,CAClFoR,KAAM,KAAMutB,YAAal8B,EAAK,GAAIhE,KAAM,CAAEZ,MAAAA,KAKlD,MAAMoC,EAAUE,KAAKC,UA4K7B,SAAwB9F,GACpB,MAAMqJ,EAAS,GAEf,OADAorD,GAAgBz0D,EAAOqJ,GAChBA,EA/K4BqrD,CAAenxD,IAC9C,OAAIoC,EAAQyD,MAAM,iDACPQ,GAAOlE,UAAU,oDAAqD,qBAAsB,CAC/F2+B,YAAal8B,EAAK,KAGtBxC,EAAQyD,MAAM,UAAYzD,EAAQyD,MAAM,WACjCQ,GAAOlE,UAAU,8BAA+B,gBAAiB,CACpE2+B,YAAal8B,EAAK,KAItBxC,EAAQyD,MAAM,4BAA8BzD,EAAQyD,MAAM,eACnDQ,GAAOlE,UAAU,0BAA2B,0BAA2B,CAC1E2+B,YAAal8B,EAAK,KAGtBxC,EAAQyD,MAAM,yBACPQ,GAAOlE,UAAU,gDAAiD,wBAAyB,CAC9FkB,UAAWQ,EAAQjD,KAAM,CAAEkgC,YAAal8B,EAAK,MAGtC,gBAAXf,GAA4BzB,EAAQyD,MAAM,gFACnCQ,GAAOlE,UAAU,4EAA6E,0BAA2B,CAC5H2+B,YAAal8B,EAAK,KAGnB5E,EAEXzD,eAAe2nC,GAGX,GAAmB,SAAfA,EAAIrgC,QAAoC,gBAAfqgC,EAAIrgC,OAA0B,CACvD,IAAIgvB,EAAKqR,EAAIpD,YACb,GAAIjO,GAAiB,MAAXA,EAAGv1B,MAAgB+I,GAAO1B,UAAUkuB,EAAGv1B,OAEtB,MAAnBu1B,EAAGgqB,cAAmD,MAA3BhqB,EAAG+pB,qBAA8B,CAC5D,MAAMwU,QAAgB1yD,KAAKkxD,aACC,MAAxBwB,EAAQvU,cAAwD,MAAhCuU,EAAQxU,uBAExC1Y,EAAMvnC,OAAO8N,OAAO,GAAIy5B,EAAK,CACzBpD,YAAankC,OAAO8N,OAAO,GAAIooB,EAAI,CAAEv1B,UAAMc,QAM/D,MAAM8kC,EAAUxkC,KAAKoyD,cAAc5sB,GACnC,GAAe,MAAXhB,EAAiB,CACjBxkC,KAAKqnD,KAAK,QAAS,CAAEzoD,KAAM,cAAe4lC,QAAAA,IAC1C,IACI,MAAMp9B,QAAepH,KAAKiwD,KAAKzrB,EAAQr/B,OAAQq/B,EAAQt+B,MAGvD,OADAlG,KAAKqnD,KAAK,QAAS,CAAEzoD,KAAM,cAAewI,OAAAA,IACnCA,EAEX,MAAO9F,GAEH,MADAtB,KAAKqnD,KAAK,QAAS,CAAEzoD,KAAM,WAAY0C,MAAAA,IACjCtB,KAAKsyD,YAAY9tB,EAAQr/B,OAAQq/B,EAAQt+B,KAAM5E,IAG7D,OAAOwN,MAAM49C,SAASlnB,IAG9B8qB,GAA6B,IAAI7uD,QAAW8uD,GAA8B,IAAI9uD,QACvE,MAAMkxD,WAAwBf,GACjChxD,YAAY+kC,EAAKmG,GACF,MAAPnG,IACAA,EAAM,yBAEV72B,MAAMg9B,GACN0kB,GAAyBhwD,IAAIR,UAAM,GACnCywD,GAAiCjwD,IAAIR,UAAM,GACtB,iBAAT,EACRD,GAAuBC,KAAMwwD,GAA0B,CAAEhsB,QAAS,IAAI8B,GAAaX,IAAQ,MAG3F5lC,GAAuBC,KAAMwwD,GAA0BvyD,OAAO8N,OAAO,GAAI45B,GAAM,KAC/EllC,GAAuBT,KAAMwwD,GAA0B,KAAKhsB,QAAU/jC,GAAuBT,KAAMwwD,GAA0B,KAAKhsB,QAAQh7B,SAE9IzJ,GAAuBC,KAAMywD,GAAkC,IAAM,KAEzE5yD,WAAWsH,EAAQ6J,GA9dvB,IAAcjR,EAAAA,EA+dQiR,EAAdA,EA9dGpL,KAAKqJ,MAAMrJ,KAAKC,UAAU9F,IAge7B,MAAMupC,EAAarpC,OAAO8N,OAAO,GAAItL,GAAuBT,KAAMwwD,GAA0B,MAC5FlpB,EAAW9C,QAAU8C,EAAW9C,QAAQh7B,QACxC89B,EAAW9C,QAAQD,KAAOvkC,KAAK+xD,eAAe5sD,EAAQ6J,GACtD,MAAM5H,SAAgBigC,GAAUC,IAAa3C,SAC7C,MAAI,UAAWv9B,EACJO,GAAO5D,WAAW,sBAAuB,gBAAiB,CAC7DqD,OAAAA,IAGDA,EAAOA,OAEd2/C,sBAAoB,OAAOtmD,GAAuBT,KAAMywD,GAAkC,KAC1F1J,oBAAgBhpD,GAChB,IAAKyG,OAAOC,UAAU1G,IAAUA,EAAQ,EACpC,MAAM,IAAIoB,MAAM,oBAEpBY,GAAuBC,KAAMywD,GAAkC1yD,EAAO,KACtEiC,KAAK4rD,oBAAoBC,KApdjC,SAAoB9tD,GAChB,OAAQA,GAA4C,iBAA3BA,EAAqB,iBAodlC60D,CAAW/G,KACXA,EAAI9E,gBAAkBtmD,GAAuBT,KAAMywD,GAAkC,UAKrGD,GAA2B,IAAI/uD,QAAWgvD,GAAmC,IAAIhvD,QAK1E,MAAMoxD,WAA8BF,GACvC/xD,YAAY+kC,EAAKmG,GACbh9B,MAAM62B,EAAKmG,GACX1sC,EAAiBY,KAAM,CAAE8rC,QAAAA,IAE7BjuC,uBACI,OAAOmC,KAAK8rC,SAGpB,SAASymB,GAAYx0D,GACjB,GAAa,MAATA,EACA,OAAO,KAGX,GAA+B,iBAAnBA,EAAa,SAAkBA,EAAM2F,QAAQyD,MAAM,aAAeqN,GAAYzW,EAAM8W,MAC5F,MAAO,CAAEnR,QAAS3F,EAAM2F,QAASmR,KAAM9W,EAAM8W,MAGjD,GAAuB,iBAAX,EAAqB,CAC7B,IAAK,MAAMrV,KAAOzB,EAAO,CACrB,MAAMqJ,EAASmrD,GAAYx0D,EAAMyB,IACjC,GAAI4H,EACA,OAAOA,EAGf,OAAO,KAGX,GAAuB,iBAAX,EACR,IACI,OAAOmrD,GAAY3uD,KAAKqJ,MAAMlP,IAElC,MAAOuD,IAEX,OAAO,KAEX,SAASkxD,GAAgBz0D,EAAOqJ,GAC5B,GAAa,MAATrJ,EAAJ,CAQA,GAJ+B,iBAAnBA,EAAa,SACrBqJ,EAAOxE,KAAK7E,EAAM2F,SAGC,iBAAX,EACR,IAAK,MAAMlE,KAAOzB,EACdy0D,GAAgBz0D,EAAMyB,GAAM4H,GAIpC,GAAuB,iBAAX,EACR,IACI,OAAOorD,GAAgB5uD,KAAKqJ,MAAMlP,GAAQqJ,GAE9C,MAAO9F,MCzkBf,MAAMwxD,GAAgB,mEAYf,MAAMC,WAAqBF,GAC9BjyD,YAAYyoD,EAAW,YAAa2J,GAChC,MAAMlnB,EAAU8Y,GAAQ/4C,KAAKw9C,GACf,MAAV2J,IACAA,EAASF,IAGbhkD,MADmBikD,GAAaE,cAAcnnB,EAASknB,GACrClnB,GAClB1sC,EAAiBY,KAAM,CAAEgzD,OAAAA,IAEzBlkD,MAAMgjD,YAAY,CAAEhB,SAAS,IAEjC/F,aAAahuB,GACT,IACI,OAAO,IAAIg2B,GAAah2B,EAAS/8B,KAAKgzD,QAE1C,MAAO1xD,IACP,OAAOwN,MAAMi8C,aAAahuB,GAE9Bx2B,qBAAqBulC,EAASknB,GACZ,MAAVA,IACAA,EAASF,IAEb,MAAMtuB,EAAU,IAAI8B,GAAa,WAlCzC,SAAiBvjC,GACb,OAAQA,GACJ,IAAK,YACD,MAAO,mBACX,IAAK,QACD,MAAO,uBACX,IAAK,WACD,MAAO,wBAEf,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWjB,GAyBlBmwD,CAAQpnB,EAAQ/oC,SAASiwD,KACtExuB,EAAQkC,WAAY,EAOpB,MAAO,CAAElC,QAAAA,EAASqD,cANIhqC,MAAO2mC,EAASE,EAAUioB,KACxCqG,IAAWF,IACX5D,GAAoB,iBAEjB,IAIfiE,sBACI,OAAQnzD,KAAKgzD,SAAWF,IC9ChC,MAAMA,GAAgB,mCA4Bf,MAAMM,WAAwBP,GACjCjyD,YAAYyoD,EAAW,YAAa2J,GAChC,MAAMlnB,EAAU8Y,GAAQ/4C,KAAKw9C,GACf,MAAV2J,IACAA,EAASF,IAEbhkD,MAAMskD,GAAgBH,cAAcnnB,EAASknB,GAASlnB,GACtD1sC,EAAiBY,KAAM,CAAEgzD,OAAAA,IAE7BjI,aAAahuB,GACT,IACI,OAAO,IAAIq2B,GAAgBr2B,EAAS/8B,KAAKgzD,QAE7C,MAAO1xD,IACP,OAAOwN,MAAMi8C,aAAahuB,GAE9Bo2B,sBACI,OAAQnzD,KAAKgzD,SAAWF,GAE5BvsD,qBAAqBulC,EAASknB,GACZ,MAAVA,IACAA,EAASF,IAEb,MAAMtuB,EAAU,IAAI8B,GAAa,WAlDzC,SAAiBvjC,GACb,OAAQA,GACJ,IAAK,YACD,MAAO,4BACX,IAAK,UACD,MAAO,4BACX,IAAK,UACD,MAAO,4BACX,IAAK,SACD,MAAO,2BACX,IAAK,QACD,MAAO,0BACX,IAAK,QACD,MAAO,gCACX,IAAK,WACD,MAAO,+BACX,IAAK,WACD,MAAO,4BACX,IAAK,mBACD,MAAO,4BACX,IAAK,WACD,MAAO,4BACX,IAAK,iBACD,MAAO,0BAEf,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWjB,GAyBlBmwD,CAAQpnB,EAAQ/oC,YAAYiwD,KACzExuB,EAAQkC,WAAY,EAOpB,MAAO,CAAElC,QAAAA,EAASqD,cANIhqC,MAAO2mC,EAASE,EAAUioB,KACxCqG,IAAWF,IACX5D,GAAoB,YAEjB,KC5DZ,MAAMmE,WAA2BR,GACpCjyD,YAAYyoD,EAAW,aACnB,MAAMvd,EAAU8Y,GAAQ/4C,KAAKw9C,GAC7B,GAAqB,cAAjBvd,EAAQ/oC,KACR,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWqlD,GAEvEv6C,MAAM,8BAAgCg9B,ICG9C,MACMwnB,GAAoB,+BACnB,MAAMC,WAAwBxP,GACjCnjD,YAAY4yD,EAASC,GACjB3kD,MAAMwkD,IAENl0D,EAAiBY,KAAM,CAAEwzD,QAAAA,EAASC,gBAAAA,IAEtCjqD,QACI,OAAO,IAAI+pD,GAAgBvzD,KAAKwzD,QAASxzD,KAAKyzD,kBAG/C,MAAMC,WAA0BtK,GACnCxoD,YAAYyoD,EAAU2J,GAClBlkD,QACA,MAAMg9B,EAAU8Y,GAAQ/4C,KAAKw9C,GAC7B,GAAc,MAAV2J,EAAgB,CAChB,MAAMzoB,EAASuB,EAAQE,UAAUsnB,IAE7BN,EADAzoB,EACSA,EAAOkpB,gBAnBV,qCAyBdr0D,EAAiBY,KAAM,CAAEgzD,OAAAA,EAAQlnB,QAAAA,IAEjC9rC,KAAK2zD,aAETA,aACI,MAAMppB,EAASvqC,KAAK8rC,QAAQE,UAAUsnB,IACtC,GAAI/oB,EACA,OAAOA,EAAOipB,QAElB,OAAQxzD,KAAK8rC,QAAQ/oC,MACjB,IAAK,YACD,MAAO,2BACX,IAAK,UACD,MAAO,mCACX,IAAK,UACD,MAAO,mCACX,IAAK,QACD,MAAO,iCACX,IAAK,SACD,MAAO,kCAGf,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWhE,KAAK8rC,SAE5EvG,OAAOxrB,EAAQ/K,GACX,MAAM4kD,EAAQ31D,OAAOD,KAAKgR,GAAQzQ,QAAO,CAACC,EAAOgB,KAC7C,MAAMzB,EAAQiR,EAAOxP,GAIrB,OAHa,MAATzB,IACAS,GAAS,IAAIgB,KAAOzB,KAEjBS,IACR,IACGw0D,EAAWhzD,KAAW,OAAI,WAAWA,KAAKgzD,SAAW,GAC3D,MAAO,GAAGhzD,KAAK2zD,2BAA2B55C,IAAS65C,IAAQZ,IAE/Da,aACI,MAAO,GAAG7zD,KAAK2zD,mBAEnBG,YAAY/5C,EAAQ/K,GAGhB,OAFAA,EAAO+K,OAASA,EAChB/K,EAAO+kD,OAAS/zD,KAAKgzD,OACdhkD,EAEXnR,sBACI,OAAOmC,KAAK8rC,QAEhBjuC,YAAYkc,EAAQ/K,EAAQglD,GACxB,MAAMruB,EAAOquB,EAAOh0D,KAAK6zD,aAAe7zD,KAAKulC,OAAOxrB,EAAQ/K,GACtDskB,EAAW0gC,EAAOh0D,KAAK8zD,YAAY/5C,EAAQ/K,GAAU,KAQrDw1B,EAAU,IAAI8B,GAAaX,GAC3B2B,EAAa,CACf9C,QAAAA,EACAmD,qBAAsB,IACtBI,gBAAiBlqC,MAAO2mC,EAASE,KAC7B,MAAMt9B,EAASs9B,EAASU,UAAYxhC,KAAKqJ,MAAMysB,GAAagL,EAASH,OAAS,GACxEW,GAAwC,iBAAnB99B,EAAa,OAAkBA,EAAOA,OAAS,IAAIV,cAAc5B,QAAQ,eAAiB,EAYrH,MAXe,UAAXiV,EAEI3S,GAA2B,GAAjBA,EAAO++B,QAAiC,SAAlB/+B,EAAO1D,SAAsBwhC,GAC7DR,EAASM,mBAAmB59B,EAAOA,QAInC89B,GACAR,EAASM,mBAAmB59B,EAAOA,QAGpCs9B,IAGXpR,IACAkR,EAAQmC,UAAU,eAAgB,oDAClCnC,EAAQD,KAAOtmC,OAAOD,KAAKs1B,GAASl1B,KAAKC,GAAM,GAAGA,KAAKi1B,EAAQj1B,OAAMyF,KAAK,MAE9E,MAAM4gC,QAAiB2C,GAAUC,GACjC,IAAK5C,EAASU,UACV,MAAM,IAAIjmC,MAUd,MAAMiI,EAASxD,KAAKqJ,MAAMysB,GAAagL,EAASH,OAChD,GAAe,UAAXxqB,EAAoB,CACpB,GAAsB,OAAlB3S,EAAO4qD,QAAkB,CAEzB,MAAM1wD,EAAQ,IAAInC,MAAM,oBAExB,MADAmC,EAAM8F,OAASxD,KAAKC,UAAUuD,GACxB9F,EAEV,GAAI8F,EAAO9F,MAAO,CAEd,MAAMA,EAAQ,IAAInC,MAAMiI,EAAO9F,MAAMoC,SAAW,iBAOhD,MANI0D,EAAO9F,MAAMC,OACbD,EAAMC,KAAO6F,EAAO9F,MAAMC,MAE1B6F,EAAO9F,MAAMuT,OACbvT,EAAMuT,KAAOzN,EAAO9F,MAAMuT,MAExBvT,EAEV,OAAO8F,EAAOA,OAId,GAAqB,GAAjBA,EAAO++B,SAAmC,qBAAnB/+B,EAAO1D,SAAqD,0BAAnB0D,EAAO1D,SACvE,OAAO0D,EAAOA,OAElB,GAAqB,GAAjBA,EAAO++B,QAAiC,MAAlB/+B,EAAO1D,QAAiB,CAC9C,MAAMpC,EAAQ,IAAInC,MAAM,oBAKxB,MAJAmC,EAAM8F,OAASxD,KAAKC,UAAUuD,GAIxB9F,EAEV,OAAO8F,EAAOA,OAItB6sD,wBAAwB7xB,GACpB,MAAMh7B,EAAS,GACf,IAAK,IAAI5H,KAAO4iC,EAAa,CACzB,GAAwB,MAApBA,EAAY5iC,GACZ,SAEJ,IAAIzB,EAAQqkC,EAAY5iC,GACZ,SAARA,GAA4B,IAAVzB,IAQlBA,EAJA,CAAEa,MAAM,EAAMk/C,UAAU,EAAMD,UAAU,EAAMqW,aAAa,EAAMhW,sBAAsB,EAAM7pB,OAAO,EAAMt2B,OAAO,GAAOyB,GAChH8V,GAASF,GAAQrX,IAEZ,eAARyB,EACG,IAAMQ,KAAK8rC,QAAQ1B,UAAUgU,WAAWrgD,GAAOK,KAAKoC,GACjD,aAAaA,EAAI6xB,0BAA0B7xB,EAAI68C,YAAYv5C,KAAK,cACxEA,KAAK,KAAO,IAGPsR,GAAQrX,GAEpBqJ,EAAO5H,GAAOzB,GAElB,OAAOqJ,EAEX+sD,YAAY3uB,EAAKlkC,EAAO8gC,GAoEpB,MAAM9gC,EAEVzD,uBACI,OAAOmC,KAAK8rC,QAEhBjuC,eAAe2nC,GACX,OAAQA,EAAIrgC,QACR,IAAK,UACD,OAAOnF,KAAK8rC,QAAQ/O,QACxB,IAAK,iBACD,OAAO/8B,KAAKimC,MAAM,QAAS,CAAEmuB,OAAQ,oBACzC,IAAK,cACD,OAAOp0D,KAAKimC,MAAM,QAAS,CAAEmuB,OAAQ,iBACzC,IAAK,aAED,OAAOp0D,KAAKimC,MAAM,UAAW,CACzBmuB,OAAQ,UACR/hC,QAASmT,EAAInT,QACb42B,IAAKzjB,EAAIyc,WAEjB,IAAK,sBACD,OAAOjiD,KAAKimC,MAAM,QAAS,CACvBmuB,OAAQ,0BACR/hC,QAASmT,EAAInT,QACb42B,IAAKzjB,EAAIyc,WAEjB,IAAK,UACD,OAAOjiD,KAAKimC,MAAM,QAAS,CACvBmuB,OAAQ,cACR/hC,QAASmT,EAAInT,QACb42B,IAAKzjB,EAAIyc,WAEjB,IAAK,eACD,OAAOjiD,KAAKimC,MAAM,QAAS,CACvBmuB,OAAQ,mBACR/hC,QAASmT,EAAInT,QACb6vB,SAAU1c,EAAI0c,SACd+G,IAAKzjB,EAAIyc,WAEjB,IAAK,kBACD,OAAOjiD,KAAKimC,MAAM,QAAS,CACvBmuB,OAAQ,yBACR5jD,IAAKg1B,EAAI6sB,oBACV,GAAMxoB,OAAOvoC,GACLtB,KAAKm0D,YAAY3uB,EAAKlkC,EAAOkkC,EAAI6sB,qBAEhD,IAAK,WACD,MAAI,aAAc7sB,EACPxlC,KAAKimC,MAAM,QAAS,CACvBmuB,OAAQ,uBACRnL,IAAKzjB,EAAIyc,SACTiB,QAAU1d,EAAI4nB,oBAAsB,OAAS,UAG9CzlD,GAAO5D,WAAW,mDAAoD,wBAAyB,CAClGY,UAAW,wBAEnB,IAAK,iBACD,OAAO3E,KAAKimC,MAAM,QAAS,CACvBmuB,OAAQ,2BACRC,OAAQ7uB,EAAInqB,OAEpB,IAAK,wBACD,OAAOrb,KAAKimC,MAAM,QAAS,CACvBmuB,OAAQ,4BACRC,OAAQ7uB,EAAInqB,OAEpB,IAAK,OAAQ,CACT,GAAqB,WAAjBmqB,EAAIyc,SACJ,MAAM,IAAI9iD,MAAM,wDAEpB,MAAMm1D,EAAWt0D,KAAKi0D,wBAAwBzuB,EAAIpD,aAClDkyB,EAASv6C,OAAS,QAClBu6C,EAASF,OAAS,WAClB,IACI,aAAap0D,KAAKimC,MAAM,QAASquB,GAAU,GAE/C,MAAOhzD,GACH,OAAOtB,KAAKm0D,YAAY3uB,EAAKlkC,EAAOkkC,EAAIpD,cAGhD,IAAK,cAAe,CAChB,MAAMkyB,EAAWt0D,KAAKi0D,wBAAwBzuB,EAAIpD,aAClDkyB,EAASv6C,OAAS,QAClBu6C,EAASF,OAAS,kBAClB,IACI,aAAap0D,KAAKimC,MAAM,QAASquB,GAAU,GAE/C,MAAOhzD,GACH,OAAOtB,KAAKm0D,YAAY3uB,EAAKlkC,EAAOkkC,EAAIpD,eA2DpD,OAAOtzB,MAAM49C,SAASlnB,GAE1B3nC,mBACI,OAAOmC,KAAK8rC,QAEhBjuC,sBACI,MAA0B,cAAtBmC,KAAK8rC,QAAQ/oC,KACN,EAEJ6Q,kBAAkB5T,KAAKimC,MAAM,QAAS,CAAEmuB,OAAQ,cAAeG,QAE1EpB,sBACI,MAAM5oB,EAASvqC,KAAK8rC,QAAQE,UAAUsnB,IACtC,OAAI/oB,EACQA,EAAOkpB,kBAAoBzzD,KAAKgzD,OA5Z9B,uCA8ZYhzD,KAAKgzD,QCpavC,MAAMwB,GAAmB,mCA4BlB,MAAMC,WAAuB5B,GAChCjyD,YAAYyoD,EAAW,YAAaqL,EAAWC,GAC3C,MAAM7oB,EAAU8Y,GAAQ/4C,KAAKw9C,GACZ,MAAbqL,IACAA,EAAYF,IAEK,MAAjBG,IACAA,EAAgB,MAGpB7lD,MADmB2lD,GAAexB,cAAcnnB,EAAS4oB,EAAWC,GAClD7oB,GAClB1sC,EAAiBY,KAAM,CAAE00D,UAAAA,EAAWC,cAAAA,IAExC5J,aAAahuB,GACT,IACI,OAAO,IAAI03B,GAAe13B,EAAS/8B,KAAK00D,UAAW10D,KAAK20D,eAE5D,MAAOrzD,IACP,OAAOwN,MAAMi8C,aAAahuB,GAE9Bx2B,qBAAqBulC,EAAS4oB,EAAWC,GACpB,MAAbD,IACAA,EAAYF,IAEK,MAAjBG,IACAA,EAAgB,MAEpB,MAAMnwB,EAAU,IAAI8B,GAAa,WAtDzC,SAAiBvjC,GACb,OAAQA,GACJ,IAAK,YACD,MAAO,oBACX,IAAK,UACD,MAAO,oBACX,IAAK,UACD,MAAO,oBACX,IAAK,QACD,MAAO,kBACX,IAAK,SACD,MAAO,mBACX,IAAK,QACD,MAAO,4BACX,IAAK,WACD,MAAO,2BACX,IAAK,WACD,MAAO,6BACX,IAAK,iBACD,MAAO,2BACX,IAAK,WACD,MAAO,6BACX,IAAK,mBACD,MAAO,6BAEf,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWjB,GA6BlBmwD,CAAQpnB,EAAQ/oC,YAAY2xD,KACzElwB,EAAQkC,WAAY,EAChBiuB,GACAnwB,EAAQqC,eAAe,GAAI8tB,GAQ/B,MAAO,CAAEnwB,QAAAA,EAASqD,cANIhqC,MAAO2mC,EAASE,EAAUioB,KACxC+H,IAAcF,IACdtF,GAAoB,mBAEjB,IAIfiE,sBACI,OAAQnzD,KAAK00D,YAAcF,ICpEnC,MAAMI,GAAgB,CAClBC,UAAW,2BACXC,QAAS,2BACTC,QAAS,2BACTC,OAAQ,4BAeZ,SAASC,GAAgBnpB,EAASopB,EAAQC,EAAsBC,GAC5DA,IAAiBA,EACjB,IAAIC,GAAY,EACZC,EAAgBJ,EAgBpB,OAfqB,MAAjBI,GACAA,EAAgBV,GAAc9oB,EAAQ/oC,MACjB,MAAjBuyD,GACA3tD,GAAO3D,mBAAmB,iDAAkD,gBAAiBkxD,GAEjGE,GAAe,EACfC,GAAY,GAEPC,IAAkBV,GAAc9oB,EAAQ/oC,QAC7CqyD,GAAe,EACfC,GAAY,GAEY,MAAxBF,IACAA,EAAuB,MAEpB,CAAEG,cAAAA,EAAeH,qBAAAA,EAAsBE,UAAAA,EAAWD,aAAAA,GAEtD,MAAMG,WAAuB1C,GAChCjyD,YAAYyoD,EAAW,YAAa6L,EAAQM,EAAYC,GACpD,MAAM3pB,EAAU8Y,GAAQ/4C,KAAKw9C,IACvBiM,cAAEA,EAAaH,qBAAEA,EAAoBC,aAAEA,GAAiBH,GAAgBnpB,EAASopB,EAAQM,EAAYC,GAE3G3mD,MADmBymD,GAAetC,cAAcnnB,EAASwpB,EAAeH,EAAsBC,GAC5EtpB,GAClB1sC,EAAiBY,KAAM,CAAEs1D,cAAAA,EAAeH,qBAAAA,EAAsBC,aAAAA,IAElE7uD,qBAAqBulC,EAASopB,EAAQM,EAAYC,GAC9C,MAAMH,cAAEA,EAAaH,qBAAEA,EAAoBE,UAAEA,EAASD,aAAEA,GAAiBH,GAAgBnpB,EAASopB,EAAQM,EAAYC,GACtH,IAAI9vB,EAAM,WA5ClB,SAAiB5iC,GACb,OAAQA,GACJ,IAAK,YACD,MAAO,mCACX,IAAK,UACD,MAAO,mCACX,IAAK,UACD,MAAO,mCACX,IAAK,SACD,MAAO,kCAEf,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWjB,GAiCzCmwD,CAAQpnB,EAAQ/oC,YAClCqyD,IACAzvB,GAAO,OAEXA,GAAO2vB,EACP,MAAM9wB,EAAU,IAAI8B,GAAaX,GACjCnB,EAAQkC,WAAY,EAChByuB,GACA3wB,EAAQqC,eAAe,GAAIsuB,GAQ/B,MAAO,CAAE3wB,QAAAA,EAASqD,cANIhqC,MAAO2mC,EAASE,EAAUioB,KACxC0I,GACAnG,GAAoB,mBAEjB,IAIfiE,sBACI,OAAQnzD,KAAKs1D,gBAAkBV,GAAc50D,KAAK8rC,QAAQ/oC,OC5ElE,IAWI2yD,GAA6BC,GAA2BC,GAAsCC,GAAiCC,GAA6BC,GAA+BC,GAA+BC,GAX1Nl2D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IASxF,MAAMwQ,GAAO1K,OAAO,KACdmmC,GAAOnmC,OAAO,KAIpB,SAASohC,KAAY,OAAO,IAAK1sB,MAAQ0sB,UAEzC,MAAM+uB,GAAgB,CAAEC,aAAc,IAAKC,SAAU,EAAGC,OAAQ,GAC1DC,GAAe,CACjB9V,aAAc,EAAG+V,SAAU,EAAGC,cAAe,EAAGC,eAAgB,EAChEC,WAAY,EAAGC,kBAAmB,EAAGC,gBAAiB,EAAGC,MAAO,EAChExN,SAAU,KAAMyN,cAAe,KAAMC,WAAY,GAmBrD,SAASv0D,GAAUspC,EAAS/tC,EAAOynC,GAC/B,OAAQA,EAAIrgC,QACR,IAAK,UAIL,IAAK,cAEL,IAAK,aAmBL,IAAK,cACD,OAAOwC,GAAO1B,UAAUlI,GAAOyM,WAxBnC,IAAK,iBAML,IAAK,sBACD,OAAO7C,GAAO7B,UAAU/H,GAAOyM,WACnC,IAAK,UAEL,IAAK,eAWL,IAAK,OACD,OAAO4K,GAAQrX,GAVnB,IAAK,WACD,OAAIynC,EAAI4nB,oBACGxpD,KAAKC,UAAUioC,EAAQ1B,UAAU4Y,sBAAsBjlD,IAE3D6F,KAAKC,UAAUioC,EAAQ1B,UAAUvX,MAAM90B,IAClD,IAAK,iBACD,OAAO6F,KAAKC,UAAUioC,EAAQ1B,UAAU2Y,oBAAoBhlD,IAChE,IAAK,wBACD,OAAO6F,KAAKC,UAAUioC,EAAQ1B,UAAU+Y,QAAQplD,IAKpD,IAAK,UACD,OAAO6F,KAAKC,UAAU9F,EAAMK,KAAKK,GAAMqtC,EAAQ1B,UAAU3iC,IAAIhJ,MAErE,OAAOkJ,GAAO5D,WAAW,qBAAsB,wBAAyB,CACpEY,UAAW,YAAYf,KAAKC,UAAU2hC,EAAIrgC,aAKlD,SAAS6xD,GAAYC,EAAQ7G,GACzB,MAAM8G,EAAQ,IAAI9/C,IAClB,IAAK,MAAMhQ,OAAEA,EAAM+vD,OAAEA,EAAMd,OAAEA,KAAYjG,EAAS,CAC9C,MAAMrxD,EAAIm4D,EAAMx2D,IAAIy2D,IAAW,CAAE/vD,OAAAA,EAAQivD,OAAQ,GACjDt3D,EAAEs3D,QAAUA,EACZa,EAAM12D,IAAI22D,EAAQp4D,GAEtB,IACIq4D,EADAC,EAAa,EAEjB,IAAK,MAAMhB,OAAEA,EAAMjvD,OAAEA,KAAY8vD,EAAM53D,SAC/B+2D,GAAUY,GAAUZ,EAASgB,IAC7BA,EAAahB,EACbe,EAAahwD,GAGrB,OAAOgwD,EAoBJ,MAAME,WAAyBlO,GAClCxoD,YAAY22D,EAAWzrB,GACnBh9B,MAAMg9B,GACN4pB,GAA4BlyD,IAAIxD,MAChC21D,GAA0Bn1D,IAAIR,UAAM,GACpC41D,GAAqCp1D,IAAIR,UAAM,GAC/CD,GAAuBC,KAAM21D,GAA2B4B,EAAUn5D,KAAK6Q,GAC/DA,aAAam6C,GACNnrD,OAAO8N,OAAO,CAAE69B,SAAU36B,GAAKinD,GAAeI,IAG9Cr4D,OAAO8N,OAAO,GAAImqD,GAAejnD,EAAGqnD,MAE/C,KACJv2D,GAAuBC,KAAM41D,GAAsC,KAAM,KACzE51D,KAAKi3D,OAAS,EACdj3D,KAAKw3D,YAAc,EACnBx3D,KAAKy3D,aAAe,EAChBz3D,KAAKi3D,OAASx2D,GAAuBT,KAAM21D,GAA2B,KAAKp3D,QAAO,CAACmU,EAAG1F,IAAO0F,EAAI1F,EAAEqpD,QAAS,IAC5G1uD,GAAO3D,mBAAmB,gCAAiC,SAAUhE,KAAKi3D,QAGlFp5D,uBACI,OAAO+mD,GAAQ/4C,KAAKlE,GAAO1B,gBAAgBjG,KAAK0sD,SAAS,CAAEvnD,OAAQ,cAAeoD,SAEtFwjD,eAAeF,GACX,MAAM,IAAI1sD,MAAM,SAEpBtB,eAAe2nC,SACL/kC,GAAuBT,KAAM01D,GAA6B,IAAKK,IAA+Bx1D,KAAKP,MAEzG,MAAM03D,EAAU,IAAIrvD,IACpB,IAAK,IAAIpJ,EAAI,EAAGA,EAAIe,KAAKi3D,OAAQh4D,IAC7BwB,GAAuBT,KAAM01D,GAA6B,IAAKI,IAA6Bv1D,KAAKP,KAAM03D,EAASlyB,GAEpH,MAAMp+B,EAAS3G,GAAuBT,KAAM01D,GAA6B,IAAKO,IAAiC11D,KAAKP,KAAM03D,EAASlyB,GACnI,IAAK,MAAMmyB,KAAUD,EACjBC,EAAO7yB,MAAO,EAElB,OAAO19B,GAGfuuD,GAA4B,IAAIl0D,QAAWm0D,GAAuC,IAAIn0D,QAAWi0D,GAA8B,IAAI9uD,QAAWivD,GAAkC,SAAyC+B,GAErN,MAAMC,EAAap3D,GAAuBT,KAAM21D,GAA2B,KAAKpsD,SCrK7E,SAAiB0uC,GACpB,IAAK,IAAIh5C,EAAIg5C,EAAM/4C,OAAS,EAAGD,EAAI,EAAGA,IAAK,CACvC,MAAM4oB,EAAI9gB,KAAKC,MAAMD,KAAKohC,UAAYlpC,EAAI,IACpCmd,EAAM67B,EAAMh5C,GAClBg5C,EAAMh5C,GAAKg5C,EAAMpwB,GACjBowB,EAAMpwB,GAAKzL,GDiKf07C,CAAQD,GACRA,EAAWv5B,MAAK,CAAC5rB,EAAGC,IAAOA,EAAEyjD,SAAW1jD,EAAE0jD,WAC1C,IAAK,MAAM2B,KAAUF,EACjB,IAAiC,IAA7BD,EAAQ9yD,QAAQizD,GAChB,OAAOA,EAGf,OAAO,MACRjC,GAA8B,SAAqC4B,EAASlyB,GAC3E,MAAMuyB,EAASt3D,GAAuBT,KAAM01D,GAA6B,IAAKG,IAAiCt1D,KAAKP,KAAMwN,MAAM3B,KAAK6rD,GAASt5D,KAAK2xB,GAAMA,EAAEgoC,UAC3J,GAAc,MAAVA,EACA,OAAO,KAEX,MAAM3wD,EAAS,GACTuwD,EAAS,CACXI,OAAAA,EAAQ3wD,OAAAA,EAAQ4wD,SAAS,EAAOlzB,MAAM,EACtC2nB,QAAS,KAAMwL,QAAS,MAEtBv9C,EAAMysB,KAuBZ,OAtBAwwB,EAAOlL,QAAU,WACb,IACIsL,EAAOxB,WACPnvD,EAAOA,aAAe2wD,EAAOnuB,SAAS8iB,SAASlnB,GAEnD,MAAOlkC,GACHy2D,EAAOtB,iBACPrvD,EAAO9F,MAAQA,EAEfq2D,EAAO7yB,MACPizB,EAAOvB,gBAEX,MAAM0B,EAAM/wB,KAAYzsB,EACxBq9C,EAAOhB,YAAcmB,EACrBH,EAAOnB,gBAAkB,IAAOmB,EAAOnB,gBAAkB,IAAOsB,EAChEP,EAAOlL,QAAU,MAfJ,GAiBjBkL,EAAOM,QAAU,WAtLrB,IAAe/wB,QAAAA,EAuLK6wB,EAAO5B,aAtLhB,IAAIj4D,SAASI,IAAc6b,WAAW7b,EAAS4oC,OAuLlDywB,EAAOM,QAAU,MAFJ,GAIjBP,EAAQl0D,IAAIm0D,GACLA,GACR5B,GAGHl4D,iBACI,IAAIs6D,EAAc13D,GAAuBT,KAAM41D,GAAsC,KACrF,IAAKuC,EAAa,CACd,MAAM1qD,EAAW,GACjBhN,GAAuBT,KAAM21D,GAA2B,KAAKrtD,SAASyvD,IAClEtqD,EAAS7K,KAzLrB/E,eAA2Bk6D,EAAQvX,GAC/B,KAAOuX,EAAOvX,YAAc,GAAKuX,EAAOvX,YAAcA,GAC7CuX,EAAOjB,gBACRiB,EAAOjB,cAAgB,WACnB,MAAMtW,QAAoBuX,EAAOnuB,SAAS2X,iBACtCf,EAAcuX,EAAOvX,cACrBuX,EAAOvX,YAAcA,GAEzBuX,EAAOjB,cAAgB,MALJ,UAQrBiB,EAAOjB,cACbiB,EAAOrB,YA6KW0B,CAAYL,EAAQ,IAClCtqD,EAAS7K,KAAK,WACVm1D,EAAO1O,eAAiB0O,EAAOnuB,SAASO,cAD9B,OAIlBpqC,GAAuBC,KAAM41D,GAAsCuC,EAAc,iBAEvEj6D,QAAQC,IAAIsP,GAElB,IAAIsvB,EAAU,KACd,IAAK,MAAMg7B,KAAUt3D,GAAuBT,KAAM21D,GAA2B,KAAM,CAC/E,MAAM7pB,EAAWisB,EAAe,SACjB,MAAXh7B,EACAA,EAAU+O,EAAQ/O,QAEb+O,EAAQ/O,UAAYA,GACzBp1B,GAAO5D,WAAW,6CAA8C,wBAAyB,CACrFY,UAAW,2BAZsD,GAgB3E,WAEJwzD,GACPnC,GAAgCn4D,eAA6C65D,EAASlyB,GAErF,MAAM4qB,EAAU,GAChB,IAAK,MAAMuH,KAAUD,EACjB,GAAI,WAAYC,EAAOvwD,OAAQ,CAC3B,MAAMA,EAASuwD,EAAOvwD,OAAOA,OAC7BgpD,EAAQxtD,KAAK,CACTwE,OAAAA,EACA+vD,OAAQ30D,GAAWm1D,EAAOI,OAAe,SAAG3wD,EAAQo+B,GACpD6wB,OAAQsB,EAAOI,OAAO1B,SAKlC,KAAIjG,EAAQ7xD,QAAO,CAACmU,EAAGqd,IAAOrd,EAAIqd,EAAEsmC,QAAS,GAAKr2D,KAAKi3D,QAAvD,CAGA,OAAQzxB,EAAIrgC,QACR,IAAK,iBAyBL,IAAK,kBACD,MAAM,IAAIhG,MAAM,QAvBpB,IAAK,cACL,IAAK,cACD,OA1JZ,SAAmBixD,GAEf,MAAM9wD,EAAS8wD,EAAQhyD,KAAK2xB,GAAMhqB,OAAOgqB,EAAE3oB,UAC3C9H,EAAOg/B,MAAK,CAAC5rB,EAAGC,IAAQD,EAAIC,GAAM,EAAKA,EAAID,EAAK,EAAI,IACpD,MAAM2lD,EAAM/4D,EAAOJ,OAAS,EAE5B,OAAII,EAAOJ,OAAS,EACTI,EAAO+4D,IAGV/4D,EAAO+4D,EAAM,GAAK/4D,EAAO+4D,GAAO5nD,IAAQy7B,GAgJjCosB,CAAUlI,GACrB,IAAK,WAGD,MAAI,aAAc5qB,GAAwB,YAAjBA,EAAIyc,SAClBmO,EAAQ,GAAGhpD,OAEf4vD,GAAYh3D,KAAKi3D,OAAQ7G,GACpC,IAAK,UACL,IAAK,aACL,IAAK,sBACL,IAAK,UACL,IAAK,eACL,IAAK,iBACL,IAAK,wBACL,IAAK,UAEL,IAAK,OAED,OAAO4G,GAAYh3D,KAAKi3D,OAAQ7G,GAIxC,OAAOzoD,GAAO5D,WAAW,qBAAsB,wBAAyB,CACpEY,UAAW,YAAYf,KAAKC,UAAU2hC,EAAIrgC,eAE/C8wD,GAAkCp4D,eAAeo4D,EAAgCyB,EAASlyB,GACzF,GAAqB,IAAjBkyB,EAAQxrD,KACR,MAAM,IAAI/M,MAAM,gBAIpB,MAAMo5D,EAAc,GAGpB,IAAIC,EAAa,EACjB,IAAK,MAAMb,KAAUD,EAUbC,EAAOlL,SACP8L,EAAY31D,KAAK+0D,EAAOlL,SAGxBkL,EAAOM,QACPM,EAAY31D,KAAK+0D,EAAOM,SAIxBN,EAAOK,UAIXL,EAAOK,SAAU,EACjBQ,KAaJ,MAAMz6D,QAAc0C,GAAuBT,KAAM01D,GAA6B,IAAKM,IAA+Bz1D,KAAKP,KAAM03D,EAASlyB,GACtI,QAAc9lC,IAAV3B,EAAqB,CACrB,GAAIA,aAAiBoB,MACjB,MAAMpB,EAEV,OAAOA,EAIX,IAAK,IAAIkB,EAAI,EAAGA,EAAIu5D,EAAYv5D,IAC5BwB,GAAuBT,KAAM01D,GAA6B,IAAKI,IAA6Bv1D,KAAKP,KAAM03D,EAASlyB,GAEpH,GAA2B,IAAvB+yB,EAAYr5D,OACZ,MAAM,IAAIC,MAAM,kBAMpB,aADMjB,QAAQu6D,KAAKF,SACN93D,GAAuBT,KAAM01D,GAA6B,IAAKO,GAAiC11D,KAAKP,KAAM03D,EAASlyB,IEtVrI,MAAMkzB,GAbN,WACI,GAAoB,oBAAT7yC,KACP,OAAOA,KAEX,GAAsB,oBAAXC,OACP,OAAOA,OAEX,GAAsB,oBAAXC,OACP,OAAOA,OAEX,MAAM,IAAI5mB,MAAM,kCAGD6mB,GAAY2yC,UCH/B,IAWIC,GAA4BC,GAA0BC,GAA4BC,GAA0BC,GAA+BC,GAAkCC,GAAkCC,GAA2BC,GAAuBC,GAAsBC,GAXvRv5D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAMjF,MAAMs5D,GACT34D,YAAYgpC,EAAU7oC,GAClB63D,GAA2Bp4D,IAAIR,UAAM,GACrC64D,GAAyBr4D,IAAIR,UAAM,GACnC84D,GAA2Bt4D,IAAIR,UAAM,GACrC+4D,GAAyBv4D,IAAIR,UAAM,GACnCg5D,GAA8Bx4D,IAAIR,UAAM,GACxCD,GAAuBC,KAAM44D,GAA4BhvB,EAAU,KACnE7pC,GAAuBC,KAAM64D,GAA0Bj1D,KAAKC,UAAU9C,GAAS,KAC/EhB,GAAuBC,KAAM84D,GAA4B,KAAM,KAC/D/4D,GAAuBC,KAAM+4D,GAA0B,KAAM,KAC7Dh5D,GAAuBC,KAAMg5D,GAA+B,KAAM,KAElEj4D,aAAW,OAAO6C,KAAKqJ,MAAMxM,GAAuBT,KAAM64D,GAA0B,MACxFjjD,QACI7V,GAAuBC,KAAM84D,GAA4Br4D,GAAuBT,KAAM44D,GAA4B,KAAK3I,KAAK,gBAAiBjwD,KAAKe,QAAQoN,MAAM6hD,IAE5JvvD,GAAuBT,KAAM44D,GAA4B,KAAKY,UAAUxJ,EAAUhwD,MAC3EgwD,KACP,KAERhJ,OACKvmD,GAAuBT,KAAM84D,GAA4B,KAAM3qD,MAAM6hD,IAClEvvD,GAAuBT,KAAM44D,GAA4B,KAAK3I,KAAK,kBAAmB,CAACD,OAE3FjwD,GAAuBC,KAAM84D,GAA4B,KAAM,KAInE5R,MAAMC,GACGA,GACDx/C,GAAO5D,WAAW,mEAAoE,wBAAyB,CAC3GY,UAAW,iBAGnB5E,GAAuBC,KAAM+4D,KAA4B5R,EAAiB,KAE9EC,SACIrnD,GAAuBC,KAAM+4D,GAA0B,KAAM,KAEjEU,eAAe/1D,GACX,GAAqE,MAAjEjD,GAAuBT,KAAM84D,GAA4B,MAGO,OAAhEr4D,GAAuBT,KAAM+4D,GAA0B,KAAe,CACtE,IAAIW,EAAcj5D,GAAuBT,KAAMg5D,GAA+B,KAE1EU,EADe,MAAfA,EACc15D,KAAK25D,MAAMl5D,GAAuBT,KAAM44D,GAA4B,KAAMl1D,GAG1Eg2D,EAAYvrD,MAAKtQ,gBACrBmC,KAAK25D,MAAMl5D,GAAuBT,KAAM44D,GAA4B,KAAMl1D,MAGxF3D,GAAuBC,KAAMg5D,GAA+BU,EAAYvrD,MAAK,KACrE1N,GAAuBT,KAAMg5D,GAA+B,OAASU,GACrE35D,GAAuBC,KAAMg5D,GAA+B,KAAM,QAEtE,MAGZn7D,YAAY+rC,EAAUlmC,GAClB,MAAM,IAAIvE,MAAM,4CAGxBy5D,GAA6B,IAAIn3D,QAAWo3D,GAA2B,IAAIp3D,QAAWq3D,GAA6B,IAAIr3D,QAAWs3D,GAA2B,IAAIt3D,QAAWu3D,GAAgC,IAAIv3D,QACzM,MAAMm4D,WAA8BL,GACvC34D,YAAYgpC,GACR96B,MAAM86B,EAAU,CAAC,aAErB/rC,YAAY+rC,EAAUlmC,GAClBkmC,EAASyd,KAAK,QAAS//C,SAAS5D,EAAQ20C,UAGzC,MAAMwhB,WAAgCN,GACzC34D,YAAYgpC,GACR96B,MAAM86B,EAAU,CAAC,2BAErB/rC,YAAY+rC,EAAUlmC,GAClBkmC,EAASyd,KAAK,UAAW3jD,IAG1B,MAAMo2D,WAA8BP,GACvC34D,YAAYgpC,EAAU7oC,GAClB+N,MAAM86B,EAAU,CAAC,OAAQ7oC,IACzBk4D,GAAiCz4D,IAAIR,UAAM,GAC3Ck5D,GAAiC14D,IAAIR,UAAM,GAC3CD,GAAuBC,KAAMi5D,GAAkCr1D,KAAKC,UAAU9C,GAAS,KACvFhB,GAAuBC,KAAMk5D,GAAkCtvB,EAASO,aAAah8B,MAAM29B,GAAYA,EAAQ1B,YAAY,KAE3H2vB,gBAAc,OAAOn2D,KAAKqJ,MAAMxM,GAAuBT,KAAMi5D,GAAkC,MACnGp7D,YAAY+rC,EAAUlmC,GAClB,MAAM0mC,QAAkB3pC,GAAuBT,KAAMk5D,GAAkC,KACvFtvB,EAASyd,KAAK5mD,GAAuBT,KAAMi5D,GAAkC,KAAM7uB,EAAU3iC,IAAI/D,EAASkmC,KAGlHqvB,GAAmC,IAAIx3D,QAAWy3D,GAAmC,IAAIz3D,QAClF,MAAMu4D,WAAuBpI,GAChChxD,YAAYkrC,GACRh9B,MAAMg9B,GACNqtB,GAA0B34D,IAAIR,UAAM,GACpCo5D,GAAsB54D,IAAIR,UAAM,GAEhCq5D,GAAqB74D,IAAIR,UAAM,GAG/Bs5D,GAAwB94D,IAAIR,UAAM,GAClCD,GAAuBC,KAAMm5D,GAA2B,IAAI/hD,IAAO,KACnErX,GAAuBC,KAAMo5D,IAAuB,EAAO,KAC3Dr5D,GAAuBC,KAAMq5D,GAAsB,IAAIjiD,IAAO,KAC9DrX,GAAuBC,KAAMs5D,GAAyB,IAAIliD,IAAO,KAErE20C,eAAeF,GACX,OAAQA,EAAIjtD,MACR,IAAK,QACD,OAAO,IAAIiqD,GAAoB,SACnC,IAAK,QACD,OAAO,IAAI+Q,GAAsB55D,MACrC,IAAK,UACD,OAAO,IAAI65D,GAAwB75D,MACvC,IAAK,QACD,OAAO,IAAI85D,GAAsB95D,KAAM6rD,EAAI9qD,QAC/C,IAAK,SAGD,GAA0B,aAAtB8qD,EAAI9qD,OAAOq/C,OACX,OAAO,IAAIyI,GAAoB,YAG3C,OAAO/5C,MAAMi9C,eAAeF,GAEhC2N,UAAUxJ,EAAUlE,GAChBrrD,GAAuBT,KAAMq5D,GAAsB,KAAK74D,IAAIwvD,EAAUlE,GACtE,MAAMmO,EAAUx5D,GAAuBT,KAAMs5D,GAAyB,KAAK54D,IAAIsvD,GAC/E,GAAIiK,EAAS,CACT,IAAK,MAAMv2D,KAAWu2D,EAClBnO,EAAW2N,eAAe/1D,GAE9BjD,GAAuBT,KAAMs5D,GAAyB,KAAKl7B,OAAO4xB,IAG1EnyD,WAAWsH,EAAQ6J,GACf,MAAMskB,EAAUtzB,KAAK+xD,eAAe5sD,EAAQ6J,GACtCkrD,EAAU,IAAIh8D,SAAQ,CAACI,EAAS6sD,KAClC1qD,GAAuBT,KAAMm5D,GAA2B,KAAK34D,IAAI8yB,EAAQsI,GAAI,CAAEtI,QAAAA,EAASh1B,QAAAA,EAAS6sD,OAAAA,OAKrG,OAHI1qD,GAAuBT,KAAMo5D,GAAuB,YAC9Cp5D,KAAKm6D,OAAOv2D,KAAKC,UAAUyvB,UAExB4mC,EAGjBr8D,eACI,IAAI4C,GAAuBT,KAAMo5D,GAAuB,KAAxD,CAGAr5D,GAAuBC,KAAMo5D,IAAuB,EAAM,KAC1D,IAAK,MAAM9lC,QAAEA,KAAa7yB,GAAuBT,KAAMm5D,GAA2B,KAAK75D,eAC7EU,KAAKm6D,OAAOv2D,KAAKC,UAAUyvB,KAIzCz1B,sBAAsB6F,GAClB,MAAM0D,EAASxD,KAAKqJ,MAAMvJ,GAC1B,GAAI,OAAQ0D,EAAQ,CAChB,MAAM8yD,EAAUz5D,GAAuBT,KAAMm5D,GAA2B,KAAKz4D,IAAI0G,EAAOw0B,IACxF,IAAKs+B,EAED,YADA1yD,QAAQC,IAAI,6CAIhB,GADAhH,GAAuBT,KAAMm5D,GAA2B,KAAK/6B,OAAOh3B,EAAOw0B,IACvE,UAAWx0B,EAAQ,CACnB,MAAM1D,QAAEA,EAAOnC,KAAEA,EAAIsT,KAAEA,GAASzN,EAAO9F,MACjCA,EAAQqG,GAAOlE,UAAUC,GAAW,gBAAiB,eAAgB,CACvE8gC,QAAS,MAAM5gC,KAAKC,UAAUq2D,EAAQ5mC,WACtCpxB,KAAM,CAAEX,KAAAA,EAAMsT,KAAAA,KAElBqlD,EAAQ/O,OAAO7pD,QAGf44D,EAAQ57D,QAAQ8I,EAAOA,aAG1B,GAAsB,qBAAlBA,EAAOjC,OAA+B,CAC3C,MAAM6qD,EAAW5oD,EAAO4H,OAAOs+C,aACzBxB,EAAarrD,GAAuBT,KAAMq5D,GAAsB,KAAK34D,IAAIsvD,GAC/E,GAAIlE,EACAA,EAAW2N,eAAeryD,EAAO4H,OAAO5H,YAEvC,CACD,IAAI6yD,EAAUx5D,GAAuBT,KAAMs5D,GAAyB,KAAK54D,IAAIsvD,GAC9D,MAAXiK,IACAA,EAAU,GACVx5D,GAAuBT,KAAMs5D,GAAyB,KAAK94D,IAAIwvD,EAAUiK,IAE7EA,EAAQr3D,KAAKwE,EAAO4H,OAAO5H,UAIvCvJ,aAAa6F,GACT,MAAM,IAAIvE,MAAM,mCAGxBg6D,GAA4B,IAAI13D,QAAW23D,GAAwB,IAAI33D,QAAW43D,GAAuB,IAAI53D,QAAW63D,GAA0B,IAAI73D,QCpOtJ,IAWI24D,GAXAr6D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAKjF,MAAMo6D,WAA0BL,GACnCp5D,YAAY+kC,EAAKmG,GACbh9B,MAAMg9B,GACNsuB,GAA6B55D,IAAIR,UAAM,GAEnCD,GAAuBC,KAAMo6D,GADZ,iBAAT,EACmD,IAAIzB,GAAUhzB,GAGdA,EAHoB,KAKnF3lC,KAAKs6D,UAAUC,OAAS,KACpBv6D,KAAKw6D,UAETx6D,KAAKs6D,UAAUG,UAAa/2D,IACxB1D,KAAK06D,gBAAgBh3D,EAAQmR,OAGjCylD,gBAAc,OAAO75D,GAAuBT,KAAMo6D,GAA8B,KACpFv8D,aAAa6F,GACT1D,KAAKs6D,UAAUrK,KAAKvsD,IAG5B02D,GAA+B,IAAI34D,QCmC9B,MAACmjD,GAnEN,SAA8BA,GAE1B,SAAS+V,EAAY53D,EAAMg6B,EAAS3H,GAChC,MAAMpO,EAAO,WACT,MAAM8kB,EAAU,IAAI8Y,EAAQ7hD,EAAMg6B,GAQlC,GAN0B,MAAtB3H,EAAQuwB,YACR7Z,EAAQgZ,aAAa,IAAIT,GAAU,KAAMjvB,EAAQuwB,aAEjDvwB,EAAQovB,aACR1Y,EAAQgZ,aAAa,IAAIP,GAAqBnvB,EAAQovB,cAEtDpvB,EAAQwlC,UAAW,CACnB,MAAMj1B,IAAEA,EAAGqtB,OAAEA,GAAW59B,EAAQwlC,UAChC9uB,EAAQgZ,aAAa,IAAIyO,GAAgB5tB,EAAKqtB,IAGlD,OADAlnB,EAAQgZ,aAAa,IAAId,IAClBlY,GAGX8Y,EAAQ79B,SAAShkB,EAAMikB,GACvB49B,EAAQ79B,SAASgW,EAAS/V,GACtBoO,EAAQsuB,UACRtuB,EAAQsuB,SAASp7C,SAASvF,IACtB6hD,EAAQ79B,SAAShkB,EAAMikB,MAyCnC,OArCA2zC,EAAY,YAAa,EAAG,CAAEhV,WAAY,EAAGjC,SAAU,CAAC,aACxDiX,EAAY,UAAW,EAAG,CAAEhV,WAAY,IACxCgV,EAAY,UAAW,EAAG,CAAEhV,WAAY,IACxCgV,EAAY,SAAU,EAAG,CAAEhV,WAAY,IACvCgV,EAAY,QAAS,GAAI,CAAEhV,WAAY,KACvCgV,EAAY,UAAW,GAAI,IAC3BA,EAAY,eAAgB,EAAG,IAC/BA,EAAY,OAAQ,IAAK,CAAEhV,WAAY,IAEvCgV,EAAY,QAAS,IAAK,CACtBhV,WAAY,EACZnB,YAAa,KACboW,UAAW,CACP5H,OAAQ,qCACRrtB,IAAK,kCAGbg1B,EAAY,cAAe,MAAO,CAC9BnW,YAAa,KACboW,UAAW,CACP5H,OAAQ,qCACRrtB,IAAK,0CAGbg1B,EAAY,MAAO,GAAI,CACnBhV,WAAY,EACZiV,UAAW,CACP5H,OAAQ,qCACRrtB,IAAK,4BAGbg1B,EAAY,OAAQ,GAAI,CACpBC,UAAW,CACP5H,OAAQ,qCACRrtB,IAAK,oCAGNif,EAEKiW,CAAqBC,ICvE/BC,QAAoBr7D,ECA1B,IAWIs7D,GAAuCC,GAXvCl7D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAKjF,MAAMi7D,WAAiB7a,GAC1Bz/C,YAAY6G,EAAK0zD,EAAOn7B,GACpBlxB,MAAMrH,EAAKA,EAAImiC,UAEfxqC,EAAiBY,KAAM,CAAEkG,KADZi1D,EAAMr4B,eAAe9C,EAAUv4B,EAAIoN,KAAMpN,EAAIg7B,QAC3BzC,SAAAA,EAAUo7B,UAAWD,IAEpDE,gBAAc,OAAOr7D,KAAKggC,SAASj9B,KACnCu4D,qBAAmB,OAAOt7D,KAAKggC,SAASpzB,UAEzC,MAAM2uD,WAAmCza,GAC5ClgD,YAAYu6D,EAAOvxB,EAAUzV,GACzBrlB,MAAMqlB,EAAIyV,GACVoxB,GAAsCx6D,IAAIR,UAAM,GAChDD,GAAuBC,KAAMg7D,GAAuCG,EAAO,KAE3Epa,WACA,OAAOjyC,MAAMiyC,KAAK3iD,KAAKqJ,IACnB,MAAMu4B,EAAWv4B,EAAIg7B,OAAOvjC,OAASuB,GAAuBT,KAAMg7D,GAAuC,KAAK75B,SAAS15B,EAAIg7B,OAAO,IAAM,KACxI,OAAIzC,EACO,IAAIk7B,GAASzzD,EAAKhH,GAAuBT,KAAMg7D,GAAuC,KAAMh7B,GAG5Fv4B,MAKvBuzD,GAAwC,IAAIv5D,QACrC,MAAM+5D,WAAoC7Z,GAC7C/gD,YAAYu6D,EAAOvxB,EAAUzV,GACzBrlB,MAAMqlB,EAAIyV,GACVqxB,GAAuCz6D,IAAIR,UAAM,GACjDD,GAAuBC,KAAMi7D,GAAwCE,EAAO,KAEhFt9D,WAAW+jD,GACP,MAAMuB,QAAgBr0C,MAAM2sD,OAC5B,OAAe,MAAXtY,EACO,KAEJ,IAAIoY,GAA2B96D,GAAuBT,KAAMi7D,GAAwC,KAAMj7D,KAAK4pC,SAAUuZ,IAGxI8X,GAAyC,IAAIx5D,QACtC,MAAMi6D,WAA6B/6D,EACtCC,YAAY+6D,EAAU76D,EAAUC,EAAQi/B,EAAU47B,GAC9C9sD,MAAM6sD,EAAU76D,EAAUC,GAC1B,MAAM0G,EAAM,IAAIyzD,GAASU,EAAMD,EAASP,UAAWp7B,GAEnD5gC,EAAiBY,KAAM,CAAEkG,KADZy1D,EAASP,UAAUt4B,eAAe9C,EAAUv4B,EAAIoN,KAAMpN,EAAIg7B,QACxCzC,SAAAA,EAAUv4B,IAAAA,IAEzC4zD,gBACA,OAAOr7D,KAAKggC,SAASj9B,KAErBu4D,qBACA,OAAOt7D,KAAKggC,SAASpzB,SAEzB/O,iBACI,aAAamC,KAAKyH,IAAIk5C,WAE1B9iD,uBACI,aAAamC,KAAKyH,IAAIu4C,iBAE1BniD,8BACI,aAAamC,KAAKyH,IAAIm5C,yBC7EvB,MCEMj5C,GAAS,IAAIrE,EDFH,wCEAvB,IAWIu4D,GAXA97D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAoBxF,SAAS67D,GAAW/9D,GAChB,OAAQA,GAAwC,mBAAvBA,EAAiB,YAa9C,MAAMg+D,GACFn7D,YAAY+6D,EAAU37B,EAAU95B,GAG5B,GAFA21D,GAA4Br7D,IAAIR,UAAM,GACtCZ,EAAiBY,KAAM,CAAEggC,SAAAA,IACrBA,EAAS3xB,OAAOnP,OAASgH,EAAKhH,OAC9B,MAAM,IAAIC,MAAM,sBAGpB,MAAMw4D,EAASqE,GAAUL,EAAShE,OAAQ,eACpC9iC,EAAWinC,GAAWnE,GAAUA,EAAS,KAC/C53D,GAAuBC,KAAM67D,GAA6B,iBACtD,MAAMI,QAAqB/9D,QAAQC,IAAI6hC,EAAS3xB,OAAOjQ,KAAI,CAAC8P,EAAOxP,IACxDwP,EAAMguD,UAAUh2D,EAAKxH,IAAQ,CAACE,EAAMb,IAC1B,YAATa,EACOg2B,GAAe72B,EAAO82B,GAE1B92B,OAGf,OAAO49D,EAASP,UAAU74B,mBAAmBvC,EAAUi8B,GATD,GAUpD,KAEVE,iBACI,OAAO17D,GAAuBT,KAAM67D,GAA6B,MAazE,SAASG,GAAUj+D,EAAOq+D,GACtB,OAAa,MAATr+D,EACO,KAEqB,mBAApBA,EAAMq+D,GACPr+D,EAEPA,EAAM6rC,UAAiD,mBAA7B7rC,EAAM6rC,SAASwyB,GAClCr+D,EAAM6rC,SAEV,KAEJ/rC,eAAew+D,GAAcC,GAEhC,MAAMC,E1B3CH,SAAqB/2B,GACxB,MAAMp+B,EAAS,GAEXo+B,EAAI15B,KACJ1E,EAAO0E,GAAK05B,EAAI15B,IAEhB05B,EAAI35B,OACJzE,EAAOyE,KAAO25B,EAAI35B,MAElB25B,EAAI3wB,OACJzN,EAAOyN,KAAOO,GAAQowB,EAAI3wB,OAE9B,MAAM2nD,EAAa,qEAAqE19D,MAAM,KAC9F,IAAK,MAAMU,KAAOg9D,EACRh9D,KAAOgmC,GAAoB,MAAZA,EAAIhmC,KAGzB4H,EAAO5H,GAAOmI,GAAO1B,UAAUu/B,EAAIhmC,GAAM,WAAWA,MAExD,MAAMi9D,EAAa,aAAa39D,MAAM,KACtC,IAAK,MAAMU,KAAOi9D,EACRj9D,KAAOgmC,GAAoB,MAAZA,EAAIhmC,KAGzB4H,EAAO5H,GAAOmI,GAAO7B,UAAU0/B,EAAIhmC,GAAM,WAAWA,MAcxD,OAZIgmC,EAAI4Y,aACJh3C,EAAOg3C,WAAab,GAAc/X,EAAI4Y,aAEtC,aAAc5Y,IACdp+B,EAAO66C,SAAWzc,EAAIyc,UAEtB,mBAAoBzc,IACpBp+B,EAAOs1D,wBAA0Bl3B,EAAIwE,gBAErC,eAAgBxE,IAChBp+B,EAAOu1D,WAAan3B,EAAIm3B,YAErBv1D,E0BKWw1D,CAAY3nC,GAAMU,YAAY2mC,EAAK,cAarD,OAVIC,EAAUzwD,GACVnE,GAAO3D,mBAAmB,qBAAsB,eAAgBu4D,EAAUzwD,IAErEywD,EAAU1nD,MACflN,GAAO3D,mBAAmB,uBAAwB,iBAAkBu4D,EAAU1nD,MAG9E0nD,EAAU1wD,OACV0wD,EAAU1wD,WAAa+oB,GAAe2nC,EAAU1wD,OAE7C0wD,EArCXV,GAA8B,IAAIp6D,QAoDlC,MAAMo7D,WA7CN,WACI,OAAOC,SA4CiBC,IACxBn8D,YAAY+6D,EAAUn8D,GAClBsP,QACA1P,EAAiBY,KAAM,CACnB+C,KAAM44D,EAASP,UAAUp6B,gBAAgBxhC,GACzCw9D,UAAWrB,EAAUr/C,KAAM9c,IAY/B,OAVc,IAAI6X,MAAMrX,KAAM,CAE1B0H,MAAO7J,MAAOwB,EAAQ49D,EAAS/2D,IACV7G,EAAO69D,eAAeh3D,GAC1BwJ,eACIrQ,EAAO89D,cAAcj3D,SAEzB7G,EAAO4wD,QAAQ/pD,KAMpC85B,eACA,OAAOhgC,KAAKg9D,UAAU5B,UAAUn6B,YAAYjhC,KAAKsc,MAErD4gD,eAAeh3D,GACX,OAAOlG,KAAKg9D,UAAU5B,UAAUn6B,YAAYjhC,KAAKsc,KAAMpW,GAE3DrI,6BAA6BqI,GACzB,MAAM85B,EAAWhgC,KAAKk9D,eAAeh3D,GAErC,IAAIq2D,EAAY,GAIhB,GAHIv8B,EAAS3xB,OAAOnP,OAAS,IAAMgH,EAAKhH,SACpCq9D,QAAkBF,GAAcn2D,EAAK6D,QAErCi2B,EAAS3xB,OAAOnP,SAAWgH,EAAKhH,OAChC,MAAM,IAAIC,MAAM,8EAEpB,MAAM88D,QAjDPp+D,eAA2Bu/D,EAAS/uD,EAAQnI,GAE/C,MAAMyxD,EAASqE,GAAUoB,EAAS,eAC5BvoC,EAAWinC,GAAWnE,GAAUA,EAAS,KAC/C,aAAaz5D,QAAQC,IAAIkQ,EAAOjQ,KAAI,CAAC8P,EAAOxP,IACjCwP,EAAMguD,UAAUh2D,EAAKxH,IAAQ,CAACE,EAAMb,IAC1B,YAATa,EACOg2B,GAAe72B,EAAO82B,GAE1B92B,OAwCgBs/D,CAAYr9D,KAAKg9D,UAAUrF,OAAQ33B,EAAS3xB,OAAQnI,GAC/E,OAAOjI,OAAO8N,OAAO,GAAIwwD,QAAiBz+D,EAAkB,CACxDgO,GAAI9L,KAAKg9D,UAAUhqC,aACnBne,KAAM7U,KAAKg9D,UAAU5B,UAAUt5B,mBAAmB9B,EAAUi8B,MAGpEp+D,oBAAoBqI,GAChB,MAAMkB,QAAepH,KAAKs9D,oBAAoBp3D,GAC9C,OAAsB,IAAlBkB,EAAOlI,OACAkI,EAAO,GAEXA,EAEXvJ,cAAcqI,GACV,MAAMyxD,EAASqE,GAAUh8D,KAAKg9D,UAAUrF,OAAQ,mBAChD,KAlJS55D,EAkJI45D,IAjJmC,mBAA3B55D,EAAqB,gBAkJtC,OAAO4J,GAAO5D,WAAW,wDAAyD,wBAAyB,CACvGY,UAAW,oBApJ3B,IAAiB5G,EAuJT,MAAMo2B,QAAWwjC,EAAO7I,sBAAsB9uD,KAAKsuD,uBAAuBpoD,IACpE0jC,EAAWoyB,GAAUh8D,KAAKg9D,UAAUrF,OAAQ,WAClD,OAAO,IAAI6D,GAA4Bx7D,KAAKg9D,UAAU5B,UAAWxxB,EAAUzV,GAE/Et2B,qBAAqBqI,GACjB,MAAMyxD,EAASqE,GAAUh8D,KAAKg9D,UAAUrF,OAAQ,eAChD,OAnKa55D,EAmKI45D,IAlK2B,mBAAvB55D,EAAiB,kBAuKzB45D,EAAOxJ,kBAAkBnuD,KAAKsuD,uBAAuBpoD,IAJvDyB,GAAO5D,WAAW,kDAAmD,wBAAyB,CACjGY,UAAW,gBArK3B,IAAqB5G,EA0KjBF,0BAA0BqI,GACtB,MAAMyxD,EAASqE,GAAUh8D,KAAKg9D,UAAUrF,OAAQ,QAChD,KAzKS55D,EAyKI45D,IAxKwB,mBAAhB55D,EAAU,KAyK3B,OAAO4J,GAAO5D,WAAW,2CAA4C,wBAAyB,CAC1FY,UAAW,SA3K3B,IAAiB5G,EA8KT,MAAMiiC,EAAWhgC,KAAKk9D,eAAeh3D,GAC/BiuB,QAAWn0B,KAAKsuD,uBAAuBpoD,GAC7C,IAAIkB,EAAS,KACb,IACIA,QAAeuwD,EAAOp3D,KAAK4zB,GAE/B,MAAO7yB,GACH,GAAIE,EAAgBF,GAChB,MAAMtB,KAAKg9D,UAAU5B,UAAU33D,UAAUu8B,EAAU1+B,EAAMuT,KAAMsf,GAEnE,MAAM7yB,EAEV,OAAOtB,KAAKg9D,UAAU5B,UAAUr5B,qBAAqB/B,EAAU54B,IAMvE,MAAMm2D,WAHN,WACI,OAAOT,SAEgBU,IACvB58D,YAAY+6D,EAAUn8D,GAMlB,OALAsP,QACA1P,EAAiBY,KAAM,CACnB+C,KAAM44D,EAASP,UAAUl6B,aAAa1hC,GACtCw9D,UAAWrB,EAAUr/C,KAAM9c,IAExB,IAAI6X,MAAMrX,KAAM,CAEnB0H,MAAO7J,MAAOwB,EAAQ49D,EAAS/2D,IACpB,IAAI61D,GAAoBJ,EAAUt8D,EAAO69D,eAAeh3D,GAAOA,KAK9E85B,eACA,OAAOhgC,KAAKg9D,UAAU5B,UAAUj6B,SAASnhC,KAAKsc,MAElD4gD,eAAeh3D,GACX,OAAOlG,KAAKg9D,UAAU5B,UAAUj6B,SAASnhC,KAAKsc,KAAMpW,IAQ5D,MAAMkG,GAAWC,OAAOC,IAAI,4BACtBmxD,GAAiB,IAAIh8D,QAI3B,SAASi8D,GAAY/B,GACjB,OAAO8B,GAAe/8D,IAAIi7D,EAASvvD,KAMvCvO,eAAe8/D,GAAUhC,EAAUvsD,GAC/B,IAAI4wB,EACAyC,EACJ,GAAIj1B,MAAMN,QAAQkC,GAEd4wB,EAAW27B,EAASP,UAAUj6B,SAAS/xB,EAAM,IAC7CqzB,EAASrzB,OAER,GAAuB,iBAAX,EAEb4wB,EAAW27B,EAASP,UAAUj6B,SAAS/xB,GACvCqzB,EAAS,CAACk5B,EAASP,UAAU75B,cAAcvB,SAE1C,IAjBWjiC,EAiBIqR,IAhBgB,iBAAnB,GAAgC,mBAAoBrR,GAC9B,mBAA1BA,EAAoB,gBAAqBA,EAAMiiC,SAiBxDA,EAAW5wB,EAAM4wB,SACjByC,QAAerzB,EAAM+sD,qBAEpB,CAAA,KAAI,aAAc/sD,GAOnB,MADA5H,QAAQC,IAAI2H,GACN,IAAIjQ,MAAM,QALhB6gC,EAAW5wB,EAAM4wB,SACjByC,EAAS,CAACk5B,EAASP,UAAU75B,cAAcvB,IAzBnD,IAAoBjiC,EAgChB0kC,EAASA,EAAOrkC,KAAKW,IACjB,OAAS,MAALA,EACO,KAEPyO,MAAMN,QAAQnO,IAxPPqJ,EAyPUrJ,EAAEX,KAAKW,GAAMA,EAAE2H,iBAxPxC0B,EAAQoF,MAAM3B,KAAK,IAAKxD,IAAID,GAAQ9I,WAC9Bg/B,OACCl2B,GAwPIrJ,EAAE2H,cA3PjB,IAAmB0B,KAsQf,MAAO,CAAE43B,SAAAA,EAAUipB,IATPxmB,EAAOrkC,KAAKW,GACX,MAALA,EACO,OAEPyO,MAAMN,QAAQnO,GACPA,EAAE+E,KAAK,KAEX/E,IACR+E,KAAK,KACgB2+B,OAAAA,GAE5B5kC,eAAe+/D,GAAOjC,EAAUvsD,GAC5B,MAAMyuD,KAAEA,GAASH,GAAY/B,GAC7B,OAAOkC,EAAKn9D,WAAWi9D,GAAUhC,EAAUvsD,IAAQ65C,MAAQ,KAE/DprD,eAAeigE,GAAOnC,EAAUvsD,GAE5B,MAAMuoD,EAASqE,GAAUL,EAAShE,OAAQ,MACpCoG,EAAY/B,GAAUL,EAAShE,OAAQ,OAC7C,IAAKA,GAAUA,IAAWoG,MAnRRhgE,EAmRmC45D,IAlRd,mBAAd55D,EAAQ,IAA2C,mBAAfA,EAAS,KAmRlE,OAAO4J,GAAO5D,WAAW,+CAAgD,wBAAyB,CAC9FY,UAAW,OArRvB,IAAsB5G,EAwRlB,MAAMiiC,SAAEA,EAAQipB,IAAEA,EAAGxmB,OAAEA,SAAiBk7B,GAAUhC,EAAUvsD,IACtDi8B,KAAEA,EAAIwyB,KAAEA,GAASH,GAAY/B,GACnC,IAAI9P,EAAMgS,EAAKn9D,IAAIuoD,GACnB,IAAK4C,EAAK,CACN,MACM9qD,EAAS,CAAEsxB,QADAgZ,GAAcswB,EACLl5B,OAAAA,GACpB3hC,EAAY2G,IACd,MAAM6rB,EAAU,IAAIooC,GAAqBC,EAAU,KAAMvsD,EAAO4wB,EAAUv4B,GAC1E4/C,GAAKsU,EAAUvsD,EAAOkkB,EAAQptB,KAAMotB,IAExC,IAAI64B,GAAU,EAedN,EAAM,CAAE5C,IAAAA,EAAKmD,UAAW,GAAIx2C,MAdd,KACNu2C,IAGJwL,EAAOnQ,GAAGzmD,EAAQD,GAClBqrD,GAAU,IASqBnF,KAPtB,KACJmF,IAGLwL,EAAO32D,IAAID,EAAQD,GACnBqrD,GAAU,KAGd0R,EAAKr9D,IAAIyoD,EAAK4C,GAElB,OAAOA,EAsBX,IAAImS,GAAW9/D,QAAQI,UACvBT,eAAewpD,GAAKsU,EAAUvsD,EAAOlJ,EAAMotB,GACvC,UACU0qC,GAEV,MAAO18D,IACP,MAAM28D,EA1BVpgE,eAAqB89D,EAAUvsD,EAAOlJ,EAAMotB,SAClC0qC,GACN,MAAMnS,QAAY+R,GAAOjC,EAAUvsD,GACnC,IAAKy8C,EACD,OAAO,EAEX,MAAMxmD,EAAQwmD,EAAIO,UAAUltD,OAS5B,OARA2sD,EAAIO,UAAYP,EAAIO,UAAUrrD,QAAO,EAAGD,SAAAA,EAAUuqD,KAAAA,MAC9C,MAAM6S,EAAWh4D,EAAKqD,QAKtB,OAJI+pB,GACA4qC,EAASt7D,KAAK,IAAI84D,GAAqBC,EAAWtQ,EAAO,KAAOvqD,EAAWsO,EAAOkkB,EAAQ0M,SAAU1M,EAAQ7rB,MAEhH0S,YAAW,KAAQrZ,EAASP,KAAKo7D,KAAauC,KAAc,IACpD7S,KAEJhmD,EAAQ,EAWMs0D,CAAMgC,EAAUvsD,EAAOlJ,EAAMotB,GAEnD,OADA0qC,GAAWC,QACEA,EAEjB,MAAM/mD,GAAiB,CAAC,QACjB,MAAMinD,GACTv9D,YAAYvB,EAAQuhC,EAAK+2B,EAAS,KAAMyG,GAIpC,IAAIC,EAFJj/D,EAAiBY,KAAM,CAAEX,OAAAA,EAAQs4D,OAAAA,EAAQyD,UAD3B16B,GAAU70B,KAAK+0B,KAE7B3iC,OAAO0B,eAAeK,KAAMoM,GAAU,CAAErO,MAAO,KAE/C,IAAIstC,EAAO,KACPizB,EAAW,KACf,GAAIF,EAAW,CACX,MAAMx0B,EAAWoyB,GAAUrE,EAAQ,WACnC2G,EAAW,IAAI9C,GAA4Bx7D,KAAKo7D,UAAWxxB,EAAUw0B,GAEzE,IAAIP,EAAO,IAAIzmD,IAEf,GAAwB,iBAAZ,EACR,GAAI5C,GAAYnV,GACZgsC,EAAOhsC,EACPg/D,EAAcngE,QAAQI,QAAQe,OAE7B,CACD,MAAMw1B,EAAWmnC,GAAUrE,EAAQ,eACnC,IAAKmE,GAAWjnC,GACZ,MAAMltB,GAAOlE,UAAU,mDAAoD,wBAAyB,CAChGkB,UAAW,gBAGnB05D,EAAcxpC,EAASC,YAAYz1B,GAAQ8O,MAAMk9B,IAC7C,GAAY,MAARA,EACA,MAAM,IAAIlsC,MAAM,QAGpB,OADAu+D,GAAY19D,MAAMqrC,KAAOA,EAClBA,UAKfgzB,EAAch/D,EAAO2zB,aAAa7kB,MAAMk9B,IACpC,GAAY,MAARA,EACA,MAAM,IAAIlsC,MAAM,QAGpB,OADAu+D,GAAY19D,MAAMqrC,KAAOA,EAClBA,KA7KvB,IAAqBswB,EAAUr8D,EAAVq8D,EAiLD37D,KAjLWV,EAiLL,CAAE++D,YAAAA,EAAahzB,KAAAA,EAAMizB,SAAAA,EAAUT,KAAAA,GAhLrDJ,GAAej9D,IAAIm7D,EAASvvD,IAAW9M,GAkLnC,MAAMi/D,EAAU,IAAIlnD,MAAM,GAAI,CAC1B3W,IAAK,CAACrB,EAAQm/D,EAAOv+D,KAEjB,GAAIiX,GAAepS,QAAQ05D,IAAU,EACjC,OAAOhnD,QAAQ9W,IAAIrB,EAAQm/D,EAAOv+D,GAEtC,MAAMqX,EAAO5U,OAAO87D,GACdp3D,EAASpH,KAAKmhC,SAAS7pB,GAC7B,GAAIlQ,EACA,OAAOA,EAEX,MAAM,IAAIjI,MAAM,2BAA2BmY,QAKnD,OAFAlY,EAAiBY,KAAM,CAAEu+D,QAAAA,IAElB,IAAIlnD,MAAMrX,KAAM,CACnBU,IAAK,CAACrB,EAAQm/D,EAAOv+D,KACjB,GAAIu+D,KAASn/D,GAAU6X,GAAepS,QAAQ05D,IAAU,EACpD,OAAOhnD,QAAQ9W,IAAIrB,EAAQm/D,EAAOv+D,GAEtC,MAAMqX,EAAO5U,OAAO87D,GACdp3D,EAAS/H,EAAO4hC,YAAY3pB,GAClC,GAAIlQ,EACA,OAAOA,EAEX,MAAM,IAAIjI,MAAM,4BAA4BmY,QAIxDzZ,mBAAqB,aAAa6/D,GAAY19D,MAAMq+D,YACpDI,wBACI,OAAOf,GAAY19D,MAAMs+D,SAE7Br9B,YAAYzhC,GAIR,MAHqB,iBAAT,IACRA,EAAMA,EAAIoN,UAEd,IAAYiwD,GAAc78D,KAAMR,GAEpC2hC,SAAS3hC,GAIL,MAHqB,iBAAT,IACRA,EAAMA,EAAIoN,UAEd,IAAY2wD,GAAav9D,KAAMR,GAEnC3B,kBAAkBuR,EAAOuzC,EAAY,EAAGE,EAAU,UAC9C,MAAMxX,KAAEA,EAAIgzB,YAAEA,GAAgBX,GAAY19D,MACpCqyB,EAAWgZ,SAAqBgzB,GAChCr+B,SAAEA,EAAQyC,OAAEA,SAAiBk7B,GAAU39D,KAAMoP,GAC7CrO,EAAS,CAAEsxB,QAAAA,EAASoQ,OAAAA,EAAQkgB,UAAAA,EAAWE,QAAAA,GACvC8U,EAASqE,GAAUh8D,KAAK23D,OAAQ,WACtC,OA3bU55D,EA2bI45D,IA1b0B,mBAAnB55D,EAAa,eA+bpB45D,EAAO/P,QAAQ7mD,IAAS3C,KAAKqJ,GAChC,IAAIyzD,GAASzzD,EAAKzH,KAAKo7D,UAAWp7B,KALlCr4B,GAAO5D,WAAW,4CAA6C,wBAAyB,CAC3FY,UAAW,YA7b3B,IAAkB5G,EAocdF,SAASuR,EAAOtO,GACZ,MAAM+qD,QAAYiS,GAAO99D,KAAMoP,GAG/B,OAFAy8C,EAAIO,UAAUxpD,KAAK,CAAE9B,SAAAA,EAAUuqD,MAAM,IACrCQ,EAAIj2C,QACG5V,KAEXnC,WAAWuR,EAAOtO,GACd,MAAM+qD,QAAYiS,GAAO99D,KAAMoP,GAG/B,OAFAy8C,EAAIO,UAAUxpD,KAAK,CAAE9B,SAAAA,EAAUuqD,MAAM,IACrCQ,EAAIj2C,QACG5V,KAEXnC,WAAWuR,KAAUlJ,GACjB,aAAamhD,GAAKrnD,KAAMoP,EAAOlJ,EAAM,MAEzCrI,oBAAoBuR,GAChB,GAAIA,EAAO,CACP,MAAMy8C,QAAY+R,GAAO59D,KAAMoP,GAC/B,OAAKy8C,EAGEA,EAAIO,UAAUltD,OAFV,EAIf,MAAM2+D,KAAEA,GAASH,GAAY19D,MAC7B,IAAIqsD,EAAQ,EACZ,IAAK,MAAMD,UAAEA,KAAeyR,EAAKv+D,SAC7B+sD,GAASD,EAAUltD,OAEvB,OAAOmtD,EAEXxuD,gBAAgBuR,GACZ,GAAIA,EAAO,CACP,MAAMy8C,QAAY+R,GAAO59D,KAAMoP,GAC/B,OAAKy8C,EAGEA,EAAIO,UAAUhuD,KAAI,EAAG0C,SAAAA,KAAeA,IAFhC,GAIf,MAAM+8D,KAAEA,GAASH,GAAY19D,MAC7B,IAAIoH,EAAS,GACb,IAAK,MAAMglD,UAAEA,KAAeyR,EAAKv+D,SAC7B8H,EAASA,EAAOmO,OAAO62C,EAAUhuD,KAAI,EAAG0C,SAAAA,KAAeA,KAE3D,OAAOsG,EAEXvJ,UAAUuR,EAAOtO,GACb,MAAM+qD,QAAY+R,GAAO59D,KAAMoP,GAC/B,IAAKy8C,EACD,OAAO7rD,KAEX,GAAIc,EAAU,CACV,MAAMpC,EAAQmtD,EAAIO,UAAUhuD,KAAI,EAAG0C,SAAAA,KAAeA,IAAUgE,QAAQhE,GAChEpC,GAAS,GACTmtD,EAAIO,UAAUvoB,OAAOnlC,EAAO,GAOpC,OAJgB,MAAZoC,GAA6C,IAAzB+qD,EAAIO,UAAUltD,SAClC2sD,EAAI7E,OACJ0W,GAAY19D,MAAM69D,KAAKz/B,OAAOytB,EAAI5C,MAE/BjpD,KAEXnC,yBAAyBuR,GACrB,GAAIA,EAAO,CACP,MAAMy8C,QAAY+R,GAAO59D,KAAMoP,GAC/B,IAAKy8C,EACD,OAAO7rD,KAEX6rD,EAAI7E,OACJ0W,GAAY19D,MAAM69D,KAAKz/B,OAAOytB,EAAI5C,SAEjC,CACD,MAAM4U,KAAEA,GAASH,GAAY19D,MAC7B,IAAK,MAAMipD,IAAEA,EAAGjC,KAAEA,KAAU6W,EAAKv+D,SAC7B0nD,IACA6W,EAAKz/B,OAAO6qB,GAGpB,OAAOjpD,KAGXnC,kBAAkBuR,EAAOtO,GACrB,aAAad,KAAKwnD,GAAGp4C,EAAOtO,GAGhCjD,qBAAqBuR,EAAOtO,GACxB,aAAad,KAAKgB,IAAIoO,EAAOtO,GAEjCyF,kBAAkBq6B,GAMd,OALA,cAA6Bu9B,GACzBv9D,YAAYyxB,EAASslC,EAAS,MAC1B7oD,MAAMujB,EAASuO,EAAK+2B,KAMhCpxD,YAAYlH,EAAQuhC,EAAK+2B,EAAS,MAE9B,OADiB,IAAI33D,KAAKX,EAAQuhC,EAAK+2B,IAOxC,MAAM+G,WAHb,WACI,OAAOP,GAEmBQ,KC1kBvB,SAASC,GAAep/D,GAE3B,OAAOwzB,GAAW9I,GAAU,KADV6xB,GAAWC,iBAAiBx8C,GAAK,GACN+H,UAAU,IAAIA,UAAU,KCLzE,MAAMs3D,GAAW,gCACXC,GAAO,YACb,SAASC,GAAOC,EAAOC,GACnB,IAAIC,EAAU,GACd,OAAOF,EAAMzgE,QAAO,CAACC,EAAOkb,KACpBA,IAASulD,EACTC,IAEKxlD,EAAKvS,MAAM23D,IAChBtgE,EAAMoE,KAAKF,OAAOC,aAAau8D,GAAWxlD,IAG1CwlD,EAAU,GACV1gE,EAAMoE,KAAK8W,IAERlb,IACR,IAyBA,SAAS2gE,GAAUtqD,GACtB,GAAgB,MAAZA,EAAK,GACL,MAAMxU,UAAU,yBAEpB,OA3BG,SAAgBwU,EAAMgpD,GAEzB,IAAK,IAAI5+D,EAAI4/D,GAAS3/D,OAAS,EAAGD,GAAK,EAAGA,IACtC4V,EAAOA,EAAK/V,MAAM+/D,GAAS5/D,IAAI6E,KAAK+5D,EAAKt2D,UAAU,EAAItI,EAAG,EAAIA,EAAI,IAGtE,MAAMmgE,EAAS,GACTC,EAAWxqD,EAAKyjB,QAAQ,8BAA8B,CAACn6B,EAAKoZ,EAAM+nD,EAAM5lD,KAC1E,GAAI4lD,EACA,IAAK,IAAIrgE,EAAIqI,SAASg4D,GAAOrgE,GAAK,EAAGA,IACjCmgE,EAAOx8D,KAAK,UAIhBw8D,EAAOx8D,KAAK2U,EAAK7Q,eAErB,MAAO,MAEX,GAAI24D,EACA,MAAM,IAAIlgE,MAAM,cAAcyE,KAAKC,UAAUw7D,MAEjD,OAAON,GAAOA,GAAOK,EAAQ,KAAM,KAM5BxpC,CAAO/gB,EAAKtN,UAAU,EAAI,EAAIs3D,GAAS3/D,QAAS2V,EAAKtN,UAAU,EAAG,EAAI,EAAIs3D,GAAS3/D,SC7CvF,MCEMyI,GAAS,IAAIrE,EDFH,yCEChB,MAAMi8D,GACT3+D,YAAY4+D,GACRpgE,EAAiBY,KAAM,CAAEw/D,OAAAA,IAG7B1gE,MAAM2gE,GACF,OAAOA,EAAS/4D,cAAc5H,MAAM,OAGxCgF,KAAKk7D,GACD,OAAOA,EAAMl7D,KAAK,MCT1B,IAWI47D,GAAwBC,GAAmBC,GAAuBC,GAAoBC,GAXtF//D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAOjF,MAAM8/D,WAAoBR,GAC7B3+D,YAAY4+D,EAAQ3qD,EAAMie,GACtBhkB,MAAM0wD,GACNE,GAAuBl8D,IAAIxD,MAC3B2/D,GAAkBn/D,IAAIR,UAAM,GAC5B4/D,GAAsBp/D,IAAIR,UAAM,GAChC6/D,GAAmBr/D,IAAIR,UAAM,GAC7BD,GAAuBC,KAAM2/D,GAAmB9qD,EAAM,KACtD9U,GAAuBC,KAAM4/D,GAAuB9sC,EAAU,KAC9D/yB,GAAuBC,KAAM6/D,GAAoB,KAAM,KAEvDj5C,YAAU,OAAOnmB,GAAuBT,KAAM2/D,GAAmB,KACrEK,eACI,OAAOb,GAAU1+D,GAAuBT,KAAM2/D,GAAmB,MAErEM,QAAQvhE,GACJ,MAAMsgE,EAAQv+D,GAAuBT,KAAM0/D,GAAwB,IAAKI,IAAwBv/D,KAAKP,MAIrG,OAHItB,EAAQ,GAAKA,GAASsgE,EAAM9/D,SAC5ByI,GAAO3D,mBAAmB,uBAAuBtF,IAAS,QAASA,GAEhEsgE,EAAMtgE,GAEjBwhE,aAAaxmD,GACT,OAAOjZ,GAAuBT,KAAM0/D,GAAwB,IAAKI,IAAwBv/D,KAAKP,MAAM8E,QAAQ4U,IAGpHimD,GAAoB,IAAIl+D,QAAWm+D,GAAwB,IAAIn+D,QAAWo+D,GAAqB,IAAIp+D,QAAWi+D,GAAyB,IAAI94D,QAAWk5D,GAAyB,WAC3K,GAA6D,MAAzDr/D,GAAuBT,KAAM6/D,GAAoB,KAAc,CAC/D,MAAMb,EAAQh/D,KAAKggE,eAInB,GAFiBpkC,GAAGojC,EAAMl7D,KAAK,MAAQ,QAEtBrD,GAAuBT,KAAM4/D,GAAuB,KACjE,MAAM,IAAIzgE,MAAM,sBAAsBa,KAAKw/D,iBAG/Cz/D,GAAuBC,KAAM6/D,GAAoBb,EAAO,KAE5D,OAAOv+D,GAAuBT,KAAM6/D,GAAoB,MClDrD,MAAMM,GAAS,IAHf,cAAqBJ,GACxBn/D,cAAgBkO,MAAM,KAHZ,w3LACG,wECAJnH,GAAS,IAAIrE,ECFH,sCCCV88D,GAAYniE,OAAOsK,OAAO,CACvC83D,GAAIA,KCFJ,IAWIC,GAXAvgE,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAKjF,MAAMsgE,WAAqBR,GAC9Bn/D,YAAY4+D,EAAQ3qD,EAAM2rD,EAAQ1tC,GAC9BhkB,MAAM0wD,EAAQ3qD,EAAMie,GACpBwtC,GAAqB9/D,IAAIR,UAAM,GAC/BD,GAAuBC,KAAMsgE,GAAsBE,EAAQ,KAE3DC,cAAY,OAAOhgE,GAAuBT,KAAMsgE,GAAsB,KAC1EN,eACI,OCpBD,SAAoBnrD,EAAM6rD,GAC7B,IAAI1B,EAAQG,GAAUtqD,GAAM/Q,KAAK,KAoBjC,OAlBA48D,EAAQ5hE,MAAM,MAAMwJ,SAASk4D,IACzB,MAAMr5D,EAAQq5D,EAAOr5D,MAAM,iCAC3B,IAAKA,EACD,MAAM,IAAIhI,MAAM,kCAEpB,IAAIwhE,EAAY,EAChB,MAAMC,ECVP,SAAoBtwD,EAAOuE,GAC9B,MAAM7R,GAAY,GAAKsN,GAAS,EAC1BlJ,EAAS,GACf,IAAI5I,EAAQ,EAAGsS,EAAO,EAAG+vD,EAAQ,EACjC,IAAK,IAAI5hE,EAAI,EAAGA,EAAI4V,EAAK3V,OAAQD,IAK7B,IAHAT,EAAUA,GAAS,EAPZ,mEAOwBsG,QAAQ+P,EAAK5V,IAC5C6R,GAAQ,EAEDA,GAAQR,GAAO,CAElB,MAAMvS,EAASS,GAAUsS,EAAOR,EAChC9R,IAAU,GAAMsS,EAAOR,GAAU,EACjCQ,GAAQR,EAGM,IAAVvS,EACA8iE,GAAS79D,GAGToE,EAAOxE,KAAK7E,EAAQ8iE,GACpBA,EAAQ,GAIpB,OAAOz5D,EDfe05D,CAAWx5D,SAASH,EAAM,IAAKA,EAAM,IACjD45D,EAAWz5D,SAASH,EAAM,IAC1B65D,EAAQ,IAAI/3D,OAAO,KAAK9B,EAAM,OAAQ,KAC5C63D,EAAQA,EAAM1mC,QAAQ0oC,GAAO,CAAC7iE,EAAKiW,KAEnB,KADEwsD,EAAUD,KAEpBvsD,EAAS1R,OAAOC,aAAayR,EAAOoe,WAAW,GAAIuuC,GACnDJ,KAEGvsD,QAGR4qD,EAAMlgE,MAAM,KDDRmiE,CAAWjhE,KAAK4mB,MAAO5mB,KAAKygE,UGf3C,SAASS,GAAapwD,GAClB,OAAS,GAAKA,GAAQ,GAAO,EAAIA,EAAQ,IAM7C,SAASqwD,GAAkB1B,EAAU2B,EAAWjB,IAC5Cx4D,GAAO9C,gBAAgB,QACP,MAAZu8D,IACAA,EAAWjB,IAEf,MAAMnB,EAAQoC,EAAStiE,MAAM2gE,IACxBT,EAAM9/D,OAAS,GAAO,GAAK8/D,EAAM9/D,OAAS,IAAM8/D,EAAM9/D,OAAS,KAChEyI,GAAO3D,mBAAmB,0BAA2B,WAAY,gBAErE,MAAMq9D,EAAUzsD,GAAS,IAAI1N,WAAWH,KAAKkS,KAAK,GAAK+lD,EAAM9/D,OAAS,KACtE,IAAImI,EAAS,EACb,IAAK,IAAIpI,EAAI,EAAGA,EAAI+/D,EAAM9/D,OAAQD,IAAK,CACnC,IAAIP,EAAQ0iE,EAASlB,aAAalB,EAAM//D,GAAGuD,UAAU,UACtC,IAAX9D,GACAiJ,GAAO3D,mBAAmB,kCAAkC/E,IAAK,WAAY,gBAEjF,IAAK,IAAIqiE,EAAM,EAAGA,EAAM,GAAIA,IACpB5iE,EAAS,GAAM,GAAK4iE,IACpBD,EAAQh6D,GAAU,IAAO,GAAM,EAAKA,EAAS,GAEjDA,IAGR,MAAMk6D,EAAc,GAAKvC,EAAM9/D,OAAS,EAElCsiE,EAAeN,GADAlC,EAAM9/D,OAAS,GAMpC,OAJiB0V,GAASkM,GAAOugD,EAAQ93D,MAAM,EAAGg4D,EAAc,KAAK,GAAKC,MACxDH,EAAQA,EAAQniE,OAAS,GAAKsiE,IAC5C75D,GAAO3D,mBAAmB,4BAA6B,WAAY,gBAEhEoR,GAAQisD,EAAQ93D,MAAM,EAAGg4D,EAAc,IAElD,SAASE,GAAkBJ,EAASD,EAAWjB,KACtCkB,EAAQniE,OAAS,GAAMmiE,EAAQniE,OAAS,IAAMmiE,EAAQniE,OAAS,KAChEyI,GAAO3D,mBAAmB,uBAAwB,UAAW,gBAEjD,MAAZo9D,IACAA,EAAWjB,IAEf,MAAMuB,EAAU,CAAC,GACjB,IAAIC,EAAgB,GACpB,IAAK,IAAI1iE,EAAI,EAAGA,EAAIoiE,EAAQniE,OAAQD,IAE5B0iE,EAAgB,GAChBD,EAAQA,EAAQxiE,OAAS,KAAO,EAChCwiE,EAAQA,EAAQxiE,OAAS,IAAMmiE,EAAQpiE,GACvC0iE,GAAiB,IAIjBD,EAAQA,EAAQxiE,OAAS,KAAOyiE,EAChCD,EAAQA,EAAQxiE,OAAS,IAAMmiE,EAAQpiE,IAAO,EAAI0iE,EAElDD,EAAQ9+D,KAAKy+D,EAAQpiE,KAvDpB,GAuDsC,EAAI0iE,GAvD7B,EAAK,MAwDnBA,GAAiB,GAIzB,MAAMC,EAAeP,EAAQniE,OAAS,EAChC4zB,EAAWxrB,SAASwZ,GAAOugD,GAAS95D,UAAU,EAAG,GAAI,IAAM25D,GAAaU,GAI9E,OAFAF,EAAQA,EAAQxiE,OAAS,KAAO0iE,EAChCF,EAAQA,EAAQxiE,OAAS,IAAO4zB,GAAa,EAAI8uC,EAC1CR,EAASt9D,KAAK49D,EAAQtjE,KAAKM,GAAU0iE,EAASnB,QAAQvhE,MHpDjE4hE,GAAuB,IAAI7+D,QGsD3B,MAAM0K,GAAS,GACR,MAAM01D,GACTjhE,YAAYqE,EAAOo8D,EAASS,EAAQ3kD,EAAUikD,GAC1B,MAAZjkD,IACAA,EAAW,IAEC,MAAZikD,IACAA,EAAWjB,IAEfx4D,GAAO5C,cAAcE,EAAOkH,GAAQ,YACpC/M,EAAiBY,KAAM,CAAE8hE,OAAAA,EAAQ3kD,SAAAA,EAAUikD,SAAAA,EAAUC,QAAAA,IAEzDU,cACI,MAAM3kD,EAAO6b,GAAY,WAAaj5B,KAAKmd,SAAUwa,GAAyBqqC,MAC9E,OAAO9kD,GAAO+b,GAAYj5B,KAAK8hE,OAAQnqC,GAAyBqqC,MAAO5kD,EAAM,KAAM,GAAI,UAE3F7W,kBAAkBu7D,EAAQ3kD,EAAUikD,GAEhC,MAAMC,EAAUF,GAAkBW,EAAQV,GAE1C,OADAU,EAASL,GAAkB95D,GAAO/B,SAASy7D,GAAUD,GAC9C,IAAIS,GAAS11D,GAAQk1D,EAASS,EAAQ3kD,EAAUikD,GAE3D76D,mBAAmB07D,EAAU9kD,EAAUikD,GACnC,MAAMC,EAAU15D,GAAO/B,SAASq8D,EAAU,WACpCH,EAASL,GAAkBJ,EAASD,GAC1C,OAAO,IAAIS,GAAS11D,GAAQiJ,GAAQisD,GAAUS,EAAQ3kD,EAAUikD,GAEpE76D,uBAAuB07D,EAAUb,GAE7B,OAAOK,GADS95D,GAAO/B,SAASq8D,EAAU,WACRb,GAEtC76D,uBAAuBu7D,EAAQV,GAC3B,OAAOD,GAAkBW,EAAQV,GAErC76D,uBAAuBu7D,EAAQV,GAC3B,IAEI,OADAD,GAAkBW,EAAQV,IACnB,EAEX,MAAO9/D,IACP,OAAO,GCvHf,IAWI4gE,GAXAniE,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAUjF,MAAMkiE,WAAmBnU,GAC5BptD,YAAYk0C,EAAYlL,GACpB96B,MAAM86B,GACNs4B,GAAuB1hE,IAAIR,UAAM,GACjCD,GAAuBC,KAAMkiE,GAAwBptB,EAAY,KAEjE11C,EAAiBY,KAAM,CAAEqyB,QADTusC,GAAe5+D,KAAKoiE,WAAWtoB,aAI/CsoB,iBAAe,OAAO3hE,GAAuBT,KAAMkiE,GAAwB,KAC3EptB,iBAAe,OAAO90C,KAAKoiE,WAAWttB,WAC1Cj3C,mBAAqB,OAAOmC,KAAKqyB,QACjCs8B,QAAQ/kB,GACJ,OAAO,IAAIu4B,GAAW1hE,GAAuBT,KAAMkiE,GAAwB,KAAMt4B,GAErF/rC,sBAAsBwsD,GAElB,MAAMl2B,EAAKl2B,OAAO8N,OAAO,GAAIs+C,QAAWvsD,EAAkB,CACtDgO,GAAKu+C,EAAIv+C,GAAK8oB,GAAey1B,EAAIv+C,GAAI9L,KAAK4pC,eAAYlqC,EACtDmM,KAAOw+C,EAAIx+C,KAAO+oB,GAAey1B,EAAIx+C,KAAM7L,KAAK4pC,eAAYlqC,KAEjD,MAAXy0B,EAAGtoB,OACCmnB,GAAWmB,EAAGtoB,QAAU7L,KAAKqyB,SAC7B1qB,GAAO3D,mBAAmB,oCAAqC,UAAWqmD,EAAIx+C,aAE3EsoB,EAAGtoB,MAGd,MAAMw2D,EAAM/jB,GAAYzyC,KAAKsoB,GAE7B,OADAkuC,EAAIniC,UAAYlgC,KAAKoiE,WAAW1mB,KAAK2mB,EAAI7jB,cAClC6jB,EAAIv1B,WAEfjvC,kBAAkB6F,GACd,OAAO1D,KAAKoiE,WAAW1mB,KAAKtf,GAAY14B,IAAUopC,WAEtDjvC,oBAAoBihC,EAAQjgC,EAAOd,GAE/B,MAAM0zD,QAAkB/zB,GAAiBg0B,aAAa5yB,EAAQjgC,EAAOd,GAAOF,MAAOkF,IAC/E,GAAqB,MAAjB/C,KAAK4pC,SACL,OAAOjiC,GAAO5D,WAAW,8CAA+C,wBAAyB,CAC7FY,UAAW,cACXzC,KAAM,CAAEa,KAAAA,KAGhB,MAAMsvB,QAAgBryB,KAAK4pC,SAAS9U,YAAY/xB,GAChD,OAAe,MAAXsvB,EACO1qB,GAAO5D,WAAW,wBAAyB,oBAAqB,CACnEhG,MAAOgF,IAGRsvB,KAEX,OAAOryB,KAAKoiE,WAAW1mB,KAAKhe,GAAiBriB,KAAKo2C,EAAU3yB,OAAQjgC,EAAO4yD,EAAU1zD,QAAQ+uC,YAGrGo1B,GAAyB,IAAIzgE,QC1E7B,IAWI8I,GAAI+3D,GAAwBC,GAX5B9hE,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAEpFF,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAc5F,MAACykE,GAAc,mBAErBC,GAAe,IAAIv7D,WAAW,CAAC,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,MAEnFkpB,GAAIrqB,OAAO,sEAEjB,SAAS28D,GAAK3kE,EAAOmB,GACjB,IAAIkI,EAAS,GACb,KAAOrJ,GACHqJ,EAJQ,mBAISrJ,EAAQ,IAAMqJ,EAC/BrJ,EAAQgJ,KAAKmhC,MAAMnqC,EAAQ,IAE/B,KAAOqJ,EAAOlI,OAAkB,EAATA,GACnBkI,EAAS,IAAMA,EAEnB,MAAO,KAAOA,EAElB,SAASu7D,GAAkBzyD,GACvB,MAAMnS,EAAQ4J,GAAO/B,SAASsK,GAG9B,OAAOoE,GADOiB,GAAO,CAACxX,EADR4X,GAAUmL,GAAOA,GAAO/iB,IAAS,EAAG,MAItD,MAAMoO,GAAS,GACf,SAASy2D,GAAMlkE,EAAOmkE,EAAW/oB,EAAWhF,GACxC,MAAMjgC,EAAO,IAAI3N,WAAW,IAC5B,GAvBgB,WAuBZxI,EAAqB,CACrB,GAAkB,MAAdo2C,EACA,OAAOntC,GAAO5D,WAAW,uCAAwC,wBAAyB,CACtFY,UAAW,gBAInBkQ,EAAKrU,IAAIoU,GAASkgC,GAAa,QAI/BjgC,EAAKrU,IAAIoU,GAASklC,IAGtB,IAAK,IAAI76C,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC1B4V,EAAK,IAAM5V,GAAK,IAAQP,GAAU,GAAKO,EAAM,IAEjD,MAAM6jE,EAAIluD,GAAS+R,GAAY,SAAUk8C,EAAWhuD,IACpD,MAAO,CAAEkuD,GAAID,EAAEv5D,MAAM,EAAG,IAAKy5D,GAAIF,EAAEv5D,MAAM,KAE7C,SAAS05D,GAAWloB,EAAMmoB,GACtB,MAAMz2D,EAAay2D,EAAKpkE,MAAM,KAC9B,GAA0B,IAAtB2N,EAAWvN,QAAmC,MAAlBuN,EAAW,IAA6B,IAAfsuC,EAAKjwC,MAC1D,MAAM,IAAI3L,MAAM,kBAAoB+jE,GAElB,MAAlBz2D,EAAW,IACXA,EAAWkN,QAEf,IAAIvS,EAAS2zC,EACb,IAAK,IAAI97C,EAAI,EAAGA,EAAIwN,EAAWvN,OAAQD,IAAK,CACxC,MAAMkkE,EAAY12D,EAAWxN,GAC7B,GAAIkkE,EAAUh8D,MAAM,aAAc,CAC9B,MAAMzI,EAAQ4I,SAAS67D,EAAU57D,UAAU,EAAG47D,EAAUjkE,OAAS,IACjE,GAAIR,GAxDI,WAyDJ,MAAM,IAAIS,MAAM,wBAA0BgkE,GAE9C/7D,EAASA,EAAOg8D,YA3DR,WA2DkC1kE,OAEzC,CAAA,IAAIykE,EAAUh8D,MAAM,YAQrB,MAAM,IAAIhI,MAAM,4BAA8BgkE,GARZ,CAClC,MAAMzkE,EAAQ4I,SAAS67D,GACvB,GAAIzkE,GA/DI,WAgEJ,MAAM,IAAIS,MAAM,wBAA0BgkE,GAE9C/7D,EAASA,EAAOg8D,YAAY1kE,KAMpC,OAAO0I,EAEJ,MAAMi8D,WAAqBlB,GAC9BvhE,YAAYqE,EAAOm9D,EAAYkB,EAAmBT,EAAWK,EAAMxkE,EAAOoM,EAAO20D,EAAU71B,GACvF96B,MAAMszD,EAAYx4B,GAClBjiC,GAAO5C,cAAcE,EAAOkH,GAAQ,gBACpC/M,EAAiBY,KAAM,CAAE85C,UAAWsoB,EAAWnmB,sBAE/C78C,EAAiBY,KAAM,CACnBsjE,kBAAAA,EAAmBC,YAFH5tD,GAAUgX,GAAU7L,GAAO9gB,KAAK85C,YAAa,EAAG,GAGhE+oB,UAAAA,EAAWK,KAAAA,EAAMxkE,MAAAA,EAAOoM,MAAAA,IAE5B1L,EAAiBY,KAAM,CAAEy/D,SAAAA,IAE7B9Q,QAAQ/kB,GACJ,OAAO,IAAIy5B,GAAal3D,GAAQnM,KAAKoiE,WAAYpiE,KAAKsjE,kBAAmBtjE,KAAK6iE,UAAW7iE,KAAKkjE,KAAMljE,KAAKtB,MAAOsB,KAAK8K,MAAO9K,KAAKy/D,SAAU71B,GAE3I45B,kBAMA,GAAIxjE,KAAK8K,OAAS,IACd,MAAM,IAAI3L,MAAM,oBAEpB,OAAOwjE,GAAkBptD,GAAO,CAC5B,aAAcmtD,GAAK1iE,KAAK8K,MAAO,GAAI9K,KAAKsjE,kBACxCZ,GAAK1iE,KAAKtB,MAAO,GAAIsB,KAAK6iE,UAC1BttD,GAAO,CAAC,OAAQvV,KAAK80C,gBAG7B2uB,UAAY,OAAqB,MAAbzjE,KAAKkjE,KACzBQ,SACI,OAAO,IAAIC,GAAiBx3D,GAAQnM,KAAKqyB,QAASryB,KAAK85C,UAAW95C,KAAKsjE,kBAAmBtjE,KAAK6iE,UAAW7iE,KAAKkjE,KAAMljE,KAAKtB,MAAOsB,KAAK8K,MAAO9K,KAAK4pC,UAEtJw5B,YAAYQ,GACR,MAAMllE,EAAQiJ,GAAO7B,UAAU89D,EAAQ,SACvC,GAAIllE,EAAQ,WACR,MAAM,IAAIS,MAAM,mBAAqBuD,OAAOhE,IAGhD,IAAIwkE,EAAOljE,KAAKkjE,KACZA,IACAA,GAAQ,KAAe,WAARxkE,GApHP,WAqHJA,IACAwkE,GAAQ,MAGhB,MAAMF,GAAEA,EAAED,GAAEA,GAAOH,GAAMlkE,EAAOsB,KAAK6iE,UAAW7iE,KAAK85C,UAAW95C,KAAK80C,YAC/D+uB,EAAK,IAAI9nB,GAAW3rC,IAAOH,GAAS8yD,GAAMh9D,OAAO/F,KAAK80C,aAAe1kB,GAAG,KAC9E,OAAO,IAAIizC,GAAal3D,GAAQ03D,EAAI7jE,KAAKujE,YAAanuD,GAAQ4tD,GAAKE,EAAMxkE,EAAOsB,KAAK8K,MAAQ,EAAG9K,KAAKy/D,SAAUz/D,KAAK4pC,UAExHq5B,WAAWC,GACP,OAAOD,GAAWjjE,KAAMkjE,GAE5B38D,gBAAgB6yC,GACZ,OAAO34C,GAAuB4iE,GAAc94D,GAAI,IAAK+3D,IAAwB/hE,KAAK8iE,GAAcjqB,EAAM,MAE1G7yC,kBAAkBu7D,EAAQ3kD,EAAW,GAAI+lD,EAAOV,GAAapB,EAAWjB,IAC/D+C,IACDA,EAAOV,IAEX,MAAM/C,EAAWoC,GAASiC,WAAWhC,EAAQ3kD,EAAUikD,GACvD,OAAO3gE,GAAuB4iE,GAAc94D,GAAI,IAAK+3D,IAAwB/hE,KAAK8iE,GAAc5D,EAASsC,cAAetC,GAAUwD,WAAWC,GAEjJ38D,oBAAoBk5D,EAAUyD,EAAOV,IAIjC,OAHKU,IACDA,EAAOV,IAEJ/hE,GAAuB4iE,GAAc94D,GAAI,IAAK+3D,IAAwB/hE,KAAK8iE,GAAc5D,EAASsC,cAAetC,GAAUwD,WAAWC,GAEjJ38D,uBAAuBi9D,GACnB,MAAMnuD,EAAQT,GAASL,GAAaivD,IACf,KAAjBnuD,EAAMnW,QAAiByjE,GAAkBttD,EAAM9L,MAAM,EAAG,OAASi6D,GACjE77D,GAAO3D,mBAAmB,uBAAwB,cAAe,gBAErE,MAAM8G,EAAQuK,EAAM,GACdiuD,EAAoBluD,GAAQC,EAAM9L,MAAM,EAAG,IAC3C7K,EAAQ4I,SAAS8N,GAAQC,EAAM9L,MAAM,EAAG,KAAKhC,UAAU,GAAI,IAC3Ds7D,EAAYztD,GAAQC,EAAM9L,MAAM,GAAI,KACpC/J,EAAM6V,EAAM9L,MAAM,GAAI,IAC5B,OAAQ6L,GAAQC,EAAM9L,MAAM,EAAG,KAE3B,IAAK,aACL,IAAK,aAAc,CACf,MAAMuwC,EAAY1kC,GAAQ5V,GAC1B,OAAO,IAAImkE,GAAiBx3D,GAAQyyD,GAAe9kB,GAAYA,EAAWwpB,EAAmBT,EAAW,KAAMnkE,EAAOoM,EAAO,MAGhI,IAAK,aACL,IAAK,cACD,GAAe,IAAXtL,EAAI,GACJ,MAEJ,OAAO,IAAI6jE,GAAal3D,GAAQ,IAAI4vC,GAAWv8C,EAAI+J,MAAM,IAAK+5D,EAAmBT,EAAW,KAAMnkE,EAAOoM,EAAO,KAAM,MAE9H,OAAOnD,GAAO3D,mBAAmB,8BAA+B,cAAe,gBAEnFuC,oBAAoB4W,EAAW,GAAI+lD,EAAOV,GAAapB,EAAWjB,IACzD+C,IACDA,EAAOV,IAEX,MAAM/C,EAAWoC,GAASkC,YAAYv2C,GAAY,IAAKrQ,EAAUikD,GACjE,OAAO3gE,GAAuB4iE,GAAc94D,GAAI,IAAK+3D,IAAwB/hE,KAAK8iE,GAAc5D,EAASsC,cAAetC,GAAUwD,WAAWC,IAGrJ34D,GAAK84D,GAAcf,GAAyB,SAAgC0B,EAAOvE,GAC/E,MAAMrmB,EAAOzxC,GAAO/B,SAASo+D,EAAO,QACpC,GAAI5qB,EAAKl6C,OAAS,IAAMk6C,EAAKl6C,OAAS,GAClC,MAAM,IAAIC,MAAM,gBAEpB,MAAM2jE,EAAIluD,GAAS+R,GAAY,SAAU87C,GAAcrpB,IACjDgpB,EAAa,IAAIrmB,GAAW3mC,GAAQ0tD,EAAEv5D,MAAM,EAAG,MACrD,OAAO,IAAI85D,GAAal3D,GAAQi2D,EAAY,aAAchtD,GAAQ0tD,EAAEv5D,MAAM,KAAM,IAAK,EAAG,EAAGk2D,EAAU,OAElG,MAAMkE,WAAyBjV,GAClC9tD,YAAYqE,EAAOotB,EAASynB,EAAWwpB,EAAmBT,EAAWK,EAAMxkE,EAAOoM,EAAO8+B,GACrF96B,MAAMujB,EAASuX,GACfjiC,GAAO5C,cAAcE,EAAOkH,GAAQ,oBACpC/M,EAAiBY,KAAM,CAAE85C,UAAAA,IAEzB16C,EAAiBY,KAAM,CACnB85C,UAAAA,EAAWypB,YAFK5tD,GAAUgX,GAAU7L,GAAOg5B,IAAa,EAAG,GAEnCwpB,kBAAAA,EAAmBT,UAAAA,EAAWK,KAAAA,EAAMxkE,MAAAA,EAAOoM,MAAAA,IAG3E6jD,QAAQ/kB,GACJ,OAAO,IAAI+5B,GAAiBx3D,GAAQnM,KAAKqyB,QAASryB,KAAK85C,UAAW95C,KAAKsjE,kBAAmBtjE,KAAK6iE,UAAW7iE,KAAKkjE,KAAMljE,KAAKtB,MAAOsB,KAAK8K,MAAO8+B,GAE7I45B,kBAMA,GAAIxjE,KAAK8K,OAAS,IACd,MAAM,IAAI3L,MAAM,oBAEpB,OAAOwjE,GAAkBptD,GAAO,CAC5B,aACAmtD,GAAK1iE,KAAK8K,MAAO,GACjB9K,KAAKsjE,kBACLZ,GAAK1iE,KAAKtB,MAAO,GACjBsB,KAAK6iE,UACL7iE,KAAK85C,aAGb2pB,UAAY,OAAqB,MAAbzjE,KAAKkjE,KACzBE,YAAYQ,GACR,MAAMllE,EAAQiJ,GAAO7B,UAAU89D,EAAQ,SACvC,GAAIllE,EAAQ,WACR,MAAM,IAAIS,MAAM,mBAAqBuD,OAAOhE,IAGhD,IAAIwkE,EAAOljE,KAAKkjE,KACZA,IACAA,GAAQ,KAAe,WAARxkE,GApOP,WAqOJA,IACAwkE,GAAQ,MAGhB,MAAMF,GAAEA,EAAED,GAAEA,GAAOH,GAAMlkE,EAAOsB,KAAK6iE,UAAW7iE,KAAK85C,UAAW,MAC1DmqB,EAAKloB,GAAWmoB,WAAWnB,EAAI/iE,KAAK85C,WAAW,GAC/CznB,EAAUusC,GAAeqF,GAC/B,OAAO,IAAIN,GAAiBx3D,GAAQkmB,EAAS4xC,EAAIjkE,KAAKujE,YAAanuD,GAAQ4tD,GAAKE,EAAMxkE,EAAOsB,KAAK8K,MAAQ,EAAG9K,KAAK4pC,UAEtHq5B,WAAWC,GACP,OAAOD,GAAWjjE,KAAMkjE,IAGzB,MAAMiB,GACTvjE,YAAYkhE,EAAQ3kD,EAAW,GAAI+lD,EAAO,iBAAkB1D,EAASW,IACjEoC,GAA0B/hE,IAAIR,UAAM,GACpCD,GAAuBC,KAAMuiE,GAA2Bc,GAAaS,WAAWhC,EAAQ3kD,EAAU+lD,EAAM1D,GAAS,KAErH4E,UAAU1lE,EAAQ,GACd,OAAO+B,GAAuBT,KAAMuiE,GAA2B,KAAKa,YAAY1kE,IAIjF,SAAS2lE,GAAeT,GAC3B,MAAMllE,EAAQiJ,GAAO7B,UAAU89D,EAAQ,SAIvC,OAHIllE,EAAQ,GAAKA,GA9PD,aA+PZiJ,GAAO3D,mBAAmB,wBAAyB,QAAStF,GAEzD,aAAaA;uFANxB6jE,GAA4B,IAAI9gE,QCpRhC,IAWI6iE,GAAUC,GAASC,GAXnBzkE,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAIxF,MAAMwkE,GAAiB,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,IAEvCC,GAAO,CAAC,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,KAEtLC,GAAI,CAAC,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,EAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,EAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAC//CC,GAAK,CAAC,GAAM,EAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,EAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KAEhgDhkD,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FgkD,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAE1/FC,GAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,SAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,YAE1/Fx1B,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/Fw1B,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAA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"} \ No newline at end of file diff --git a/packages/ethers/dist/ethers.umd.min.js b/packages/ethers/dist/ethers.umd.min.js new file mode 100644 index 000000000..57cb143b7 --- /dev/null +++ b/packages/ethers/dist/ethers.umd.min.js @@ -0,0 +1,6 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).ethers={})}(this,(function(t){"use strict";async function e(t){const e=Object.keys(t);return(await Promise.all(e.map((e=>Promise.resolve(t[e]))))).reduce(((t,r,n)=>(t[e[n]]=r,t)),{})}function r(t,e){const r=e.split("|").map((t=>t.trim()));for(let n=0;n{try{if("test"!=="test".normalize(e))throw new Error("bad");if("NFD"===e){const t=String.fromCharCode(233).normalize("NFD");if(t!==String.fromCharCode(101,769))throw new Error("broken")}t.push(e)}catch(t){}return t}),[]);function T(t,e,r){Object.defineProperty(t,e,{enumerable:!0,writable:!1,value:r})}const k=9007199254740991,A={};A.INVALID_ARGUMENT=TypeError,A.NUMERIC_FAULT=RangeError,A.BUFFER_OVERRUN=RangeError;class N{constructor(t){f.add(this),T(this,"version",t||"_")}makeError(t,e,r){{const s=[];if(r)for(const t in r){const e=r[t];try{s.push(t+"="+JSON.stringify(e))}catch(n){s.push(t+"=[could not serialize object]")}}s.push(`code=${e}`),s.push(`version=${this.version}`),s.length&&(t+=" ("+s.join(", ")+")")}const n=new(A[e]||Error)(t);if(T(n,"code",e),r)for(const t in r)T(n,t,r[t]);return n}throwError(t,e,r){throw this.makeError(t,e,r)}throwArgumentError(t,e,r){return this.throwError(t,"INVALID_ARGUMENT",{argument:e,value:r})}assert(t,e,r,n){t||this.throwError(e,r||"UNKNOWN_ERROR",n)}assertArgument(t,e,r,n){return this.assert(t,e,"INVALID_ARGUMENT",{argument:r,value:n})}assertIntegerArgument(t,e,r,n){let s=null;"number"!=typeof e?s="expected a number":Number.isInteger(e)?(null!=r&&en)&&(s="value is out of range"):s="invalid integer",s&&this.throwArgumentError(s,t,e)}assertSafeUint53(t,e){this.assertArgument("number"==typeof t,"invalid number","value",t),null==e&&(e="value not safe");const r="assertSafeInteger";this.assert(t>=0&&t<9007199254740991,e,"NUMERIC_FAULT",{operation:r,fault:"out-of-safe-range",value:t}),this.assert(t%1==0,e,"NUMERIC_FAULT",{operation:r,fault:"non-integer",value:t})}assertNormalize(t){-1===E.indexOf(t)&&this.throwError("platform missing String.prototype.normalize","UNSUPPORTED_OPERATION",{operation:"String.prototype.normalize",info:{form:t}})}assertPrivate(t,e,r=""){if(t!==e){let t=r,e="new";r&&(t+=".",e+=" "+r),this.throwError(`private constructor; use ${t}from* methods`,"UNSUPPORTED_OPERATION",{operation:e})}}assertArgumentCount(t,e,r=""){r&&(r=": "+r),this.assert(t>=e,"missing arguemnt"+r,"MISSING_ARGUMENT",{count:t,expectedCount:e}),this.assert(t>=e,"too many arguemnts"+r,"UNEXPECTED_ARGUMENT",{count:t,expectedCount:e})}assertInt53(t,e){m(this,f,"m",d).call(this,"Int53",t,e||"unknown",-k)}assertUint53(t,e){m(this,f,"m",d).call(this,"Int53",t,e||"unknown",0)}assertInteger(t,e="unknown",r=0,n=k){}getBytes(t,e){return m(this,f,"m",p).call(this,t,e,!1)}getBytesCopy(t,e){return m(this,f,"m",p).call(this,t,e,!0)}getNumber(t,e){switch(typeof t){case"bigint":return(t<-k||t>k)&&this.throwArgumentError("overflow",e||"value",t),Number(t);case"number":return Number.isInteger(t)?(t<-k||t>k)&&this.throwArgumentError("overflow",e||"value",t):this.throwArgumentError("underflow",e||"value",t),t;case"string":try{return this.getNumber(BigInt(t),e)}catch(r){this.throwArgumentError(`invalid numeric string: ${r.message}`,e||"value",t)}}return this.throwArgumentError("invalid numeric value",e||"value",t)}getBigInt(t,e){switch(typeof t){case"bigint":return t;case"number":return Number.isInteger(t)?(t<-k||t>k)&&this.throwArgumentError("overflow",e||"value",t):this.throwArgumentError("underflow",e||"value",t),BigInt(t);case"string":try{return BigInt(t)}catch(r){this.throwArgumentError(`invalid BigNumberish string: ${r.message}`,e||"value",t)}}return this.throwArgumentError("invalid BigNumberish value",e||"value",t)}debug(...t){m(this,f,"m",w).call(this,g.DEBUG,t)}info(...t){m(this,f,"m",w).call(this,g.INFO,t)}warn(...t){m(this,f,"m",w).call(this,g.WARNING,t)}static globalLogger(){return v||(v=new N("@ethersproject/logger@6.0.0-beta.1")),v}static setLogLevel(t){const e=y[t.toLowerCase()];null!=e?b=e:N.globalLogger().warn("invalid log level - "+t)}}f=new WeakSet,d=function(t,e,r,n){("number"!=typeof e||isNaN(e))&&this.throwArgumentError(`invalid ${t}`,"INVALID_ARGUMENT",{name:"value",value:e});let s=`invalid ${t} value`,i=null;isNaN(e)?i="not-a-number":ek?(s=`unsafe ${t} value`,i="overflow"):Math.floor(e)!==e&&(i="underflow"),i&&this.throwError(s,"NUMERIC_FAULT",{operation:r,fault:i,value:e})},p=function(t,e,r){if(t instanceof Uint8Array)return r?new Uint8Array(t):t;if("string"==typeof t&&t.match(/^0x([0-9a-f][0-9a-f])*$/i)){const e=new Uint8Array((t.length-2)/2);let r=2;for(let n=0;ny[r]||console.log.apply(console,e)},N.LogLevels=g;const P=new N("@ethersproject/abi@6.0.0-beta.1");var x,O,I,S,R,_,C,B=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},F=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function U(t){const e=new Set;return t.forEach((t=>e.add(t))),Object.freeze(e)}!function(t){t.sighash="sighash",t.minimal="minimal",t.full="full",t.json="json"}(C||(C={}));const L="constant external internal payable private public pure view",D=U(L.split(" ")),M="constructor error event function struct",j=U(M.split(" ")),G="calldata memory storage payable indexed",$=U(G.split(" ")),z=U([M,G,"tuple returns",L].join(" ").split(" ")),W={"(":"OPEN_PAREN",")":"CLOSE_PAREN","[":"OPEN_BRACKET","]":"CLOSE_BRACKET",",":"COMMA","@":"AT"},H=new RegExp("^(\\s*)"),V=new RegExp("^([0-9]+)"),K=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"),J=new RegExp("^(address|bool|bytes(0-9*)|string|u?int([0-9]*))");class q{constructor(t){x.add(this),O.set(this,void 0),I.set(this,void 0),B(this,O,0,"f"),B(this,I,t.slice(),"f")}get offset(){return F(this,O,"f")}get length(){return F(this,I,"f").length-F(this,O,"f")}clone(){return new q(F(this,I,"f"))}reset(){B(this,O,0,"f")}popKeyword(t){const e=this.peek();if("KEYWORD"!==e.type||!t.has(e.text))throw new Error(`expected keyword ${e.text}`);return this.pop().text}popType(t){if(this.peek().type!==t)throw new Error(`expected ${t}; got ${JSON.stringify(this.peek())}`);return this.pop().text}popParen(){const t=this.peek();if("OPEN_PAREN"!==t.type)throw new Error("bad start");const e=F(this,x,"m",S).call(this,F(this,O,"f")+1,t.match+1);return B(this,O,t.match+1,"f"),e}popParams(){const t=this.peek();if("OPEN_PAREN"!==t.type)throw new Error("bad start");const e=[];for(;F(this,O,"f")=F(this,I,"f").length)throw new Error("out-of-bounds");return F(this,I,"f")[F(this,O,"f")]}peekKeyword(t){const e=this.peekType("KEYWORD");return null!=e&&t.has(e)?e:null}peekType(t){if(0===this.length)return null;const e=this.peek();return e.type===t?e.text:null}pop(){var t;const e=this.peek();return B(this,O,(t=F(this,O,"f"),++t),"f"),e}toString(){const t=[];for(let e=F(this,O,"f");e`}}function X(t){const e=[],r=e=>{const r=i0&&"NUMBER"===e[e.length-1].type){const r=e.pop().text;t=r+t,e[e.length-1].value=P.getNumber(r)}if(0===e.length||"BRACKET"!==e[e.length-1].type)throw new Error("missing opening bracket");e[e.length-1].text+=t}}else if(a=o.match(K),a){if(c.text=a[1],i+=c.text.length,z.has(c.text)){c.type="KEYWORD";continue}if(c.text.match(J)){c.type="TYPE";continue}c.type="ID"}else{if(a=o.match(V),!a)throw new Error(`unexpected token ${JSON.stringify(o[0])} at position ${i}`);c.text=a[1],c.type="NUMBER",i+=c.text.length}}return new q(e.map((t=>Object.freeze(t))))}function Y(t,e){let r=[];for(const n in e.keys())t.has(n)&&r.push(n);if(r.length>1)throw new Error(`conflicting types: ${r.join(", ")}`)}function Z(t,e){if(e.peekKeyword(j)){const r=e.pop().text;if(r!==t)throw new Error(`expected ${t}, got ${r}`)}return e.popType("ID")}function Q(t,e){const r=new Set;for(;;){const n=t.peekType("KEYWORD");if(null==n||e&&!e.has(n))break;if(t.pop(),r.has(n))throw new Error(`duplicate keywords: ${JSON.stringify(n)}`);r.add(n)}return Object.freeze(r)}function tt(t,e){return t.popParams().map((t=>ct.fromTokens(t,e)))}function et(t){if(t.peekType("AT")){if(t.pop(),t.peekType("NUMBER"))return P.getBigInt(t.pop().text);throw new Error("invalid gas")}return null}function rt(t){if(t.length)throw new Error(`unexpected tokens: ${t.toString()}`)}O=new WeakMap,I=new WeakMap,x=new WeakSet,S=function(t=0,e=0){return new q(F(this,I,"f").slice(t,e).map((e=>Object.freeze(Object.assign({},e,{match:e.match-t,linkBack:e.linkBack-t,linkNext:e.linkNext-t})))))};const nt=new RegExp(/^(.*)\[([0-9]*)\]$/);function st(t){const e=t.match(J);if(!e)return P.throwArgumentError("invalid type","type",t);if("uint"===t)return"uint256";if("int"===t)return"int256";if(e[2]){const r=parseInt(e[2]);(0===r||r>32)&&P.throwArgumentError("invalid bytes length","type",t)}else if(e[3]){const r=parseInt(e[3]);(0===r||r>256||r%8)&&P.throwArgumentError("invalid numeric width","type",t)}return t}const it={},ot=Symbol.for("_ethers_internal"),at="_ParamTypeInternal";class ct{constructor(t,e,r,s,i,o,a,c){if(R.add(this),P.assertPrivate(t,it,"ParamType"),Object.defineProperty(this,ot,{value:at}),o&&(o=Object.freeze(o.slice())),"array"===s){if(null==a||null==c)throw new Error("")}else if(null!=a||null!=c)throw new Error("");if("tuple"===s){if(null==o)throw new Error("")}else if(null!=o)throw new Error("");n(this,{name:e,type:r,baseType:s,indexed:i,components:o,arrayLength:a,arrayChildren:c})}format(t=C.sighash){if(C[t]||P.throwArgumentError("invalid format type","format",t),t===C.json){let e={type:"tuple"===this.baseType?"tuple":this.type,name:this.name||void 0};return"boolean"==typeof this.indexed&&(e.indexed=this.indexed),this.isTuple()&&(e.components=this.components.map((e=>JSON.parse(e.format(t))))),JSON.stringify(e)}let e="";return this.isArray()?(e+=this.arrayChildren.format(t),e+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`):this.isTuple()?(t!==C.sighash&&(e+=this.type),e+="("+this.components.map((e=>e.format(t))).join(t===C.full?", ":",")+")"):e+=this.type,t!==C.sighash&&(!0===this.indexed&&(e+=" indexed"),t===C.full&&this.name&&(e+=" "+this.name)),e}static isArray(t){return t&&"array"===t.baseType}isArray(){return"array"===this.baseType}isTuple(){return"tuple"===this.baseType}isIndexable(){return null!=this.indexed}walk(t,e){if(this.isArray()){if(!Array.isArray(t))throw new Error("invlaid array value");if(-1!==this.arrayLength&&t.length!==this.arrayLength)throw new Error("array is wrong length");return t.map((t=>this.arrayChildren.walk(t,e)))}if(this.isTuple()){if(!Array.isArray(t))throw new Error("invlaid tuple value");if(t.length!==this.components.length)throw new Error("array is wrong length");return t.map(((t,r)=>this.components[r].walk(t,e)))}return e(this.type,t)}async walkAsync(t,e){const r=[],n=[t];return F(this,R,"m",_).call(this,r,t,e,(t=>{n[0]=t})),r.length&&await Promise.all(r),n[0]}static from(t,e){if(ct.isParamType(t))return t;if("string"==typeof t)return ct.fromTokens(X(t),e);if(t instanceof q)return ct.fromTokens(t,e);const r=t.name;!r||"string"==typeof r&&r.match(K)||P.throwArgumentError("invalid name","obj.name",r);let n=t.indexed;null!=n&&(e||P.throwArgumentError("parameter cannot be indexed","obj.indexed",t.indexed),n=!!n);let s=t.type,i=s.match(nt);if(i){const e=i[2],o=ct.from({type:i[1],components:t.components});return new ct(it,r,s,"array",n,null,e,o)}if("tuple("===s.substring(0,5)||"("===s[0]){const e=null!=t.components?t.components.map((t=>ct.from(t))):null;return new ct(it,r,s,"tuple",n,e,null,null)}return s=st(t.type),new ct(it,r,s,s,n,null,null,null)}static fromObject(t,e){throw new Error("@TODO")}static fromTokens(t,e){let r="",n="",s=null;Q(t,U(["tuple"])).has("tuple")||t.peekType("OPEN_PAREN")?(n="tuple",s=t.popParams().map((t=>ct.from(t))),r=`tuple(${s.map((t=>t.format())).join(",")})`):(r=st(t.popType("TYPE")),n=r);let i=null,o=null;for(;t.length&&t.peekType("BRACKET");){const e=t.pop();i=new ct(it,"",r,n,null,s,o,i),o=e.value,r+=e.text,n="array",s=null}let a=null;if(Q(t,$).has("indexed")){if(!e)throw new Error("");a=!0}const c=t.peekType("ID")?t.pop().text:"";if(t.length)throw new Error("leftover tokens");return new ct(it,c,r,n,a,s,o,i)}static isParamType(t){return t&&t[ot]===at}}var lt;R=new WeakSet,_=function t(e,r,n,s){if(this.isArray()){if(!Array.isArray(r))throw new Error("invlaid array value");if(-1!==this.arrayLength&&r.length!==this.arrayLength)throw new Error("array is wrong length");const i=this.arrayChildren,o=r.slice();return o.forEach(((r,s)=>{F(i,R,"m",t).call(i,e,r,n,(t=>{o[s]=t}))})),void s(o)}if(this.isTuple()){const i=this.components;let o;if(Array.isArray(r))o=r.slice();else{if(null==r||"object"!=typeof r)throw new Error("invlaid tuple value");o=i.map((t=>{if(!t.name)throw new Error("cannot use object value with unnamed components");if(!(t.name in r))throw new Error(`missing value for component ${t.name}`);return r[t.name]}))}if(r.length!==this.components.length)throw new Error("array is wrong length");return o.forEach(((r,s)=>{var a;F(a=i[s],R,"m",t).call(a,e,r,n,(t=>{o[s]=t}))})),void s(o)}const i=n(this.type,r);i.then?e.push(async function(){s(await i)}()):s(i)},function(t){t.constructor="constructor",t.error="error",t.event="event",t.function="function",t.struct="struct"}(lt||(lt={}));class ut{constructor(t,e,r){P.assertPrivate(t,it,"Fragment"),n(this,{type:e,inputs:r=Object.freeze(r.slice())})}static from(t){if("string"==typeof t)return this.fromString(t);if(t instanceof q)return this.fromTokens(t);if("object"==typeof t)return this.fromObject(t);throw new Error(`unsupported type: ${t}`)}static fromObject(t){switch(t.type){case"constructor":return wt.fromObject(t);case"error":return dt.fromObject(t);case"event":return pt.fromObject(t);case"function":return gt.fromObject(t);case"struct":return mt.fromObject(t)}throw new Error("not implemented yet")}static fromString(t){try{ut.from(JSON.parse(t))}catch(t){}return ut.fromTokens(X(t))}static fromTokens(t){const e=t.popKeyword(j);switch(e){case"constructor":return wt.fromTokens(t);case"error":return dt.fromTokens(t);case"event":return pt.fromTokens(t);case"function":return gt.fromTokens(t);case"struct":return mt.fromTokens(t)}throw new Error(`unsupported type: ${e}`)}static isConstructor(t){return t&&"constructor"===t.type}static isError(t){return t&&"error"===t.type}static isEvent(t){return t&&"event"===t.type}static isFunction(t){return t&&"function"===t.type}static isStruct(t){return t&&"struct"===t.type}}class ht extends ut{constructor(t,e,r,s){super(t,e,s),s=Object.freeze(s.slice()),n(this,{name:r})}}function ft(t,e){return"("+e.map((e=>e.format(t))).join(t===C.full?", ":",")+")"}class dt extends ht{constructor(t,e,r){super(t,lt.error,e,r)}format(t=C.sighash){if(C[t]||P.throwArgumentError("invalid format type","format",t),t===C.json)return JSON.stringify({type:"error",name:this.name,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==C.sighash&&e.push("error"),e.push(this.name+ft(t,this.inputs)),e.join(" ")}static fromString(t){return dt.fromTokens(X(t))}static fromTokens(t){const e=Z("error",t),r=tt(t);return rt(t),new dt(it,e,r)}}class pt extends ht{constructor(t,e,r,s){super(t,lt.event,e,r),n(this,{anonymous:s})}format(t=C.sighash){if(C[t]||P.throwArgumentError("invalid format type","format",t),t===C.json)return JSON.stringify({type:"event",anonymous:this.anonymous,name:this.name,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==C.sighash&&e.push("event"),e.push(this.name+ft(t,this.inputs)),t!==C.sighash&&this.anonymous&&e.push("anonymous"),e.join(" ")}static fromString(t){return pt.fromTokens(X(t))}static fromTokens(t){const e=Z("event",t),r=tt(t,!0),n=!!Q(t,U(["anonymous"])).has("anonymous");return rt(t),new pt(it,e,r,n)}}class wt extends ut{constructor(t,e,r,s,i){super(t,e,r),n(this,{payable:s,gas:i})}format(t=C.sighash){if(C[t]||P.throwArgumentError("invalid format type","format",t),t===C.sighash&&P.throwError("cannot format a constructor for sighash","UNSUPPORTED_OPERATION",{operation:"format(sighash)"}),t===C.json)return JSON.stringify({type:"constructor",stateMutability:this.payable?"payable":"undefined",payable:this.payable,gas:null!=this.gas?this.gas:void 0,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[`constructor${ft(t,this.inputs)}`];return e.push(this.payable?"payable":"nonpayable"),null!=this.gas&&e.push(`@${this.gas.toString()}`),e.join(" ")}static fromString(t){return wt.fromTokens(X(t))}static fromObject(t){throw new Error("TODO")}static fromTokens(t){Q(t,U(["constructor"]));const e=tt(t),r=!!Q(t,U(["payable"])).has("payable"),n=et(t);return rt(t),new wt(it,lt.constructor,e,r,n)}}class gt extends ht{constructor(t,e,r,s,i,o){super(t,lt.function,e,s);n(this,{constant:"view"===r||"pure"===r,gas:o,outputs:i=Object.freeze(i.slice()),payable:"payable"===r,stateMutability:r})}format(t=C.sighash){if(C[t]||P.throwArgumentError("invalid format type","format",t),t===C.json)return JSON.stringify({type:"function",name:this.name,constant:this.constant,stateMutability:"nonpayable"!==this.stateMutability?this.stateMutability:void 0,payable:this.payable,gas:null!=this.gas?this.gas:void 0,inputs:this.inputs.map((e=>JSON.parse(e.format(t)))),outputs:this.outputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==C.sighash&&e.push("function"),e.push(this.name+ft(t,this.inputs)),t!==C.sighash&&("nonpayable"!==this.stateMutability&&e.push(this.stateMutability),this.outputs&&this.outputs.length&&(e.push("returns"),e.push(ft(t,this.outputs))),null!=this.gas&&e.push(`@${this.gas.toString()}`)),e.join(" ")}static fromString(t){return gt.fromTokens(X(t))}static fromTokens(t){const e=Z("function",t),r=tt(t),n=function(t){let e=Q(t,D);return Y(e,U("constant payable nonpayable".split(" "))),Y(e,U("pure view payable nonpayable".split(" "))),e.has("view")?"view":e.has("pure")?"pure":e.has("payable")?"payable":e.has("nonpayable")?"nonpayable":e.has("constant")?"view":"nonpayable"}(t);let s=[];Q(t,U(["returns"])).has("returns")&&(s=tt(t));const i=et(t);return rt(t),new gt(it,e,n,r,s,i)}}class mt extends ht{format(){throw new Error("@TODO")}static fromString(t){return mt.fromTokens(X(t))}static fromTokens(t){const e=Z("struct",t),r=tt(t);return rt(t),new mt(it,lt.struct,e,r)}}const yt=new N("@ethersproject/math@6.0.0-beta.1"),bt=9007199254740991,vt="0123456789abcdef",Et=BigInt(0);function Tt(t){if(t instanceof Uint8Array){let e="0x0";for(const r of t)e+=vt[r>>4],e+=vt[15&r];return BigInt(e)}return yt.getBigInt(t,"value")}function kt(t){const e=Tt(t);return(e<-bt||e>bt)&&yt.throwArgumentError("overflow","value",t),Number(e)}function At(t,e){const r=yt.getBigInt(t,"value");if(r<0)throw new Error("cannot convert negative value to hex");let n=r.toString(16);if(null==e)n.length%2&&(n="0"+n);else{const t=yt.getNumber(e,"width");if(2*t>n-xt){return-((~r&(xt<256||t%1)&&yt.throwArgumentError("invalid decimal length","decimals",t),BigInt("1"+Mt.substring(0,t))}function Gt(t,e=0){let r=yt.getBigInt(t,"value");const n=jt(yt.getNumber(e,"decimals")),s=String(n),i=r<0;i&&(r*=Lt);let o=String(r%n);for(;o.length1&&"0"===o.substring(o.length-1);)o=o.substring(0,o.length-1);let a=String(r/n);return 1!==s.length&&(a+="."+o),i&&(a="-"+a),a}function $t(t,e=0){const r=jt(yt.getNumber(e,"decimals"));"string"==typeof t&&t.match(/^-?[0-9.]+$/)||yt.throwArgumentError("invalid decimal value","value",t);const n="-"===t.substring(0,1);n&&(t=t.substring(1)),"."===t&&yt.throwArgumentError("missing value","value",t);const s=t.split(".");s.length>2&&yt.throwArgumentError("too many decimal points","value",t);let i=s[0]||"0",o=s[1]||"0";for(;"0"===o[o.length-1];)o=o.substring(0,o.length-1);for(o.length>String(r).length-1&&Dt("fractional component exceeds decimals","underflow","parseFixed"),""===o&&(o="0");o.lengthnull==t[e]?n:(typeof t[e]!==r&&yt.throwArgumentError("invalid fixed format ("+e+" not "+r+")","format."+e,t[e]),t[e]);e=s("signed","boolean",e),r=s("width","number",r),n=s("decimals","number",n)}return r%8&&yt.throwArgumentError("invalid fixed format width (not byte aligned)","format.width",r),n>80&&yt.throwArgumentError("invalid fixed format (decimals too large)","format.decimals",n),new zt(Ut,e,r,n)}}class Wt{constructor(t,e,r,n){Rt.add(this),_t.set(this,void 0),t!==Ut&&yt.throwError("cannot use FixedNumber constructor; use FixedNumber.from","UNSUPPORTED_OPERATION",{operation:"new FixedFormat"}),this.format=zt.from(n),Bt(this,_t,r,"f"),this._isFixedNumber=!0,Object.freeze(this)}addUnsafe(t){Ft(this,Rt,"m",Ct).call(this,t);const e=$t(Ft(this,_t,"f"),this.format.decimals),r=$t(Ft(t,_t,"f"),t.format.decimals);return Wt.fromValue(e+r,this.format.decimals,this.format)}subUnsafe(t){Ft(this,Rt,"m",Ct).call(this,t);const e=$t(Ft(this,_t,"f"),this.format.decimals),r=$t(Ft(t,_t,"f"),t.format.decimals);return Wt.fromValue(e-r,this.format.decimals,this.format)}mulUnsafe(t){Ft(this,Rt,"m",Ct).call(this,t);const e=$t(Ft(this,_t,"f"),this.format.decimals),r=$t(Ft(t,_t,"f"),t.format.decimals);return Wt.fromValue(e*r/this.format._multiplier,this.format.decimals,this.format)}divUnsafe(t){Ft(this,Rt,"m",Ct).call(this,t);const e=$t(Ft(this,_t,"f"),this.format.decimals),r=$t(Ft(t,_t,"f"),t.format.decimals);return Wt.fromValue(e*this.format._multiplier/r,this.format.decimals,this.format)}floor(){const t=this.toString().split(".");1===t.length&&t.push("0");let e=Wt.from(t[0],this.format);const r=!t[1].match(/^(0*)$/);return this.isNegative()&&r&&(e=e.subUnsafe(Ht.toFormat(e.format))),e}ceiling(){const t=this.toString().split(".");1===t.length&&t.push("0");let e=Wt.from(t[0],this.format);const r=!t[1].match(/^(0*)$/);return!this.isNegative()&&r&&(e=e.addUnsafe(Ht.toFormat(e.format))),e}round(t){null==t&&(t=0);const e=this.toString().split(".");if(1===e.length&&e.push("0"),(t<0||t>80||t%1)&&yt.throwArgumentError("invalid decimal count","decimals",t),e[1].length<=t)return this;const r=Wt.from("1"+Mt.substring(0,t),this.format),n=Vt.toFormat(this.format);return this.mulUnsafe(r).addUnsafe(n).floor().divUnsafe(r)}isZero(){return"0.0"===Ft(this,_t,"f")||"0"===Ft(this,_t,"f")}isNegative(){return"-"===Ft(this,_t,"f")[0]}toString(){return Ft(this,_t,"f")}toHexString(t){throw new Error("TODO")}toUnsafeFloat(){return parseFloat(this.toString())}toFormat(t){return Wt.fromString(Ft(this,_t,"f"),t)}static fromValue(t,e=0,r="fixed"){return Wt.fromString(Gt(t,e),zt.from(r))}static fromString(t,e="fixed"){const r=zt.from(e),n=$t(t,r.decimals);!r.signed&&n<0&&Dt("unsigned value cannot be negative","overflow","value",t);const s=r.signed?At(It(n,r.width)):At(n,r.width/8),i=Gt(n,r.decimals);return new Wt(Ut,s,i,r)}static fromBytes(t,e="fixed"){const r=yt.getBytes(t,"value"),n=zt.from(e);if(r.length>n.width/8)throw new Error("overflow");let s=Tt(r);n.signed&&(s=Ot(s,n.width));const i=At(It(s,(n.signed?0:1)+n.width)),o=Gt(s,n.decimals);return new Wt(Ut,i,o,n)}static from(t,e){if("string"==typeof t)return Wt.fromString(t,e);if(t instanceof Uint8Array)return Wt.fromBytes(t,e);try{return Wt.fromValue(t,0,e)}catch(t){if("INVALID_ARGUMENT"!==t.code)throw t}return yt.throwArgumentError("invalid FixedNumber value","value",t)}static isFixedNumber(t){return!(!t||!t._isFixedNumber)}}_t=new WeakMap,Rt=new WeakSet,Ct=function(t){this.format.name!==t.format.name&&yt.throwArgumentError("incompatible format; use fixedNumber.toFormat","other",t)};const Ht=Wt.from(1),Vt=Wt.from("0.5"),Kt="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";let Jt=null;function qt(t){if(null==Jt){Jt={};for(let t=0;t>=ne;return 0===e.length&&e.push(0),new Uint8Array(e)}if((e=t)&&"function"==typeof e.toHexString)return ie(t.toHexString());var e;if("string"==typeof t){let e=t;if(!e.match(/^0x[0-9a-f]*$/i))throw new RangeError(`invalid hex data string (${JSON.stringify(t)})`);const r=[];for(let t=2;t>4]+le[15&n]}return r}function he(t){let e=ue(ie(t)).substring(2);for(;"0"===e.substring(0,1);)e=e.substring(1);return""===e&&(e="0"),"0x"+e}function fe(t){return"0x"+t.map((t=>ue(t).substring(2))).join("")}function de(t){return te(t,!0)?(t.length-2)/2:oe(t).length}function pe(t,e,r){const n=oe(t);return null!=r&&r>n.length&&re.throwError("cannot slice beyond data bounds","BUFFER_OVERRUN",{buffer:n,length:n.length,offset:r}),ue(n.slice(null==e?0:e,null==r?n.length:r))}function we(t){let e=ue(t).substring(2);for(;"00"==e.substring(0,2);)e=e.substring(2);return"0x"+e}function ge(t,e,r){const n=oe(t);e{null!=t&&(_e(this,ve,"f").has(t)?_e(this,ve,"f").get(t).push(e):_e(this,ve,"f").set(t,[e]))})),Object.freeze(this),new Proxy(this,{get:(t,e,r)=>{if("string"==typeof e){if(e.match(/^[0-9]+$/)){const r=P.getNumber(e,"%index");if(r<0||r>=this.length)throw new RangeError("out of result range");const n=t[r];return n instanceof Error&&_e(this,be,"m",Ee).call(this,`index ${r}`,n),n}if(e in t||Fe.indexOf(e)>=0)return Reflect.get(t,e,r);if(!(e in t))return t.getValue(e)}return Reflect.get(t,e,r)}})}slice(t,e){null==t&&(t=0),null==e&&(e=this.length);const r=[];for(let n=t;nCe&&P.throwError("value out-of-bounds","BUFFER_OVERRUN",{buffer:e,length:Ce,offset:e.length}),e.length%Ce&&(e=ie(fe([Be.slice(e.length%Ce),e]))),e}ve=new WeakMap,be=new WeakSet,Ee=function(t,e){const r=new Error(`deferred error during ABI decoding triggered accessing ${t}`);throw r.error=e,r};class Me{constructor(t,e,r,s){n(this,{name:t,type:e,localName:r,dynamic:s},{name:"string",type:"string",localName:"string",dynamic:"boolean"})}_throwError(t,e){return P.throwArgumentError(t,this.localName,e)}}class je{constructor(){Te.add(this),ke.set(this,void 0),Ae.set(this,void 0),Re(this,ke,[],"f"),Re(this,Ae,0,"f")}get data(){return fe(_e(this,ke,"f"))}get length(){return _e(this,Ae,"f")}appendWriter(t){return _e(this,Te,"m",Ne).call(this,ie(t.data))}writeBytes(t){let e=ie(t);const r=e.length%Ce;return r&&(e=ie(fe([e,Be.slice(r)]))),_e(this,Te,"m",Ne).call(this,e)}writeValue(t){return _e(this,Te,"m",Ne).call(this,De(t))}writeUpdatableValue(){const t=_e(this,ke,"f").length;return _e(this,ke,"f").push(Be),Re(this,Ae,_e(this,Ae,"f")+Ce,"f"),e=>{_e(this,ke,"f")[t]=De(e)}}}ke=new WeakMap,Ae=new WeakMap,Te=new WeakSet,Ne=function(t){return _e(this,ke,"f").push(t),Re(this,Ae,_e(this,Ae,"f")+t.length,"f"),t.length};class Ge{constructor(t,e,r){Pe.add(this),xe.set(this,void 0),Oe.set(this,void 0),Ie.set(this,void 0),n(this,{allowLoose:!!r}),Re(this,xe,ie(t),"f"),Re(this,Ie,e||Ge.coerce,"f"),Re(this,Oe,0,"f")}get data(){return ue(_e(this,xe,"f"))}get dataLength(){return _e(this,xe,"f").length}get consumed(){return _e(this,Oe,"f")}get bytes(){return new Uint8Array(_e(this,xe,"f"))}static coerce(t,e){let r=t.match("^u?int([0-9]+)$");return r&&parseInt(r[1])<=48&&(e=e.toNumber()),e}coerce(t,e){return _e(this,Ie,"f").call(this,t,e)}subReader(t){return new Ge(_e(this,xe,"f").slice(_e(this,Oe,"f")+t),_e(this,Ie,"f"),this.allowLoose)}readBytes(t,e){let r=_e(this,Pe,"m",Se).call(this,0,t,!!e);return Re(this,Oe,_e(this,Oe,"f")+r.length,"f"),r.slice(0,t)}readValue(){return Tt(this.readBytes(Ce))}readIndex(){return kt(this.readBytes(Ce))}}xe=new WeakMap,Oe=new WeakMap,Ie=new WeakMap,Pe=new WeakSet,Se=function(t,e,r){let n=Math.ceil(e/Ce)*Ce;return _e(this,Oe,"f")+n>_e(this,xe,"f").length&&(this.allowLoose&&r&&_e(this,Oe,"f")+e<=_e(this,xe,"f").length?n=e:P.throwError("data out-of-bounds","BUFFER_OVERRUN",{buffer:ie(_e(this,xe,"f")),length:_e(this,xe,"f").length,offset:_e(this,Oe,"f")+n})),_e(this,xe,"f").slice(_e(this,Oe,"f"),_e(this,Oe,"f")+n)}; +/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +const $e=t=>new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),ze=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),We=(t,e)=>t<<32-e|t>>>e;if(!(68===new Uint8Array(new Uint32Array([287454020]).buffer)[0]))throw new Error("Non little-endian hardware is not supported");Array.from({length:256},((t,e)=>e.toString(16).padStart(2,"0")));const He=(()=>{const t="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);try{if(t){const{setImmediate:e}=t("timers");return()=>new Promise((t=>e(t)))}}catch(t){}return()=>new Promise((t=>setTimeout(t,0)))})();async function Ve(t,e,r){let n=Date.now();for(let s=0;s=0&&tt().update(Ke(e)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}class Qe extends Xe{constructor(t,e){super(),this.finished=!1,this.destroyed=!1,qe(t);const r=Ke(e);if(this.iHash=t.create(),!(this.iHash instanceof Xe))throw new TypeError("Expected instance of class which extends utils.Hash");const n=this.blockLen=this.iHash.blockLen;this.outputLen=this.iHash.outputLen;const s=new Uint8Array(n);s.set(r.length>this.iHash.blockLen?t.create().update(r).digest():r);for(let t=0;tnew Qe(t,e).update(r).digest();function er(t,e,r,n){const{c:s,dkLen:i,DK:o,PRF:a,PRFSalt:c}=function(t,e,r,n){qe(t);const s=Ye({dkLen:32,asyncTick:10},n),{c:i,dkLen:o,asyncTick:a}=s;if(Je(i),Je(o),Je(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");const c=Ke(e),l=Ke(r),u=new Uint8Array(o),h=tr.create(t,c),f=h._cloneInto().update(l);return{c:i,dkLen:o,asyncTick:a,DK:u,PRF:h,PRFSalt:f}}(t,e,r,n);let l;const u=new Uint8Array(4),h=ze(u),f=new Uint8Array(a.outputLen);for(let t=1,e=0;enew Qe(t,e);class rr extends Xe{constructor(t,e,r,n){super(),this.blockLen=t,this.outputLen=e,this.padOffset=r,this.isLE=n,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=ze(this.buffer)}update(t){if(this.destroyed)throw new Error("instance is destroyed");const{view:e,buffer:r,blockLen:n,finished:s}=this;if(s)throw new Error("digest() was already called");const i=(t=Ke(t)).length;for(let s=0;sn-i&&(this.process(r,0),i=0);for(let t=i;t>s&i),a=Number(r&i),c=n?4:0,l=n?0:4;t.setUint32(e+c,o,n),t.setUint32(e+l,a,n)}(r,n-8,BigInt(8*this.length),s),this.process(r,0);const o=ze(t);this.get().forEach(((t,e)=>o.setUint32(4*e,t,s)))}digest(){const{buffer:t,outputLen:e}=this;this.digestInto(t);const r=t.slice(0,e);return this.destroy(),r}_cloneInto(t){t||(t=new this.constructor),t.set(...this.get());const{blockLen:e,buffer:r,length:n,finished:s,destroyed:i,pos:o}=this;return t.length=n,t.pos=o,t.finished=s,t.destroyed=i,n%e&&t.buffer.set(r),t}}const nr=(t,e,r)=>t&e^~t&r,sr=(t,e,r)=>t&e^t&r^e&r,ir=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),or=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),ar=new Uint32Array(64);class cr extends rr{constructor(){super(64,32,8,!1),this.A=0|or[0],this.B=0|or[1],this.C=0|or[2],this.D=0|or[3],this.E=0|or[4],this.F=0|or[5],this.G=0|or[6],this.H=0|or[7]}get(){const{A:t,B:e,C:r,D:n,E:s,F:i,G:o,H:a}=this;return[t,e,r,n,s,i,o,a]}set(t,e,r,n,s,i,o,a){this.A=0|t,this.B=0|e,this.C=0|r,this.D=0|n,this.E=0|s,this.F=0|i,this.G=0|o,this.H=0|a}process(t,e){for(let r=0;r<16;r++,e+=4)ar[r]=t.getUint32(e,!1);for(let t=16;t<64;t++){const e=ar[t-15],r=ar[t-2],n=We(e,7)^We(e,18)^e>>>3,s=We(r,17)^We(r,19)^r>>>10;ar[t]=s+ar[t-7]+n+ar[t-16]|0}let{A:r,B:n,C:s,D:i,E:o,F:a,G:c,H:l}=this;for(let t=0;t<64;t++){const e=l+(We(o,6)^We(o,11)^We(o,25))+nr(o,a,c)+ir[t]+ar[t]|0,u=(We(r,2)^We(r,13)^We(r,22))+sr(r,n,s)|0;l=c,c=a,a=o,o=i+e|0,i=s,s=n,n=r,r=e+u|0}r=r+this.A|0,n=n+this.B|0,s=s+this.C|0,i=i+this.D|0,o=o+this.E|0,a=a+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(r,n,s,i,o,a,c,l)}roundClean(){ar.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}const lr=Ze((()=>new cr)),ur=BigInt(2**32-1),hr=BigInt(32);function fr(t,e=!1){return e?{h:Number(t&ur),l:Number(t>>hr&ur)}:{h:0|Number(t>>hr&ur),l:0|Number(t&ur)}}function dr(t,e=!1){let r=new Uint32Array(t.length),n=new Uint32Array(t.length);for(let s=0;st>>>r,wr=(t,e,r)=>t<<32-r|e>>>r,gr=(t,e,r)=>t>>>r|e<<32-r,mr=(t,e,r)=>t<<32-r|e>>>r,yr=(t,e,r)=>t<<64-r|e>>>r-32,br=(t,e,r)=>t>>>r-32|e<<64-r;function vr(t,e,r,n){const s=(e>>>0)+(n>>>0);return{h:t+r+(s/2**32|0)|0,l:0|s}}const Er=(t,e,r)=>(t>>>0)+(e>>>0)+(r>>>0),Tr=(t,e,r,n)=>e+r+n+(t/2**32|0)|0,kr=(t,e,r,n)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0),Ar=(t,e,r,n,s)=>e+r+n+s+(t/2**32|0)|0,Nr=(t,e,r,n,s)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0)+(s>>>0),Pr=(t,e,r,n,s,i)=>e+r+n+s+i+(t/2**32|0)|0,[xr,Or]=dr(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map((t=>BigInt(t)))),Ir=new Uint32Array(80),Sr=new Uint32Array(80);class Rr extends rr{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:t,Al:e,Bh:r,Bl:n,Ch:s,Cl:i,Dh:o,Dl:a,Eh:c,El:l,Fh:u,Fl:h,Gh:f,Gl:d,Hh:p,Hl:w}=this;return[t,e,r,n,s,i,o,a,c,l,u,h,f,d,p,w]}set(t,e,r,n,s,i,o,a,c,l,u,h,f,d,p,w){this.Ah=0|t,this.Al=0|e,this.Bh=0|r,this.Bl=0|n,this.Ch=0|s,this.Cl=0|i,this.Dh=0|o,this.Dl=0|a,this.Eh=0|c,this.El=0|l,this.Fh=0|u,this.Fl=0|h,this.Gh=0|f,this.Gl=0|d,this.Hh=0|p,this.Hl=0|w}process(t,e){for(let r=0;r<16;r++,e+=4)Ir[r]=t.getUint32(e),Sr[r]=t.getUint32(e+=4);for(let t=16;t<80;t++){const e=0|Ir[t-15],r=0|Sr[t-15],n=gr(e,r,1)^gr(e,r,8)^pr(e,0,7),s=mr(e,r,1)^mr(e,r,8)^wr(e,r,7),i=0|Ir[t-2],o=0|Sr[t-2],a=gr(i,o,19)^yr(i,o,61)^pr(i,0,6),c=mr(i,o,19)^br(i,o,61)^wr(i,o,6),l=kr(s,c,Sr[t-7],Sr[t-16]),u=Ar(l,n,a,Ir[t-7],Ir[t-16]);Ir[t]=0|u,Sr[t]=0|l}let{Ah:r,Al:n,Bh:s,Bl:i,Ch:o,Cl:a,Dh:c,Dl:l,Eh:u,El:h,Fh:f,Fl:d,Gh:p,Gl:w,Hh:g,Hl:m}=this;for(let t=0;t<80;t++){const e=gr(u,h,14)^gr(u,h,18)^yr(u,h,41),y=mr(u,h,14)^mr(u,h,18)^br(u,h,41),b=u&f^~u&p,v=Nr(m,y,h&d^~h&w,Or[t],Sr[t]),E=Pr(v,g,e,b,xr[t],Ir[t]),T=0|v,k=gr(r,n,28)^yr(r,n,34)^yr(r,n,39),A=mr(r,n,28)^br(r,n,34)^br(r,n,39),N=r&s^r&o^s&o,P=n&i^n&a^i&a;g=0|p,m=0|w,p=0|f,w=0|d,f=0|u,d=0|h,({h:u,l:h}=vr(0|c,0|l,0|E,0|T)),c=0|o,l=0|a,o=0|s,a=0|i,s=0|r,i=0|n;const x=Er(T,A,P);r=Tr(x,E,k,N),n=0|x}({h:r,l:n}=vr(0|this.Ah,0|this.Al,0|r,0|n)),({h:s,l:i}=vr(0|this.Bh,0|this.Bl,0|s,0|i)),({h:o,l:a}=vr(0|this.Ch,0|this.Cl,0|o,0|a)),({h:c,l:l}=vr(0|this.Dh,0|this.Dl,0|c,0|l)),({h:u,l:h}=vr(0|this.Eh,0|this.El,0|u,0|h)),({h:f,l:d}=vr(0|this.Fh,0|this.Fl,0|f,0|d)),({h:p,l:w}=vr(0|this.Gh,0|this.Gl,0|p,0|w)),({h:g,l:m}=vr(0|this.Hh,0|this.Hl,0|g,0|m)),this.set(r,n,s,i,o,a,c,l,u,h,f,d,p,w,g,m)}roundClean(){Ir.fill(0),Sr.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class _r extends Rr{constructor(){super(),this.Ah=573645204,this.Al=-64227540,this.Bh=-1621794909,this.Bl=-934517566,this.Ch=596883563,this.Cl=1867755857,this.Dh=-1774684391,this.Dl=1497426621,this.Eh=-1775747358,this.El=-1467023389,this.Fh=-1101128155,this.Fl=1401305490,this.Gh=721525244,this.Gl=746961066,this.Hh=246885852,this.Hl=-2117784414,this.outputLen=32}}class Cr extends Rr{constructor(){super(),this.Ah=-876896931,this.Al=-1056596264,this.Bh=1654270250,this.Bl=914150663,this.Ch=-1856437926,this.Cl=812702999,this.Dh=355462360,this.Dl=-150054599,this.Eh=1731405415,this.El=-4191439,this.Fh=-1900787065,this.Fl=1750603025,this.Gh=-619958771,this.Gl=1694076839,this.Hh=1203062813,this.Hl=-1090891868,this.outputLen=48}}const Br=Ze((()=>new Rr));Ze((()=>new _r)),Ze((()=>new Cr));const Fr=new N("@ethersproject/crypto@6.0.0-beta.1");const Ur=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw new Error("unable to locate global object")}();let Lr=Ur.crypto||Ur.msCrypto;function Dr(t){switch(t){case"sha256":return lr.create();case"sha512":return Br.create()}return Fr.throwArgumentError("invalid hashing algorithm name","algorithm",t)}let Mr=!1;const jr=function(t,e,r){return"0x"+function(t,e){const r={sha256:lr,sha512:Br}[t];return null==r?Fr.throwArgumentError("invalid hmac algorithm","algorithm",t):tr.create(r,e)}(t,e).update(r).digest("hex")};let Gr=jr;function $r(t,e,r){const n=Fr.getBytes(e,"key"),s=Fr.getBytes(r,"data");return ue(Gr(t,n,s))}$r._=jr,$r.lock=function(){Mr=!0},$r.register=function(t){if(Mr)throw new Error("computeHmac is locked");Gr=t},Object.freeze($r);const[zr,Wr,Hr]=[[],[],[]],Vr=BigInt(0),Kr=BigInt(1),Jr=BigInt(2),qr=BigInt(7),Xr=BigInt(256),Yr=BigInt(113);for(let t=0,e=Kr,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],zr.push(2*(5*n+r)),Wr.push((t+1)*(t+2)/2%64);let s=Vr;for(let t=0;t<7;t++)e=(e<>qr)*Yr)%Xr,e&Jr&&(s^=Kr<<(Kr<r>32?((t,e,r)=>e<>>64-r)(t,e,r):((t,e,r)=>t<>>32-r)(t,e,r),en=(t,e,r)=>r>32?((t,e,r)=>t<>>64-r)(t,e,r):((t,e,r)=>e<>>32-r)(t,e,r);class rn extends Xe{constructor(t,e,r,n=!1,s=24){if(super(),this.blockLen=t,this.suffix=e,this.outputLen=r,this.enableXOF=n,this.rounds=s,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,Je(r),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=$e(this.state)}keccak(){!function(t,e=24){const r=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let e=0;e<10;e++)r[e]=t[e]^t[e+10]^t[e+20]^t[e+30]^t[e+40];for(let e=0;e<10;e+=2){const n=(e+8)%10,s=(e+2)%10,i=r[s],o=r[s+1],a=tn(i,o,1)^r[n],c=en(i,o,1)^r[n+1];for(let r=0;r<50;r+=10)t[e+r]^=a,t[e+r+1]^=c}let e=t[2],s=t[3];for(let r=0;r<24;r++){const n=Wr[r],i=tn(e,s,n),o=en(e,s,n),a=zr[r];e=t[a],s=t[a+1],t[a]=i,t[a+1]=o}for(let e=0;e<50;e+=10){for(let n=0;n<10;n++)r[n]=t[e+n];for(let n=0;n<10;n++)t[e+n]^=~r[(n+2)%10]&r[(n+4)%10]}t[0]^=Zr[n],t[1]^=Qr[n]}r.fill(0)}(this.state32,this.rounds),this.posOut=0,this.pos=0}update(t){if(this.destroyed)throw new Error("instance is destroyed");if(this.finished)throw new Error("digest() was already called");const{blockLen:e,state:r}=this,n=(t=Ke(t)).length;for(let s=0;s=this.blockLen&&this.keccak();const n=Math.min(this.blockLen-this.posOut,r-e);t.set(this.state.subarray(this.posOut,this.posOut+n),e),this.posOut+=n,e+=n}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(t)}xof(t){return Je(t),this.xofInto(new Uint8Array(t))}digestInto(t){if(t.lengthZe((()=>new rn(e,t,r)));nn(6,144,28),nn(6,136,32),nn(6,104,48),nn(6,72,64),nn(1,144,28);const sn=nn(1,136,32);nn(1,104,48),nn(1,72,64);const on=(t,e,r)=>function(t){const e=(e,r)=>t(r).update(Ke(e)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=e=>t(e),e}(((n={})=>new rn(e,t,void 0!==n.dkLen?n.dkLen:r,!0)));on(31,168,16),on(31,136,32);let an=!1;const cn=function(t){return sn(t)};let ln=cn;function un(t){const e=Fr.getBytes(t,"data");return ue(ln(e))}un._=cn,un.lock=function(){an=!0},un.register=function(t){if(an)throw new TypeError("keccak256 is locked");ln=t},Object.freeze(un);const hn=new Uint8Array([7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8]),fn=Uint8Array.from({length:16},((t,e)=>e)),dn=fn.map((t=>(9*t+5)%16));let pn=[fn],wn=[dn];for(let t=0;t<4;t++)for(let e of[pn,wn])e.push(e[t].map((t=>hn[t])));const gn=[[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8],[12,13,11,15,6,9,9,7,12,15,11,13,7,8,7,7],[13,15,14,11,7,7,6,8,13,14,13,12,5,5,6,9],[14,11,12,14,8,6,5,5,15,12,15,14,9,9,8,6],[15,12,13,13,9,5,8,6,14,11,12,11,8,6,5,5]].map((t=>new Uint8Array(t))),mn=pn.map(((t,e)=>t.map((t=>gn[e][t])))),yn=wn.map(((t,e)=>t.map((t=>gn[e][t])))),bn=new Uint32Array([0,1518500249,1859775393,2400959708,2840853838]),vn=new Uint32Array([1352829926,1548603684,1836072691,2053994217,0]),En=(t,e)=>t<>>32-e;function Tn(t,e,r,n){return 0===t?e^r^n:1===t?e&r|~e&n:2===t?(e|~r)^n:3===t?e&n|r&~n:e^(r|~n)}const kn=new Uint32Array(16);class An extends rr{constructor(){super(64,20,8,!0),this.h0=1732584193,this.h1=-271733879,this.h2=-1732584194,this.h3=271733878,this.h4=-1009589776}get(){const{h0:t,h1:e,h2:r,h3:n,h4:s}=this;return[t,e,r,n,s]}set(t,e,r,n,s){this.h0=0|t,this.h1=0|e,this.h2=0|r,this.h3=0|n,this.h4=0|s}process(t,e){for(let r=0;r<16;r++,e+=4)kn[r]=t.getUint32(e,!0);let r=0|this.h0,n=r,s=0|this.h1,i=s,o=0|this.h2,a=o,c=0|this.h3,l=c,u=0|this.h4,h=u;for(let t=0;t<5;t++){const e=4-t,f=bn[t],d=vn[t],p=pn[t],w=wn[t],g=mn[t],m=yn[t];for(let e=0;e<16;e++){const n=En(r+Tn(t,s,o,c)+kn[p[e]]+f,g[e])+u|0;r=u,u=c,c=0|En(o,10),o=s,s=n}for(let t=0;t<16;t++){const r=En(n+Tn(e,i,a,l)+kn[w[t]]+d,m[t])+h|0;n=h,h=l,l=0|En(a,10),a=i,i=r}}this.set(this.h1+o+l|0,this.h2+c+h|0,this.h3+u+n|0,this.h4+r+i|0,this.h0+s+a|0)}roundClean(){kn.fill(0)}destroy(){this.destroyed=!0,this.buffer.fill(0),this.set(0,0,0,0,0)}}const Nn=Ze((()=>new An));let Pn=!1;const xn=function(t){return Nn(t)};let On=xn;function In(t){const e=Fr.getBytes(t,"data");return ue(On(e))}In._=xn,In.lock=function(){Pn=!0},In.register=function(t){if(Pn)throw new TypeError("ripemd160 is locked");On=t},Object.freeze(In);let Sn=!1;const Rn=function(t,e,r,n,s){return function(t,e,r,n,s){const i={sha256:lr,sha512:Br}[s];return null==i?Fr.throwArgumentError("invalid pbkdf2 algorithm","algorithm",s):er(i,t,e,{c:r,dkLen:n})}(t,e,r,n,s)};let _n=Rn;function Cn(t,e,r,n,s){const i=Fr.getBytes(t,"password"),o=Fr.getBytes(e,"salt");return ue(_n(i,o,r,n,s))}Cn._=Rn,Cn.lock=function(){Sn=!0},Cn.register=function(t){if(Sn)throw new Error("pbkdf2 is locked");_n=t},Object.freeze(Cn);let Bn=!1;const Fn=function(t){return new Uint8Array(function(t){if(null==Lr)return Fr.throwError("platform does not support secure random numbers","UNSUPPORTED_OPERATION",{operation:"randomBytes"});(t<=0||t>1024||t%1||t!=t)&&Fr.throwArgumentError("invalid length","length",t);const e=new Uint8Array(t);return Lr.getRandomValues(e),e}(t))};let Un=Fn;function Ln(t){return Un(t)}Ln._=Fn,Ln.lock=function(){Bn=!0},Ln.register=function(t){if(Bn)throw new Error("random is locked");Un=t},Object.freeze(Ln);const Dn=(t,e)=>t<>>32-e;function Mn(t,e,r,n,s,i){let o=t[e++]^r[n++],a=t[e++]^r[n++],c=t[e++]^r[n++],l=t[e++]^r[n++],u=t[e++]^r[n++],h=t[e++]^r[n++],f=t[e++]^r[n++],d=t[e++]^r[n++],p=t[e++]^r[n++],w=t[e++]^r[n++],g=t[e++]^r[n++],m=t[e++]^r[n++],y=t[e++]^r[n++],b=t[e++]^r[n++],v=t[e++]^r[n++],E=t[e++]^r[n++],T=o,k=a,A=c,N=l,P=u,x=h,O=f,I=d,S=p,R=w,_=g,C=m,B=y,F=b,U=v,L=E;for(let t=0;t<8;t+=2)P^=Dn(T+B|0,7),S^=Dn(P+T|0,9),B^=Dn(S+P|0,13),T^=Dn(B+S|0,18),R^=Dn(x+k|0,7),F^=Dn(R+x|0,9),k^=Dn(F+R|0,13),x^=Dn(k+F|0,18),U^=Dn(_+O|0,7),A^=Dn(U+_|0,9),O^=Dn(A+U|0,13),_^=Dn(O+A|0,18),N^=Dn(L+C|0,7),I^=Dn(N+L|0,9),C^=Dn(I+N|0,13),L^=Dn(C+I|0,18),k^=Dn(T+N|0,7),A^=Dn(k+T|0,9),N^=Dn(A+k|0,13),T^=Dn(N+A|0,18),O^=Dn(x+P|0,7),I^=Dn(O+x|0,9),P^=Dn(I+O|0,13),x^=Dn(P+I|0,18),C^=Dn(_+R|0,7),S^=Dn(C+_|0,9),R^=Dn(S+C|0,13),_^=Dn(R+S|0,18),B^=Dn(L+U|0,7),F^=Dn(B+L|0,9),U^=Dn(F+B|0,13),L^=Dn(U+F|0,18);s[i++]=o+T|0,s[i++]=a+k|0,s[i++]=c+A|0,s[i++]=l+N|0,s[i++]=u+P|0,s[i++]=h+x|0,s[i++]=f+O|0,s[i++]=d+I|0,s[i++]=p+S|0,s[i++]=w+R|0,s[i++]=g+_|0,s[i++]=m+C|0,s[i++]=y+B|0,s[i++]=b+F|0,s[i++]=v+U|0,s[i++]=E+L|0}function jn(t,e,r,n,s){let i=n+0,o=n+16*s;for(let n=0;n<16;n++)r[o+n]=t[e+16*(2*s-1)+n];for(let n=0;n0&&(o+=16),Mn(r,i,t,e+=16,r,o)}function Gn(t,e,r){const n=Ye({dkLen:32,asyncTick:10,maxmem:1073742848},r),{N:s,r:i,p:o,dkLen:a,asyncTick:c,maxmem:l,onProgress:u}=n;if(Je(s),Je(i),Je(o),Je(a),Je(c),Je(l),void 0!==u&&"function"!=typeof u)throw new Error("progressCb should be function");const h=128*i,f=h/4;if(s<=1||0!=(s&s-1)||s>=2**(h/8)||s>2**32)throw new Error("Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32");if(o<0||o>137438953440/h)throw new Error("Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)");if(a<0||a>137438953440)throw new Error("Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32");const d=h*(s+o);if(d>l)throw new Error(`Scrypt: parameters too large, ${d} (128 * r * (N + p)) > ${l} (maxmem)`);const p=er(lr,t,e,{c:1,dkLen:h*o}),w=$e(p),g=$e(new Uint8Array(h*s)),m=$e(new Uint8Array(h));let y=()=>{};if(u){const t=2*s*o,e=Math.max(Math.floor(t/1e4),1);let r=0;y=()=>{r++,!u||r%e&&r!==t||u(r/t)}}return{N:s,r:i,p:o,dkLen:a,blockSize32:f,V:g,B32:w,B:p,tmp:m,blockMixCb:y,asyncTick:c}}function $n(t,e,r,n,s){const i=er(lr,t,r,{c:1,dkLen:e});return r.fill(0),n.fill(0),s.fill(0),i}let zn=!1,Wn=!1;const Hn=async function(t,e,r,n,s,i,o){return await async function(t,e,r){const{N:n,r:s,p:i,dkLen:o,blockSize32:a,V:c,B32:l,B:u,tmp:h,blockMixCb:f,asyncTick:d}=Gn(t,e,r);for(let t=0;t{jn(c,r,c,r+=a,s),f()})),jn(c,(n-1)*a,l,e,s),f(),await Ve(n,d,(t=>{const r=l[e+a-16]%n;for(let t=0;t>1]>>4>=8&&(e[t]=e[t].toUpperCase()),(15&n[t>>1])>=8&&(e[t+1]=e[t+1].toUpperCase());return"0x"+e.join("")}const us={};for(let t=0;t<10;t++)us[String(t)]=String(t);for(let t=0;t<26;t++)us[String.fromCharCode(65+t)]=String(10+t);function hs(t){let e=(t=(t=t.toUpperCase()).substring(4)+t.substring(0,2)+"00").split("").map((t=>us[t])).join("");for(;e.length>=15;){let t=e.substring(0,15);e=parseInt(t,10)%97+e.substring(t.length)}let r=String(98-parseInt(e,10)%97);for(;r.length<2;)r="0"+r;return r}const fs=function(){const t={};for(let e=0;e<36;e++){t["0123456789abcdefghijklmnopqrstuvwxyz"[e]]=BigInt(e)}return t}();function ds(t){if("string"!=typeof t&&os.throwArgumentError("invalid address","address",t),t.match(/^(0x)?[0-9a-fA-F]{40}$/)){"0x"!==t.substring(0,2)&&(t="0x"+t);const e=ls(t);return t.match(/([A-F].*[a-f])|([a-f].*[A-F])/)&&e!==t&&os.throwArgumentError("bad address checksum","address",t),e}if(t.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)){t.substring(2,4)!==hs(t)&&os.throwArgumentError("bad icap checksum","address",t);let e=function(t){t=t.toLowerCase();let e=as;for(let r=0;r>=8;return e}function ms(t){if(Array.isArray(t)){let e=[];if(t.forEach((function(t){e=e.concat(ms(t))})),e.length<=55)return e.unshift(192+e.length),e;const r=gs(e.length);return r.unshift(247+r.length),r.concat(e)}const e=Array.prototype.slice.call(ws.getBytes(t,"object"));if(1===e.length&&e[0]<=127)return e;if(e.length<=55)return e.unshift(128+e.length),e;const r=gs(e.length);return r.unshift(183+r.length),r.concat(e)}const ys="0123456789abcdef";function bs(t){let e="0x";for(const r of ms(t))e+=ys[r>>4],e+=ys[15&r];return e}function vs(t){let e=t.toString(16);for(;e.length<2;)e="0"+e;return"0x"+e}function Es(t,e,r){let n=0;for(let s=0;se+1+n&&ws.throwError("child data too short","BUFFER_OVERRUN",{buffer:t,length:n,offset:e})}return{consumed:1+n,result:s}}function ks(t,e){0===t.length&&ws.throwError("data too short","BUFFER_OVERRUN",{buffer:t,length:0,offset:1});const r=e=>{e>t.length&&ws.throwError("data short segment too short","BUFFER_OVERRUN",{buffer:t,length:t.length,offset:e})};if(t[e]>=248){const n=t[e]-247;r(e+1+n);const s=Es(t,e+1,n);return r(e+1+n+s),Ts(t,e,e+1+n,n+s)}if(t[e]>=192){const n=t[e]-192;return r(e+1+n),Ts(t,e,e+1,n)}if(t[e]>=184){const n=t[e]-183;r(e+1+n);const s=Es(t,e+1,n);r(e+1+n+s);return{consumed:1+n+s,result:ue(t.slice(e+1+n,e+1+n+s))}}if(t[e]>=128){const n=t[e]-128;r(e+1+n);return{consumed:1+n,result:ue(t.slice(e+1,e+1+n))}}return{consumed:1,result:vs(t[e])}}function As(t){const e=ws.getBytes(t,"data"),r=ks(e,0);return r.consumed!==e.length&&ws.throwArgumentError("unexpected junk after rlp payload","data",t),r.result}function Ns(t){const e=ds(t.from);let r=os.getBigInt(t.nonce,"tx.nonce").toString(16);return r="0"===r?"0x":r.length%2?"0x0"+r:"0x"+r,ds(pe(un(bs([e,r])),12))}function Ps(t,e,r){const n=ds(t),s=os.getBytes(e,"salt"),i=os.getBytes(r,"initCodeHash");return 32!==s.length&&os.throwArgumentError("salt must be 32 bytes","salt",e),32!==i.length&&os.throwArgumentError("initCodeHash must be 32 bytes","initCodeHash",r),ds(pe(un(fe(["0xff",n,s,i])),12))}function xs(t){return t&&"function"==typeof t.getAddress}function Os(t){try{return ds(t),!0}catch(t){}return!1}async function Is(t,e){if("string"==typeof t){if(t.match(/^0x[0-9a-f]{40}$/i))return ds(t);if(null==e)return os.throwError("ENS resolution requires a provider","UNSUPPORTED_OPERATION",{operation:"resolveName"});const r=await e.resolveName(t);return null==r||"0x0000000000000000000000000000000000000000"===r?os.throwError("unconfigured name","UNCONFIGURED_NAME",{value:t}):ds(r)}if(xs(t)){const e=await t.getAddress();return null==e&&os.throwArgumentError("addressable resolved to null","target",t),ds(e)}return os.throwArgumentError("unsupported addressable value","target",t)}var Ss,Rs=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},_s=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Cs={};function Bs(t,e){let r=!1;return e<0&&(r=!0,e*=-1),new Ls(Cs,`${r?"":"u"}int${e}`,t,{signed:r,width:e})}function Fs(t,e){return new Ls(Cs,`bytes${e||""}`,t,{size:e})}const Us=Symbol.for("_ethers_typed");class Ls{constructor(t,e,r,s=null){if(Ss.set(this,void 0),t!==Cs)throw new Error("private constructor");n(this,{_typedSymbol:Us,type:e,value:r}),Rs(this,Ss,s,"f"),this.format()}format(){if("array"===this.type)throw new Error("");if("dynamicArray"===this.type)throw new Error("");return"tuple"===this.type?`tuple(${this.value.map((t=>t.format())).join(",")})`:this.type}defaultValue(){return 0}minValue(){return 0}maxValue(){return 0}isBigInt(){return!!this.type.match(/^u?int[0-9]+$/)}isData(){return"bytes"===this.type.substring(0,5)}isString(){return"string"===this.type}get tupleName(){if("tuple"!==this.type)throw TypeError("not a tuple");return _s(this,Ss,"f")}get arrayLength(){if("array"!==this.type)throw TypeError("not an array");return!0===_s(this,Ss,"f")?-1:!1===_s(this,Ss,"f")?this.value.length:null}static from(t,e){return new Ls(Cs,t,e)}static uint8(t){return Bs(t,8)}static uint16(t){return Bs(t,16)}static uint24(t){return Bs(t,24)}static uint32(t){return Bs(t,32)}static uint40(t){return Bs(t,40)}static uint48(t){return Bs(t,46)}static uint56(t){return Bs(t,56)}static uint64(t){return Bs(t,64)}static uint72(t){return Bs(t,72)}static uint80(t){return Bs(t,80)}static uint88(t){return Bs(t,88)}static uint96(t){return Bs(t,96)}static uint104(t){return Bs(t,104)}static uint112(t){return Bs(t,112)}static uint120(t){return Bs(t,120)}static uint128(t){return Bs(t,128)}static uint136(t){return Bs(t,136)}static uint144(t){return Bs(t,144)}static uint152(t){return Bs(t,152)}static uint160(t){return Bs(t,160)}static uint168(t){return Bs(t,168)}static uint176(t){return Bs(t,176)}static uint184(t){return Bs(t,184)}static uint192(t){return Bs(t,192)}static uint200(t){return Bs(t,200)}static uint208(t){return Bs(t,208)}static uint216(t){return Bs(t,216)}static uint224(t){return Bs(t,224)}static uint232(t){return Bs(t,232)}static uint240(t){return Bs(t,240)}static uint248(t){return Bs(t,248)}static uint256(t){return Bs(t,256)}static uint(t){return Bs(t,256)}static int8(t){return Bs(t,-8)}static int16(t){return Bs(t,-16)}static int24(t){return Bs(t,-24)}static int32(t){return Bs(t,-32)}static int40(t){return Bs(t,-40)}static int48(t){return Bs(t,-46)}static int56(t){return Bs(t,-56)}static int64(t){return Bs(t,-64)}static int72(t){return Bs(t,-72)}static int80(t){return Bs(t,-80)}static int88(t){return Bs(t,-88)}static int96(t){return Bs(t,-96)}static int104(t){return Bs(t,-104)}static int112(t){return Bs(t,-112)}static int120(t){return Bs(t,-120)}static int128(t){return Bs(t,-128)}static int136(t){return Bs(t,-136)}static int144(t){return Bs(t,-144)}static int152(t){return Bs(t,-152)}static int160(t){return Bs(t,-160)}static int168(t){return Bs(t,-168)}static int176(t){return Bs(t,-176)}static int184(t){return Bs(t,-184)}static int192(t){return Bs(t,-192)}static int200(t){return Bs(t,-200)}static int208(t){return Bs(t,-208)}static int216(t){return Bs(t,-216)}static int224(t){return Bs(t,-224)}static int232(t){return Bs(t,-232)}static int240(t){return Bs(t,-240)}static int248(t){return Bs(t,-248)}static int256(t){return Bs(t,-256)}static int(t){return Bs(t,-256)}static bytes(t){return Fs(t)}static bytes1(t){return Fs(t,1)}static bytes2(t){return Fs(t,2)}static bytes3(t){return Fs(t,3)}static bytes4(t){return Fs(t,4)}static bytes5(t){return Fs(t,5)}static bytes6(t){return Fs(t,6)}static bytes7(t){return Fs(t,7)}static bytes8(t){return Fs(t,8)}static bytes9(t){return Fs(t,9)}static bytes10(t){return Fs(t,10)}static bytes11(t){return Fs(t,11)}static bytes12(t){return Fs(t,12)}static bytes13(t){return Fs(t,13)}static bytes14(t){return Fs(t,14)}static bytes15(t){return Fs(t,15)}static bytes16(t){return Fs(t,16)}static bytes17(t){return Fs(t,17)}static bytes18(t){return Fs(t,18)}static bytes19(t){return Fs(t,19)}static bytes20(t){return Fs(t,20)}static bytes21(t){return Fs(t,21)}static bytes22(t){return Fs(t,22)}static bytes23(t){return Fs(t,23)}static bytes24(t){return Fs(t,24)}static bytes25(t){return Fs(t,25)}static bytes26(t){return Fs(t,26)}static bytes27(t){return Fs(t,27)}static bytes28(t){return Fs(t,28)}static bytes29(t){return Fs(t,29)}static bytes30(t){return Fs(t,30)}static bytes31(t){return Fs(t,31)}static bytes32(t){return Fs(t,32)}static address(t){return new Ls(Cs,"address",t)}static bool(t){return new Ls(Cs,"bool",!!t)}static string(t){return new Ls(Cs,"string",t)}static array(t,e){throw new Error("not implemented yet")}static tuple(t,e){throw new Error("not implemented yet")}static overrides(t){return new Ls(Cs,"overrides",Object.assign({},t))}static isTyped(t){return t&&t._typedSymbol===Us}static dereference(t,e){if(Ls.isTyped(t)){if(t.type!==e)throw new Error(`invalid type: expecetd ${e}, got ${t.type}`);return t.value}return t}}Ss=new WeakMap;class Ds extends Me{constructor(t){super("address","address",t,!1)}defaultValue(){return"0x0000000000000000000000000000000000000000"}encode(t,e){let r=Ls.dereference(e,"string");try{r=ds(r)}catch(t){return this._throwError(t.message,e)}return t.writeValue(r)}decode(t){return ds(At(t.readValue(),20))}}class Ms extends Me{constructor(t){super(t.name,t.type,"_",t.dynamic),this.coder=t}defaultValue(){return this.coder.defaultValue()}encode(t,e){return this.coder.encode(t,e)}decode(t){return this.coder.decode(t)}}function js(t,e,r){let n=[];if(Array.isArray(r))n=r;else if(r&&"object"==typeof r){let t={};n=e.map((e=>{const n=e.localName;return n||P.throwError("cannot encode object for signature with missing names","INVALID_ARGUMENT",{argument:"values",info:{coder:e},value:r}),t[n]&&P.throwError("cannot encode object for signature with duplicate names","INVALID_ARGUMENT",{argument:"values",info:{coder:e},value:r}),t[n]=!0,r[n]}))}else P.throwArgumentError("invalid tuple value","tuple",r);e.length!==n.length&&P.throwArgumentError("types/value length mismatch","tuple",r);let s=new je,i=new je,o=[];e.forEach(((t,e)=>{let r=n[e];if(t.dynamic){let e=i.length;t.encode(i,r);let n=s.writeUpdatableValue();o.push((t=>{n(t+e)}))}else t.encode(s,r)})),o.forEach((t=>{t(s.length)}));let a=t.appendWriter(s);return a+=t.appendWriter(i),a}function Gs(t,e){let r=[],n=[],s=t.subReader(0);return e.forEach((e=>{let i=null;if(e.dynamic){let r=t.readIndex(),n=s.subReader(r);try{i=e.decode(n)}catch(t){if(u(t,"BUFFER_OVERRUN"))throw t;i=t,i.baseType=e.name,i.name=e.localName,i.type=e.type}}else try{i=e.decode(t)}catch(t){if(u(t,"BUFFER_OVERRUN"))throw t;i=t,i.baseType=e.name,i.name=e.localName,i.type=e.type}if(null==i)throw new Error("investigate");r.push(i),n.push(e.localName||null)})),Le.fromItems(r,n)}class $s extends Me{constructor(t,e,r){super("array",t.type+"["+(e>=0?e:"")+"]",r,-1===e||t.dynamic),n(this,{coder:t,length:e})}defaultValue(){const t=this.coder.defaultValue(),e=[];for(let r=0;rt.dataLength&&P.throwError("insufficient data length","BUFFER_OVERRUN",{buffer:t.bytes,offset:e*Ce,length:t.dataLength}));let r=[];for(let t=0;tt||r<-(t+Xs))&&this._throwError("value out-of-bounds",e)}else(rSt(n,8*this.size))&&this._throwError("value out-of-bounds",e);return r=St(It(r,8*this.size),8*this.size),this.signed&&(r=It(Ot(r,8*this.size),256)),t.writeValue(r)}decode(t){let e=St(t.readValue(),8*this.size);return this.signed&&(e=Ot(e,8*this.size)),t.coerce(this.name,e)}}const Qs=new N("@ethersproject/strings@6.0.0-beta.1");var ti,ei;function ri(e,r,n,s,i){if(e===t.Utf8ErrorReason.BAD_PREFIX||e===t.Utf8ErrorReason.UNEXPECTED_CONTINUE){let t=0;for(let e=r+1;e>6==2;e++)t++;return t}return e===t.Utf8ErrorReason.OVERRUN?n.length-r-1:0}t.UnicodeNormalizationForm=void 0,(ti=t.UnicodeNormalizationForm||(t.UnicodeNormalizationForm={})).current="",ti.NFC="NFC",ti.NFD="NFD",ti.NFKC="NFKC",ti.NFKD="NFKD",t.Utf8ErrorReason=void 0,(ei=t.Utf8ErrorReason||(t.Utf8ErrorReason={})).UNEXPECTED_CONTINUE="unexpected continuation byte",ei.BAD_PREFIX="bad codepoint prefix",ei.OVERRUN="string overrun",ei.MISSING_CONTINUE="missing continuation byte",ei.OUT_OF_RANGE="out of UTF-8 range",ei.UTF16_SURROGATE="UTF-16 surrogate",ei.OVERLONG="overlong representation";const ni=Object.freeze({error:function(t,e,r,n,s){return Qs.throwArgumentError(`invalid codepoint at offset ${e}; ${t}`,"bytes",r)},ignore:ri,replace:function(e,r,n,s,i){return e===t.Utf8ErrorReason.OVERLONG?(s.push(null!=i?i:-1),0):(s.push(65533),ri(e,r,n))}});function si(e,r){null==r&&(r=ni.error);const n=Qs.getBytes(e,"bytes"),s=[];let i=0;for(;i>7==0){s.push(e);continue}let o=null,a=null;if(192==(224&e))o=1,a=127;else if(224==(240&e))o=2,a=2047;else{if(240!=(248&e)){i+=r(128==(192&e)?t.Utf8ErrorReason.UNEXPECTED_CONTINUE:t.Utf8ErrorReason.BAD_PREFIX,i-1,n,s);continue}o=3,a=65535}if(i-1+o>=n.length){i+=r(t.Utf8ErrorReason.OVERRUN,i-1,n,s);continue}let c=e&(1<<8-o-1)-1;for(let e=0;e1114111?i+=r(t.Utf8ErrorReason.OUT_OF_RANGE,i-1-o,n,s,c):c>=55296&&c<=57343?i+=r(t.Utf8ErrorReason.UTF16_SURROGATE,i-1-o,n,s,c):c<=a?i+=r(t.Utf8ErrorReason.OVERLONG,i-1-o,n,s,c):s.push(c))}return s}function ii(e,r=t.UnicodeNormalizationForm.current){r!=t.UnicodeNormalizationForm.current&&(Qs.assertNormalize(r),e=e.normalize(r));let n=[];for(let t=0;t>6|192),n.push(63&r|128);else if(55296==(64512&r)){t++;const s=e.charCodeAt(t);if(t>=e.length||56320!=(64512&s))throw new Error("invalid utf-8 string");const i=65536+((1023&r)<<10)+(1023&s);n.push(i>>18|240),n.push(i>>12&63|128),n.push(i>>6&63|128),n.push(63&i|128)}else n.push(r>>12|224),n.push(r>>6&63|128),n.push(63&r|128)}return new Uint8Array(n)}function oi(t){const e="0000"+t.toString(16);return"\\u"+e.substring(e.length-4)}function ai(t,e){return'"'+si(t,e).map((t=>{if(t<256){switch(t){case 8:return"\\b";case 9:return"\\t";case 10:return"\\n";case 13:return"\\r";case 34:return'\\"';case 92:return"\\\\"}if(t>=32&&t<127)return String.fromCharCode(t)}return t<=65535?oi(t):oi(55296+((t-=65536)>>10&1023))+oi(56320+(1023&t))})).join("")+'"'}function ci(t){return t.map((t=>t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode(55296+(t>>10&1023),56320+(1023&t))))).join("")}function li(t,e){return ci(si(t,e))}function ui(e,r=t.UnicodeNormalizationForm.current){return si(ii(e,r))}function hi(t){const e=ii(t);if(e.length>31)throw new Error("bytes32 string must be less than 32 bytes");return ye(e,32)}function fi(t){const e=Qs.getBytes(t,"bytes");if(32!==e.length)throw new Error("invalid bytes32 - not 32 bytes long");if(0!==e[31])throw new Error("invalid bytes32 string - no null terminator");let r=31;for(;0===e[r-1];)r--;return li(e.slice(0,r))}function di(t,e){const r=e||function(t){return[parseInt(t,16)]};let n=0,s={};return t.split(",").forEach((t=>{let e=t.split(":");n+=parseInt(e[0],16),s[n]=r(e[1])})),s}function pi(t){let e=0;return t.split(",").map((t=>{let r=t.split("-");1===r.length?r[1]="0":""===r[1]&&(r[1]="1");let n=e+parseInt(r[0],16);return e=parseInt(r[1],16),{l:n,h:e}}))}function wi(t,e){let r=0;for(let n=0;n=r&&t<=r+s.h&&(t-r)%(s.d||1)==0){if(s.e&&-1!==s.e.indexOf(t-r))continue;return s}}return null}const gi=pi("221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d"),mi="ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff".split(",").map((t=>parseInt(t,16))),yi=[{h:25,s:32,l:65},{h:30,s:32,e:[23],l:127},{h:54,s:1,e:[48],l:64,d:2},{h:14,s:1,l:57,d:2},{h:44,s:1,l:17,d:2},{h:10,s:1,e:[2,6,8],l:61,d:2},{h:16,s:1,l:68,d:2},{h:84,s:1,e:[18,24,66],l:19,d:2},{h:26,s:32,e:[17],l:435},{h:22,s:1,l:71,d:2},{h:15,s:80,l:40},{h:31,s:32,l:16},{h:32,s:1,l:80,d:2},{h:52,s:1,l:42,d:2},{h:12,s:1,l:55,d:2},{h:40,s:1,e:[38],l:15,d:2},{h:14,s:1,l:48,d:2},{h:37,s:48,l:49},{h:148,s:1,l:6351,d:2},{h:88,s:1,l:160,d:2},{h:15,s:16,l:704},{h:25,s:26,l:854},{h:25,s:32,l:55915},{h:37,s:40,l:1247},{h:25,s:-119711,l:53248},{h:25,s:-119763,l:52},{h:25,s:-119815,l:52},{h:25,s:-119867,e:[1,4,5,7,8,11,12,17],l:52},{h:25,s:-119919,l:52},{h:24,s:-119971,e:[2,7,8,17],l:52},{h:24,s:-120023,e:[2,7,13,15,16,17],l:52},{h:25,s:-120075,l:52},{h:25,s:-120127,l:52},{h:25,s:-120179,l:52},{h:25,s:-120231,l:52},{h:25,s:-120283,l:52},{h:25,s:-120335,l:52},{h:24,s:-119543,e:[17],l:56},{h:24,s:-119601,e:[17],l:58},{h:24,s:-119659,e:[17],l:58},{h:24,s:-119717,e:[17],l:58},{h:24,s:-119775,e:[17],l:58}],bi=di("b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3"),vi=di("179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7"),Ei=di("df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D",(function(t){if(t.length%4!=0)throw new Error("should not happen; bad data");let e=[];for(let r=0;r{if(mi.indexOf(t)>=0)return[];if(t>=65024&&t<=65039)return[];let e=function(t){const e=wi(t,yi);if(e){if(null==e.s)throw new Error("should not happenl bad range");return[t+e.s]}const r=bi[t];if(r)return r;const n=vi[t];return n?[t+n[0]]:Ei[t]||null}(t);return e||[t]})),r=n.reduce(((t,e)=>(e.forEach((e=>{t.push(e)})),t)),[]),r=ui(ci(r),t.UnicodeNormalizationForm.NFKC),r.forEach((t=>{wi(t,Ti)&&Qs.throwArgumentError("STRINGPREP_CONTAINS_PROHIBITED","value",e)})),r.forEach((t=>{wi(t,gi)&&Qs.throwArgumentError("STRINGPREP_CONTAINS_UNASSIGNED","value",e)}));let s=ci(r);return"-"!==s.substring(0,1)&&"--"!==s.substring(2,4)&&"-"!==s.substring(s.length-1)||Qs.throwArgumentError("invalid hyphen","value",e),s.length>63&&Qs.throwArgumentError("too long","value",e),s}class Ai extends Ws{constructor(t){super("string",t)}defaultValue(){return""}encode(t,e){return super.encode(t,ii(Ls.dereference(e,"string")))}decode(t){return li(super.decode(t))}}class Ni extends Me{constructor(t,e){let r=!1;const s=[];t.forEach((t=>{t.dynamic&&(r=!0),s.push(t.type)}));super("tuple","tuple("+s.join(",")+")",e,r),n(this,{coders:Object.freeze(t.slice())})}defaultValue(){const t=[];this.coders.forEach((e=>{t.push(e.defaultValue())}));const e=this.coders.reduce(((t,e)=>{const r=e.localName;return r&&(t[r]||(t[r]=0),t[r]++),t}),{});return this.coders.forEach(((r,n)=>{let s=r.localName;s&&1===e[s]&&("length"===s&&(s="_length"),null==t[s]&&(t[s]=t[n]))})),Object.freeze(t)}encode(t,e){const r=Ls.dereference(e,"tuple");return js(t,this.coders,r)}decode(t){return t.coerce(this.name,Gs(t,this.coders))}}var Pi,xi,Oi=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Ii=new RegExp(/^bytes([0-9]*)$/),Si=new RegExp(/^(u?int)([0-9]*)$/);Pi=new WeakSet,xi=function t(e){if(e.isArray())return new $s(Oi(this,Pi,"m",t).call(this,e.arrayChildren),e.arrayLength,e.name);if(e.isTuple())return new Ni(e.components.map((e=>Oi(this,Pi,"m",t).call(this,e))),e.name);switch(e.baseType){case"address":return new Ds(e.name);case"bool":return new zs(e.name);case"string":return new Ai(e.name);case"bytes":return new Hs(e.name);case"":return new Js(e.name)}let r=e.type.match(Si);if(r){let t=parseInt(r[2]||"256");return(0===t||t>256||t%8!=0)&&P.throwArgumentError("invalid "+r[1]+" bit length","param",e),new Zs(t/8,"int"===r[1],e.name)}if(r=e.type.match(Ii),r){let t=parseInt(r[1]);return(0===t||t>32)&&P.throwArgumentError("invalid bytes length","param",e),new Vs(t,e.name)}return P.throwArgumentError("invalid type","type",e.type)};const Ri=new class{constructor(t){Pi.add(this),n(this,{coerceFunc:t},{},{coerceFunc:null})}getDefaultValue(t){const e=t.map((t=>Oi(this,Pi,"m",xi).call(this,ct.from(t))));return new Ni(e,"_").defaultValue()}encode(t,e){P.assertArgumentCount(e.length,t.length,"types/values length mismatch");const r=t.map((t=>Oi(this,Pi,"m",xi).call(this,ct.from(t)))),n=new Ni(r,"_"),s=new je;return n.encode(s,e),s.data}decode(t,e,r){const n=t.map((t=>Oi(this,Pi,"m",xi).call(this,ct.from(t))));return new Ni(n,"_").decode(new Ge(e,this.coerceFunc,r))}};function _i(t){return un(ii(t))}const Ci=new N("@ethersproject/hash@6.0.0-beta.1"),Bi=new Uint8Array(32);Bi.fill(0);const Fi=new RegExp("^((.*)\\.)?([^.]+)$");function Ui(t){try{const e=t.split(".");for(let t=0;t{""===e&&Ci.throwArgumentError("invalid DNS name; missing component","name",t);const r=ii("_"+ki(e));return r[0]=r.length-1,r})))+"00"}const Mi="Ethereum Signed Message:\n";function ji(t){return"string"==typeof t&&(t=ii(t)),un(fe([ii(Mi),ii(String(t.length)),t]))}var Gi,$i,zi,Wi,Hi,Vi=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Ki=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Ji=new Uint8Array(32);Ji.fill(0);const qi=BigInt(-1),Xi=BigInt(0),Yi=BigInt(1),Zi=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const Qi=At(Yi,32),to=At(Xi,32),eo={name:"string",version:"string",chainId:"uint256",verifyingContract:"address",salt:"bytes32"},ro=["name","version","chainId","verifyingContract","salt"];function no(t){return function(e){return"string"!=typeof e&&Ci.throwArgumentError(`invalid domain value for ${JSON.stringify(t)}`,`domain.${t}`,e),e}}const so={name:no("name"),version:no("version"),chainId:function(t){return Ci.getBigInt(t,"domain.chainId")},verifyingContract:function(t){try{return ds(t).toLowerCase()}catch(t){}return Ci.throwArgumentError('invalid domain value "verifyingContract"',"domain.verifyingContract",t)},salt:function(t){const e=Ci.getBytes(t,"domain.salt");return 32!==e.length&&Ci.throwArgumentError('invalid domain value "salt"',"domain.salt",t),ue(e)}};function io(t){{const e=t.match(/^(u?)int(\d*)$/);if(e){const r=""===e[1],n=parseInt(e[2]||"256");(n%8!=0||n>256||e[2]&&e[2]!==String(n))&&Ci.throwArgumentError("invalid numeric width","type",t);const s=St(Zi,r?n-1:n),i=r?(s+Yi)*qi:Xi;return function(e){const r=Ci.getBigInt(e,"value");return(rs)&&Ci.throwArgumentError(`value out-of-bounds for ${t}`,"value",r),At(It(r,256),32)}}}{const e=t.match(/^bytes(\d+)$/);if(e){const r=parseInt(e[1]);return(0===r||r>32||e[1]!==String(r))&&Ci.throwArgumentError("invalid bytes width","type",t),function(e){return ie(e).length!==r&&Ci.throwArgumentError(`invalid length for ${t}`,"value",e),function(t){const e=ie(t),r=e.length%32;return r?fe([e,Ji.slice(r)]):ue(e)}(e)}}}switch(t){case"address":return function(t){return me(ds(t),32)};case"bool":return function(t){return t?Qi:to};case"bytes":return function(t){return un(t)};case"string":return function(t){return _i(t)}}return null}function oo(t,e){return`${t}(${e.map((({name:t,type:e})=>e+" "+t)).join(",")})`}class ao{constructor(t){Gi.add(this),$i.set(this,void 0),zi.set(this,void 0),Wi.set(this,void 0),Vi(this,$i,JSON.stringify(t),"f"),Vi(this,zi,new Map,"f"),Vi(this,Wi,new Map,"f");const e=new Map,r=new Map,s=new Map;Object.keys(t).forEach((t=>{e.set(t,new Set),r.set(t,[]),s.set(t,new Set)}));for(const n in t){const s=new Set;for(const i of t[n]){s.has(i.name)&&Ci.throwArgumentError(`duplicate variable name ${JSON.stringify(i.name)} in ${JSON.stringify(n)}`,"types",t),s.add(i.name);const o=i.type.match(/^([^\x5b]*)(\x5b|$)/)[1]||null;o===n&&Ci.throwArgumentError(`circular type reference to ${JSON.stringify(o)}`,"types",t);io(o)||(r.has(o)||Ci.throwArgumentError(`unknown type ${JSON.stringify(o)}`,"types",t),r.get(o).push(n),e.get(n).add(o))}}const i=Array.from(r.keys()).filter((t=>0===r.get(t).length));0===i.length?Ci.throwArgumentError("missing primary type","types",t):i.length>1&&Ci.throwArgumentError(`ambiguous primary types or unused types: ${i.map((t=>JSON.stringify(t))).join(", ")}`,"types",t),n(this,{primaryType:i[0]}),function n(i,o){o.has(i)&&Ci.throwArgumentError(`circular type reference to ${JSON.stringify(i)}`,"types",t),o.add(i);for(const t of e.get(i))if(r.has(t)){n(t,o);for(const e of o)s.get(e).add(t)}o.delete(i)}(this.primaryType,new Set);for(const[e,r]of s){const n=Array.from(r);n.sort(),Ki(this,zi,"f").set(e,oo(e,t[e])+n.map((e=>oo(e,t[e]))).join(""))}}get types(){return JSON.parse(Ki(this,$i,"f"))}getEncoder(t){let e=Ki(this,Wi,"f").get(t);return e||(e=Ki(this,Gi,"m",Hi).call(this,t),Ki(this,Wi,"f").set(t,e)),e}encodeType(t){const e=Ki(this,zi,"f").get(t);return e||Ci.throwArgumentError(`unknown type: ${JSON.stringify(t)}`,"name",t)}encodeData(t,e){return this.getEncoder(t)(e)}hashStruct(t,e){return un(this.encodeData(t,e))}encode(t){return this.encodeData(this.primaryType,t)}hash(t){return this.hashStruct(this.primaryType,t)}_visit(t,e,r){if(io(t))return r(t,e);const n=t.match(/^(.*)(\x5b(\d*)\x5d)$/);if(n){const t=n[1],s=parseInt(n[3]);return s>=0&&e.length!==s&&Ci.throwArgumentError("array length mismatch; expected length ${ arrayLength }","value",e),e.map((e=>this._visit(t,e,r)))}const s=this.types[t];return s?s.reduce(((t,{name:n,type:s})=>(t[n]=this._visit(s,e[n],r),t)),{}):Ci.throwArgumentError(`unknown type: ${t}`,"type",t)}visit(t,e){return this._visit(this.primaryType,t,e)}static from(t){return new ao(t)}static getPrimaryType(t){return ao.from(t).primaryType}static hashStruct(t,e,r){return ao.from(e).hashStruct(t,r)}static hashDomain(t){const e=[];for(const r in t){const n=eo[r];n||Ci.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(r)}`,"domain",t),e.push({name:r,type:n})}return e.sort(((t,e)=>ro.indexOf(t.name)-ro.indexOf(e.name))),ao.hashStruct("EIP712Domain",{EIP712Domain:e},t)}static encode(t,e,r){return fe(["0x1901",ao.hashDomain(t),ao.from(e).hash(r)])}static hash(t,e,r){return un(ao.encode(t,e,r))}static async resolveNames(t,e,r,n){t=Object.assign({},t);const s={};t.verifyingContract&&!te(t.verifyingContract,20)&&(s[t.verifyingContract]="0x");const i=ao.from(e);i.visit(r,((t,e)=>("address"!==t||te(e,20)||(s[e]="0x"),e)));for(const t in s)s[t]=await n(t);return t.verifyingContract&&s[t.verifyingContract]&&(t.verifyingContract=s[t.verifyingContract]),{domain:t,value:r=i.visit(r,((t,e)=>"address"===t&&s[e]?s[e]:e))}}static getPayload(t,e,r){ao.hashDomain(t);const n={},s=[];ro.forEach((e=>{const r=t[e];null!=r&&(n[e]=so[e](r),s.push({name:e,type:eo[e]}))}));const i=ao.from(e),o=Object.assign({},e);return o.EIP712Domain?Ci.throwArgumentError("types must not contain EIP712Domain type","types.EIP712Domain",e):o.EIP712Domain=s,i.encode(r),{types:o,domain:n,primaryType:i.primaryType,message:i.visit(r,((t,e)=>{if(t.match(/^bytes(\d*)/))return ue(Ci.getBytes(e));if(t.match(/^u?int/))return Ci.getBigInt(e).toString();switch(t){case"address":return e.toLowerCase();case"bool":return!!e;case"string":return"string"!=typeof e&&Ci.throwArgumentError("invalid string","value",e),e}return Ci.throwArgumentError("unsupported type","type",t)}))}}}$i=new WeakMap,zi=new WeakMap,Wi=new WeakMap,Gi=new WeakSet,Hi=function(t){{const e=io(t);if(e)return e}const e=t.match(/^(.*)(\x5b(\d*)\x5d)$/);if(e){const t=e[1],r=this.getEncoder(t),n=parseInt(e[3]);return e=>{n>=0&&e.length!==n&&Ci.throwArgumentError("array length mismatch; expected length ${ arrayLength }","value",e);let s=e.map(r);return Ki(this,zi,"f").has(t)&&(s=s.map(un)),un(fe(s))}}const r=this.types[t];if(r){const e=_i(Ki(this,zi,"f").get(t));return t=>{const n=r.map((({name:e,type:r})=>{const n=this.getEncoder(r)(t[e]);return Ki(this,zi,"f").has(r)?un(n):n}));return n.unshift(e),fe(n)}}return Ci.throwArgumentError(`unknown type: ${t}`,"type",t)};var co,lo,uo,ho,fo,po,wo,go=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},mo=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class yo{constructor(t,e,r){const s=t.name,i=t.format();n(this,{fragment:t,name:s,signature:i,topic:e,args:r})}}class bo{constructor(t,e,r,s){const i=t.name,o=t.format();n(this,{fragment:t,name:i,args:r,signature:o,selector:e,value:s})}}class vo{constructor(t,e,r){const s=t.name,i=t.format();n(this,{fragment:t,name:s,args:r,signature:i,selector:e})}}class Eo{constructor(t){n(this,{hash:t,_isIndexed:!0})}static isIndexed(t){return!(!t||!t._isIndexed)}}const To={0:"generic panic",1:"assert(false)",17:"arithmetic overflow",18:"division or modulo by zero",33:"enum overflow",34:"invalid encoded storage byte array accessed",49:"out-of-bounds array access; popping on an empty array",50:"out-of-bounds access of an array or bytesN",65:"out of memory",81:"uninitialized function"},ko={"0x08c379a0":{signature:"Error(string)",name:"Error",inputs:["string"],reason:t=>`reverted with reason string ${JSON.stringify(t)}`},"0x4e487b71":{signature:"Panic(uint256)",name:"Panic",inputs:["uint256"],reason:t=>{let e="unknown panic code";return t>=0&&t<=255&&To[t.toString()]&&(e=To[t.toString()]),`reverted with panic code 0x${t.toString(16)} (${e})`}}};class Ao{constructor(t){co.add(this),lo.set(this,void 0),uo.set(this,void 0),ho.set(this,void 0),fo.set(this,void 0);let e=[];e="string"==typeof t?JSON.parse(t):t,go(this,ho,new Map,"f"),go(this,lo,new Map,"f"),go(this,uo,new Map,"f"),n(this,{fragments:Object.freeze(e.map((t=>ut.from(t))).filter((t=>null!=t)))}),go(this,fo,this.getAbiCoder(),"f"),this.fragments.forEach((t=>{let e;switch(t.type){case"constructor":return this.deploy?void P.warn("duplicate definition - constructor"):void n(this,{deploy:t});case"function":e=mo(this,ho,"f");break;case"event":e=mo(this,uo,"f");break;case"error":e=mo(this,lo,"f");break;default:return}const r=t.format();e.has(r)?P.warn("duplicate definition - "+r):e.set(r,t)})),this.deploy||n(this,{deploy:wt.fromString("constructor()")})}format(t){t||(t=C.full),t===C.sighash&&P.throwArgumentError("interface does not support formatting sighash","format",t);const e=this.fragments.map((e=>e.format(t)));return t===C.json?JSON.stringify(e.map((t=>JSON.parse(t)))):e}getAbiCoder(){return Ri}getFunctionName(t){return mo(this,co,"m",po).call(this,t,null,!1).name}getFunction(t,e){return mo(this,co,"m",po).call(this,t,e||null,!0)}getEventName(t){return mo(this,co,"m",wo).call(this,t,null,!1).name}getEvent(t,e){return mo(this,co,"m",wo).call(this,t,e||null,!0)}getError(t,e){if(te(t)){const e=t.toLowerCase();for(const t of mo(this,lo,"f").values())if(e===this.getSelector(t))return t;P.throwArgumentError("no matching error","selector",t)}if(-1===t.indexOf("(")){const e=[];for(const[r,n]of mo(this,lo,"f"))r.split("(")[0]===t&&e.push(n);return 0===e.length?P.throwArgumentError("no matching error","name",t):e.length>1&&P.throwArgumentError("multiple matching errors","name",t),e[0]}const r=mo(this,lo,"f").get(dt.fromString(t).format());return r||P.throwArgumentError("no matching error","signature",t)}getSelector(t){return pe(_i(t.format()),0,4)}getEventTopic(t){return _i(t.format())}_decodeParams(t,e){return mo(this,fo,"f").decode(t,e)}_encodeParams(t,e){return mo(this,fo,"f").encode(t,e)}encodeDeploy(t){return this._encodeParams(this.deploy.inputs,t||[])}decodeErrorResult(t,e){return"string"==typeof t&&(t=this.getError(t)),pe(e,0,4)!==this.getSelector(t)&&P.throwArgumentError(`data signature does not match error ${t.name}.`,"data",e),this._decodeParams(t.inputs,pe(e,4))}encodeErrorResult(t,e){return"string"==typeof t&&(t=this.getError(t)),fe([this.getSelector(t),this._encodeParams(t.inputs,e||[])])}decodeFunctionData(t,e){return"string"==typeof t&&(t=this.getFunction(t)),pe(e,0,4)!==this.getSelector(t)&&P.throwArgumentError(`data signature does not match function ${t.name}.`,"data",e),this._decodeParams(t.inputs,pe(e,4))}encodeFunctionData(t,e){return"string"==typeof t&&(t=this.getFunction(t)),fe([this.getSelector(t),this._encodeParams(t.inputs,e||[])])}decodeFunctionResult(t,e){"string"==typeof t&&(t=this.getFunction(t));let r="invalid length for result data";const n=ie(e);if(n.length%32==0)try{return mo(this,fo,"f").decode(t.outputs,n)}catch(t){r="could not decode result data"}return P.throwError(r,"BAD_DATA",{value:ue(n),info:{method:t.name,signature:t.format()}})}makeError(t,e,r){"string"==typeof t&&(t=this.getFunction(t));const n=P.getBytes(e);let s,i,o,a;if(r)try{s=mo(this,fo,"f").decode(t.inputs,r.data||"0x")}catch(t){console.log(t)}let c="unknown reason";if(0===n.length)c="missing error reason";else if(n.length%32==4){const t=ue(n.slice(0,4)),e=ko[t];if(e)try{o=e.name,a=e.signature,i=mo(this,fo,"f").decode(e.inputs,n.slice(4)),c=e.reason(...i)}catch(t){console.log(t)}else{c="unknown custom error";try{const e=this.getError(t);o=e.name,a=e.format(),c=`custom error: ${a}`;try{i=mo(this,fo,"f").decode(e.inputs,n.slice(4))}catch(t){c=`custom error: ${a} (coult not decode error data)`}}catch(t){console.log(t)}}}return P.makeError("call revert exception","CALL_EXCEPTION",{data:ue(n),transaction:null,method:t.name,signature:t.format(),args:s,errorArgs:i,errorName:o,errorSignature:a,reason:c})}encodeFunctionResult(t,e){return"string"==typeof t&&(t=this.getFunction(t)),ue(mo(this,fo,"f").encode(t.outputs,e||[]))}encodeFilterTopics(t,e){"string"==typeof t&&(t=this.getEvent(t)),e.length>t.inputs.length&&P.throwError("too many arguments for "+t.format(),"UNEXPECTED_ARGUMENT",{count:e.length,expectedCount:t.inputs.length});const r=[];t.anonymous||r.push(this.getEventTopic(t));const n=(t,e)=>"string"===t.type?_i(e):"bytes"===t.type?un(ue(e)):("address"===t.type&&mo(this,fo,"f").encode(["address"],[e]),me(ue(e),32));for(e.forEach(((e,s)=>{const i=t.inputs[s];i.indexed?null==e?r.push(null):"array"===i.baseType||"tuple"===i.baseType?P.throwArgumentError("filtering with tuples or arrays not supported","contract."+i.name,e):Array.isArray(e)?r.push(e.map((t=>n(i,t)))):r.push(n(i,e)):null!=e&&P.throwArgumentError("cannot filter non-indexed parameters; must be null","contract."+i.name,e)}));r.length&&null===r[r.length-1];)r.pop();return r}encodeEventLog(t,e){"string"==typeof t&&(t=this.getEvent(t));const r=[],n=[],s=[];return t.anonymous||r.push(this.getEventTopic(t)),e.length!==t.inputs.length&&P.throwArgumentError("event arguments/values mismatch","values",e),t.inputs.forEach(((t,i)=>{const o=e[i];if(t.indexed)if("string"===t.type)r.push(_i(o));else if("bytes"===t.type)r.push(un(o));else{if("tuple"===t.baseType||"array"===t.baseType)throw new Error("not implemented");r.push(mo(this,fo,"f").encode([t.type],[o]))}else n.push(t),s.push(o)})),{data:mo(this,fo,"f").encode(n,s),topics:r}}decodeEventLog(t,e,r){if("string"==typeof t&&(t=this.getEvent(t)),null!=r&&!t.anonymous){const e=this.getEventTopic(t);te(r[0],32)&&r[0].toLowerCase()===e||P.throwArgumentError("fragment/topic mismatch","topics[0]",r[0]),r=r.slice(1)}const n=[],s=[],i=[];t.inputs.forEach(((t,e)=>{t.indexed?"string"===t.type||"bytes"===t.type||"tuple"===t.baseType||"array"===t.baseType?(n.push(ct.fromObject({type:"bytes32",name:t.name})),i.push(!0)):(n.push(t),i.push(!1)):(s.push(t),i.push(!1))}));const o=null!=r?mo(this,fo,"f").decode(n,fe(r)):null,a=mo(this,fo,"f").decode(s,e,!0),c=[],l=[];let u=0,h=0;return t.inputs.forEach(((t,e)=>{let r=null;if(t.indexed)if(null==o)r=new Eo(null);else if(i[e])r=new Eo(o[h++]);else try{r=o[h++]}catch(t){r=t}else try{r=a[u++]}catch(t){r=t}c.push(r),l.push(t.name||null)})),Le.fromItems(c,l)}parseTransaction(t){const e=P.getBytes(t.data,"tx.data"),r=P.getBigInt(null!=t.value?t.value:0,"tx.value"),n=this.getFunction(ue(e.slice(0,4)));if(!n)return null;const s=mo(this,fo,"f").decode(n.inputs,e.slice(4));return new bo(n,this.getSelector(n),s,r)}parseLog(t){const e=this.getEvent(t.topics[0]);return!e||e.anonymous?null:new yo(e,this.getEventTopic(e),this.decodeEventLog(e,t.data,t.topics))}parseError(t){const e=ue(t),r=this.getError(pe(e,0,4));if(!r)return null;const n=mo(this,fo,"f").decode(r.inputs,pe(e,4));return new vo(r,this.getSelector(r),n)}static from(t){return t instanceof Ao?t:"string"==typeof t?new Ao(JSON.parse(t)):"function"==typeof t.format?new Ao(t.format(C.json)):new Ao(t)}}lo=new WeakMap,uo=new WeakMap,ho=new WeakMap,fo=new WeakMap,co=new WeakSet,po=function(t,e,r){if(te(t)){const e=t.toLowerCase();for(const t of mo(this,ho,"f").values())if(e===this.getSelector(t))return t;P.throwArgumentError("no matching function","selector",t)}if(-1===t.indexOf("(")){const n=[];for(const[e,r]of mo(this,ho,"f"))e.split("(")[0]===t&&n.push(r);if(e){const t=e.length>0?e[e.length-1]:null;let r=e.length,s=!0;Ls.isTyped(t)&&"overrides"===t.type&&(s=!1,r--);for(let t=n.length-1;t>=0;t--){const e=n[t].inputs.length;e===r||s&&e===r-1||n.splice(t,1)}for(let t=n.length-1;t>=0;t--){const r=n[t].inputs;for(let s=0;s=r.length){if("overrides"===e[s].type)continue;n.splice(t,1);break}if(e[s].type!==r[s].baseType){n.splice(t,1);break}}}}if(1===n.length&&e&&e.length!==n[0].inputs.length){const t=e[e.length-1];(null==t||Array.isArray(t)||"object"!=typeof t)&&n.splice(0,1)}if(0===n.length)P.throwArgumentError("no matching function","name",t);else if(n.length>1&&r){const e=n.map((t=>JSON.stringify(t.format()))).join(", ");P.throwArgumentError(`multiple matching functions (i.e. ${e})`,"name",t)}return n[0]}const n=mo(this,ho,"f").get(gt.fromString(t).format());return n||P.throwArgumentError("no matching function","signature",t)},wo=function(t,e,r){if(te(t)){const e=t.toLowerCase();for(const t of mo(this,uo,"f").values())if(e===this.getEventTopic(t))return t;P.throwArgumentError("no matching event","eventTopic",t)}if(-1===t.indexOf("(")){const n=[];for(const[e,r]of mo(this,uo,"f"))e.split("(")[0]===t&&n.push(r);if(e){for(let t=n.length-1;t>=0;t--)n[t].inputs.length=0;t--){const r=n[t].inputs;for(let s=0;s1&&r&&P.throwArgumentError("multiple matching events","name",t),n[0]}const n=mo(this,uo,"f").get(pt.fromString(t).format());return n||P.throwArgumentError("no matching event","signature",t)};const No=new N("@ethersproject/web@6.0.0-beta.1");var Po,xo,Oo=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Io=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class So{constructor(t,e,r,n,s){Po.set(this,void 0),xo.set(this,void 0),Oo(this,Po,{statusCode:t,statusMessage:e,headers:Object.freeze(Object.assign({},Object.keys(r).reduce(((t,e)=>(t[e.toLowerCase()]=r[e],t)),{}))),body:null==n?null:new Uint8Array(n),request:s||null},"f"),Oo(this,xo,{message:""},"f")}toString(){const t=c(Io(this,Po,"f"),"body");return``}get statusCode(){return c(Io(this,Po,"f"),"statusCode")}get statusMessage(){return c(Io(this,Po,"f"),"statusMessage")}get headers(){return c(Io(this,Po,"f"),"headers")}get body(){const t=c(Io(this,Po,"f"),"body");return null==t?null:new Uint8Array(t)}get bodyText(){try{const t=c(Io(this,Po,"f"),"body");return null==t?"":li(t)}catch(t){return No.throwError("response body is not valid UTF-8 data","UNSUPPORTED_OPERATION",{operation:"bodyText",info:{response:this}})}}get bodyJson(){try{return JSON.parse(this.bodyText)}catch(t){return No.throwError("response body is not valid JSON","UNSUPPORTED_OPERATION",{operation:"bodyJson",info:{response:this}})}}[(Po=new WeakMap,xo=new WeakMap,Symbol.iterator)](){const t=this.headers,e=Object.keys(t);let r=0;return{next:()=>{if(r=200&&this.statusCode<300}assertOk(){if(this.ok())return;let{message:t,error:e}=Io(this,xo,"f");""===t&&(t=`server response ${this.statusCode} ${this.statusMessage}`),No.throwError(t,"SERVER_ERROR",{request:this.request||"unknown request",response:this,error:e})}}async function Ro(t,e){const r=t.url.split(":")[0].toLowerCase();"http"!==r&&"https"!==r&&No.throwError(`unsupported protocol ${r}`,"UNSUPPORTED_OPERATION",{info:{protocol:r},operation:"request"}),t.credentials&&!t.allowInsecureAuthentication&&No.throwError("insecure authorized connections unsupported","UNSUPPORTED_OPERATION",{operation:"request"});const n={method:t.method,headers:new Headers(Array.from(t)),body:t.body||void 0},s=await fetch(t.url,n),i={};s.headers.forEach(((t,e)=>{i[e.toLowerCase()]=t}));const o=new Uint8Array(await s.arrayBuffer());return new So(s.status,s.statusText,i,o,t)}var _o,Co=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Bo=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function Fo(t,e,r){if(typeof t!==e)throw new Error(`invalid ${r}`);return t}class Uo{constructor(t){_o.set(this,void 0),Co(this,_o,{allowInsecure:!1,gzip:!1,headers:{},method:"",timeout:300,url:Fo(t,"string","url")},"f")}get url(){return c(Bo(this,_o,"f"),"url")}set url(t){l(Bo(this,_o,"f"),"url",Fo(t,"string","url"))}get body(){const t=c(Bo(this,_o,"f"),"body");return null==t?null:this.isFrozen()?new Uint8Array(t):t}set body(t){if(null==t)l(Bo(this,_o,"f"),"body",void 0),l(Bo(this,_o,"f"),"bodyType",void 0);else if("string"==typeof t)l(Bo(this,_o,"f"),"body",ii(t)),l(Bo(this,_o,"f"),"bodyType","text/plain");else if(t instanceof Uint8Array)l(Bo(this,_o,"f"),"body",t),l(Bo(this,_o,"f"),"bodyType","application/octet-stream");else{if("object"!=typeof t)throw new Error("invalid body");l(Bo(this,_o,"f"),"body",ii(JSON.stringify(t))),l(Bo(this,_o,"f"),"bodyType","application/json")}}hasBody(){return null!=c(Bo(this,_o,"f"),"body")}get method(){const t=c(Bo(this,_o,"f"),"method");return t?t.toUpperCase():this.body?"POST":"GET"}set method(t){null==t&&(t=""),l(Bo(this,_o,"f"),"method",Fo(t,"string","method"))}get headers(){const t=Object.assign({},c(Bo(this,_o,"f"),"headers")),e=c(Bo(this,_o,"f"),"bodyType");return this.credentials,this.allowGzip&&(t["accept-encoding"]="gzip"),null==t["content-type"]&&e&&(t["content-type"]=e),this.body&&(t["content-length"]=String(this.body.length)),Object.freeze(t)}getHeader(t){return this.headers[t.toLowerCase()]}setHeader(t,e){const r=c(Bo(this,_o,"f"),"headers");l(Bo(this,_o,"f"),"headers",r),r[Fo(t,"string","key").toLowerCase()]=String(e)}clearHeaders(){l(Bo(this,_o,"f"),"headers",{})}[(_o=new WeakMap,Symbol.iterator)](){const t=this.headers,e=Object.keys(t);let r=0;return{next:()=>{if(r ${JSON.stringify(t)})`});const n=new Uo(t);return n.method="GET",n.allowGzip=this.allowGzip,n.timeout=this.timeout,l(Bo(n,_o,"f"),"body",c(Bo(this,_o,"f"),"body")),l(Bo(n,_o,"f"),"headers",Object.assign({},c(Bo(this,_o,"f"),"headers"))),l(Bo(n,_o,"f"),"bodyType",c(Bo(this,_o,"f"),"bodyType")),n}clone(){const t=new Uo(this.url);l(Bo(t,_o,"f"),"method",c(Bo(this,_o,"f"),"method"));const e=c(Bo(this,_o,"f"),"body");return l(Bo(t,_o,"f"),"body",null==e?void 0:new Uint8Array(e)),l(Bo(t,_o,"f"),"bodyType",c(Bo(this,_o,"f"),"bodyType")),l(Bo(t,_o,"f"),"headers",Object.assign({},c(Bo(this,_o,"f"),"headers"))),l(Bo(t,_o,"f"),"creds",c(Bo(this,_o,"f"),"creds")),this.allowGzip&&(t.allowGzip=!0),t.timeout=this.timeout,this.allowInsecureAuthentication&&(t.allowInsecureAuthentication=!0),t}freeze(){const t=c(Bo(this,_o,"f"),"body");return null!=t&&l(Bo(this,_o,"f"),"body",new Uint8Array(t)),Object.freeze(Bo(this,_o,"f").headers),Object.freeze(Bo(this,_o,"f")),this}isFrozen(){return Object.isFrozen(Bo(this,_o,"f"))}}async function Lo(t){return new Promise((e=>{setTimeout(e,t)}))}function Do(){return(new Date).getTime()}let Mo=!1;async function jo(t){const e="string"==typeof t?{request:new Uo(t)}:t instanceof Uo?{request:t}:Object.assign({},t);if(null==e.request)return No.throwArgumentError("missing request","connection",t);let r=e.request.clone().freeze();switch(e.request.url.split(":")[0]){case"data":{const t=r.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i);if(t)try{const e={"content-type":t[1]?t[1]:"text/plain"},n=t[2]?ae(t[3]):ii(t[3].replace(/%([0-9a-f][0-9a-f])/gi,((t,e)=>String.fromCharCode(parseInt(e,16)))));return new So(200,"OK",e,n,r.clone())}catch(t){return new So(400,"BAD REQUEST (invalid base64 encoded data)",{},null,r.clone())}return new So(500,"INTERNAL SERVER ERROR (unsupported dara URI)",{},null,r.clone())}case"ipfs":case"ipns":case"ar":throw new Error("not implemented yet");case"http":case"https":break;default:throw new Error("unsupported scheme")}const n=null!=e.throttleLimit?e.throttleLimit:12;if(!Number.isInteger(n)||n<1)return No.throwArgumentError("invalid throttleLimit","connection",t);const s=null!=e.throttleSlotInterval?e.throttleSlotInterval:100;if(!Number.isInteger(s)||n<0)return No.throwArgumentError("invalid throttleSlotInterval","connection",t);const i=null!=e.throttleRetry?e.throttleRetry:null;if(i&&"function"!=typeof i)return No.throwArgumentError("invalid throttleRetry callback","connection",t);const o=e.preflightRequest||null;if(o&&"function"!=typeof o)return No.throwArgumentError("invalid preflightRequest callback","connection",t);const a=e.processResponse||null;if(a&&"function"!=typeof a)return No.throwArgumentError("invalid processResponse callback","connection",t);const c=Do();let l=null;for(let t=0;t32)throw new Error("internal; should not happen");const r=new Uint8Array(32);return r.set(e,32-e.length),r}function Qo(t){if(t.length%32==0)return t;const e=new Uint8Array(32*Math.ceil(t.length/32));return e.set(t),e}function ta(t){const e=[];let r=0;for(let n=0;nGo.getBigInt(t)===Ko)).catch((t=>{if("CALL_EXCEPTION"===t.code)return!1;throw Ho(this,zo,null,"f"),t})),"f"),await Vo(this,zo,"f")}async _fetch(t,e="0x"){const r=fe([t,Li(this.name),e]),n={to:this.address,enableCcipRead:!0,data:r};let s=!1;await this.supportsWildcard()&&(s=!0,n.data=fe(["0x9061b923",ta([Di(this.name),r])]));try{let t=await this.provider.call(n);return Go.getBytes(t).length%32==4?Go.throwError("resolver threw error","CALL_EXCEPTION",{transaction:n,data:t}):s?Xo(t,0):t}catch(t){if("CALL_EXCEPTION"!==t.code)throw t}return null}async getAddress(t=60){if(60===t)try{const t=await this._fetch("0x3b3b57de");if("0x"===t||t===qo)return null;return(await this.provider.getNetwork()).formatter.callAddress(t)}catch(t){if("CALL_EXCEPTION"===t.code)return null;throw t}let e=null;for(const r of this.provider.plugins)if(r instanceof ra&&r.supportsCoinType(t)){e=r;break}if(null==e)return null;const r=Xo(await this._fetch("0xf1cb7e06",Zo(t))||"0x",0);if(null==r||"0x"===r)return null;const n=await e.encodeAddress(t,r);return null!=n?n:Go.throwError("invalid coin data","UNSUPPORTED_OPERATION",{operation:`getAddress(${t})`,info:{coinType:t,data:r}})}async getText(t){let e=ii(t);const r=Go.getBytes(fe([Zo(64),Zo(e.length),e])),n=Xo(await this._fetch("0x59d1d43c",Qo(r))||"0x",0);return null==n||"0x"===n?null:li(n)}async getContentHash(){const t=Xo(await this._fetch("0xbc1c58d1")||"0x",0);if(null==t||"0x"===t)return null;const e=t.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);if(e){const t="e3010170"===e[1]?"ipfs":"ipns",r=parseInt(e[4],16);if(e[5].length===2*r)return`${t}://${Zt("0x"+e[2])}`}const r=t.match(/^0xe40101fa011b20([0-9a-f]*)$/);return r&&64===r[1].length?`bzz://${r[1]}`:Go.throwError("invalid or unsupported content hash data","UNSUPPORTED_OPERATION",{operation:"getContentHash()",info:{data:t}})}async getAvatar(){return(await this._getAvatar()).url}async _getAvatar(){const t=[{type:"name",value:this.name}];try{const e=await this.getText("avatar");if(null==e)throw t.push({type:"!avatar",value:""}),new Error("!avatar");t.push({type:"avatar",value:e});for(let r=0;roa.throwArgumentError(e,"signature",t);if("string"==typeof t){65!==de(t)&&e("invlaid raw signature length");const r=pe(t,0,32),n=pe(t,32,64);BigInt(n)>>ga&&e("non-canonical s");const s=va.getNormalizedV(pe(t,64,65));return new va(ya,r,n,s)}if(t instanceof va)return t.clone();const r=t.r;null==r&&e("missing r"),te(r,32)||e("invalid r");const n=function(t,r){return t?(te(t,32)||e("invalid s"),t):r?(te(r,32)||e("invalid vs"),At(BigInt(r)&ma,32)):e("missing s")}(t.s,t.vs);BigInt(n)>>ga&&e("non-canonical s");const s=function(t,r,n){if(t)return va.getNormalizedV(t);if(r)return te(r,32)||e("invalid vs"),128&ie(r)[0]?28:27;if(n){switch(n){case 0:return 27;case 1:return 28}return e("invalid yParity")}return e("missing v")}(t.v,t.vs,t.yParity),i=new va(ya,r,n,s);return t.yParity&&(t.yParity,i.yParity),t.vs&&(t.vs,i.vs),i}} +/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */const Ea=BigInt(0),Ta=BigInt(1),ka=BigInt(2),Aa=BigInt(3),Na=BigInt(8),Pa=ka**BigInt(256),xa={a:Ea,b:BigInt(7),P:Pa-ka**BigInt(32)-BigInt(977),n:Pa-BigInt("432420386565659656852420866394968145599"),h:Ta,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee")};function Oa(t){const{a:e,b:r}=xa,n=Ka(t*t),s=Ka(n*t);return Ka(s+e*t+r)}const Ia=xa.a===Ea;class Sa{constructor(t,e,r){this.x=t,this.y=e,this.z=r}static fromAffine(t){if(!(t instanceof _a))throw new TypeError("JacobianPoint#fromAffine: expected Point");return new Sa(t.x,t.y,Ta)}static toAffineBatch(t){const e=function(t,e=xa.P){const r=new Array(t.length),n=qa(t.reduce(((t,n,s)=>n===Ea?t:(r[s]=t,Ka(t*n,e))),Ta),e);return t.reduceRight(((t,n,s)=>n===Ea?t:(r[s]=Ka(t*r[s],e),Ka(t*n,e))),n),r}(t.map((t=>t.z)));return t.map(((t,r)=>t.toAffine(e[r])))}static normalizeZ(t){return Sa.toAffineBatch(t).map(Sa.fromAffine)}equals(t){if(!(t instanceof Sa))throw new TypeError("JacobianPoint expected");const{x:e,y:r,z:n}=this,{x:s,y:i,z:o}=t,a=Ka(n**ka),c=Ka(o**ka),l=Ka(e*c),u=Ka(s*a),h=Ka(Ka(r*o)*c),f=Ka(Ka(i*n)*a);return l===u&&h===f}negate(){return new Sa(this.x,Ka(-this.y),this.z)}double(){const{x:t,y:e,z:r}=this,n=Ka(t**ka),s=Ka(e**ka),i=Ka(s**ka),o=Ka(ka*(Ka((t+s)**ka)-n-i)),a=Ka(Aa*n),c=Ka(a**ka),l=Ka(c-ka*o),u=Ka(a*(o-l)-Na*i),h=Ka(ka*e*r);return new Sa(l,u,h)}add(t){if(!(t instanceof Sa))throw new TypeError("JacobianPoint expected");const{x:e,y:r,z:n}=this,{x:s,y:i,z:o}=t;if(s===Ea||i===Ea)return this;if(e===Ea||r===Ea)return t;const a=Ka(n**ka),c=Ka(o**ka),l=Ka(e*c),u=Ka(s*a),h=Ka(Ka(r*o)*c),f=Ka(Ka(i*n)*a),d=Ka(u-l),p=Ka(f-h);if(d===Ea)return p===Ea?this.double():Sa.ZERO;const w=Ka(d**ka),g=Ka(d*w),m=Ka(l*w),y=Ka(p**ka-g-ka*m),b=Ka(p*(m-y)-h*g),v=Ka(n*o*d);return new Sa(y,b,v)}subtract(t){return this.add(t.negate())}multiplyUnsafe(t){let e=Va(t);const r=Sa.ZERO;if(e===Ea)return r;if(e===Ta)return this;if(!Ia){let t=r,n=this;for(;e>Ea;)e&Ta&&(t=t.add(n)),n=n.double(),e>>=Ta;return t}let{k1neg:n,k1:s,k2neg:i,k2:o}=Za(e),a=r,c=r,l=this;for(;s>Ea||o>Ea;)s&Ta&&(a=a.add(l)),o&Ta&&(c=c.add(l)),l=l.double(),s>>=Ta,o>>=Ta;return n&&(a=a.negate()),i&&(c=c.negate()),c=new Sa(Ka(c.x*xa.beta),c.y,c.z),a.add(c)}precomputeWindow(t){const e=Ia?128/t+1:256/t+1,r=[];let n=this,s=n;for(let i=0;i>=u,o>a&&(o-=l,t+=Ta),0===o){let t=n[r];e%2&&(t=t.negate()),i=i.add(t)}else{let t=n[r+Math.abs(o)-1];o<0&&(t=t.negate()),s=s.add(t)}}return{p:s,f:i}}multiply(t,e){let r,n,s=Va(t);if(Ia){const{k1neg:t,k1:i,k2neg:o,k2:a}=Za(s);let{p:c,f:l}=this.wNAF(i,e),{p:u,f:h}=this.wNAF(a,e);t&&(c=c.negate()),o&&(u=u.negate()),u=new Sa(Ka(u.x*xa.beta),u.y,u.z),r=c.add(u),n=l.add(h)}else{const{p:t,f:i}=this.wNAF(s,e);r=t,n=i}return Sa.normalizeZ([r,n])[0]}toAffine(t=qa(this.z)){const{x:e,y:r,z:n}=this,s=t,i=Ka(s*s),o=Ka(i*s),a=Ka(e*i),c=Ka(r*o);if(Ka(n*s)!==Ta)throw new Error("invZ was invalid");return new _a(a,c)}}Sa.BASE=new Sa(xa.Gx,xa.Gy,Ta),Sa.ZERO=new Sa(Ea,Ta,Ea);const Ra=new WeakMap;class _a{constructor(t,e){this.x=t,this.y=e}_setWindowSize(t){this._WINDOW_SIZE=t,Ra.delete(this)}static fromCompressedHex(t){const e=32===t.length,r=Wa(e?t:t.subarray(1));if(!ec(r))throw new Error("Point is not on curve");let n=function(t){const{P:e}=xa,r=BigInt(6),n=BigInt(11),s=BigInt(22),i=BigInt(23),o=BigInt(44),a=BigInt(88),c=t*t*t%e,l=c*c*t%e,u=Ja(l,Aa)*l%e,h=Ja(u,Aa)*l%e,f=Ja(h,ka)*c%e,d=Ja(f,n)*f%e,p=Ja(d,s)*d%e,w=Ja(p,o)*p%e,g=Ja(w,a)*w%e,m=Ja(g,o)*p%e,y=Ja(m,Aa)*l%e,b=Ja(y,i)*d%e,v=Ja(b,r)*c%e;return Ja(v,ka)}(Oa(r));const s=(n&Ta)===Ta;if(e)s&&(n=Ka(-n));else{1==(1&t[0])!==s&&(n=Ka(-n))}const i=new _a(r,n);return i.assertValidity(),i}static fromUncompressedHex(t){const e=Wa(t.subarray(1,33)),r=Wa(t.subarray(33,65)),n=new _a(e,r);return n.assertValidity(),n}static fromHex(t){const e=Ha(t),r=e.length,n=e[0];if(32===r||33===r&&(2===n||3===n))return this.fromCompressedHex(e);if(65===r&&4===n)return this.fromUncompressedHex(e);throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${r}`)}static fromPrivateKey(t){return _a.BASE.multiply(nc(t))}static fromSignature(t,e,r){const n=function(t){const{n:e}=xa,r=8*t.length-256;let n=Wa(t);r>0&&(n>>=BigInt(r));n>=e&&(n-=e);return n}(t=Ha(t)),{r:s,s:i}=function(t){if(t instanceof Fa)return t.assertValidity(),t;try{return Fa.fromDER(t)}catch(e){return Fa.fromCompact(t)}}(e);if(0!==r&&1!==r)throw new Error("Cannot recover signature: invalid recovery bit");if(n===Ea)throw new Error("Cannot recover signature: msgHash cannot be 0");const o=1&r?"03":"02",a=_a.fromHex(o+ja(s)),{n:c}=xa,l=qa(s,c),u=Ka(-n*l,c),h=Ka(i*l,c),f=_a.BASE.multiplyAndAddUnsafe(a,u,h);if(!f)throw new Error("Cannot recover signature: point at infinify");return f.assertValidity(),f}toRawBytes(t=!1){return za(this.toHex(t))}toHex(t=!1){const e=ja(this.x);if(t){return`${this.y&Ta?"03":"02"}${e}`}return`04${e}${ja(this.y)}`}toHexX(){return this.toHex(!0).slice(2)}toRawX(){return this.toRawBytes(!0).slice(1)}assertValidity(){const t="Point is not on elliptic curve",{x:e,y:r}=this;if(!ec(e)||!ec(r))throw new Error(t);const n=Ka(r*r);if(Ka(n-Oa(e))!==Ea)throw new Error(t)}equals(t){return this.x===t.x&&this.y===t.y}negate(){return new _a(this.x,Ka(-this.y))}double(){return Sa.fromAffine(this).double().toAffine()}add(t){return Sa.fromAffine(this).add(Sa.fromAffine(t)).toAffine()}subtract(t){return this.add(t.negate())}multiply(t){return Sa.fromAffine(this).multiply(t,this).toAffine()}multiplyAndAddUnsafe(t,e,r){const n=Sa.fromAffine(this).multiply(e),s=Sa.fromAffine(t).multiplyUnsafe(r),i=n.add(s);return i.equals(Sa.ZERO)?void 0:i.toAffine()}}function Ca(t){return Number.parseInt(t[0],16)>=8?"00"+t:t}function Ba(t){if(t.length<2||2!==t[0])throw new Error(`Invalid signature integer tag: ${Ma(t)}`);const e=t[1],r=t.subarray(2,e+2);if(!e||r.length!==e)throw new Error("Invalid signature integer: wrong length");if(0===r[0]&&r[1]<=127)throw new Error("Invalid signature integer: trailing length");return{data:Wa(r),left:t.subarray(e+2)}}_a.BASE=new _a(xa.Gx,xa.Gy),_a.ZERO=new _a(Ea,Ea);class Fa{constructor(t,e){this.r=t,this.s=e,this.assertValidity()}static fromCompact(t){const e=La(t),r="Signature.fromCompact";if("string"!=typeof t&&!e)throw new TypeError(`${r}: Expected string or Uint8Array`);const n=e?Ma(t):t;if(128!==n.length)throw new Error(`${r}: Expected 64-byte hex`);return new Fa($a(n.slice(0,64)),$a(n.slice(64,128)))}static fromDER(t){const e=La(t);if("string"!=typeof t&&!e)throw new TypeError("Signature.fromDER: Expected string or Uint8Array");const{r:r,s:n}=function(t){if(t.length<2||48!=t[0])throw new Error(`Invalid signature tag: ${Ma(t)}`);if(t[1]!==t.length-2)throw new Error("Invalid signature: incorrect length");const{data:e,left:r}=Ba(t.subarray(2)),{data:n,left:s}=Ba(r);if(s.length)throw new Error(`Invalid signature: left bytes after parsing: ${Ma(s)}`);return{r:e,s:n}}(e?t:za(t));return new Fa(r,n)}static fromHex(t){return this.fromDER(t)}assertValidity(){const{r:t,s:e}=this;if(!tc(t))throw new Error("Invalid Signature: r must be 0 < r < n");if(!tc(e))throw new Error("Invalid Signature: s must be 0 < s < n")}hasHighS(){const t=xa.n>>Ta;return this.s>t}normalizeS(){return this.hasHighS()?new Fa(this.r,xa.n-this.s):this}toDERRawBytes(t=!1){return za(this.toDERHex(t))}toDERHex(t=!1){const e=Ca(Ga(this.s));if(t)return e;const r=Ca(Ga(this.r)),n=Ga(r.length/2),s=Ga(e.length/2);return`30${Ga(r.length/2+e.length/2+4)}02${n}${r}02${s}${e}`}toRawBytes(){return this.toDERRawBytes()}toHex(){return this.toDERHex()}toCompactRawBytes(){return za(this.toCompactHex())}toCompactHex(){return ja(this.r)+ja(this.s)}}function Ua(...t){if(!t.every(La))throw new Error("Uint8Array list expected");if(1===t.length)return t[0];const e=t.reduce(((t,e)=>t+e.length),0),r=new Uint8Array(e);for(let e=0,n=0;ee.toString(16).padStart(2,"0")));function Ma(t){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");let e="";for(let r=0;rPa)throw new Error("Expected number < 2^256");return t.toString(16).padStart(64,"0")}function Ga(t){const e=t.toString(16);return 1&e.length?`0${e}`:e}function $a(t){if("string"!=typeof t)throw new TypeError("hexToNumber: expected string, got "+typeof t);return BigInt(`0x${t}`)}function za(t){if("string"!=typeof t)throw new TypeError("hexToBytes: expected string, got "+typeof t);if(t.length%2)throw new Error("hexToBytes: received invalid unpadded hex"+t.length);const e=new Uint8Array(t.length/2);for(let r=0;r0)return BigInt(t);if("bigint"==typeof t&&tc(t))return t;throw new TypeError("Expected valid private scalar: 0 < scalar < curve.n")}function Ka(t,e=xa.P){const r=t%e;return r>=Ea?r:e+r}function Ja(t,e){const{P:r}=xa;let n=t;for(;e-- >Ea;)n*=n,n%=r;return n}function qa(t,e=xa.P){if(t===Ea||e<=Ea)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=Ka(t,e),n=e,s=Ea,i=Ta;for(;r!==Ea;){const t=n%r,e=s-i*(n/r);n=r,r=t,s=i,i=e}if(n!==Ta)throw new Error("invert: does not exist");return Ka(s,e)}const Xa=(t,e)=>(t+e/ka)/e,Ya=ka**BigInt(128);function Za(t){const{n:e}=xa,r=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-Ta*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),s=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=r,o=Xa(i*t,e),a=Xa(-n*t,e);let c=Ka(t-o*r-a*s,e),l=Ka(-o*n-a*i,e);const u=c>Ya,h=l>Ya;if(u&&(c=e-c),h&&(l=e-l),c>Ya||l>Ya)throw new Error("splitScalarEndo: Endomorphism failed, k="+t);return{k1neg:u,k1:c,k2neg:h,k2:l}}class Qa{constructor(){this.v=new Uint8Array(32).fill(1),this.k=new Uint8Array(32).fill(0),this.counter=0}hmac(...t){return hc.hmacSha256(this.k,...t)}hmacSync(...t){if("function"!=typeof hc.hmacSha256Sync)throw new Error("utils.hmacSha256Sync is undefined, you need to set it");const e=hc.hmacSha256Sync(this.k,...t);if(e instanceof Promise)throw new Error("To use sync sign(), ensure utils.hmacSha256 is sync");return e}incr(){if(this.counter>=1e3)throw new Error("Tried 1,000 k values for sign(), all were invalid");this.counter+=1}async reseed(t=new Uint8Array){this.k=await this.hmac(this.v,Uint8Array.from([0]),t),this.v=await this.hmac(this.v),0!==t.length&&(this.k=await this.hmac(this.v,Uint8Array.from([1]),t),this.v=await this.hmac(this.v))}reseedSync(t=new Uint8Array){this.k=this.hmacSync(this.v,Uint8Array.from([0]),t),this.v=this.hmacSync(this.v),0!==t.length&&(this.k=this.hmacSync(this.v,Uint8Array.from([1]),t),this.v=this.hmacSync(this.v))}async generate(){return this.incr(),this.v=await this.hmac(this.v),this.v}generateSync(){return this.incr(),this.v=this.hmacSync(this.v),this.v}}function tc(t){return Ea0)e=BigInt(t);else if("string"==typeof t){if(64!==t.length)throw new Error("Expected 32 bytes of private key");e=$a(t)}else{if(!La(t))throw new TypeError("Expected valid private key");if(32!==t.length)throw new Error("Expected 32 bytes of private key");e=Wa(t)}if(!tc(e))throw new Error("Expected private key: 0 < key < n");return e}function sc(t){const e=La(t),r="string"==typeof t,n=(e||r)&&t.length;return e?33===n||65===n:r?66===n||130===n:t instanceof _a}function ic(t,e,r=!1){if(sc(t))throw new TypeError("getSharedSecret: first arg must be private key");if(!sc(e))throw new TypeError("getSharedSecret: second arg must be public key");const n=(s=e)instanceof _a?(s.assertValidity(),s):_a.fromHex(s);var s;return n.assertValidity(),n.multiply(nc(t)).toRawBytes(r)}function oc(t){return Wa(t.length>32?t.slice(0,32):t)}function ac(t){const e=oc(t),r=Ka(e,xa.n);return cc(r{if((t=Ha(t)).length<40||t.length>1024)throw new Error("Expected 40-1024 bytes of private key as per FIPS 186");const e=Ka(Wa(t),xa.n);if(e===Ea||e===Ta)throw new Error("Invalid private key");return function(t){return za(ja(t))}(e)},randomBytes:(t=32)=>{if(uc.web)return uc.web.getRandomValues(new Uint8Array(t));throw new Error("The environment doesn't have randomBytes function")},randomPrivateKey:()=>hc.hashToPrivateKey(hc.randomBytes(40)),bytesToHex:Ma,mod:Ka,sha256:async t=>{if(uc.web){const e=await uc.web.subtle.digest("SHA-256",t.buffer);return new Uint8Array(e)}throw new Error("The environment doesn't have sha256 function")},hmacSha256:async(t,...e)=>{if(uc.web){const r=await uc.web.subtle.importKey("raw",t,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),n=Ua(...e),s=await uc.web.subtle.sign("HMAC",r,n);return new Uint8Array(s)}throw new Error("The environment doesn't have hmac-sha256 function")},sha256Sync:void 0,hmacSha256Sync:void 0,precompute(t=8,e=_a.BASE){const r=e===_a.BASE?e:new _a(e.x,e.y);return r._setWindowSize(t),r.multiply(Aa),r}};var fc,dc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},pc=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};hc.hmacSha256Sync=function(t,...e){return ie($r("sha256",t,fe(e)))};class wc{constructor(t){fc.set(this,void 0),oa.assertArgument(32===de(t),"invalid private key length","privateKey","[REDACTED]"),dc(this,fc,ue(t),"f")}get privateKey(){return pc(this,fc,"f")}get publicKey(){return wc.computePublicKey(pc(this,fc,"f"))}get compressedPublicKey(){return wc.computePublicKey(pc(this,fc,"f"),!0)}sign(t){oa.assertArgument(32===de(t),"invalid digest length","digest",t);const[e,r]=lc(ie(t),ie(pc(this,fc,"f")),{recovered:!0,canonical:!0}),n=Fa.fromHex(e);return va.from({r:At("0x"+n.r.toString(16),32),s:At("0x"+n.s.toString(16),32),v:r?28:27}).freeze()}computeShardSecret(t){const e=wc.computePublicKey(t);return ue(ic(ie(pc(this,fc,"f")),e))}static computePublicKey(t,e){let r=oa.getBytes(t,"key");if(32===r.length){return ue(function(t,e=!1){return _a.fromPrivateKey(t).toRawBytes(e)}(r,!!e))}if(64===r.length){const t=new Uint8Array(65);t[0]=4,t.set(r,1),r=t}return ue(_a.fromHex(r).toRawBytes(e))}static recoverPublicKey(t,e){const r=va.from(e),n=Fa.fromCompact(ie(fe([r.r,r.s]))).toDERRawBytes(),s=function(t,e,r,n=!1){return _a.fromSignature(t,e,r).toRawBytes(n)}(ie(t),n,r.yParity);return null!=s?ue(s):oa.throwArgumentError("invalid signautre for digest","signature",e)}static _addPoints(t,e,r){const n=_a.fromHex(wc.computePublicKey(t).substring(2)),s=_a.fromHex(wc.computePublicKey(e).substring(2));return"0x"+n.add(s).toHex(!!r)}}function gc(t,e){return{address:ds(t),storageKeys:(e||[]).map(((t,e)=>{if(32!==de(t))throw new Error("");return t.toLowerCase()}))}}function mc(t){if(Array.isArray(t))return t.map(((t,e)=>{if(Array.isArray(t)){if(t.length>2)throw new Error("");return gc(t[0],t[1])}return gc(t.address,t.storageKeys)}));const e=Object.keys(t).map((e=>{const r=t[e].reduce(((t,e)=>(t[e]=!0,t)),{});return gc(e,Object.keys(r).sort())}));return e.sort(((t,e)=>t.address.localeCompare(e.address))),e}fc=new WeakMap;const yc=new N("@ethersproject/transactions@6.0.0-beta.1");var bc,vc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Ec=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Tc=BigInt(0);function kc(t,e){const r=yc.getBigInt(t,"value"),n=Nt(r);return n.length>32&&yc.throwArgumentError("value too large",`tx.${e}`,r),n}function Ac(t){return mc(t).map((t=>[t.address,t.storageKeys]))}function Nc(t,e){const r=[kc(t.nonce||0,"nonce"),kc(t.gasPrice||0,"gasPrice"),kc(t.gasLimit||0,"gasLimit"),null!=t.to?ds(t.to):"0x",kc(t.value||0,"value"),t.data||"0x"];let n=Tc;if(null!=t.chainId)n=yc.getBigInt(t.chainId,"tx.chainId"),e&&null!=e.networkV&&e.legacyChainId!==n&&yc.throwArgumentError("tx.chainId/sig.v mismatch","sig",e);else if(e){const t=e.legacyChainId;null!=t&&(n=t)}if(!e)return n!==Tc&&(r.push(Nt(n)),r.push("0x"),r.push("0x")),bs(r);let s=BigInt(27+e.yParity);return n!==Tc?s=va.getChainIdV(n,e.v):BigInt(e.v)!==s&&yc.throwArgumentError("tx.chainId/sig.v mismatch","sig",e),r.push(Nt(s)),r.push(Nt(e.r)),r.push(Nt(e.s)),bs(r)}function Pc(t,e){const r=[kc(t.chainId||0,"chainId"),kc(t.nonce||0,"nonce"),kc(t.maxPriorityFeePerGas||0,"maxPriorityFeePerGas"),kc(t.maxFeePerGas||0,"maxFeePerGas"),kc(t.gasLimit||0,"gasLimit"),null!=t.to?ds(t.to):"0x",kc(t.value||0,"value"),t.data||"0x",Ac(t.accessList||[])];return e&&(r.push(kc(e.yParity,"yParity")),r.push(Nt(e.r)),r.push(Nt(e.s))),fe(["0x02",bs(r)])}function xc(t,e){const r=[kc(t.chainId||0,"chainId"),kc(t.nonce||0,"nonce"),kc(t.gasPrice||0,"gasPrice"),kc(t.gasLimit||0,"gasLimit"),null!=t.to?ds(t.to):"0x",kc(t.value||0,"value"),t.data||"0x",Ac(t.accessList||[])];return e&&(r.push(kc(e.yParity,"recoveryParam")),r.push(Nt(e.r)),r.push(Nt(e.s))),fe(["0x01",bs(r)])}class Oc{constructor(){bc.set(this,void 0),vc(this,bc,{type:null,to:null,nonce:0,gasLimit:BigInt(0),gasPrice:null,maxPriorityFeePerGas:null,maxFeePerGas:null,data:"0x",value:BigInt(0),chainId:BigInt(0),sig:null,accessList:null},"f")}get type(){return c(Ec(this,bc,"f"),"type")}get typeName(){switch(this.type){case 0:return"legacy";case 1:return"eip-2930";case 2:return"eip-1559"}return null}set type(t){switch(t){case null:l(Ec(this,bc,"f"),"type",null);break;case 0:case"legacy":l(Ec(this,bc,"f"),"type",0);break;case 1:case"berlin":case"eip-2930":l(Ec(this,bc,"f"),"type",1);break;case 2:case"london":case"eip-1559":l(Ec(this,bc,"f"),"type",2);break;default:throw new Error("unsupported transaction type")}}get to(){return c(Ec(this,bc,"f"),"to")}set to(t){l(Ec(this,bc,"f"),"to",null==t?null:ds(t))}get nonce(){return c(Ec(this,bc,"f"),"nonce")}set nonce(t){l(Ec(this,bc,"f"),"nonce",yc.getNumber(t,"value"))}get gasLimit(){return c(Ec(this,bc,"f"),"gasLimit")}set gasLimit(t){l(Ec(this,bc,"f"),"gasLimit",yc.getBigInt(t))}get gasPrice(){return c(Ec(this,bc,"f"),"gasPrice")}set gasPrice(t){l(Ec(this,bc,"f"),"gasPrice",null==t?null:yc.getBigInt(t))}get maxPriorityFeePerGas(){return c(Ec(this,bc,"f"),"maxPriorityFeePerGas")}set maxPriorityFeePerGas(t){l(Ec(this,bc,"f"),"maxPriorityFeePerGas",null==t?null:yc.getBigInt(t))}get maxFeePerGas(){return c(Ec(this,bc,"f"),"maxFeePerGas")}set maxFeePerGas(t){l(Ec(this,bc,"f"),"maxFeePerGas",null==t?null:yc.getBigInt(t))}get data(){return c(Ec(this,bc,"f"),"data")}set data(t){l(Ec(this,bc,"f"),"data",ue(t))}get value(){return c(Ec(this,bc,"f"),"value")}set value(t){l(Ec(this,bc,"f"),"value",yc.getBigInt(t))}get chainId(){return c(Ec(this,bc,"f"),"chainId")}set chainId(t){l(Ec(this,bc,"f"),"chainId",yc.getBigInt(t))}get signature(){return c(Ec(this,bc,"f"),"sig")||null}set signature(t){l(Ec(this,bc,"f"),"sig",null==t?null:va.from(t))}get accessList(){return c(Ec(this,bc,"f"),"accessList")||null}set accessList(t){l(Ec(this,bc,"f"),"accessList",null==t?null:mc(t))}get hash(){if(null==this.signature)throw new Error("cannot hash unsigned transaction; maybe you meant .unsignedHash");return un(this.serialized)}get unsignedHash(){return un(this.unsignedSerialized)}get from(){return null==this.signature?null:""}get fromPublicKey(){return null==this.signature?null:""}isSigned(){return null!=this.signature}get serialized(){if(null==this.signature)throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized");const t=this.inferTypes();if(1!==t.length)throw new Error("cannot determine transaction type; specify type manually");switch(t[0]){case 0:return Nc(this,this.signature);case 1:return xc(this,this.signature);case 2:return Pc(this,this.signature)}throw new Error("unsupported type")}get unsignedSerialized(){if(null!=this.signature)throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized");const t=this.inferTypes();if(1!==t.length)throw new Error("cannot determine transaction type; specify type manually");switch(t[0]){case 0:return Nc(this);case 1:return xc(this);case 2:return Pc(this)}throw new Error("unsupported type")}inferTypes(){const t=null!=this.gasPrice,e=null!=this.maxFeePerGas||null!=this.maxPriorityFeePerGas,r=null!=this.accessList;if(this.maxFeePerGas&&this.maxPriorityFeePerGas&&this.maxFeePerGas(Object.freeze(t.storageKeys),Object.freeze(t)))))),Object.freeze(Ec(this,bc,"f")),this}isFrozen(){return Object.isFrozen(Ec(this,bc,"f"))}static from(t){if("string"==typeof t){const e=ie(t);if(e[0]>=127)return Oc.from({});switch(e[0]){case 1:case 2:return Oc.from(function(t){throw new Error("@TODO")}(e.slice(1)))}throw new Error("unsupported transaction type")}const e=new Oc;return null!=t.type&&(e.type=t.type),null!=t.to&&(e.to=t.to),null!=t.nonce&&(e.nonce=t.nonce),null!=t.gasLimit&&(e.gasLimit=t.gasLimit),null!=t.gasPrice&&(e.gasPrice=t.gasPrice),null!=t.maxPriorityFeePerGas&&(e.maxPriorityFeePerGas=t.maxPriorityFeePerGas),null!=t.maxFeePerGas&&(e.maxFeePerGas=t.maxFeePerGas),null!=t.data&&(e.data=t.data),null!=t.value&&(e.value=t.value),null!=t.chainId&&(e.chainId=t.chainId),null!=t.signature&&(e.signature=va.from(t.signature)),null!=t.accessList&&(e.accessList=t.accessList),e}}bc=new WeakMap;var Ic,Sc,Rc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},_c=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function Cc(t){return null==t?null:t}function Bc(t){return null==t?null:t.toString()}class Fc{constructor(t,e,r){n(this,{gasPrice:Cc(t),maxFeePerGas:Cc(e),maxPriorityFeePerGas:Cc(r)})}toJSON(){const{gasPrice:t,maxFeePerGas:e,maxPriorityFeePerGas:r}=this;return{_type:"FeeData",gasPrice:Bc(t),maxFeePerGas:Bc(e),maxPriorityFeePerGas:Bc(r)}}}class Uc{constructor(t,e){Ic.set(this,void 0),null==e&&(e=zc),Rc(this,Ic,Object.freeze(t.transactions.map((t=>{if("string"!=typeof t&&t.provider!==e)throw new Error("provider mismatch");return t}))),"f"),n(this,{provider:e,hash:Cc(t.hash),number:t.number,timestamp:t.timestamp,parentHash:t.parentHash,nonce:t.nonce,difficulty:t.difficulty,gasLimit:t.gasLimit,gasUsed:t.gasUsed,miner:t.miner,extraData:t.extraData,baseFeePerGas:Cc(t.baseFeePerGas)})}get transactions(){return _c(this,Ic,"f")}toJSON(){const{baseFeePerGas:t,difficulty:e,extraData:r,gasLimit:n,gasUsed:s,hash:i,miner:o,nonce:a,number:c,parentHash:l,timestamp:u,transactions:h}=this;return{_type:"Block",baseFeePerGas:Bc(t),difficulty:Bc(e),extraData:r,gasLimit:Bc(n),gasUsed:Bc(s),hash:i,miner:o,nonce:a,number:c,parentHash:l,timestamp:u,transactions:h}}[(Ic=new WeakMap,Symbol.iterator)](){let t=0;return{next:()=>t{if(e!==t.provider)throw new Error("provider mismatch");return t}))),"f"),n(this,{provider:e,to:t.to,from:t.from,contractAddress:t.contractAddress,hash:t.hash,index:t.index,blockHash:t.blockHash,blockNumber:t.blockNumber,logsBloom:t.logsBloom,gasUsed:t.gasUsed,cumulativeGasUsed:t.cumulativeGasUsed,gasPrice:t.effectiveGasPrice||t.gasPrice,byzantium:t.byzantium,status:t.status,root:t.root})}get logs(){return _c(this,Sc,"f")}toJSON(){const{to:t,from:e,contractAddress:r,hash:n,index:s,blockHash:i,blockNumber:o,logsBloom:a,logs:c,byzantium:l,status:u,root:h}=this;return{_type:"TransactionReceipt",blockHash:i,blockNumber:o,byzantium:l,contractAddress:r,cumulativeGasUsed:Bc(this.cumulativeGasUsed),from:e,gasPrice:Bc(this.gasPrice),gasUsed:Bc(this.gasUsed),hash:n,index:s,logs:c,logsBloom:a,root:h,status:u,to:t}}get length(){return this.logs.length}[(Sc=new WeakMap,Symbol.iterator)](){let t=0;return{next:()=>tthis.hash(t))),new Uc(r,e)}blockWithTransactions(t,e){throw new Error}transactionRequest(t,e){return Kc(this,Wc,"f").transactionRequest(t)}transactionResponse(t,e){null==(t=Object.assign({},t)).data&&null!=t.input&&(t.data=t.input),null==t.gasLimit&&t.gas&&(t.gasLimit=t.gas),t=Kc(this,Wc,"f").transactionResponse(t);const r=va.fromTransaction(t.r,t.s,t.v);return t.signature=r,null==t.chainId&&(t.chainId=r.legacyChainId),new Mc(t,e)}log(t,e){const r=this.object({address:this.address,blockHash:this.hash,blockNumber:this.number,data:this.data,index:this.number,removed:this.boolean,topics:this.topics,transactionHash:this.hash,transactionIndex:this.number},{index:["logIndex"]})(t);return new Lc(r,e)}receipt(t,e){const r=this.object({blockHash:this.hash,blockNumber:this.number,contractAddress:this.allowNull(this.address),cumulativeGasUsed:this.bigNumber,from:this.address,gasUsed:this.bigNumber,logs:this.arrayOf((t=>this.log(t,e))),logsBloom:this.data,root:this.allowNull(this.data),status:this.allowNull(this.number),to:this.address,gasPrice:this.allowNull(this.bigNumber),hash:this.hash,index:this.number,type:this.allowNull(this.number,0)},{hash:["transactionHash"],gasPrice:["effectiveGasPrice"],index:["transactionIndex"]})(t);if(null!=r.root)if(r.root.length<=4){const t=parseInt(r.root);if(0!==t&&1!==t)return Go.throwError("invalid alt-root-status","BAD_DATA",{value:r.root});if(null!=r.status&&r.status!==t)return Go.throwError("alt-root-status/status mismatch","BAD_DATA",{value:{root:r.root,status:r.status}});r.status=t,delete r.root}else if(!te(r.root,32))return Go.throwError("invalid receipt root hash","BAD_DATA",{value:r.root});return new Dc(r,e)}topics(t){return Kc(this,Wc,"f").topics(t)}filter(t){return Kc(this,Wc,"f").filter(t)}filterLog(t){return console.log("ME",t),null}transaction(t){throw new Error}accessList(t){return mc(t)}allowFalsish(t,e){return r=>r?t.call(this,r):e}allowNull(t,e){return r=>null==r?e:t.call(this,r)}arrayOf(t){return e=>{if(!Array.isArray(e))throw new Error("not an array");return e.map((e=>t.call(this,e)))}}bigNumber(t){return Go.getBigInt(t,"value")}uint256(t){const e=this.bigNumber(t);return(e<0||e>Jc)&&Go.throwArgumentError("invalid uint256","value",t),e}boolean(t){switch(t){case!0:case"true":return!0;case!1:case"false":return!1}return Go.throwArgumentError(`invalid boolean; ${JSON.stringify(t)}`,"value",t)}_hexstring(t){return null==t&&(t=!1),function(e){if(te(e,t))return e.toLowerCase();throw new Error("bad hexstring")}}data(t){return null==de(t)&&Go.throwArgumentError("","value",t),t}hash(t){return 32!==de(t)&&Go.throwArgumentError("","value",t),Kc(this,Wc,"f").data(t)}number(t){return Go.getNumber(t)}object(t,e){return r=>{const n={};for(const s in t){let i=s;if(e&&s in e&&!(i in r))for(const t of e[s])if(t in r){i=t;break}try{const e=t[s].call(this,r[i]);void 0!==e&&(n[s]=e)}catch(t){const e=t instanceof Error?t.message:"not-an-error";Go.throwError(`invalid value for value.${s} (${e})`,"BAD_DATA",{value:r})}}return n}}storageSlot(t){return At(Go.getBigInt(t),32)}}Wc=new WeakMap,Hc=new WeakMap;class Yc{constructor(t){n(this,{name:t})}clone(){return new Yc(this.name)}validate(t){return this}}class Zc extends Yc{constructor(t=0,e){super(`org.ethers.plugins.gas-cost#${t||0}`);const r={effectiveBlock:t};function s(t,n){let s=(e||{})[t];null==s&&(s=n),"number"!=typeof s&&Go.throwArgumentError(`invalud value for ${t}`,"costs",e),r[t]=s}s("txBase",21e3),s("txCreate",32e3),s("txDataZero",4),s("txDataNonzero",16),s("txAccessListStorageKey",1900),s("txAccessListAddress",2400),n(this,r)}clone(){return new Zc(this.effectiveBlock,this)}}class Qc extends Yc{constructor(t,e){super("org.ethers.plugins.ens"),n(this,{address:t||"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",targetNetwork:null==e?1:e})}clone(){return new Qc(this.address,this.targetNetwork)}validate(t){return t.formatter.address(this.address),this}}class tl extends Yc{constructor(t){super("org.ethers.plugins.max-priority-fee"),n(this,{priorityFee:Go.getBigInt(t)})}async getPriorityFee(t){return this.priorityFee}clone(){return new tl(this.priorityFee)}}var el,rl=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},nl=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const sl=new Map,il=new Xc;class ol{constructor(t,e,r){el.set(this,void 0);const n=Go.getBigInt(e);null==r&&(r=il);const s=new Map;rl(this,el,{name:t,chainId:n,formatter:r,plugins:s},"f")}toJSON(){return{name:this.name,chainId:this.chainId}}get name(){return c(nl(this,el,"f"),"name")}set name(t){l(nl(this,el,"f"),"name",t)}get chainId(){return c(nl(this,el,"f"),"chainId")}set chainId(t){l(nl(this,el,"f"),"chainId",Go.getBigInt(t,"chainId"))}get formatter(){return c(nl(this,el,"f"),"formatter")}set formatter(t){l(nl(this,el,"f"),"formatter",t)}get plugins(){return Array.from(nl(this,el,"f").plugins.values())}attachPlugin(t){if(this.isFrozen())throw new Error("frozen");if(nl(this,el,"f").plugins.get(t.name))throw new Error(`cannot replace existing plugin: ${t.name} `);return nl(this,el,"f").plugins.set(t.name,t.validate(this)),this}getPlugin(t){return nl(this,el,"f").plugins.get(t)||null}getPlugins(t){return this.plugins.filter((e=>e.name.split("#")[0]===t))}clone(){const t=new ol(this.name,this.chainId,this.formatter);return this.plugins.forEach((e=>{t.attachPlugin(e.clone())})),t}freeze(){return Object.freeze(nl(this,el,"f")),this}isFrozen(){return Object.isFrozen(nl(this,el,"f"))}computeIntrinsicGas(t){const e=this.getPlugin("org.ethers.gas-cost")||new Zc;let r=e.txBase;if(null==t.to&&(r+=e.txCreate),t.data)for(let n=2;n{this._poll(t,Al(this,dl,"f"))}),"f")}async _poll(t,e){throw new Error("sub-classes must override this")}start(){Al(this,pl,"f").call(this,-2),Al(this,dl,"f").on("block",Al(this,pl,"f"))}stop(){Al(this,dl,"f").off("block",Al(this,pl,"f"))}pause(t){this.stop()}resume(){this.start()}}dl=new WeakMap,pl=new WeakMap;class Ol extends xl{constructor(t,e){super(t),wl.set(this,void 0),kl(this,wl,Nl(e),"f")}async _poll(t,e){throw console.log(Al(this,wl,"f")),new Error("@TODO")}}wl=new WeakMap;class Il extends xl{constructor(t,e){super(t),gl.set(this,void 0),kl(this,gl,e,"f")}async _poll(t,e){const r=await e.getTransactionReceipt(Al(this,gl,"f"));r&&e.emit(Al(this,gl,"f"),r)}}gl=new WeakMap;class Sl{constructor(t,e){ml.add(this),yl.set(this,void 0),bl.set(this,void 0),vl.set(this,void 0),El.set(this,void 0),kl(this,yl,t,"f"),kl(this,bl,Nl(e),"f"),kl(this,vl,Al(this,ml,"m",Tl).bind(this),"f"),kl(this,El,-2,"f")}start(){-2===Al(this,El,"f")&&Al(this,yl,"f").getBlockNumber().then((t=>{kl(this,El,t,"f")})),Al(this,yl,"f").on("block",Al(this,vl,"f"))}stop(){Al(this,yl,"f").off("block",Al(this,vl,"f"))}pause(t){this.stop(),t&&kl(this,El,-2,"f")}resume(){this.start()}}yl=new WeakMap,bl=new WeakMap,vl=new WeakMap,El=new WeakMap,ml=new WeakSet,Tl=async function(t){if(-2===Al(this,El,"f"))return;const e=Nl(Al(this,bl,"f"));e.fromBlock=Al(this,El,"f")+1,e.toBlock=t,kl(this,El,t,"f");const r=await Al(this,yl,"f").getLogs(e);for(const t of r)Al(this,yl,"f").emit(Al(this,bl,"f"),t)};var Rl,_l,Cl,Bl,Fl,Ul,Ll,Dl,Ml,jl,Gl,$l,zl,Wl,Hl,Vl=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Kl=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Jl=BigInt(2);function ql(t,e){return t+":"+JSON.stringify(e,((t,e)=>{if("bigint"==typeof e)return`bigint:${e.toString()}`;if("string"==typeof e)return e.toLowerCase();if("object"==typeof e&&!Array.isArray(e)){const t=Object.keys(e);return t.sort(),t.reduce(((t,r)=>(t[r]=e[r],t)),{})}return e}))}class Xl{constructor(t){n(this,{name:t})}start(){}stop(){}pause(t){}resume(){}}function Yl(t){return(t=Array.from(new Set(t).values())).sort(),t}async function Zl(t,e){if(null==t)throw new Error("invalid event");if(Array.isArray(t)&&(t={topics:t}),"string"==typeof t)switch(t){case"block":case"pending":case"debug":case"network":return{type:t,tag:t}}if(te(t,32)){const e=t.toLowerCase();return{type:"transaction",tag:ql("tx",{hash:e}),hash:e}}if(t.orphan){const e=t;return{type:"orphan",tag:ql("orphan",e),filter:(r=e,JSON.parse(JSON.stringify(r)))}}var r;if(t.address||t.topics){const r=t,n={topics:(r.topics||[]).map((t=>null==t?null:Array.isArray(t)?Yl(t.map((t=>t.toLowerCase()))):t.toLowerCase()))};if(r.address){const t=[],s=[],i=r=>{te(r)?t.push(r):s.push((async()=>{t.push(await Is(r,e))})())};Array.isArray(r.address)?r.address.forEach(i):i(r.address),s.length&&await Promise.all(s),n.address=Yl(t.map((t=>t.toLowerCase())))}return{filter:n,tag:ql("event",n),type:"event"}}return Go.throwArgumentError("unknown ProviderEvent","event",t)}function Ql(){return(new Date).getTime()}class tu{constructor(t){if(Rl.add(this),_l.set(this,void 0),Cl.set(this,void 0),Bl.set(this,void 0),Fl.set(this,void 0),Ul.set(this,void 0),Ll.set(this,void 0),Dl.set(this,void 0),Ml.set(this,void 0),jl.set(this,void 0),"any"===t)Vl(this,Ul,!0,"f"),Vl(this,Fl,null,"f");else if(t){const e=ol.from(t);Vl(this,Ul,!1,"f"),Vl(this,Fl,Promise.resolve(e),"f"),setTimeout((()=>{this.emit("network",e,null)}),0)}else Vl(this,Ul,!1,"f"),Vl(this,Fl,null,"f");Vl(this,Ll,new Map,"f"),Vl(this,_l,new Map,"f"),Vl(this,Cl,new Map,"f"),Vl(this,Bl,null,"f"),Vl(this,Dl,0,"f"),Vl(this,Ml,new Map,"f"),Vl(this,jl,!1,"f")}get plugins(){return Array.from(Kl(this,Cl,"f").values())}attachPlugin(t){if(Kl(this,Cl,"f").get(t.name))throw new Error(`cannot replace existing plugin: ${t.name} `);return Kl(this,Cl,"f").set(t.name,t.validate(this)),this}getPlugin(t){return Kl(this,Cl,"f").get(t)||null}set disableCcipRead(t){Vl(this,jl,!!t,"f")}get disableCcipRead(){return Kl(this,jl,"f")}async ccipReadFetch(t,e,r){if(this.disableCcipRead||0===r.length||null==t.to)return null;const n=t.to.toLowerCase(),s=e.toLowerCase(),i=[];for(let e=0;e=400&&u.statusCode<500)return Go.throwError(`response not found during CCIP fetch: ${l}`,"OFFCHAIN_FAULT",{reason:"404_MISSING_RESOURCE",transaction:t,info:{url:o,errorMessage:l}});i.push(l)}return Go.throwError(`error encountered during CCIP fetch: ${i.map((t=>JSON.stringify(t))).join(", ")}`,"OFFCHAIN_FAULT",{reason:"500_SERVER_ERROR",transaction:t,info:{urls:r,errorMessages:i}})}_wrapTransaction(t,e,r){return t}_detectNetwork(){return Go.throwError("sub-classes must implement this","UNSUPPORTED_OPERATION",{operation:"_detectNetwork"})}async _perform(t){return Go.throwError(`unsupported method: ${t.method}`,"UNSUPPORTED_OPERATION",{operation:t.method,info:t})}async getBlockNumber(){return Go.getNumber(await Kl(this,Rl,"m",Gl).call(this,{method:"getBlockNumber"}),"%response")}async _getAddress(t){return"string"==typeof t?t:await t.getAddress()}async _getBlockTag(t){const e=await this.getNetwork();if("number"==typeof t&&Number.isSafeInteger(t)&&t<0){let r=await this.getBlockNumber();return r+=t,r<0&&(r=0),e.formatter.blockTag(r)}return e.formatter.blockTag(t)}async getNetwork(){if(null==Kl(this,Fl,"f")){const t=this._detectNetwork().then((t=>(this.emit("network",t,null),t)),(e=>{throw Kl(this,Fl,"f")===t&&Vl(this,Fl,null,"f"),e}));return Vl(this,Fl,t,"f"),await t}const t=Kl(this,Fl,"f"),[e,r]=await Promise.all([t,this._detectNetwork()]);return e.chainId!==r.chainId&&(Kl(this,Ul,"f")?(this.emit("network",r,e),Kl(this,Fl,"f")===t&&Vl(this,Fl,Promise.resolve(r),"f")):Go.throwError(`network changed: ${e.chainId} => ${r.chainId} `,"NETWORK_ERROR",{event:"changed"})),e.clone().freeze()}async getFeeData(){const{block:t,gasPrice:r}=await e({block:this.getBlock("latest"),gasPrice:(async()=>{try{const t=await Kl(this,Rl,"m",Gl).call(this,{method:"getGasPrice"});return Go.getBigInt(t,"%response")}catch(t){}return null})()});let n=null,s=null;if(t&&t.baseFeePerGas){s=BigInt("1500000000");const e=(await this.getNetwork()).getPlugin("org.ethers.plugins.max-priority-fee");e&&(s=await e.getPriorityFee(this)),n=t.baseFeePerGas*Jl+s}return new Fc(r,n,s)}async _getTransaction(t){const r=await this.getNetwork(),n=Object.assign({},t,await e({to:t.to?Is(t.to,this):void 0,from:t.from?Is(t.from,this):void 0}));return r.formatter.transactionRequest(n)}async estimateGas(t){const e=await this._getTransaction(t);return Go.getBigInt(await Kl(this,Rl,"m",Gl).call(this,{method:"estimateGas",transaction:e}),"%response")}async call(t){const{tx:r,blockTag:n}=await e({tx:this._getTransaction(t),blockTag:this._getBlockTag(t.blockTag)});return Kl(this,Rl,"m",$l).call(this,r,n,t.enableCcipRead?0:-1)}async getBalanceOf(t,r){const{address:n,blockTag:s}=await e({address:Is(t),blockTag:this._getBlockTag(r)});return Go.getBigInt(await Kl(this,Rl,"m",Gl).call(this,{method:"getBalance",address:n,blockTag:s}),"%response")}async getTransactionCountOf(t,r){const{address:n,blockTag:s}=await e({address:Is(t),blockTag:this._getBlockTag(r)});return Go.getNumber(await Kl(this,Rl,"m",Gl).call(this,{method:"getTransactionCount",address:n,blockTag:s}),"%response")}async getCode(t,r){const{address:n,blockTag:s}=await e({address:Is(t),blockTag:this._getBlockTag(r)});return ue(await Kl(this,Rl,"m",Gl).call(this,{method:"getCode",address:n,blockTag:s}))}async getStorageAt(t,r,n){const s=Go.getBigInt(r),{address:i,blockTag:o}=await e({address:Is(t),blockTag:this._getBlockTag(n)});return ue(await Kl(this,Rl,"m",Gl).call(this,{method:"getStorageAt",address:i,position:s,blockTag:o}))}async broadcastTransaction(t){throw new Error}async getBlock(t){const e=(await this.getNetwork()).formatter,r=await Kl(this,Rl,"m",zl).call(this,t,!1);return null==r?null:e.block(r,this)}async getBlockWithTransactions(t){const e=(await this.getNetwork()).formatter,r=Kl(this,Rl,"m",zl).call(this,t,!0);return null==r?null:e.blockWithTransactions(r,this)}async getTransaction(t){const e=(await this.getNetwork()).formatter,r=await Kl(this,Rl,"m",Gl).call(this,{method:"getTransaction",hash:t});return e.transactionResponse(r,this)}async getTransactionReceipt(t){const e=(await this.getNetwork()).formatter,r=await Kl(this,Rl,"m",Gl).call(this,{method:"getTransactionReceipt",hash:t});if(null==r)return null;if(null==r.gasPrice&&null==r.effectiveGasPrice){const e=await Kl(this,Rl,"m",Gl).call(this,{method:"getTransaction",hash:t});r.effectiveGasPrice=e.gasPrice}return e.receipt(r,this)}async _getFilter(t){const r={};t.address&&(Array.isArray(t.address)?r.address=Promise.all(t.address.map((t=>Is(t,this)))):r.address=Is(t.address,this));const n=e=>{null!=t[e]&&(r[e]=this._getBlockTag(t[e]))};n("fromBlock"),n("toBlock");const s=await e(r);if(Array.isArray(s.address)&&s.address.sort(),t.blockHash){if(t.fromBlock||t.toBlock)throw new Error("invalid filter");s.blockHash=t.blockHash}return s}async getLogs(t){const{network:r,filter:n}=await e({network:this.getNetwork(),filter:this._getFilter(t)});return(await Kl(this,Rl,"m",Gl).call(this,{method:"getLogs",filter:n})).map((t=>r.formatter.log(t,this)))}_getProvider(t){return Go.throwError("provider cannot connect to target network","UNSUPPORTED_OPERATION",{operation:"_getProvider()"})}async getResolver(t){return await ia.fromName(this,t)}async getAvatar(t){const e=await this.getResolver(t);return e?await e.getAvatar():null}async resolveName(t){if("string"!=typeof t){const e=await t.getAddress();return null==e?Go.throwArgumentError("Addressable returned no address","name",t):e}{const e=await this.getResolver(t);if(e)return await e.getAddress()}return null}async lookupAddress(t){throw new Error}async waitForTransaction(t,e=1,r){return 0===e?this.getTransactionReceipt(t):new Promise((async(n,s)=>{let i=null;const o=async r=>{try{const s=await this.getTransactionReceipt(t);if(null!=s&&r-s.blockNumber+1>=e)return n(s),this.off("block",o),void(i&&(clearTimeout(i),i=null))}catch(t){console.log("EEE",t)}this.once("block",o)};null!=r&&(i=setTimeout((()=>{null!=i&&(i=null,this.off("block",o),s(Go.makeError("timeout","TIMEOUT",{})))}),r)),o(await this.getBlockNumber())}))}async waitForBlock(t){throw new Error}_clearTimeout(t){const e=Kl(this,Ml,"f").get(t);e&&(e.timer&&clearTimeout(e.timer),Kl(this,Ml,"f").delete(t))}_setTimeout(t,e=0){var r,n;const s=(Vl(this,Dl,(n=Kl(this,Dl,"f"),r=n++,n),"f"),r),i=()=>{Kl(this,Ml,"f").delete(s),t()};if(this.paused)Kl(this,Ml,"f").set(s,{timer:null,func:i,time:e});else{const t=setTimeout(i,e);Kl(this,Ml,"f").set(s,{timer:t,func:i,time:Ql()})}return s}_forEachSubscriber(t){for(const e of Kl(this,_l,"f").values())t(e.subscriber)}_getSubscriber(t){switch(t.type){case"debug":case"network":return new Xl(t.type);case"block":return new Pl(this);case"event":return new Sl(this,t.filter);case"transaction":return new Il(this,t.hash);case"orphan":return new Ol(this,t.filter)}throw new Error(`unsupported event: ${t.type}`)}_recoverSubscriber(t,e){for(const r of Kl(this,_l,"f").values())if(r.subscriber===t){r.started&&r.subscriber.stop(),r.subscriber=e,r.started&&e.start(),null!=Kl(this,Bl,"f")&&e.pause(Kl(this,Bl,"f"));break}}async on(t,e){const r=await Kl(this,Rl,"m",Hl).call(this,t);return r.listeners.push({listener:e,once:!1}),r.started||(r.subscriber.start(),r.started=!0,null!=Kl(this,Bl,"f")&&r.subscriber.pause(Kl(this,Bl,"f"))),this}async once(t,e){const r=await Kl(this,Rl,"m",Hl).call(this,t);return r.listeners.push({listener:e,once:!0}),r.started||(r.subscriber.start(),r.started=!0,null!=Kl(this,Bl,"f")&&r.subscriber.pause(Kl(this,Bl,"f"))),this}async emit(t,...e){const r=await Kl(this,Rl,"m",Wl).call(this,t,e);if(!r)return!1;const n=r.listeners.length;return r.listeners=r.listeners.filter((({listener:r,once:n})=>{const s=new a(this,n?null:r,t);return setTimeout((()=>{r.call(this,...e,s)}),0),!n})),n>0}async listenerCount(t){if(t){const e=await Kl(this,Rl,"m",Wl).call(this,t);return e?e.listeners.length:0}let e=0;for(const{listeners:t}of Kl(this,_l,"f").values())e+=t.length;return e}async listeners(t){if(t){const e=await Kl(this,Rl,"m",Wl).call(this,t);return e?e.listeners.map((({listener:t})=>t)):[]}let e=[];for(const{listeners:t}of Kl(this,_l,"f").values())e=e.concat(t.map((({listener:t})=>t)));return e}async off(t,e){const r=await Kl(this,Rl,"m",Wl).call(this,t);if(!r)return this;if(e){const t=r.listeners.map((({listener:t})=>t)).indexOf(e);t>=0&&r.listeners.splice(t,1)}return e&&0!==r.listeners.length||(r.started&&r.subscriber.stop(),Kl(this,_l,"f").delete(r.tag)),this}async removeAllListeners(t){if(t){const{tag:e,started:r,subscriber:n}=await Kl(this,Rl,"m",Hl).call(this,t);r&&n.stop(),Kl(this,_l,"f").delete(e)}else for(const[t,{started:e,subscriber:r}]of Kl(this,_l,"f"))e&&r.stop(),Kl(this,_l,"f").delete(t);return this}async addListener(t,e){return await this.on(t,e)}async removeListener(t,e){return this.off(t,e)}async shutdown(){this.removeAllListeners();for(const t of Kl(this,Ml,"f").keys())this._clearTimeout(t)}get paused(){return null!=Kl(this,Bl,"f")}pause(t){if(null!=Kl(this,Bl,"f")){if(Kl(this,Bl,"f")==!!t)return;return Go.throwError("cannot change pause type; resume first","UNSUPPORTED_OPERATION",{operation:"pause"})}this._forEachSubscriber((e=>e.pause(t))),Vl(this,Bl,!!t,"f");for(const t of Kl(this,Ml,"f").values())t.timer&&clearTimeout(t.timer),t.time=Ql()-t.time}resume(){if(null!=Kl(this,Bl,"f")){this._forEachSubscriber((t=>t.resume())),Vl(this,Bl,null,"f");for(const t of Kl(this,Ml,"f").values()){let e=t.time;e<0&&(e=0),t.time=Ql(),setTimeout(t.func,e)}}}}function eu(t,e){try{const r=ru(t,e);if(r)return li(r)}catch(t){}return null}function ru(t,e){if("0x"===t)return null;try{const r=Go.getNumber(pe(t,e,e+32)),n=Go.getNumber(pe(t,r,r+32));return pe(t,r+32,r+32+n)}catch(t){}return null}function nu(t){const e=Nt(t);if(e.length>32)throw new Error("internal; should not happen");const r=new Uint8Array(32);return r.set(e,32-e.length),r}function su(t){if(t.length%32==0)return t;const e=new Uint8Array(32*Math.ceil(t.length/32));return e.set(t),e}_l=new WeakMap,Cl=new WeakMap,Bl=new WeakMap,Fl=new WeakMap,Ul=new WeakMap,Ll=new WeakMap,Dl=new WeakMap,Ml=new WeakMap,jl=new WeakMap,Rl=new WeakSet,Gl=async function(t){const e=ql(t.method,t);let r=Kl(this,Ll,"f").get(e);return r||(r=this._perform(t),Kl(this,Ll,"f").set(e,r),setTimeout((()=>{Kl(this,Ll,"f").get(e)===r&&Kl(this,Ll,"f").delete(e)}),250)),await r},$l=async function t(e,r,n){n>=10&&Go.throwError("CCIP read exceeded maximum redirections","OFFCHAIN_FAULT",{reason:"TOO_MANY_REDIRECTS",transaction:Object.assign({},e,{blockTag:r,enableCcipRead:!0})});const s=e;try{return ue(await this._perform({method:"call",transaction:s,blockTag:r}))}catch(e){if(!this.disableCcipRead&&h(e)&&n>=0&&"latest"===r&&null!=s.to&&"0x556f1830"===pe(e.data,0,4)){const i=e.data,o=await Is(s.to,this);let a;try{a=function(t){const e={sender:"",urls:[],calldata:"",selector:"",extraData:"",errorArgs:[]};if(de(t)<160)throw new Error("insufficient OffchainLookup data");const r=pe(t,0,32);if(pe(r,0,12)!==pe(au,0,12))throw new Error("corrupt OffchainLookup sender");e.sender=pe(r,12);try{const r=[],n=Go.getNumber(pe(t,32,64)),s=Go.getNumber(pe(t,n,n+32)),i=pe(t,n+32);for(let t=0;te[t])),e}(pe(e.data,4))}catch(t){return Go.throwError(t.message,"OFFCHAIN_FAULT",{reason:"BAD_DATA",transaction:s,info:{data:i}})}if(a.sender.toLowerCase()!==o.toLowerCase())return Go.throwError("CCIP Read sender mismatch","CALL_EXCEPTION",{data:i,transaction:s,errorSignature:"OffchainLookup(address,string[],bytes,bytes4,bytes)",errorName:"OffchainLookup",errorArgs:a.errorArgs});const c=await this.ccipReadFetch(s,a.calldata,a.urls);return null==c?Go.throwError("CCIP Read failed to fetch data","OFFCHAIN_FAULT",{reason:"FETCH_FAILED",transaction:s,info:{data:e.data,errorArgs:a.errorArgs}}):Kl(this,Rl,"m",t).call(this,{to:o,data:fe([a.selector,ou([c,a.extraData])])},r,n+1)}throw e}},zl=async function(t,e){const r=(await this.getNetwork()).formatter;return te(t,32)?await Kl(this,Rl,"m",Gl).call(this,{method:"getBlock",blockHash:t,includeTransactions:e}):await Kl(this,Rl,"m",Gl).call(this,{method:"getBlock",blockTag:r.blockTag(t),includeTransactions:e})},Wl=async function(t,e){let r=await Zl(t,this);return"event"===r.type&&e&&e.length>0&&!0===e[0].removed&&(r=await Zl({orphan:"drop-log",log:e[0]},this)),Kl(this,_l,"f").get(r.tag)||null},Hl=async function(t){const e=await Zl(t,this),r=e.tag;let n=Kl(this,_l,"f").get(r);if(!n){n={subscriber:this._getSubscriber(e),tag:r,addressableMap:new WeakMap,nameMap:new Map,started:!1,listeners:[]},Kl(this,_l,"f").set(r,n)}return n};const iu=new Uint8Array([]);function ou(t){const e=[];let r=0;for(let n=0;nnull==t?Go.throwArgumentError("transaction to ENS name not configured","tx.to",n.to):t))),null!=n.from){const t=n.from;n.from=Promise.all([this.getAddress(),this.resolveName(t)]).then((([t,e])=>e&&t.toLowerCase()===e.toLowerCase()?t:Go.throwArgumentError("transaction from mismatch","tx.from",e)))}return null==n.nonce&&(n.nonce=this.getTransactionCount()),n=e(n),null==n.gasLimit&&(n.gasLimit=r.estimateGas(n)),n=e(n),await e(n)}async resolveName(t){const e=pu(this,cu,"m",lu).call(this,"resolveName");return await e.resolveName(t)}async sendTransaction(t){const e=pu(this,cu,"m",lu).call(this,"sendTransaction"),r=Oc.from(await this.populateTransaction(t));return await e.broadcastTransaction(await this.signTransaction(r))}}cu=new WeakSet,lu=function(t){return this.provider?this.provider:Go.throwError("missing provider","UNSUPPORTED_OPERATION",{operation:t})},uu=async function(t){const e=[];if(null!=(t=Object.assign({},t)).from){const r=t.from;e.push(Promise.all([this.getAddress(),this.resolveName(r)]).then((([e,r])=>{r&&e.toLowerCase()===r.toLowerCase()||Go.throwArgumentError("transaction from mismatch","tx.from",r),t.from=e})))}return await Promise.all(e),t};class mu extends gu{constructor(t,e){super(e),hu.add(this),n(this,{address:t})}async getAddress(){return this.address}connect(t){return new mu(this.address,t)}async signTransaction(t){pu(this,hu,"m",fu).call(this,"transactions","signTransaction")}async signMessage(t){pu(this,hu,"m",fu).call(this,"messages","signMessage")}async signTypedData(t,e,r){pu(this,hu,"m",fu).call(this,"typed-data","signTypedData")}}hu=new WeakSet,fu=function(t,e){return Go.throwError(`VoidSigner cannot sign ${t}`,"UNSUPPORTED_OPERATION",{operation:e})};class yu extends gu{constructor(t){super(t.provider),du.set(this,void 0),wu(this,du,t,"f")}async getAddress(){return await pu(this,du,"f").getAddress()}connect(t){return new yu(pu(this,du,"f").connect(t))}async signTransaction(t){return await pu(this,du,"f").signTransaction(t)}async sendTransaction(t){return await pu(this,du,"f").sendTransaction(t)}async signMessage(t){return await pu(this,du,"f").signMessage(t)}async signTypedData(t,e,r){return await pu(this,du,"f").signTypedData(t,e,r)}}du=new WeakMap;const bu=new Set;function vu(t){bu.has(t)||(bu.add(t),console.log("========= NOTICE ========="),console.log(`Request-Rate Exceeded for ${t} (this message will not be repeated)`),console.log(""),console.log("The default API keys for each service are provided as a highly-throttled,"),console.log("community resource for low-traffic projects and early prototyping."),console.log(""),console.log("While your application will continue to function, we highly recommended"),console.log("signing up for your own API keys to improve performance, increase your"),console.log("request rate/limit and enable other perks, such as metrics and advanced APIs."),console.log(""),console.log("For more details: https://docs.ethers.io/api-keys/"),console.log("=========================="))}var Eu,Tu,ku,Au,Nu,Pu,xu,Ou,Iu=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Su=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Ru{constructor(t){Eu.add(this),Tu.set(this,void 0),ku.set(this,void 0),Au.set(this,void 0),Nu.set(this,void 0),Iu(this,Tu,t,"f"),Iu(this,ku,null,"f"),Iu(this,Au,Su(this,Eu,"m",Pu).bind(this),"f"),Iu(this,Nu,null,"f")}_subscribe(t){throw new Error("subclasses must override this")}_emitResults(t,e){throw new Error("subclasses must override this")}_recover(t){throw new Error("subclasses must override this")}start(){Su(this,Eu,"m",Pu).call(this,-2)}stop(){Su(this,Eu,"m",xu).call(this),Su(this,Tu,"f").off("block",Su(this,Au,"f"))}pause(t){t&&Su(this,Eu,"m",xu).call(this),Su(this,Tu,"f").off("block",Su(this,Au,"f"))}resume(){this.start()}}Tu=new WeakMap,ku=new WeakMap,Au=new WeakMap,Nu=new WeakMap,Eu=new WeakSet,Pu=async function(t){try{null==Su(this,ku,"f")&&Iu(this,ku,this._subscribe(Su(this,Tu,"f")),"f");const t=await Su(this,ku,"f");if(null==t)return void Su(this,Tu,"f")._recoverSubscriber(this,this._recover(Su(this,Tu,"f")));const e=await Su(this,Tu,"f").getNetwork();if(Su(this,Nu,"f")||Iu(this,Nu,e,"f"),Su(this,Nu,"f").chainId!==e.chainId)throw new Error("chaid changed");const r=await Su(this,Tu,"f").send("eth_getFilterChanges",[t]);await this._emitResults(Su(this,Tu,"f"),r)}catch(t){console.log("@TODO",t)}Su(this,Tu,"f").once("block",Su(this,Au,"f"))},xu=function(){const t=Su(this,ku,"f");t&&(Iu(this,ku,null,"f"),t.then((t=>{Su(this,Tu,"f").send("eth_uninstallFilter",[t])})))};class _u extends Ru{constructor(t,e){var r;super(t),Ou.set(this,void 0),Iu(this,Ou,(r=e,JSON.parse(JSON.stringify(r))),"f")}_recover(t){return new Sl(t,Su(this,Ou,"f"))}async _subscribe(t){const e=await t.send("eth_newFilter",[Su(this,Ou,"f")]);return console.log("____SUB",e),e}async _emitResults(t,e){const r=await t.getNetwork();for(const n of e){const e=r.formatter.log(n,t);t.emit(Su(this,Ou,"f"),e)}}}Ou=new WeakMap;class Cu extends Ru{async _subscribe(t){return await t.send("eth_newPendingTransactionFilter",[])}async _emitResults(t,e){const r=await t.getNetwork();for(const n of e)t.emit("pending",r.formatter.hash(n))}}var Bu,Fu,Uu,Lu,Du=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Mu=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const ju="bigint,boolean,function,number,string,symbol".split(/,/g);function Gu(t){if(null==t||ju.indexOf(typeof t)>=0)return t;if("function"==typeof t.getAddress)return t;if(Array.isArray(t))return t.map(Gu);if("object"==typeof t)return Object.keys(t).reduce(((e,r)=>(e[r]=t[r],e)),{});throw new Error(`should not happen: ${t} (${typeof t})`)}function $u(t){return t?t.toLowerCase():t}const zu={polling:!1,batchMaxSize:1<<20,batchStallTime:250};class Wu{constructor(t,e){n(this,{provider:t,address:e})}connect(t){return Go.throwError("cannot reconnect JsonRpcSigner","UNSUPPORTED_OPERATION",{operation:"signer.connect"})}async getAddress(){return this.address}async getNetwork(){return await this.provider.getNetwork()}async getFeeData(){return await this.provider.getFeeData()}async estimateGas(t){return await this.provider.estimateGas(t)}async call(t){return await this.provider.call(t)}async resolveName(t){return await this.provider.resolveName(t)}async getBalance(t){return await this.provider.getBalanceOf(this.address)}async getTransactionCount(t){return await this.provider.getTransactionCountOf(this.address)}async sendUncheckedTransaction(t){const e=Gu(t),r=[];if(e.from){const n=e.from;r.push((async()=>{const r=await Is(n,this.provider);null!=r&&r.toLowerCase()===this.address.toLowerCase()||Go.throwArgumentError("from address mismatch","transaction",t),e.from=r})())}else e.from=this.address;if(null==e.gasLimit&&r.push((async()=>{e.gasLimit=await this.provider.estimateGas(Object.assign(Object.assign({},e),{from:this.address}))})()),null!=e.to){const t=e.to;r.push((async()=>{e.to=await Is(t,this.provider)})())}r.length&&await Promise.all(r);const n=this.provider.getRpcTransaction(e);return this.provider.send("eth_sendTransaction",[n])}async sendTransaction(t){const e=await this.provider.getBlockNumber(),r=await this.sendUncheckedTransaction(t);return await new Promise(((t,n)=>{const s=async n=>{const i=await this.provider.getTransaction(r);null==i?this.provider._setTimeout((()=>{s(4e3)}),n):t(this.provider._wrapTransaction(i,r,e))};s(1e3)}))}async signTransaction(t){const e=Gu(t);if(e.from){const r=await Is(e.from,this.provider);if(null==r||r.toLowerCase()!==this.address.toLowerCase())return Go.throwArgumentError("from address mismatch","transaction",t);e.from=r}else e.from=this.address;const r=this.provider.getRpcTransaction(e);return await this.provider.send("eth_sign_Transaction",[r])}async signMessage(t){const e="string"==typeof t?ii(t):t;return await this.provider.send("personal_sign",[ue(e),this.address.toLowerCase()])}async signTypedData(t,e,r){const n=Gu(r),s=await ao.resolveNames(t,e,n,(async t=>{const e=await Is(t);return null==e?Go.throwArgumentError("TypedData does not support null address","value",t):e}));return await this.provider.send("eth_signTypedData_v4",[this.address.toLowerCase(),JSON.stringify(ao.getPayload(s.domain,e,s.value))])}async unlock(t){return this.provider.send("personal_unlockAccount",[this.address.toLowerCase(),t,null])}async _legacySignMessage(t){const e="string"==typeof t?ii(t):t;return await this.provider.send("eth_sign",[this.address.toLowerCase(),ue(e)])}}class Hu extends tu{constructor(t){super(t),Bu.set(this,void 0),Fu.set(this,void 0),Du(this,Bu,1,"f"),Du(this,Fu,Object.assign({},zu),"f")}_getOptions(t){return Mu(this,Fu,"f")[t]}_setOptions(t){for(const e in t){const r=e,n=t[r];if(typeof n!=typeof Mu(this,Fu,"f")[r])return Go.throwArgumentError("invalid option value",`options.${r}`,n)}for(const e in t){const r=e;Mu(this,Fu,"f")[r]=t[r]}}prepareRequest(t,e){var r,n;return{method:t,params:e,id:(Du(this,Bu,(n=Mu(this,Bu,"f"),r=n++,n),"f"),r),jsonrpc:"2.0"}}async send(t,e){throw new Error("sub-class must implement this")}async getSigner(t=0){const e=await this.getNetwork(),r=await this.send("eth_accounts",[]);if("number"==typeof t){if(t>r.length)throw new Error("no such account");return new Wu(this,r[t])}t=e.formatter.address(t);for(const t of r)if(e.formatter.address(t)===t)return new Wu(this,t);throw new Error("invalid account")}async _detectNetwork(){return ol.from(Go.getBigInt(await this._perform({method:"chainId"})))}_getSubscriber(t){return"pending"===t.type?new Cu(this):"event"===t.type?new _u(this,t.filter):"orphan"===t.type&&"drop-log"===t.filter.orphan?new Xl("orphan"):super._getSubscriber(t)}getRpcTransaction(t){const e={};return["chainId","gasLimit","gasPrice","type","maxFeePerGas","maxPriorityFeePerGas","nonce","value"].forEach((r=>{if(null==t[r])return;let n=r;"gasLimit"===r&&(n="gas"),e[n]=he(t[r])})),["from","to","data"].forEach((r=>{null!=t[r]&&(e[r]=ue(t[r]))})),t.accessList&&(e.accessList=mc(t.accessList)),e}getRpcRequest(t){switch(t.method){case"chainId":return{method:"eth_chainId",args:[]};case"getBlockNumber":return{method:"eth_blockNumber",args:[]};case"getGasPrice":return{method:"eth_gasPrice",args:[]};case"getBalance":return{method:"eth_getBalance",args:[$u(t.address),t.blockTag]};case"getTransactionCount":return{method:"eth_getTransactionCount",args:[$u(t.address),t.blockTag]};case"getCode":return{method:"eth_getCode",args:[$u(t.address),t.blockTag]};case"getStorageAt":return{method:"eth_getStorageAt",args:[$u(t.address),"0x"+t.position.toString(16),t.blockTag]};case"sendTransaction":return{method:"eth_sendRawTransaction",args:[t.signedTransaction]};case"getBlock":if("blockTag"in t)return{method:"eth_getBlockByNumber",args:[t.blockTag,!!t.includeTransactions]};if("blockHash"in t)return{method:"eth_getBlockByHash",args:[t.blockHash,!!t.includeTransactions]};break;case"getTransaction":return{method:"eth_getTransactionByHash",args:[t.hash]};case"getTransactionReceipt":return{method:"eth_getTransactionReceipt",args:[t.hash]};case"call":return{method:"eth_call",args:[this.getRpcTransaction(t.transaction),t.blockTag]};case"estimateGas":return{method:"eth_estimateGas",args:[this.getRpcTransaction(t.transaction)]};case"getLogs":return t.filter&&null!=t.filter.address&&(Array.isArray(t.filter.address)?t.filter.address=t.filter.address.map($u):t.filter.address=$u(t.filter.address)),{method:"eth_getLogs",args:[t.filter]}}return null}getRpcError(t,e,r){if("eth_call"===t){const t=Ju(r);return t?Go.makeError("execution reverted during JSON-RPC call","CALL_EXCEPTION",{data:t.data,transaction:e[0]}):Go.makeError("missing revert data during JSON-RPC call","CALL_EXCEPTION",{data:"0x",transaction:e[0],info:{error:r}})}const n=JSON.stringify(function(t){const e=[];return qu(t,e),e}(r));return n.match(/insufficient funds|base fee exceeds gas limit/)?Go.makeError("insufficient funds for intrinsic transaction cost","INSUFFICIENT_FUNDS",{transaction:e[0]}):n.match(/nonce/)&&n.match(/too low/)?Go.makeError("nonce has already been used","NONCE_EXPIRED",{transaction:e[0]}):n.match(/replacement transaction/)&&n.match(/underpriced/)?Go.makeError("replacement fee too low","REPLACEMENT_UNDERPRICED",{transaction:e[0]}):n.match(/only replay-protected/)?Go.makeError("legacy pre-eip-155 transactions not supported","UNSUPPORTED_OPERATION",{operation:t,info:{transaction:e[0]}}):"estimateGas"===t&&n.match(/gas required exceeds allowance|always failing transaction|execution reverted/)?Go.makeError("cannot estimate gas; transaction may fail or may require manual gas limit","UNPREDICTABLE_GAS_LIMIT",{transaction:e[0]}):r}async _perform(t){if("call"===t.method||"estimateGas"===t.method){let e=t.transaction;if(e&&null!=e.type&&Go.getBigInt(e.type)&&null==e.maxFeePerGas&&null==e.maxPriorityFeePerGas){const r=await this.getFeeData();null==r.maxFeePerGas&&null==r.maxPriorityFeePerGas&&(t=Object.assign({},t,{transaction:Object.assign({},e,{type:void 0})}))}}const e=this.getRpcRequest(t);if(null!=e){this.emit("debug",{type:"sendRequest",request:e});try{const t=await this.send(e.method,e.args);return this.emit("debug",{type:"getResponse",result:t}),t}catch(t){throw this.emit("debug",{type:"getError",error:t}),this.getRpcError(e.method,e.args,t)}}return super._perform(t)}}Bu=new WeakMap,Fu=new WeakMap;class Vu extends Hu{constructor(t,e){null==t&&(t="http://localhost:8545"),super(e),Uu.set(this,void 0),Lu.set(this,void 0),"string"==typeof t?Du(this,Uu,{request:new Uo(t)},"f"):(Du(this,Uu,Object.assign({},t),"f"),Mu(this,Uu,"f").request=Mu(this,Uu,"f").request.clone()),Du(this,Lu,4e3,"f")}async send(t,e){var r;r=e,e=JSON.parse(JSON.stringify(r));const n=Object.assign({},Mu(this,Uu,"f"));n.request=n.request.clone(),n.request.body=this.prepareRequest(t,e);const s=(await jo(n)).bodyJson;return"error"in s?Go.throwError("error from JSON-RPC","UNKNOWN_ERROR",{result:s}):s.result}get pollingInterval(){return Mu(this,Lu,"f")}set pollingInterval(t){if(!Number.isInteger(t)||t<0)throw new Error("invalid interval");Du(this,Lu,t,"f"),this._forEachSubscriber((t=>{(function(t){return t&&"number"==typeof t.pollingInterval})(t)&&(t.pollingInterval=Mu(this,Lu,"f"))}))}}Uu=new WeakMap,Lu=new WeakMap;class Ku extends Vu{constructor(t,e){super(t,e),n(this,{network:e})}async _detectNetwork(){return this.network}}function Ju(t){if(null==t)return null;if("string"==typeof t.message&&t.message.match("reverted")&&te(t.data))return{message:t.message,data:t.data};if("object"==typeof t){for(const e in t){const r=Ju(t[e]);if(r)return r}return null}if("string"==typeof t)try{return Ju(JSON.parse(t))}catch(t){}return null}function qu(t,e){if(null!=t){if("string"==typeof t.message&&e.push(t.message),"object"==typeof t)for(const r in t)qu(t[r],e);if("string"==typeof t)try{return qu(JSON.parse(t),e)}catch(t){}}}const Xu="9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972";class Yu extends Ku{constructor(t="homestead",e){const r=ol.from(t);null==e&&(e=Xu);super(Yu.getConnection(r,e),r),n(this,{apiKey:e}),super._setOptions({polling:!0})}_getProvider(t){try{return new Yu(t,this.apiKey)}catch(t){}return super._getProvider(t)}static getConnection(t,e){null==e&&(e=Xu);const r=new Uo(`https://${function(t){switch(t){case"homestead":return"rpc.ankr.com/eth";case"matic":return"rpc.ankr.com/polygon";case"arbitrum":return"rpc.ankr.com/arbitrum"}return Go.throwArgumentError("unsupported network","network",t)}(t.name)}/${e}`);r.allowGzip=!0;return{request:r,throttleRetry:async(t,r,n)=>(e===Xu&&vu("AnkrProvider"),!0)}}isCommunityResource(){return this.apiKey===Xu}}const Zu="_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC";class Qu extends Ku{constructor(t="homestead",e){const r=ol.from(t);null==e&&(e=Zu),super(Qu.getConnection(r,e),r),n(this,{apiKey:e})}_getProvider(t){try{return new Qu(t,this.apiKey)}catch(t){}return super._getProvider(t)}isCommunityResource(){return this.apiKey===Zu}static getConnection(t,e){null==e&&(e=Zu);const r=new Uo(`https://${function(t){switch(t){case"homestead":return"eth-mainnet.alchemyapi.io";case"ropsten":return"eth-ropsten.alchemyapi.io";case"rinkeby":return"eth-rinkeby.alchemyapi.io";case"goerli":return"eth-goerli.alchemyapi.io";case"kovan":return"eth-kovan.alchemyapi.io";case"matic":return"polygon-mainnet.g.alchemy.com";case"maticmum":return"polygon-mumbai.g.alchemy.com";case"arbitrum":return"arb-mainnet.g.alchemy.com";case"arbitrum-rinkeby":return"arb-rinkeby.g.alchemy.com";case"optimism":return"opt-mainnet.g.alchemy.com";case"optimism-kovan":return"opt-kovan.g.alchemy.com"}return Go.throwArgumentError("unsupported network","network",t)}(t.name)}/v2/${e}`);r.allowGzip=!0;return{request:r,throttleRetry:async(t,r,n)=>(e===Zu&&vu("alchemy"),!0)}}}class th extends Ku{constructor(t="homestead"){const e=ol.from(t);if("homestead"!==e.name)return Go.throwArgumentError("unsupported network","network",t);super("https://cloudflare-eth.com/",e)}}const eh="9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB",rh="org.ethers.plugins.etherscan";class nh extends Yc{constructor(t,e){super(rh),n(this,{baseUrl:t,communityApiKey:e})}clone(){return new nh(this.baseUrl,this.communityApiKey)}}class sh extends tu{constructor(t,e){super();const r=ol.from(t);if(null==e){const t=r.getPlugin(rh);e=t?t.communityApiKey:eh}n(this,{apiKey:e,network:r}),this.getBaseUrl()}getBaseUrl(){const t=this.network.getPlugin(rh);if(t)return t.baseUrl;switch(this.network.name){case"homestead":return"https://api.etherscan.io";case"ropsten":return"https://api-ropsten.etherscan.io";case"rinkeby":return"https://api-rinkeby.etherscan.io";case"kovan":return"https://api-kovan.etherscan.io";case"goerli":return"https://api-goerli.etherscan.io"}return Go.throwArgumentError("unsupported network","network",this.network)}getUrl(t,e){const r=Object.keys(e).reduce(((t,r)=>{const n=e[r];return null!=n&&(t+=`&${r}=${n}`),t}),""),n=this.apiKey?`&apikey=${this.apiKey}`:"";return`${this.getBaseUrl()}/api?module=${t}${r}${n}`}getPostUrl(){return`${this.getBaseUrl()}/api`}getPostData(t,e){return e.module=t,e.apikey=this.apiKey,e}async detectNetwork(){return this.network}async fetch(t,e,r){const n=r?this.getPostUrl():this.getUrl(t,e),s=r?this.getPostData(t,e):null,i=new Uo(n),o={request:i,throttleSlotInterval:1e3,processResponse:async(e,r)=>{const n=r.hasBody()?JSON.parse(li(r.body)):{},s=("string"==typeof n.result?n.result:"").toLowerCase().indexOf("rate limit")>=0;return"proxy"===t?n&&0==n.status&&"NOTOK"==n.message&&s&&r.throwThrottleError(n.result):s&&r.throwThrottleError(n.result),r}};s&&(i.setHeader("content-type","application/x-www-form-urlencoded; charset=UTF-8"),i.body=Object.keys(s).map((t=>`${t}=${s[t]}`)).join("&"));const a=await jo(o);if(!a.hasBody())throw new Error;const c=JSON.parse(li(a.body));if("proxy"===t){if("2.0"!=c.jsonrpc){const t=new Error("invalid response");throw t.result=JSON.stringify(c),t}if(c.error){const t=new Error(c.error.message||"unknown error");throw c.error.code&&(t.code=c.error.code),c.error.data&&(t.data=c.error.data),t}return c.result}if(0==c.status&&("No records found"===c.message||"No transactions found"===c.message))return c.result;if(1!=c.status||"OK"!=c.message){const t=new Error("invalid response");throw t.result=JSON.stringify(c),t}return c.result}_getTransactionPostData(t){const e={};for(let r in t){if(null==t[r])continue;let n=t[r];"type"===r&&0===n||(n={type:!0,gasLimit:!0,gasPrice:!0,maxFeePerGs:!0,maxPriorityFeePerGas:!0,nonce:!0,value:!0}[r]?he(ue(n)):"accessList"===r?"["+this.network.formatter.accessList(n).map((t=>`{address:"${t.address}",storageKeys:["${t.storageKeys.join('","')}"]}`)).join(",")+"]":ue(n),e[r]=n)}return e}_checkError(t,e,r){throw e}async _detectNetwork(){return this.network}async _perform(t){switch(t.method){case"chainId":return this.network.chainId;case"getBlockNumber":return this.fetch("proxy",{action:"eth_blockNumber"});case"getGasPrice":return this.fetch("proxy",{action:"eth_gasPrice"});case"getBalance":return this.fetch("account",{action:"balance",address:t.address,tag:t.blockTag});case"getTransactionCount":return this.fetch("proxy",{action:"eth_getTransactionCount",address:t.address,tag:t.blockTag});case"getCode":return this.fetch("proxy",{action:"eth_getCode",address:t.address,tag:t.blockTag});case"getStorageAt":return this.fetch("proxy",{action:"eth_getStorageAt",address:t.address,position:t.position,tag:t.blockTag});case"sendTransaction":return this.fetch("proxy",{action:"eth_sendRawTransaction",hex:t.signedTransaction},!0).catch((e=>this._checkError(t,e,t.signedTransaction)));case"getBlock":return"blockTag"in t?this.fetch("proxy",{action:"eth_getBlockByNumber",tag:t.blockTag,boolean:t.includeTransactions?"true":"false"}):Go.throwError("getBlock by blockHash not supported by Etherscan","UNSUPPORTED_OPERATION",{operation:"getBlock(blockHash)"});case"getTransaction":return this.fetch("proxy",{action:"eth_getTransactionByHash",txhash:t.hash});case"getTransactionReceipt":return this.fetch("proxy",{action:"eth_getTransactionReceipt",txhash:t.hash});case"call":{if("latest"!==t.blockTag)throw new Error("EtherscanProvider does not support blockTag for call");const e=this._getTransactionPostData(t.transaction);e.module="proxy",e.action="eth_call";try{return await this.fetch("proxy",e,!0)}catch(e){return this._checkError(t,e,t.transaction)}}case"estimateGas":{const e=this._getTransactionPostData(t.transaction);e.module="proxy",e.action="eth_estimateGas";try{return await this.fetch("proxy",e,!0)}catch(e){return this._checkError(t,e,t.transaction)}}}return super._perform(t)}async getNetwork(){return this.network}async getEtherPrice(){return"homestead"!==this.network.name?0:parseFloat((await this.fetch("stats",{action:"ethprice"})).ethusd)}isCommunityResource(){const t=this.network.getPlugin(rh);return t?t.communityApiKey===this.apiKey:eh===this.apiKey}}const ih="84842078b09946638c03157f83405213";class oh extends Ku{constructor(t="homestead",e,r){const s=ol.from(t);null==e&&(e=ih),null==r&&(r=null);super(oh.getConnection(s,e,r),s),n(this,{projectId:e,projectSecret:r})}_getProvider(t){try{return new oh(t,this.projectId,this.projectSecret)}catch(t){}return super._getProvider(t)}static getConnection(t,e,r){null==e&&(e=ih),null==r&&(r=null);const n=new Uo(`https://${function(t){switch(t){case"homestead":return"mainnet.infura.io";case"ropsten":return"ropsten.infura.io";case"rinkeby":return"rinkeby.infura.io";case"kovan":return"kovan.infura.io";case"goerli":return"goerli.infura.io";case"matic":return"polygon-mainnet.infura.io";case"maticmum":return"polygon-mumbai.infura.io";case"optimism":return"optimism-mainnet.infura.io";case"optimism-kovan":return"optimism-kovan.infura.io";case"arbitrum":return"arbitrum-mainnet.infura.io";case"arbitrum-rinkeby":return"arbitrum-rinkeby.infura.io"}return Go.throwArgumentError("unsupported network","network",t)}(t.name)}/v3/${e}`);n.allowGzip=!0,r&&n.setCredentials("",r);return{request:n,throttleRetry:async(t,r,n)=>(e===ih&&vu("InfuraProvider"),!0)}}isCommunityResource(){return this.projectId===ih}}const ah={homestead:"6004bcd10040261633ade990",ropsten:"6004bd4d0040261633ade991",rinkeby:"6004bda20040261633ade994",goerli:"6004bd860040261633ade992"};function ch(t,e,r,n){n=!!n;let s=!1,i=e;return null==i?(i=ah[t.name],null==i&&Go.throwArgumentError("network does not support default applicationId","applicationId",e),n=!0,s=!0):i===ah[t.name]&&(n=!0,s=!0),null==r&&(r=null),{applicationId:i,applicationSecretKey:r,community:s,loadBalancer:n}}class lh extends Ku{constructor(t="homestead",e,r,s){const i=ol.from(t),{applicationId:o,applicationSecretKey:a,loadBalancer:c}=ch(i,e,r,s);super(lh.getConnection(i,o,a,c),i),n(this,{applicationId:o,applicationSecretKey:a,loadBalancer:c})}static getConnection(t,e,r,n){const{applicationId:s,applicationSecretKey:i,community:o,loadBalancer:a}=ch(t,e,r,n);let c=`https://${function(t){switch(t){case"homestead":return"eth-mainnet.gateway.pokt.network";case"ropsten":return"eth-ropsten.gateway.pokt.network";case"rinkeby":return"eth-rinkeby.gateway.pokt.network";case"goerli":return"eth-goerli.gateway.pokt.network"}return Go.throwArgumentError("unsupported network","network",t)}(t.name)}/v1/`;a&&(c+="lb/"),c+=s;const l=new Uo(c);l.allowGzip=!0,i&&l.setCredentials("",i);return{request:l,throttleRetry:async(t,e,r)=>(o&&vu("PocketProvider"),!0)}}isCommunityResource(){return this.applicationId===ah[this.network.name]}}var uh,hh,fh,dh,ph,wh,gh,mh,yh=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},bh=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const vh=BigInt("1"),Eh=BigInt("2");function Th(){return(new Date).getTime()}const kh={stallTimeout:400,priority:1,weight:1},Ah={blockNumber:-2,requests:0,lateResponses:0,errorResponses:0,outOfSync:-1,unsupportedEvents:0,rollingDuration:0,score:0,_network:null,_updateNumber:null,_totalTime:0};function Nh(t,e,r){switch(r.method){case"chainId":case"getGasPrice":case"getBalance":case"estimateGas":return Go.getBigInt(e).toString();case"getBlockNumber":case"getTransactionCount":return Go.getNumber(e).toString();case"getCode":case"getStorageAt":case"call":return ue(e);case"getBlock":return r.includeTransactions?JSON.stringify(t.formatter.blockWithTransactions(e)):JSON.stringify(t.formatter.block(e));case"getTransaction":return JSON.stringify(t.formatter.transactionResponse(e));case"getTransactionReceipt":return JSON.stringify(t.formatter.receipt(e));case"getLogs":return JSON.stringify(e.map((e=>t.formatter.log(e))))}return Go.throwError("unsupported method","UNSUPPORTED_OPERATION",{operation:`_perform(${JSON.stringify(r.method)})`})}function Ph(t,e){const r=new Map;for(const{result:t,normal:n,weight:s}of e){const e=r.get(n)||{result:t,weight:0};e.weight+=s,r.set(n,e)}let n,s=0;for(const{weight:e,result:i}of r.values())e>=t&&e>s&&(s=e,n=i);return n}class xh extends tu{constructor(t,e){super(e),uh.add(this),hh.set(this,void 0),fh.set(this,void 0),yh(this,hh,t.map((t=>t instanceof tu?Object.assign({provider:t},kh,Ah):Object.assign({},kh,t,Ah))),"f"),yh(this,fh,null,"f"),this.quorum=2,this.eventQuorum=1,this.eventWorkers=1,this.quorum>bh(this,hh,"f").reduce(((t,e)=>t+e.weight),0)&&Go.throwArgumentError("quorum exceed provider wieght","quorum",this.quorum)}async _detectNetwork(){return ol.from(Go.getBigInt(await this._perform({method:"chainId"}))).freeze()}_getSubscriber(t){throw new Error("@TODO")}async _perform(t){await bh(this,uh,"m",wh).call(this);const e=new Set;for(let r=0;r0;e--){const r=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[r],t[r]=n}}(e),e.sort(((t,e)=>e.priority-t.priority));for(const r of e)if(-1===t.indexOf(r))return r;return null},ph=function(t,e){const r=bh(this,uh,"m",dh).call(this,Array.from(t).map((t=>t.config)));if(null==r)return null;const n={},s={config:r,result:n,didBump:!1,done:!1,perform:null,staller:null},i=Th();return s.perform=(async()=>{try{r.requests++,n.result=await r.provider._perform(e)}catch(t){r.errorResponses++,n.error=t}s.done&&r.lateResponses++;const t=Th()-i;r._totalTime+=t,r.rollingDuration=.95*r.rollingDuration+.05*t,s.perform=null})(),s.staller=(async()=>{var t;await(t=r.stallTimeout,new Promise((e=>{setTimeout(e,t)}))),s.staller=null})(),t.add(s),s},wh=async function(){let t=bh(this,fh,"f");if(!t){const e=[];bh(this,hh,"f").forEach((t=>{e.push(async function(t,e){for(;t.blockNumber<0||t.blockNumber{const e=await t.provider.getBlockNumber();e>t.blockNumber&&(t.blockNumber=e),t._updateNumber=null})()),await t._updateNumber,t.outOfSync++}(t,0)),e.push((async()=>{t._network=await t.provider.getNetwork()})())})),yh(this,fh,t=(async()=>{await Promise.all(e);let t=null;for(const e of bh(this,hh,"f")){const r=e._network;null==t?t=r.chainId:r.chainId!==t&&Go.throwError("cannot mix providers on different networks","UNSUPPORTED_OPERATION",{operation:"new FallbackProvider"})}})(),"f")}await t},gh=async function(t,e){const r=[];for(const n of t)if("result"in n.result){const t=n.result.result;r.push({result:t,normal:Nh(n.config._network,t,e),weight:n.config.weight})}if(!(r.reduce(((t,e)=>t+e.weight),0)BigInt(t.result)));e.sort(((t,e)=>tt?1:0));const r=e.length/2;return e.length%2?e[r]:(e[r-1]+e[r]+vh)/Eh}(r);case"getBlock":return"blockTag"in e&&"pending"===e.blockTag?r[0].result:Ph(this.quorum,r);case"chainId":case"getBalance":case"getTransactionCount":case"getCode":case"getStorageAt":case"getTransaction":case"getTransactionReceipt":case"getLogs":case"call":return Ph(this.quorum,r)}return Go.throwError("unsupported method","UNSUPPORTED_OPERATION",{operation:`_perform(${JSON.stringify(e.method)})`})}},mh=async function t(e,r){if(0===e.size)throw new Error("no runners?!");const n=[];let s=0;for(const t of e)t.perform&&n.push(t.perform),t.staller?n.push(t.staller):t.didBump||(t.didBump=!0,s++);const i=await bh(this,uh,"m",gh).call(this,e,r);if(void 0!==i){if(i instanceof Error)throw i;return i}for(let t=0;t(Gh(this,Ih,"f")._register(t,this),t))),"f")}stop(){Gh(this,Rh,"f").then((t=>{Gh(this,Ih,"f").send("eth_unsubscribe",[t])})),jh(this,Rh,null,"f")}pause(t){t||Go.throwError("preserve logs while paused not supported by SocketSubscriber yet","UNSUPPORTED_OPERATION",{operation:"pause(false)"}),jh(this,_h,!!t,"f")}resume(){jh(this,_h,null,"f")}_handleMessage(t){if(null!=Gh(this,Rh,"f")&&null===Gh(this,_h,"f")){let e=Gh(this,Ch,"f");e=null==e?this._emit(Gh(this,Ih,"f"),t):e.then((async()=>{await this._emit(Gh(this,Ih,"f"),t)})),jh(this,Ch,e.then((()=>{Gh(this,Ch,"f")===e&&jh(this,Ch,null,"f")})),"f")}}async _emit(t,e){throw new Error("sub-classes must implemente this; _emit")}}Ih=new WeakMap,Sh=new WeakMap,Rh=new WeakMap,_h=new WeakMap,Ch=new WeakMap;class zh extends $h{constructor(t){super(t,["newHeads"])}async _emit(t,e){t.emit("block",parseInt(e.number))}}class Wh extends $h{constructor(t){super(t,["newPendingTransactions"])}async _emit(t,e){t.emit("pending",e)}}class Hh extends $h{constructor(t,e){super(t,["logs",e]),Bh.set(this,void 0),Fh.set(this,void 0),jh(this,Bh,JSON.stringify(e),"f"),jh(this,Fh,t.getNetwork().then((t=>t.formatter)),"f")}get logFilter(){return JSON.parse(Gh(this,Bh,"f"))}async _emit(t,e){const r=await Gh(this,Fh,"f");t.emit(Gh(this,Bh,"f"),r.log(e,t))}}Bh=new WeakMap,Fh=new WeakMap;class Vh extends Hu{constructor(t){super(t),Uh.set(this,void 0),Lh.set(this,void 0),Dh.set(this,void 0),Mh.set(this,void 0),jh(this,Uh,new Map,"f"),jh(this,Lh,!1,"f"),jh(this,Dh,new Map,"f"),jh(this,Mh,new Map,"f")}_getSubscriber(t){switch(t.type){case"close":return new Xl("close");case"block":return new zh(this);case"pending":return new Wh(this);case"event":return new Hh(this,t.filter);case"orphan":if("drop-log"===t.filter.orphan)return new Xl("drop-log")}return super._getSubscriber(t)}_register(t,e){Gh(this,Dh,"f").set(t,e);const r=Gh(this,Mh,"f").get(t);if(r){for(const t of r)e._handleMessage(t);Gh(this,Mh,"f").delete(t)}}async send(t,e){const r=this.prepareRequest(t,e),n=new Promise(((t,e)=>{Gh(this,Uh,"f").set(r.id,{payload:r,resolve:t,reject:e})}));return Gh(this,Lh,"f")&&await this._write(JSON.stringify(r)),await n}async _start(){if(!Gh(this,Lh,"f")){jh(this,Lh,!0,"f");for(const{payload:t}of Gh(this,Uh,"f").values())await this._write(JSON.stringify(t))}}async _processMessage(t){const e=JSON.parse(t);if("id"in e){const t=Gh(this,Uh,"f").get(e.id);if(!t)return void console.log("Weird... Response for not a thing we sent");if(Gh(this,Uh,"f").delete(e.id),"error"in e){const{message:r,code:n,data:s}=e.error,i=Go.makeError(r||"unkonwn error","SERVER_ERROR",{request:`ws:${JSON.stringify(t.payload)}`,info:{code:n,data:s}});t.reject(i)}else t.resolve(e.result)}else if("eth_subscription"===e.method){const t=e.params.subscription,r=Gh(this,Dh,"f").get(t);if(r)r._handleMessage(e.params.result);else{let r=Gh(this,Mh,"f").get(t);null==r&&(r=[],Gh(this,Mh,"f").set(t,r)),r.push(e.params.result)}}}async _write(t){throw new Error("sub-classes must override this")}}Uh=new WeakMap,Lh=new WeakMap,Dh=new WeakMap,Mh=new WeakMap;var Kh,Jh=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},qh=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Xh extends Vh{constructor(t,e){super(e),Kh.set(this,void 0),Jh(this,Kh,"string"==typeof t?new Oh(t):t,"f"),this.websocket.onopen=()=>{this._start()},this.websocket.onmessage=t=>{this._processMessage(t.data)}}get websocket(){return qh(this,Kh,"f")}async _write(t){this.websocket.send(t)}}Kh=new WeakMap;const Yh=function(t){function e(e,r,n){const s=function(){const s=new t(e,r);if(null!=n.ensNetwork&&s.attachPlugin(new Qc(null,n.ensNetwork)),n.priorityFee&&s.attachPlugin(new tl(n.priorityFee)),n.etherscan){const{url:t,apiKey:e}=n.etherscan;s.attachPlugin(new nh(t,e))}return s.attachPlugin(new Zc),s};t.register(e,s),t.register(r,s),n.altNames&&n.altNames.forEach((e=>{t.register(e,s)}))}return e("homestead",1,{ensNetwork:1,altNames:["mainnet"]}),e("ropsten",3,{ensNetwork:3}),e("rinkeby",4,{ensNetwork:4}),e("goerli",5,{ensNetwork:5}),e("kovan",42,{ensNetwork:42}),e("classic",61,{}),e("classicKotti",6,{}),e("xdai",100,{ensNetwork:1}),e("matic",137,{ensNetwork:1,priorityFee:35e9,etherscan:{apiKey:"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7",url:"https://api.polygonscan.com/"}}),e("maticMumbai",80001,{priorityFee:35e9,etherscan:{apiKey:"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7",url:"https://api-testnet.polygonscan.com/"}}),e("bnb",56,{ensNetwork:1,etherscan:{apiKey:"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9",url:"http://api.bscscan.com"}}),e("bnbt",97,{etherscan:{apiKey:"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9",url:"http://api-testnet.bscscan.com"}}),t}(ol),Zh=void 0;var Qh,tf,ef=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},rf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class nf extends Lc{constructor(t,e,r){super(t,t.provider);n(this,{args:e.decodeEventLog(r,t.data,t.topics),fragment:r,interface:e})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}class sf extends Dc{constructor(t,e,r){super(r,e),Qh.set(this,void 0),ef(this,Qh,t,"f")}get logs(){return super.logs.map((t=>{const e=t.topics.length?rf(this,Qh,"f").getEvent(t.topics[0]):null;return e?new nf(t,rf(this,Qh,"f"),e):t}))}}Qh=new WeakMap;class of extends Mc{constructor(t,e,r){super(r,e),tf.set(this,void 0),ef(this,tf,t,"f")}async wait(t){const e=await super.wait();return null==e?null:new sf(rf(this,tf,"f"),this.provider,e)}}tf=new WeakMap;class af extends a{constructor(t,e,r,s,i){super(t,e,r);const o=new nf(i,t.interface,s);n(this,{args:t.interface.decodeEventLog(s,o.data,o.topics),fragment:s,log:o})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}async getBlock(){return await this.log.getBlock()}async getTransaction(){return await this.log.getTransaction()}async getTransactionReceipt(){return await this.log.getTransactionReceipt()}}const cf=new N("@ethersproject/contract@6.0.0-beta.1");var lf,uf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},hf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function ff(t){return t&&"function"==typeof t.resolveName}class df{constructor(t,e,r){if(lf.set(this,void 0),n(this,{fragment:e}),e.inputs.lengtht.walkAsync(r[e],((t,e)=>"address"===t?Is(e,i):e)))));return t.interface.encodeFilterTopics(e,n)}(),"f")}getTopicFilter(){return hf(this,lf,"f")}}function pf(t,e){return null==t?null:"function"==typeof t[e]?t:t.provider&&"function"==typeof t.provider[e]?t.provider:null}async function wf(t){const e=function(t){const e={};t.to&&(e.to=t.to),t.from&&(e.from=t.from),t.data&&(e.data=ue(t.data));const r="chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value".split(/,/);for(const n in r)n in t&&null!=t[n]&&(e[n]=Go.getBigInt(t[n],`request.${n}`));const n="type,nonce".split(/,/);for(const r in n)r in t&&null!=t[r]&&(e[r]=Go.getNumber(t[r],`request.${r}`));return t.accessList&&(e.accessList=mc(t.accessList)),"blockTag"in t&&(e.blockTag=t.blockTag),"enableCcipRead"in t&&(e.enableCcipReadEnabled=!!t.enableCcipRead),"customData"in t&&(e.customData=t.customData),e}(Ls.dereference(t,"overrides"));return e.to?cf.throwArgumentError("cannot override to","overrides.to",e.to):e.data&&cf.throwArgumentError("cannot override data","overrides.data",e.data),e.from&&(e.from=await Is(e.from)),e}lf=new WeakMap;class gf extends(function(){return Function}()){constructor(t,e){super(),n(this,{name:t.interface.getFunctionName(e),_contract:t,_key:e});return new Proxy(this,{apply:async(t,e,r)=>t.getFragment(...r).constant?await t.staticCall(...r):await t.send(...r)})}get fragment(){return this._contract.interface.getFunction(this._key)}getFragment(...t){return this._contract.interface.getFunction(this._key,t)}async populateTransaction(...t){const r=this.getFragment(...t);let n={};if(r.inputs.length+1===t.length&&(n=await wf(t.pop())),r.inputs.length!==t.length)throw new Error("internal error: fragment inputs doesn't match arguments; should not happen");const s=await async function(t,e,r){const n=pf(t,"resolveName"),s=ff(n)?n:null;return await Promise.all(e.map(((t,e)=>t.walkAsync(r[e],((t,e)=>"address"===t?Is(e,s):e)))))}(this._contract.runner,r.inputs,t);return Object.assign({},n,await e({to:this._contract.getAddress(),data:this._contract.interface.encodeFunctionData(r,s)}))}async staticCall(...t){const e=await this.staticCallResult(...t);return 1===e.length?e[0]:e}async send(...t){const e=pf(this._contract.runner,"sendTransaction");if(!(r=e)||"function"!=typeof r.sendTransaction)return cf.throwError("contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});var r;const n=await e.sendTransaction(await this.populateTransaction(...t)),s=pf(this._contract.runner,"getLogs");return new of(this._contract.interface,s,n)}async estimateGas(...t){const e=pf(this._contract.runner,"estimateGas");return(r=e)&&"function"==typeof r.estimateGas?await e.estimateGas(await this.populateTransaction(...t)):cf.throwError("contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"});var r}async staticCallResult(...t){const e=pf(this._contract.runner,"call");if(!(r=e)||"function"!=typeof r.call)return cf.throwError("contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});var r;const n=this.getFragment(...t),s=await this.populateTransaction(...t);let i="0x";try{i=await e.call(s)}catch(t){if(h(t))throw this._contract.interface.makeError(n,t.data,s);throw t}return this._contract.interface.decodeFunctionResult(n,i)}}class mf extends(function(){return Function}()){constructor(t,e){return super(),n(this,{name:t.interface.getEventName(e),_contract:t,_key:e}),new Proxy(this,{apply:async(e,r,n)=>new df(t,e.getFragment(...n),n)})}get fragment(){return this._contract.interface.getEvent(this._key)}getFragment(...t){return this._contract.interface.getEvent(this._key,t)}}const yf=Symbol.for("_ethersInternal_contract"),bf=new WeakMap;function vf(t){return bf.get(t[yf])}async function Ef(t,e){let r,n;if(Array.isArray(e))r=t.interface.getEvent(e[0]),n=e;else if("string"==typeof e)r=t.interface.getEvent(e),n=[t.interface.getEventTopic(r)];else if((s=e)&&"object"==typeof s&&"getTopicFilter"in s&&"function"==typeof s.getTopicFilter&&s.fragment)r=e.fragment,n=await e.getTopicFilter();else{if(!("fragment"in e))throw console.log(e),new Error("TODO");r=e.fragment,n=[t.interface.getEventTopic(r)]}var s;n=n.map((t=>{return null==t?null:Array.isArray(t)?(e=t.map((t=>t.toLowerCase())),(e=Array.from(new Set(e).values())).sort(),e):t.toLowerCase();var e}));return{fragment:r,tag:n.map((t=>null==t?"null":Array.isArray(t)?t.join("|"):t)).join("&"),topics:n}}async function Tf(t,e){const{subs:r}=vf(t);return r.get((await Ef(t,e)).tag)||null}async function kf(t,e){const r=pf(t.runner,"on"),n=pf(t.runner,"off");if(!r||r!==n||(!(s=r)||"function"!=typeof s.on||"function"!=typeof s.off))return cf.throwError("contract runner does not support subscribing","UNSUPPORTED_OPERATION",{operation:"on"});var s;const{fragment:i,tag:o,topics:a}=await Ef(t,e),{addr:c,subs:l}=vf(t);let u=l.get(o);if(!u){const n={address:c||t,topics:a},s=r=>{const n=new af(t,null,e,i,r);Nf(t,e,n.args,n)};let h=!1;u={tag:o,listeners:[],start:()=>{h||(r.on(n,s),h=!0)},stop:()=>{h&&(r.off(n,s),h=!1)}},l.set(o,u)}return u}let Af=Promise.resolve();async function Nf(t,e,r,n){try{await Af}catch(t){}const s=async function(t,e,r,n){await Af;const s=await Tf(t,e);if(!s)return!1;const i=s.listeners.length;return s.listeners=s.listeners.filter((({listener:s,once:i})=>{const o=r.slice();return n&&o.push(new af(t,i?null:s,e,n.fragment,n.log)),setTimeout((()=>{s.call(t,...o)}),0),!i})),i>0}(t,e,r,n);return Af=s,await s}const Pf=["then"];class xf{constructor(t,e,r=null,s){let i;n(this,{target:t,runner:r,interface:Ao.from(e)}),Object.defineProperty(this,yf,{value:{}});let o=null,a=null;if(s){const t=pf(r,"getLogs");a=new of(this.interface,t,s)}let c=new Map;if("string"==typeof t)if(te(t))o=t,i=Promise.resolve(t);else{const e=pf(r,"resolveName");if(!ff(e))throw cf.makeError("contract runner does not support name resolution","UNSUPPORTED_OPERATION",{operation:"resolveName"});i=e.resolveName(t).then((t=>{if(null==t)throw new Error("TODO");return vf(this).addr=t,t}))}else i=t.getAddress().then((t=>{if(null==t)throw new Error("TODO");return vf(this).addr=t,t}));var l,u;l=this,u={addrPromise:i,addr:o,deployTx:a,subs:c},bf.set(l[yf],u);const h=new Proxy({},{get:(t,e,r)=>{if(Pf.indexOf(e)>=0)return Reflect.get(t,e,r);const n=String(e),s=this.getEvent(n);if(s)return s;throw new Error(`unknown contract event: ${n}`)}});return n(this,{filters:h}),new Proxy(this,{get:(t,e,r)=>{if(e in t||Pf.indexOf(e)>=0)return Reflect.get(t,e,r);const n=String(e),s=t.getFunction(n);if(s)return s;throw new Error(`unknown contract method: ${n}`)}})}async getAddress(){return await vf(this).addrPromise}deploymentTransaction(){return vf(this).deployTx}getFunction(t){return"string"!=typeof t&&(t=t.format()),new gf(this,t)}getEvent(t){return"string"!=typeof t&&(t=t.format()),new mf(this,t)}async queryFilter(t,e=0,r="latest"){const{addr:n,addrPromise:s}=vf(this),i=n||await s,{fragment:o,topics:a}=await Ef(this,t),c={address:i,topics:a,fromBlock:e,toBlock:r},l=pf(this.runner,"getLogs");return(u=l)&&"function"==typeof u.getLogs?(await l.getLogs(c)).map((t=>new nf(t,this.interface,o))):cf.throwError("contract runner does not support querying","UNSUPPORTED_OPERATION",{operation:"getLogs"});var u}async on(t,e){const r=await kf(this,t);return r.listeners.push({listener:e,once:!1}),r.start(),this}async once(t,e){const r=await kf(this,t);return r.listeners.push({listener:e,once:!0}),r.start(),this}async emit(t,...e){return await Nf(this,t,e,null)}async listenerCount(t){if(t){const e=await Tf(this,t);return e?e.listeners.length:0}const{subs:e}=vf(this);let r=0;for(const{listeners:t}of e.values())r+=t.length;return r}async listeners(t){if(t){const e=await Tf(this,t);return e?e.listeners.map((({listener:t})=>t)):[]}const{subs:e}=vf(this);let r=[];for(const{listeners:t}of e.values())r=r.concat(t.map((({listener:t})=>t)));return r}async off(t,e){const r=await Tf(this,t);if(!r)return this;if(e){const t=r.listeners.map((({listener:t})=>t)).indexOf(e);t>=0&&r.listeners.splice(t,1)}return null!=e&&0!==r.listeners.length||(r.stop(),vf(this).subs.delete(r.tag)),this}async removeAllListeners(t){if(t){const e=await Tf(this,t);if(!e)return this;e.stop(),vf(this).subs.delete(e.tag)}else{const{subs:t}=vf(this);for(const{tag:e,stop:r}of t.values())r(),t.delete(e)}return this}async addListener(t,e){return await this.on(t,e)}async removeListener(t,e){return await this.off(t,e)}static buildClass(t){return class extends xf{constructor(e,r=null){super(e,t,r)}}}static from(t,e,r=null){return new this(t,e,r)}}class Of extends(function(){return xf}()){}function If(t){return ds(un("0x"+wc.computePublicKey(t,!1).substring(4)).substring(26))}const Sf=" !#$%&'()*+,-./<=>?@[]^_`{|}~",Rf=/^[a-z]*$/i;function _f(t,e){let r=97;return t.reduce(((t,n)=>(n===e?r++:n.match(Rf)?t.push(String.fromCharCode(r)+n):(r=97,t.push(n)),t)),[])}function Cf(t){if("0"!==t[0])throw TypeError("unsupported auwl data");return function(t,e){for(let r=Sf.length-1;r>=0;r--)t=t.split(Sf[r]).join(e.substring(2*r,2*r+2));const r=[],n=t.replace(/(:|([0-9])|([A-Z][a-z]*))/g,((t,e,n,s)=>{if(n)for(let t=parseInt(n);t>=0;t--)r.push(";");else r.push(e.toLowerCase());return""}));if(n)throw new Error(`leftovers: ${JSON.stringify(n)}`);return _f(_f(r,";"),":")}(t.substring(1+2*Sf.length),t.substring(1,1+2*Sf.length))}const Bf=new N("@ethersproject/wordlists@6.0.0-beta.1");class Ff{constructor(t){n(this,{locale:t})}split(t){return t.toLowerCase().split(/ +/g)}join(t){return t.join(" ")}}var Uf,Lf,Df,Mf,jf,Gf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},$f=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class zf extends Ff{constructor(t,e,r){super(t),Uf.add(this),Lf.set(this,void 0),Df.set(this,void 0),Mf.set(this,void 0),Gf(this,Lf,e,"f"),Gf(this,Df,r,"f"),Gf(this,Mf,null,"f")}get _data(){return $f(this,Lf,"f")}_decodeWords(){return Cf($f(this,Lf,"f"))}getWord(t){const e=$f(this,Uf,"m",jf).call(this);return(t<0||t>=e.length)&&Bf.throwArgumentError(`invalid word index: ${t}`,"index",t),e[t]}getWordIndex(t){return $f(this,Uf,"m",jf).call(this).indexOf(t)}}Lf=new WeakMap,Df=new WeakMap,Mf=new WeakMap,Uf=new WeakSet,jf=function(){if(null==$f(this,Mf,"f")){const t=this._decodeWords();if(_i(t.join("\n")+"\n")!==$f(this,Df,"f"))throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);Gf(this,Mf,t,"f")}return $f(this,Mf,"f")};const Wf=new class extends zf{constructor(){super("en","0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO","0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60")}},Hf=new N("@ethersproject/wallet@6.0.0-beta.1"),Vf=Object.freeze({en:Wf});var Kf,Jf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},qf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Xf extends zf{constructor(t,e,r,n){super(t,e,n),Kf.set(this,void 0),Jf(this,Kf,r,"f")}get _accent(){return qf(this,Kf,"f")}_decodeWords(){return function(t,e){let r=Cf(t).join(",");return e.split(/,/g).forEach((t=>{const e=t.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);if(!e)throw new Error("internal error parsing accents");let n=0;const s=function(t,e){const r=(1<=t;){const e=s>>i-t;s&=(1<(0==--s[n]&&(e=String.fromCharCode(e.charCodeAt(0),i),n++),e)))})),r.split(",")}(this._data,this._accent)}}function Yf(t){return(1<24)&&Hf.throwArgumentError("invalid mnemonic length","mnemonic","[ REDACTED ]");const n=ie(new Uint8Array(Math.ceil(11*r.length/8)));let s=0;for(let t=0;t>3]|=1<<7-s%8),s++}const i=32*r.length/3,o=Yf(r.length/3);return(ie(ns(n.slice(0,i/8)))[0]&o)!==(n[n.length-1]&o)&&Hf.throwArgumentError("invalid mnemonic checksum","mnemonic","[ REDACTED ]"),ue(n.slice(0,i/8))}function Qf(t,e=Wf){(t.length%4||t.length<16||t.length>32)&&Hf.throwArgumentError("invalid entropy size","entropy","[ REDACTED ]"),null==e&&(e=Wf);const r=[0];let n=11;for(let e=0;e8?(r[r.length-1]<<=8,r[r.length-1]|=t[e],n-=8):(r[r.length-1]<<=n,r[r.length-1]|=t[e]>>8-n,r.push(t[e]&((1<<8-n)-1&255)),n+=3);const s=t.length/4,i=parseInt(ns(t).substring(2,4),16)&Yf(s);return r[r.length-1]<<=s,r[r.length-1]|=i>>8-s,e.join(r.map((t=>e.getWord(t))))}Kf=new WeakMap;const td={};class ed{constructor(t,e,r,s,i){null==s&&(s=""),null==i&&(i=Wf),Hf.assertPrivate(t,td,"Mnemonic"),n(this,{phrase:r,password:s,wordlist:i,entropy:e})}computeSeed(){const e=ii("mnemonic"+this.password,t.UnicodeNormalizationForm.NFKD);return Cn(ii(this.phrase,t.UnicodeNormalizationForm.NFKD),e,2048,64,"sha512")}static fromPhrase(t,e,r){const n=Zf(t,r);return t=Qf(Hf.getBytes(n),r),new ed(td,n,t,e,r)}static fromEntropy(t,e,r){const n=Hf.getBytes(t,"entropy"),s=Qf(n,r);return new ed(td,ue(n),s,e,r)}static entropyToPhrase(t,e){return Qf(Hf.getBytes(t,"entropy"),e)}static phraseToEntropy(t,e){return Zf(t,e)}static isValidMnemonic(t,e){try{return Zf(t,e),!0}catch(t){}return!1}}var rd,nd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},sd=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class id extends gu{constructor(t,e){super(e),rd.set(this,void 0),nd(this,rd,t,"f");n(this,{address:If(this.signingKey.publicKey)})}get signingKey(){return sd(this,rd,"f")}get privateKey(){return this.signingKey.privateKey}async getAddress(){return this.address}connect(t){return new id(sd(this,rd,"f"),t)}async signTransaction(t){const r=Object.assign({},t,await e({to:t.to?Is(t.to,this.provider):void 0,from:t.from?Is(t.from,this.provider):void 0}));null!=r.from&&(ds(r.from)!==this.address&&Hf.throwArgumentError("transaction from address mismatch","tx.from",t.from),delete r.from);const n=Oc.from(r);return n.signature=this.signingKey.sign(n.unsignedHash),n.serialized}async signMessage(t){return this.signingKey.sign(ji(t)).serialized}async signTypedData(t,e,r){const n=await ao.resolveNames(t,e,r,(async t=>{if(null==this.provider)return Hf.throwError("cannot resolve ENS names without a provider","UNSUPPORTED_OPERATION",{operation:"resolveName",info:{name:t}});const e=await this.provider.resolveName(t);return null==e?Hf.throwError("unconfigured ENS name","UNCONFIGURED_NAME",{value:t}):e}));return this.signingKey.sign(ao.hash(n.domain,e,n.value)).serialized}}rd=new WeakMap;var od,ad,cd,ld=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)},ud=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r};const hd="m/44'/60'/0'/0/0",fd=new Uint8Array([66,105,116,99,111,105,110,32,115,101,101,100]),dd=2147483648,pd=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141");function wd(t,e){let r="";for(;t;)r="0123456789abcdef"[t%16]+r,t=Math.trunc(t/16);for(;r.length<2*e;)r="0"+r;return"0x"+r}function gd(t){const e=Hf.getBytes(t);return Zt(fe([e,pe(ns(ns(e)),0,4)]))}const md={};function yd(t,e,r,n){const s=new Uint8Array(37);if(t&dd){if(null==n)return Hf.throwError("cannot derive child of neutered node","UNSUPPORTED_OPERATION",{operation:"deriveChild"});s.set(ie(n),1)}else s.set(ie(r));for(let e=24;e>=0;e-=8)s[33+(e>>3)]=t>>24-e&255;const i=ie($r("sha512",e,s));return{IL:i.slice(0,32),IR:i.slice(32)}}function bd(t,e){const r=e.split("/");if(0===r.length||"m"===r[0]&&0!==t.depth)throw new Error("invalid path - "+e);"m"===r[0]&&r.shift();let n=t;for(let t=0;t=dd)throw new Error("invalid path index - "+e);n=n.deriveChild(dd+t)}else{if(!e.match(/^[0-9]+$/))throw new Error("invalid path component - "+e);{const t=parseInt(e);if(t>=dd)throw new Error("invalid path index - "+e);n=n.deriveChild(t)}}}return n}class vd extends id{constructor(t,e,r,s,i,o,a,c,l){super(e,l),Hf.assertPrivate(t,md,"HDNodeWallet"),n(this,{publicKey:e.compressedPublicKey});n(this,{parentFingerprint:r,fingerprint:pe(In(ns(this.publicKey)),0,4),chainCode:s,path:i,index:o,depth:a}),n(this,{mnemonic:c})}connect(t){return new vd(md,this.signingKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,this.mnemonic,t)}get extendedKey(){if(this.depth>=256)throw new Error("Depth too large!");return gd(fe(["0x0488ADE4",wd(this.depth,1),this.parentFingerprint,wd(this.index,4),this.chainCode,fe(["0x00",this.privateKey])]))}hasPath(){return null!=this.path}neuter(){return new Ed(md,this.address,this.publicKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,this.provider)}deriveChild(t){const e=Hf.getNumber(t,"index");if(e>4294967295)throw new Error("invalid index - "+String(e));let r=this.path;r&&(r+="/"+(2147483647&e),e&dd&&(r+="'"));const{IR:n,IL:s}=yd(e,this.chainCode,this.publicKey,this.privateKey),i=new wc(At((Tt(s)+BigInt(this.privateKey))%pd,32));return new vd(md,i,this.fingerprint,ue(n),r,e,this.depth+1,this.mnemonic,this.provider)}derivePath(t){return bd(this,t)}static fromSeed(t){return ld(vd,od,"m",ad).call(vd,t,null)}static fromPhrase(t,e="",r=hd,n=Wf){r||(r=hd);const s=ed.fromPhrase(t,e,n);return ld(vd,od,"m",ad).call(vd,s.computeSeed(),s).derivePath(r)}static fromMnemonic(t,e=hd){return e||(e=hd),ld(vd,od,"m",ad).call(vd,t.computeSeed(),t).derivePath(e)}static fromExtendedKey(t){const e=ie(Qt(t));82===e.length&&gd(e.slice(0,78))===t||Hf.throwArgumentError("invalid extended key","extendedKey","[ REDACTED ]");const r=e[4],n=ue(e.slice(5,9)),s=parseInt(ue(e.slice(9,13)).substring(2),16),i=ue(e.slice(13,45)),o=e.slice(45,78);switch(ue(e.slice(0,4))){case"0x0488b21e":case"0x043587cf":{const t=ue(o);return new Ed(md,If(t),t,n,i,null,s,r,null)}case"0x0488ade4":case"0x04358394 ":if(0!==o[0])break;return new vd(md,new wc(o.slice(1)),n,i,null,s,r,null,null)}return Hf.throwArgumentError("invalid extended key prefix","extendedKey","[ REDACTED ]")}static createRandom(t="",e=hd,r=Wf){e||(e=hd);const n=ed.fromEntropy(Ln(16),t,r);return ld(vd,od,"m",ad).call(vd,n.computeSeed(),n).derivePath(e)}}od=vd,ad=function(t,e){const r=Hf.getBytes(t,"seed");if(r.length<16||r.length>64)throw new Error("invalid seed");const n=ie($r("sha512",fd,r)),s=new wc(ue(n.slice(0,32)));return new vd(md,s,"0x00000000",ue(n.slice(32)),"m",0,0,e,null)};class Ed extends mu{constructor(t,e,r,s,i,o,a,c,l){super(e,l),Hf.assertPrivate(t,md,"HDNodeVoidWallet"),n(this,{publicKey:r});n(this,{publicKey:r,fingerprint:pe(In(ns(r)),0,4),parentFingerprint:s,chainCode:i,path:o,index:a,depth:c})}connect(t){return new Ed(md,this.address,this.publicKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,t)}get extendedKey(){if(this.depth>=256)throw new Error("Depth too large!");return gd(fe(["0x0488B21E",wd(this.depth,1),this.parentFingerprint,wd(this.index,4),this.chainCode,this.publicKey]))}hasPath(){return null!=this.path}deriveChild(t){const e=Hf.getNumber(t,"index");if(e>4294967295)throw new Error("invalid index - "+String(e));let r=this.path;r&&(r+="/"+(2147483647&e),e&dd&&(r+="'"));const{IR:n,IL:s}=yd(e,this.chainCode,this.publicKey,null),i=wc._addPoints(s,this.publicKey,!0),o=If(i);return new Ed(md,o,i,this.fingerprint,ue(n),r,e,this.depth+1,this.provider)}derivePath(t){return bd(this,t)}}class Td{constructor(t,e="",r="m/44'/60'/0'/0",n=Wf){cd.set(this,void 0),ud(this,cd,vd.fromPhrase(t,e,r,n),"f")}getSigner(t=0){return ld(this,cd,"f").deriveChild(t)}}function kd(t){const e=Hf.getNumber(t,"index");return(e<0||e>=dd)&&Hf.throwArgumentError("invalid account index","index",e),`m/44'/60'/${e}'/0/0`} +/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */cd=new WeakMap;var Ad,Nd,Pd,xd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Od=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Id={16:10,24:12,32:14},Sd=[1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145],Rd=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],_d=[82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125],Cd=[3328402341,4168907908,4000806809,4135287693,4294111757,3597364157,3731845041,2445657428,1613770832,33620227,3462883241,1445669757,3892248089,3050821474,1303096294,3967186586,2412431941,528646813,2311702848,4202528135,4026202645,2992200171,2387036105,4226871307,1101901292,3017069671,1604494077,1169141738,597466303,1403299063,3832705686,2613100635,1974974402,3791519004,1033081774,1277568618,1815492186,2118074177,4126668546,2211236943,1748251740,1369810420,3521504564,4193382664,3799085459,2883115123,1647391059,706024767,134480908,2512897874,1176707941,2646852446,806885416,932615841,168101135,798661301,235341577,605164086,461406363,3756188221,3454790438,1311188841,2142417613,3933566367,302582043,495158174,1479289972,874125870,907746093,3698224818,3025820398,1537253627,2756858614,1983593293,3084310113,2108928974,1378429307,3722699582,1580150641,327451799,2790478837,3117535592,0,3253595436,1075847264,3825007647,2041688520,3059440621,3563743934,2378943302,1740553945,1916352843,2487896798,2555137236,2958579944,2244988746,3151024235,3320835882,1336584933,3992714006,2252555205,2588757463,1714631509,293963156,2319795663,3925473552,67240454,4269768577,2689618160,2017213508,631218106,1269344483,2723238387,1571005438,2151694528,93294474,1066570413,563977660,1882732616,4059428100,1673313503,2008463041,2950355573,1109467491,537923632,3858759450,4260623118,3218264685,2177748300,403442708,638784309,3287084079,3193921505,899127202,2286175436,773265209,2479146071,1437050866,4236148354,2050833735,3362022572,3126681063,840505643,3866325909,3227541664,427917720,2655997905,2749160575,1143087718,1412049534,999329963,193497219,2353415882,3354324521,1807268051,672404540,2816401017,3160301282,369822493,2916866934,3688947771,1681011286,1949973070,336202270,2454276571,201721354,1210328172,3093060836,2680341085,3184776046,1135389935,3294782118,965841320,831886756,3554993207,4068047243,3588745010,2345191491,1849112409,3664604599,26054028,2983581028,2622377682,1235855840,3630984372,2891339514,4092916743,3488279077,3395642799,4101667470,1202630377,268961816,1874508501,4034427016,1243948399,1546530418,941366308,1470539505,1941222599,2546386513,3421038627,2715671932,3899946140,1042226977,2521517021,1639824860,227249030,260737669,3765465232,2084453954,1907733956,3429263018,2420656344,100860677,4160157185,470683154,3261161891,1781871967,2924959737,1773779408,394692241,2579611992,974986535,664706745,3655459128,3958962195,731420851,571543859,3530123707,2849626480,126783113,865375399,765172662,1008606754,361203602,3387549984,2278477385,2857719295,1344809080,2782912378,59542671,1503764984,160008576,437062935,1707065306,3622233649,2218934982,3496503480,2185314755,697932208,1512910199,504303377,2075177163,2824099068,1841019862,739644986],Bd=[2781242211,2230877308,2582542199,2381740923,234877682,3184946027,2984144751,1418839493,1348481072,50462977,2848876391,2102799147,434634494,1656084439,3863849899,2599188086,1167051466,2636087938,1082771913,2281340285,368048890,3954334041,3381544775,201060592,3963727277,1739838676,4250903202,3930435503,3206782108,4149453988,2531553906,1536934080,3262494647,484572669,2923271059,1783375398,1517041206,1098792767,49674231,1334037708,1550332980,4098991525,886171109,150598129,2481090929,1940642008,1398944049,1059722517,201851908,1385547719,1699095331,1587397571,674240536,2704774806,252314885,3039795866,151914247,908333586,2602270848,1038082786,651029483,1766729511,3447698098,2682942837,454166793,2652734339,1951935532,775166490,758520603,3000790638,4004797018,4217086112,4137964114,1299594043,1639438038,3464344499,2068982057,1054729187,1901997871,2534638724,4121318227,1757008337,0,750906861,1614815264,535035132,3363418545,3988151131,3201591914,1183697867,3647454910,1265776953,3734260298,3566750796,3903871064,1250283471,1807470800,717615087,3847203498,384695291,3313910595,3617213773,1432761139,2484176261,3481945413,283769337,100925954,2180939647,4037038160,1148730428,3123027871,3813386408,4087501137,4267549603,3229630528,2315620239,2906624658,3156319645,1215313976,82966005,3747855548,3245848246,1974459098,1665278241,807407632,451280895,251524083,1841287890,1283575245,337120268,891687699,801369324,3787349855,2721421207,3431482436,959321879,1469301956,4065699751,2197585534,1199193405,2898814052,3887750493,724703513,2514908019,2696962144,2551808385,3516813135,2141445340,1715741218,2119445034,2872807568,2198571144,3398190662,700968686,3547052216,1009259540,2041044702,3803995742,487983883,1991105499,1004265696,1449407026,1316239930,504629770,3683797321,168560134,1816667172,3837287516,1570751170,1857934291,4014189740,2797888098,2822345105,2754712981,936633572,2347923833,852879335,1133234376,1500395319,3084545389,2348912013,1689376213,3533459022,3762923945,3034082412,4205598294,133428468,634383082,2949277029,2398386810,3913789102,403703816,3580869306,2297460856,1867130149,1918643758,607656988,4049053350,3346248884,1368901318,600565992,2090982877,2632479860,557719327,3717614411,3697393085,2249034635,2232388234,2430627952,1115438654,3295786421,2865522278,3633334344,84280067,33027830,303828494,2747425121,1600795957,4188952407,3496589753,2434238086,1486471617,658119965,3106381470,953803233,334231800,3005978776,857870609,3151128937,1890179545,2298973838,2805175444,3056442267,574365214,2450884487,550103529,1233637070,4289353045,2018519080,2057691103,2399374476,4166623649,2148108681,387583245,3664101311,836232934,3330556482,3100665960,3280093505,2955516313,2002398509,287182607,3413881008,4238890068,3597515707,975967766],Fd=[1671808611,2089089148,2006576759,2072901243,4061003762,1807603307,1873927791,3310653893,810573872,16974337,1739181671,729634347,4263110654,3613570519,2883997099,1989864566,3393556426,2191335298,3376449993,2106063485,4195741690,1508618841,1204391495,4027317232,2917941677,3563566036,2734514082,2951366063,2629772188,2767672228,1922491506,3227229120,3082974647,4246528509,2477669779,644500518,911895606,1061256767,4144166391,3427763148,878471220,2784252325,3845444069,4043897329,1905517169,3631459288,827548209,356461077,67897348,3344078279,593839651,3277757891,405286936,2527147926,84871685,2595565466,118033927,305538066,2157648768,3795705826,3945188843,661212711,2999812018,1973414517,152769033,2208177539,745822252,439235610,455947803,1857215598,1525593178,2700827552,1391895634,994932283,3596728278,3016654259,695947817,3812548067,795958831,2224493444,1408607827,3513301457,0,3979133421,543178784,4229948412,2982705585,1542305371,1790891114,3410398667,3201918910,961245753,1256100938,1289001036,1491644504,3477767631,3496721360,4012557807,2867154858,4212583931,1137018435,1305975373,861234739,2241073541,1171229253,4178635257,33948674,2139225727,1357946960,1011120188,2679776671,2833468328,1374921297,2751356323,1086357568,2408187279,2460827538,2646352285,944271416,4110742005,3168756668,3066132406,3665145818,560153121,271589392,4279952895,4077846003,3530407890,3444343245,202643468,322250259,3962553324,1608629855,2543990167,1154254916,389623319,3294073796,2817676711,2122513534,1028094525,1689045092,1575467613,422261273,1939203699,1621147744,2174228865,1339137615,3699352540,577127458,712922154,2427141008,2290289544,1187679302,3995715566,3100863416,339486740,3732514782,1591917662,186455563,3681988059,3762019296,844522546,978220090,169743370,1239126601,101321734,611076132,1558493276,3260915650,3547250131,2901361580,1655096418,2443721105,2510565781,3828863972,2039214713,3878868455,3359869896,928607799,1840765549,2374762893,3580146133,1322425422,2850048425,1823791212,1459268694,4094161908,3928346602,1706019429,2056189050,2934523822,135794696,3134549946,2022240376,628050469,779246638,472135708,2800834470,3032970164,3327236038,3894660072,3715932637,1956440180,522272287,1272813131,3185336765,2340818315,2323976074,1888542832,1044544574,3049550261,1722469478,1222152264,50660867,4127324150,236067854,1638122081,895445557,1475980887,3117443513,2257655686,3243809217,489110045,2662934430,3778599393,4162055160,2561878936,288563729,1773916777,3648039385,2391345038,2493985684,2612407707,505560094,2274497927,3911240169,3460925390,1442818645,678973480,3749357023,2358182796,2717407649,2306869641,219617805,3218761151,3862026214,1120306242,1756942440,1103331905,2578459033,762796589,252780047,2966125488,1425844308,3151392187,372911126],Ud=[1667474886,2088535288,2004326894,2071694838,4075949567,1802223062,1869591006,3318043793,808472672,16843522,1734846926,724270422,4278065639,3621216949,2880169549,1987484396,3402253711,2189597983,3385409673,2105378810,4210693615,1499065266,1195886990,4042263547,2913856577,3570689971,2728590687,2947541573,2627518243,2762274643,1920112356,3233831835,3082273397,4261223649,2475929149,640051788,909531756,1061110142,4160160501,3435941763,875846760,2779116625,3857003729,4059105529,1903268834,3638064043,825316194,353713962,67374088,3351728789,589522246,3284360861,404236336,2526454071,84217610,2593830191,117901582,303183396,2155911963,3806477791,3958056653,656894286,2998062463,1970642922,151591698,2206440989,741110872,437923380,454765878,1852748508,1515908788,2694904667,1381168804,993742198,3604373943,3014905469,690584402,3823320797,791638366,2223281939,1398011302,3520161977,0,3991743681,538992704,4244381667,2981218425,1532751286,1785380564,3419096717,3200178535,960056178,1246420628,1280103576,1482221744,3486468741,3503319995,4025428677,2863326543,4227536621,1128514950,1296947098,859002214,2240123921,1162203018,4193849577,33687044,2139062782,1347481760,1010582648,2678045221,2829640523,1364325282,2745433693,1077985408,2408548869,2459086143,2644360225,943212656,4126475505,3166494563,3065430391,3671750063,555836226,269496352,4294908645,4092792573,3537006015,3452783745,202118168,320025894,3974901699,1600119230,2543297077,1145359496,387397934,3301201811,2812801621,2122220284,1027426170,1684319432,1566435258,421079858,1936954854,1616945344,2172753945,1330631070,3705438115,572679748,707427924,2425400123,2290647819,1179044492,4008585671,3099120491,336870440,3739122087,1583276732,185277718,3688593069,3772791771,842159716,976899700,168435220,1229577106,101059084,606366792,1549591736,3267517855,3553849021,2897014595,1650632388,2442242105,2509612081,3840161747,2038008818,3890688725,3368567691,926374254,1835907034,2374863873,3587531953,1313788572,2846482505,1819063512,1448540844,4109633523,3941213647,1701162954,2054852340,2930698567,134748176,3132806511,2021165296,623210314,774795868,471606328,2795958615,3031746419,3334885783,3907527627,3722280097,1953799400,522133822,1263263126,3183336545,2341176845,2324333839,1886425312,1044267644,3048588401,1718004428,1212733584,50529542,4143317495,235803164,1633788866,892690282,1465383342,3115962473,2256965911,3250673817,488449850,2661202215,3789633753,4177007595,2560144171,286339874,1768537042,3654906025,2391705863,2492770099,2610673197,505291324,2273808917,3924369609,3469625735,1431699370,673740880,3755965093,2358021891,2711746649,2307489801,218961690,3217021541,3873845719,1111672452,1751693520,1094828930,2576986153,757954394,252645662,2964376443,1414855848,3149649517,370555436],Ld=[1374988112,2118214995,437757123,975658646,1001089995,530400753,2902087851,1273168787,540080725,2910219766,2295101073,4110568485,1340463100,3307916247,641025152,3043140495,3736164937,632953703,1172967064,1576976609,3274667266,2169303058,2370213795,1809054150,59727847,361929877,3211623147,2505202138,3569255213,1484005843,1239443753,2395588676,1975683434,4102977912,2572697195,666464733,3202437046,4035489047,3374361702,2110667444,1675577880,3843699074,2538681184,1649639237,2976151520,3144396420,4269907996,4178062228,1883793496,2403728665,2497604743,1383856311,2876494627,1917518562,3810496343,1716890410,3001755655,800440835,2261089178,3543599269,807962610,599762354,33778362,3977675356,2328828971,2809771154,4077384432,1315562145,1708848333,101039829,3509871135,3299278474,875451293,2733856160,92987698,2767645557,193195065,1080094634,1584504582,3178106961,1042385657,2531067453,3711829422,1306967366,2438237621,1908694277,67556463,1615861247,429456164,3602770327,2302690252,1742315127,2968011453,126454664,3877198648,2043211483,2709260871,2084704233,4169408201,0,159417987,841739592,504459436,1817866830,4245618683,260388950,1034867998,908933415,168810852,1750902305,2606453969,607530554,202008497,2472011535,3035535058,463180190,2160117071,1641816226,1517767529,470948374,3801332234,3231722213,1008918595,303765277,235474187,4069246893,766945465,337553864,1475418501,2943682380,4003061179,2743034109,4144047775,1551037884,1147550661,1543208500,2336434550,3408119516,3069049960,3102011747,3610369226,1113818384,328671808,2227573024,2236228733,3535486456,2935566865,3341394285,496906059,3702665459,226906860,2009195472,733156972,2842737049,294930682,1206477858,2835123396,2700099354,1451044056,573804783,2269728455,3644379585,2362090238,2564033334,2801107407,2776292904,3669462566,1068351396,742039012,1350078989,1784663195,1417561698,4136440770,2430122216,775550814,2193862645,2673705150,1775276924,1876241833,3475313331,3366754619,270040487,3902563182,3678124923,3441850377,1851332852,3969562369,2203032232,3868552805,2868897406,566021896,4011190502,3135740889,1248802510,3936291284,699432150,832877231,708780849,3332740144,899835584,1951317047,4236429990,3767586992,866637845,4043610186,1106041591,2144161806,395441711,1984812685,1139781709,3433712980,3835036895,2664543715,1282050075,3240894392,1181045119,2640243204,25965917,4203181171,4211818798,3009879386,2463879762,3910161971,1842759443,2597806476,933301370,1509430414,3943906441,3467192302,3076639029,3776767469,2051518780,2631065433,1441952575,404016761,1942435775,1408749034,1610459739,3745345300,2017778566,3400528769,3110650942,941896748,3265478751,371049330,3168937228,675039627,4279080257,967311729,135050206,3635733660,1683407248,2076935265,3576870512,1215061108,3501741890],Dd=[1347548327,1400783205,3273267108,2520393566,3409685355,4045380933,2880240216,2471224067,1428173050,4138563181,2441661558,636813900,4233094615,3620022987,2149987652,2411029155,1239331162,1730525723,2554718734,3781033664,46346101,310463728,2743944855,3328955385,3875770207,2501218972,3955191162,3667219033,768917123,3545789473,692707433,1150208456,1786102409,2029293177,1805211710,3710368113,3065962831,401639597,1724457132,3028143674,409198410,2196052529,1620529459,1164071807,3769721975,2226875310,486441376,2499348523,1483753576,428819965,2274680428,3075636216,598438867,3799141122,1474502543,711349675,129166120,53458370,2592523643,2782082824,4063242375,2988687269,3120694122,1559041666,730517276,2460449204,4042459122,2706270690,3446004468,3573941694,533804130,2328143614,2637442643,2695033685,839224033,1973745387,957055980,2856345839,106852767,1371368976,4181598602,1033297158,2933734917,1179510461,3046200461,91341917,1862534868,4284502037,605657339,2547432937,3431546947,2003294622,3182487618,2282195339,954669403,3682191598,1201765386,3917234703,3388507166,0,2198438022,1211247597,2887651696,1315723890,4227665663,1443857720,507358933,657861945,1678381017,560487590,3516619604,975451694,2970356327,261314535,3535072918,2652609425,1333838021,2724322336,1767536459,370938394,182621114,3854606378,1128014560,487725847,185469197,2918353863,3106780840,3356761769,2237133081,1286567175,3152976349,4255350624,2683765030,3160175349,3309594171,878443390,1988838185,3704300486,1756818940,1673061617,3403100636,272786309,1075025698,545572369,2105887268,4174560061,296679730,1841768865,1260232239,4091327024,3960309330,3497509347,1814803222,2578018489,4195456072,575138148,3299409036,446754879,3629546796,4011996048,3347532110,3252238545,4270639778,915985419,3483825537,681933534,651868046,2755636671,3828103837,223377554,2607439820,1649704518,3270937875,3901806776,1580087799,4118987695,3198115200,2087309459,2842678573,3016697106,1003007129,2802849917,1860738147,2077965243,164439672,4100872472,32283319,2827177882,1709610350,2125135846,136428751,3874428392,3652904859,3460984630,3572145929,3593056380,2939266226,824852259,818324884,3224740454,930369212,2801566410,2967507152,355706840,1257309336,4148292826,243256656,790073846,2373340630,1296297904,1422699085,3756299780,3818836405,457992840,3099667487,2135319889,77422314,1560382517,1945798516,788204353,1521706781,1385356242,870912086,325965383,2358957921,2050466060,2388260884,2313884476,4006521127,901210569,3990953189,1014646705,1503449823,1062597235,2031621326,3212035895,3931371469,1533017514,350174575,2256028891,2177544179,1052338372,741876788,1606591296,1914052035,213705253,2334669897,1107234197,1899603969,3725069491,2631447780,2422494913,1635502980,1893020342,1950903388,1120974935],Md=[2807058932,1699970625,2764249623,1586903591,1808481195,1173430173,1487645946,59984867,4199882800,1844882806,1989249228,1277555970,3623636965,3419915562,1149249077,2744104290,1514790577,459744698,244860394,3235995134,1963115311,4027744588,2544078150,4190530515,1608975247,2627016082,2062270317,1507497298,2200818878,567498868,1764313568,3359936201,2305455554,2037970062,1047239e3,1910319033,1337376481,2904027272,2892417312,984907214,1243112415,830661914,861968209,2135253587,2011214180,2927934315,2686254721,731183368,1750626376,4246310725,1820824798,4172763771,3542330227,48394827,2404901663,2871682645,671593195,3254988725,2073724613,145085239,2280796200,2779915199,1790575107,2187128086,472615631,3029510009,4075877127,3802222185,4107101658,3201631749,1646252340,4270507174,1402811438,1436590835,3778151818,3950355702,3963161475,4020912224,2667994737,273792366,2331590177,104699613,95345982,3175501286,2377486676,1560637892,3564045318,369057872,4213447064,3919042237,1137477952,2658625497,1119727848,2340947849,1530455833,4007360968,172466556,266959938,516552836,0,2256734592,3980931627,1890328081,1917742170,4294704398,945164165,3575528878,958871085,3647212047,2787207260,1423022939,775562294,1739656202,3876557655,2530391278,2443058075,3310321856,547512796,1265195639,437656594,3121275539,719700128,3762502690,387781147,218828297,3350065803,2830708150,2848461854,428169201,122466165,3720081049,1627235199,648017665,4122762354,1002783846,2117360635,695634755,3336358691,4234721005,4049844452,3704280881,2232435299,574624663,287343814,612205898,1039717051,840019705,2708326185,793451934,821288114,1391201670,3822090177,376187827,3113855344,1224348052,1679968233,2361698556,1058709744,752375421,2431590963,1321699145,3519142200,2734591178,188127444,2177869557,3727205754,2384911031,3215212461,2648976442,2450346104,3432737375,1180849278,331544205,3102249176,4150144569,2952102595,2159976285,2474404304,766078933,313773861,2570832044,2108100632,1668212892,3145456443,2013908262,418672217,3070356634,2594734927,1852171925,3867060991,3473416636,3907448597,2614737639,919489135,164948639,2094410160,2997825956,590424639,2486224549,1723872674,3157750862,3399941250,3501252752,3625268135,2555048196,3673637356,1343127501,4130281361,3599595085,2957853679,1297403050,81781910,3051593425,2283490410,532201772,1367295589,3926170974,895287692,1953757831,1093597963,492483431,3528626907,1446242576,1192455638,1636604631,209336225,344873464,1015671571,669961897,3375740769,3857572124,2973530695,3747192018,1933530610,3464042516,935293895,3454686199,2858115069,1863638845,3683022916,4085369519,3292445032,875313188,1080017571,3279033885,621591778,1233856572,2504130317,24197544,3017672716,3835484340,3247465558,2220981195,3060847922,1551124588,1463996600],jd=[4104605777,1097159550,396673818,660510266,2875968315,2638606623,4200115116,3808662347,821712160,1986918061,3430322568,38544885,3856137295,718002117,893681702,1654886325,2975484382,3122358053,3926825029,4274053469,796197571,1290801793,1184342925,3556361835,2405426947,2459735317,1836772287,1381620373,3196267988,1948373848,3764988233,3385345166,3263785589,2390325492,1480485785,3111247143,3780097726,2293045232,548169417,3459953789,3746175075,439452389,1362321559,1400849762,1685577905,1806599355,2174754046,137073913,1214797936,1174215055,3731654548,2079897426,1943217067,1258480242,529487843,1437280870,3945269170,3049390895,3313212038,923313619,679998e3,3215307299,57326082,377642221,3474729866,2041877159,133361907,1776460110,3673476453,96392454,878845905,2801699524,777231668,4082475170,2330014213,4142626212,2213296395,1626319424,1906247262,1846563261,562755902,3708173718,1040559837,3871163981,1418573201,3294430577,114585348,1343618912,2566595609,3186202582,1078185097,3651041127,3896688048,2307622919,425408743,3371096953,2081048481,1108339068,2216610296,0,2156299017,736970802,292596766,1517440620,251657213,2235061775,2933202493,758720310,265905162,1554391400,1532285339,908999204,174567692,1474760595,4002861748,2610011675,3234156416,3693126241,2001430874,303699484,2478443234,2687165888,585122620,454499602,151849742,2345119218,3064510765,514443284,4044981591,1963412655,2581445614,2137062819,19308535,1928707164,1715193156,4219352155,1126790795,600235211,3992742070,3841024952,836553431,1669664834,2535604243,3323011204,1243905413,3141400786,4180808110,698445255,2653899549,2989552604,2253581325,3252932727,3004591147,1891211689,2487810577,3915653703,4237083816,4030667424,2100090966,865136418,1229899655,953270745,3399679628,3557504664,4118925222,2061379749,3079546586,2915017791,983426092,2022837584,1607244650,2118541908,2366882550,3635996816,972512814,3283088770,1568718495,3499326569,3576539503,621982671,2895723464,410887952,2623762152,1002142683,645401037,1494807662,2595684844,1335535747,2507040230,4293295786,3167684641,367585007,3885750714,1865862730,2668221674,2960971305,2763173681,1059270954,2777952454,2724642869,1320957812,2194319100,2429595872,2815956275,77089521,3973773121,3444575871,2448830231,1305906550,4021308739,2857194700,2516901860,3518358430,1787304780,740276417,1699839814,1592394909,2352307457,2272556026,188821243,1729977011,3687994002,274084841,3594982253,3613494426,2701949495,4162096729,322734571,2837966542,1640576439,484830689,1202797690,3537852828,4067639125,349075736,3342319475,4157467219,4255800159,1030690015,1155237496,2951971274,1757691577,607398968,2738905026,499347990,3794078908,1011452712,227885567,2818666809,213114376,3034881240,1455525988,3414450555,850817237,1817998408,3092726480],Gd=[0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795],$d=[0,185469197,370938394,487725847,741876788,657861945,975451694,824852259,1483753576,1400783205,1315723890,1164071807,1950903388,2135319889,1649704518,1767536459,2967507152,3152976349,2801566410,2918353863,2631447780,2547432937,2328143614,2177544179,3901806776,3818836405,4270639778,4118987695,3299409036,3483825537,3535072918,3652904859,2077965243,1893020342,1841768865,1724457132,1474502543,1559041666,1107234197,1257309336,598438867,681933534,901210569,1052338372,261314535,77422314,428819965,310463728,3409685355,3224740454,3710368113,3593056380,3875770207,3960309330,4045380933,4195456072,2471224067,2554718734,2237133081,2388260884,3212035895,3028143674,2842678573,2724322336,4138563181,4255350624,3769721975,3955191162,3667219033,3516619604,3431546947,3347532110,2933734917,2782082824,3099667487,3016697106,2196052529,2313884476,2499348523,2683765030,1179510461,1296297904,1347548327,1533017514,1786102409,1635502980,2087309459,2003294622,507358933,355706840,136428751,53458370,839224033,957055980,605657339,790073846,2373340630,2256028891,2607439820,2422494913,2706270690,2856345839,3075636216,3160175349,3573941694,3725069491,3273267108,3356761769,4181598602,4063242375,4011996048,3828103837,1033297158,915985419,730517276,545572369,296679730,446754879,129166120,213705253,1709610350,1860738147,1945798516,2029293177,1239331162,1120974935,1606591296,1422699085,4148292826,4233094615,3781033664,3931371469,3682191598,3497509347,3446004468,3328955385,2939266226,2755636671,3106780840,2988687269,2198438022,2282195339,2501218972,2652609425,1201765386,1286567175,1371368976,1521706781,1805211710,1620529459,2105887268,1988838185,533804130,350174575,164439672,46346101,870912086,954669403,636813900,788204353,2358957921,2274680428,2592523643,2441661558,2695033685,2880240216,3065962831,3182487618,3572145929,3756299780,3270937875,3388507166,4174560061,4091327024,4006521127,3854606378,1014646705,930369212,711349675,560487590,272786309,457992840,106852767,223377554,1678381017,1862534868,1914052035,2031621326,1211247597,1128014560,1580087799,1428173050,32283319,182621114,401639597,486441376,768917123,651868046,1003007129,818324884,1503449823,1385356242,1333838021,1150208456,1973745387,2125135846,1673061617,1756818940,2970356327,3120694122,2802849917,2887651696,2637442643,2520393566,2334669897,2149987652,3917234703,3799141122,4284502037,4100872472,3309594171,3460984630,3545789473,3629546796,2050466060,1899603969,1814803222,1730525723,1443857720,1560382517,1075025698,1260232239,575138148,692707433,878443390,1062597235,243256656,91341917,409198410,325965383,3403100636,3252238545,3704300486,3620022987,3874428392,3990953189,4042459122,4227665663,2460449204,2578018489,2226875310,2411029155,3198115200,3046200461,2827177882,2743944855],zd=[0,218828297,437656594,387781147,875313188,958871085,775562294,590424639,1750626376,1699970625,1917742170,2135253587,1551124588,1367295589,1180849278,1265195639,3501252752,3720081049,3399941250,3350065803,3835484340,3919042237,4270507174,4085369519,3102249176,3051593425,2734591178,2952102595,2361698556,2177869557,2530391278,2614737639,3145456443,3060847922,2708326185,2892417312,2404901663,2187128086,2504130317,2555048196,3542330227,3727205754,3375740769,3292445032,3876557655,3926170974,4246310725,4027744588,1808481195,1723872674,1910319033,2094410160,1608975247,1391201670,1173430173,1224348052,59984867,244860394,428169201,344873464,935293895,984907214,766078933,547512796,1844882806,1627235199,2011214180,2062270317,1507497298,1423022939,1137477952,1321699145,95345982,145085239,532201772,313773861,830661914,1015671571,731183368,648017665,3175501286,2957853679,2807058932,2858115069,2305455554,2220981195,2474404304,2658625497,3575528878,3625268135,3473416636,3254988725,3778151818,3963161475,4213447064,4130281361,3599595085,3683022916,3432737375,3247465558,3802222185,4020912224,4172763771,4122762354,3201631749,3017672716,2764249623,2848461854,2331590177,2280796200,2431590963,2648976442,104699613,188127444,472615631,287343814,840019705,1058709744,671593195,621591778,1852171925,1668212892,1953757831,2037970062,1514790577,1463996600,1080017571,1297403050,3673637356,3623636965,3235995134,3454686199,4007360968,3822090177,4107101658,4190530515,2997825956,3215212461,2830708150,2779915199,2256734592,2340947849,2627016082,2443058075,172466556,122466165,273792366,492483431,1047239e3,861968209,612205898,695634755,1646252340,1863638845,2013908262,1963115311,1446242576,1530455833,1277555970,1093597963,1636604631,1820824798,2073724613,1989249228,1436590835,1487645946,1337376481,1119727848,164948639,81781910,331544205,516552836,1039717051,821288114,669961897,719700128,2973530695,3157750862,2871682645,2787207260,2232435299,2283490410,2667994737,2450346104,3647212047,3564045318,3279033885,3464042516,3980931627,3762502690,4150144569,4199882800,3070356634,3121275539,2904027272,2686254721,2200818878,2384911031,2570832044,2486224549,3747192018,3528626907,3310321856,3359936201,3950355702,3867060991,4049844452,4234721005,1739656202,1790575107,2108100632,1890328081,1402811438,1586903591,1233856572,1149249077,266959938,48394827,369057872,418672217,1002783846,919489135,567498868,752375421,209336225,24197544,376187827,459744698,945164165,895287692,574624663,793451934,1679968233,1764313568,2117360635,1933530610,1343127501,1560637892,1243112415,1192455638,3704280881,3519142200,3336358691,3419915562,3907448597,3857572124,4075877127,4294704398,3029510009,3113855344,2927934315,2744104290,2159976285,2377486676,2594734927,2544078150],Wd=[0,151849742,303699484,454499602,607398968,758720310,908999204,1059270954,1214797936,1097159550,1517440620,1400849762,1817998408,1699839814,2118541908,2001430874,2429595872,2581445614,2194319100,2345119218,3034881240,3186202582,2801699524,2951971274,3635996816,3518358430,3399679628,3283088770,4237083816,4118925222,4002861748,3885750714,1002142683,850817237,698445255,548169417,529487843,377642221,227885567,77089521,1943217067,2061379749,1640576439,1757691577,1474760595,1592394909,1174215055,1290801793,2875968315,2724642869,3111247143,2960971305,2405426947,2253581325,2638606623,2487810577,3808662347,3926825029,4044981591,4162096729,3342319475,3459953789,3576539503,3693126241,1986918061,2137062819,1685577905,1836772287,1381620373,1532285339,1078185097,1229899655,1040559837,923313619,740276417,621982671,439452389,322734571,137073913,19308535,3871163981,4021308739,4104605777,4255800159,3263785589,3414450555,3499326569,3651041127,2933202493,2815956275,3167684641,3049390895,2330014213,2213296395,2566595609,2448830231,1305906550,1155237496,1607244650,1455525988,1776460110,1626319424,2079897426,1928707164,96392454,213114376,396673818,514443284,562755902,679998e3,865136418,983426092,3708173718,3557504664,3474729866,3323011204,4180808110,4030667424,3945269170,3794078908,2507040230,2623762152,2272556026,2390325492,2975484382,3092726480,2738905026,2857194700,3973773121,3856137295,4274053469,4157467219,3371096953,3252932727,3673476453,3556361835,2763173681,2915017791,3064510765,3215307299,2156299017,2307622919,2459735317,2610011675,2081048481,1963412655,1846563261,1729977011,1480485785,1362321559,1243905413,1126790795,878845905,1030690015,645401037,796197571,274084841,425408743,38544885,188821243,3613494426,3731654548,3313212038,3430322568,4082475170,4200115116,3780097726,3896688048,2668221674,2516901860,2366882550,2216610296,3141400786,2989552604,2837966542,2687165888,1202797690,1320957812,1437280870,1554391400,1669664834,1787304780,1906247262,2022837584,265905162,114585348,499347990,349075736,736970802,585122620,972512814,821712160,2595684844,2478443234,2293045232,2174754046,3196267988,3079546586,2895723464,2777952454,3537852828,3687994002,3234156416,3385345166,4142626212,4293295786,3841024952,3992742070,174567692,57326082,410887952,292596766,777231668,660510266,1011452712,893681702,1108339068,1258480242,1343618912,1494807662,1715193156,1865862730,1948373848,2100090966,2701949495,2818666809,3004591147,3122358053,2235061775,2352307457,2535604243,2653899549,3915653703,3764988233,4219352155,4067639125,3444575871,3294430577,3746175075,3594982253,836553431,953270745,600235211,718002117,367585007,484830689,133361907,251657213,2041877159,1891211689,1806599355,1654886325,1568718495,1418573201,1335535747,1184342925];function Hd(t){const e=[];for(let r=0;r>2,Od(this,Pd,"f")[i][t%4]=s[t],Od(this,Nd,"f")[e-i][t%4]=s[t];let o,a=0,c=n;for(;c>16&255]<<24^Rd[o>>8&255]<<16^Rd[255&o]<<8^Rd[o>>24&255]^Sd[a]<<24,a+=1,8!=n)for(let t=1;t>8&255]<<8^Rd[o>>16&255]<<16^Rd[o>>24&255]<<24;for(let t=n/2+1;t>2,i=c%4,Od(this,Pd,"f")[t][i]=s[l],Od(this,Nd,"f")[e-t][i]=s[l++],c++}for(let t=1;t>24&255]^$d[o>>16&255]^zd[o>>8&255]^Wd[255&o]}get key(){return Od(this,Ad,"f").slice()}encrypt(t){if(16!=t.length)throw new TypeError("invalid plaintext size (must be 16 bytes)");const e=Od(this,Pd,"f").length-1,r=[0,0,0,0];let n=Hd(t);for(let t=0;t<4;t++)n[t]^=Od(this,Pd,"f")[0][t];for(let t=1;t>24&255]^Bd[n[(e+1)%4]>>16&255]^Fd[n[(e+2)%4]>>8&255]^Ud[255&n[(e+3)%4]]^Od(this,Pd,"f")[t][e];n=r.slice()}const s=new Uint8Array(16);let i=0;for(let t=0;t<4;t++)i=Od(this,Pd,"f")[e][t],s[4*t]=255&(Rd[n[t]>>24&255]^i>>24),s[4*t+1]=255&(Rd[n[(t+1)%4]>>16&255]^i>>16),s[4*t+2]=255&(Rd[n[(t+2)%4]>>8&255]^i>>8),s[4*t+3]=255&(Rd[255&n[(t+3)%4]]^i);return s}decrypt(t){if(16!=t.length)throw new TypeError("invalid ciphertext size (must be 16 bytes)");const e=Od(this,Nd,"f").length-1,r=[0,0,0,0];let n=Hd(t);for(let t=0;t<4;t++)n[t]^=Od(this,Nd,"f")[0][t];for(let t=1;t>24&255]^Dd[n[(e+3)%4]>>16&255]^Md[n[(e+2)%4]>>8&255]^jd[255&n[(e+1)%4]]^Od(this,Nd,"f")[t][e];n=r.slice()}const s=new Uint8Array(16);let i=0;for(let t=0;t<4;t++)i=Od(this,Nd,"f")[e][t],s[4*t]=255&(_d[n[t]>>24&255]^i>>24),s[4*t+1]=255&(_d[n[(t+3)%4]>>16&255]^i>>16),s[4*t+2]=255&(_d[n[(t+2)%4]>>8&255]^i>>8),s[4*t+3]=255&(_d[255&n[(t+1)%4]]^i);return s}}Ad=new WeakMap,Nd=new WeakMap,Pd=new WeakMap;class Kd{constructor(t,e,r){if(r&&!(this instanceof r))throw new Error(`${t} must be instantiated with "new"`);Object.defineProperties(this,{aes:{enumerable:!0,value:new Vd(e)},name:{enumerable:!0,value:t}})}}var Jd,qd,Xd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Yd=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Zd extends Kd{constructor(t,e){if(super("ECC",t,Zd),Jd.set(this,void 0),qd.set(this,void 0),e){if(e.length%16)throw new TypeError("invalid iv size (must be 16 bytes)");Xd(this,Jd,new Uint8Array(e),"f")}else Xd(this,Jd,new Uint8Array(16),"f");Xd(this,qd,this.iv,"f")}get iv(){return new Uint8Array(Yd(this,Jd,"f"))}encrypt(t){if(t.length%16)throw new TypeError("invalid plaintext size (must be multiple of 16 bytes)");const e=new Uint8Array(t.length);for(let r=0;rNumber.MAX_SAFE_INTEGER)throw new TypeError("invalid counter initial integer value");for(let e=15;e>=0;--e)np(this,ep,"f")[e]=t%256,t=Math.floor(t/256)}setCounterBytes(t){if(16!==t.length)throw new TypeError("invalid counter initial Uint8Array value length");np(this,ep,"f").set(t)}increment(){for(let t=15;t>=0;t--){if(255!==np(this,ep,"f")[t]){np(this,ep,"f")[t]++;break}np(this,ep,"f")[t]=0}}encrypt(t){var e,r;const n=new Uint8Array(t);for(let t=0;t16)throw new TypeError("PKCS#7 padding byte out of range");const r=t.length-e;for(let n=0;n{setTimeout((()=>{e()}),t)}))}var pp,wp=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},gp=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function mp(t){try{if(!t||!te(t.privateKey,32))return null;const e=t.privateKey;return wc.computePublicKey(e)!==t.publicKey?null:new wc(e)}catch(t){console.log(t)}return null}function yp(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))}class bp extends id{constructor(t,e){let r=null,n=null;if("string"==typeof t&&(r=new wc(t)),null==r){const e=function(t){try{if(!t||!t.signingKey)return null;const e=mp(t.signingKey);return null==e||If(e.publicKey)!==t.address||t.mnemonic&&vd.fromMnemonic(t.mnemonic).privateKey!==e.privateKey?null:t}catch(t){console.log(t)}return null}(t);e&&(r=e.signingKey,n=e.mnemonic||null)}if(null==r){const e=function(t){try{return null==t||"string"!=typeof t.phrase||"string"!=typeof t.password||null==t.wordlist?null:vd.fromPhrase(t.phrase,t.password,null,t.wordlist)}catch(t){console.log(t)}return null}(t);e&&(r=e.signingKey,n=e.mnemonic||null)}null==r&&(r=mp(t)),null==r&&Hf.throwArgumentError("invalid key","key","[ REDACTED ]"),super(r,e),pp.set(this,void 0),wp(this,pp,n,"f")}get mnemonic(){return gp(this,pp,"f")}connect(t){return new bp(this,t)}async encrypt(t,e,r){throw new Error("TODO")}encryptSync(t,e){throw new Error("TODO")}static async fromEncryptedJson(t,e,r){let n=null;if(up(t))n=await async function(t,e,r){const n=JSON.parse(t),s=op(e),i=fp(n);if("pbkdf2"===i.name){r&&(r(0),await dp(0));const{salt:t,count:e,dkLen:o,algorithm:a}=i,c=Cn(s,t,e,o,a);return r&&(r(1),await dp(0)),hp(n,c)}if("scrypt"===i.name){const{salt:t,N:e,r:o,p:a,dkLen:c}=i;return hp(n,await qn(s,t,e,o,a,c,r))}throw new Error("unreachable")}(t,e,r);else{if(!cp(t))return Hf.throwArgumentError("invalid JSON wallet","json","[ REDACTED ]");r&&(r(0),await yp(0)),n=lp(t,e),r&&(r(1),await yp(0))}const s=new bp(n.privateKey);return s.address!==n.address&&Hf.throwArgumentError("address/privateKey mismatch","json","[ REDACTED ]"),s}static fromEncryptedJsonSync(t,e){let r=null;if(up(t))r=function(t,e){const r=JSON.parse(t),n=op(e),s=fp(r);if("pbkdf2"===s.name){const{salt:t,count:e,dkLen:i,algorithm:o}=s;return hp(r,Cn(n,t,e,i,o))}if("scrypt"===s.name){const{salt:t,N:e,r:i,p:o,dkLen:a}=s;return hp(r,Xn(n,t,e,i,o,a))}throw new Error("unreachable")}(t,e);else{if(!cp(t))return Hf.throwArgumentError("invalid JSON wallet","json","[ REDACTED ]");r=lp(t,e)}const n=new bp(r.privateKey);return n.address!==r.address&&Hf.throwArgumentError("address/privateKey mismatch","json","[ REDACTED ]"),n}static createRandom(t,e,r){return new bp(ed.fromEntropy(Ln(16),e,r),t)}static fromMnemonic(t,e){return new bp(t,e)}static fromPhrase(t,e,r="",n){return new bp(ed.fromPhrase(t,r,n),e)}}pp=new WeakMap;const vp="ethers@6.0.0-beta.1";var Ep=Object.freeze({__proto__:null,Interface:Ao,getAddress:ds,getIcapAddress:ps,getCreateAddress:Ns,getCreate2Address:Ps,isAddressable:xs,isAddress:Os,resolveAddress:Is,arrayify:ie,decodeBase64:ae,encodeBase64:ce,isHexString:te,isBytesLike:ee,concat:fe,dataLength:de,dataSlice:pe,stripZerosLeft:we,hexlify:ue,quantity:he,zeroPadLeft:me,zeroPadRight:ye,BaseContract:xf,Contract:Of,ContractEventPayload:af,ContractTransactionReceipt:sf,ContractTransactionResponse:of,EventLog:nf,computeHmac:$r,keccak256:un,ripemd160:In,sha256:ns,sha512:ss,pbkdf2:Cn,scrypt:qn,scryptSync:Xn,randomBytes:Ln,lock:is,id:_i,isValidName:Ui,namehash:Li,dnsEncode:Di,messagePrefix:Mi,hashMessage:ji,TypedDataEncoder:ao,FixedFormat:zt,FixedNumber:Wt,formatFixed:Gt,parseFixed:$t,fromTwos:Ot,toTwos:It,mask:St,toArray:Nt,toBigInt:Tt,toHex:At,toNumber:kt,decodeBase58:Qt,encodeBase58:Zt,defineProperties:n,resolveProperties:e,getStore:c,setStore:l,AbstractProvider:tu,UnmanagedSubscriber:Xl,AbstractSigner:gu,VoidSigner:mu,WrappedSigner:yu,showThrottleMessage:vu,EnsResolver:ia,Formatter:Xc,NetworkPlugin:Yc,GasCostPlugin:Zc,EnsPlugin:Qc,MaxPriorityFeePlugin:tl,Network:Yh,Block:Uc,FeeData:Fc,Log:Lc,TransactionReceipt:Dc,TransactionResponse:Mc,dummyProvider:zc,FallbackProvider:xh,JsonRpcProvider:Vu,JsonRpcSigner:Wu,StaticJsonRpcProvider:Ku,AlchemyProvider:Qu,AnkrProvider:Yu,CloudflareProvider:th,EtherscanProvider:sh,InfuraProvider:oh,PocketProvider:lh,IpcSocketProvider:Zh,SocketProvider:Vh,WebSocketProvider:Xh,encodeRlp:bs,decodeRlp:As,Signature:va,SigningKey:wc,formatBytes32String:hi,parseBytes32String:fi,nameprep:ki,_toEscapedUtf8String:ai,toUtf8Bytes:ii,toUtf8CodePoints:ui,toUtf8String:li,get UnicodeNormalizationForm(){return t.UnicodeNormalizationForm},Utf8ErrorFuncs:ni,get Utf8ErrorReason(){return t.Utf8ErrorReason},Transaction:Oc,computeAddress:If,defaultPath:hd,getAccountPath:kd,HDNodeWallet:vd,HDNodeVoidWallet:Ed,HDNodeWalletManager:Td,Mnemonic:ed,Wallet:bp,fetchData:jo,FetchRequest:Uo,FetchResponse:So,Wordlist:Ff,WordlistOwl:zf,WordlistOwlA:Xf,wordlists:Vf,version:vp});t.AbstractProvider=tu,t.AbstractSigner=gu,t.AlchemyProvider=Qu,t.AnkrProvider=Yu,t.BaseContract=xf,t.Block=Uc,t.CloudflareProvider=th,t.Contract=Of,t.ContractEventPayload=af,t.ContractTransactionReceipt=sf,t.ContractTransactionResponse=of,t.EnsPlugin=Qc,t.EnsResolver=ia,t.EtherscanProvider=sh,t.EventLog=nf,t.FallbackProvider=xh,t.FeeData=Fc,t.FetchRequest=Uo,t.FetchResponse=So,t.FixedFormat=zt,t.FixedNumber=Wt,t.Formatter=Xc,t.GasCostPlugin=Zc,t.HDNodeVoidWallet=Ed,t.HDNodeWallet=vd,t.HDNodeWalletManager=Td,t.InfuraProvider=oh,t.Interface=Ao,t.IpcSocketProvider=Zh,t.JsonRpcProvider=Vu,t.JsonRpcSigner=Wu,t.Log=Lc,t.MaxPriorityFeePlugin=tl,t.Mnemonic=ed,t.Network=Yh,t.NetworkPlugin=Yc,t.PocketProvider=lh,t.Signature=va,t.SigningKey=wc,t.SocketProvider=Vh,t.StaticJsonRpcProvider=Ku,t.Transaction=Oc,t.TransactionReceipt=Dc,t.TransactionResponse=Mc,t.TypedDataEncoder=ao,t.UnmanagedSubscriber=Xl,t.Utf8ErrorFuncs=ni,t.VoidSigner=mu,t.Wallet=bp,t.WebSocketProvider=Xh,t.Wordlist=Ff,t.WordlistOwl=zf,t.WordlistOwlA=Xf,t.WrappedSigner=yu,t._toEscapedUtf8String=ai,t.arrayify=ie,t.computeAddress=If,t.computeHmac=$r,t.concat=fe,t.dataLength=de,t.dataSlice=pe,t.decodeBase58=Qt,t.decodeBase64=ae,t.decodeRlp=As,t.defaultPath=hd,t.defineProperties=n,t.dnsEncode=Di,t.dummyProvider=zc,t.encodeBase58=Zt,t.encodeBase64=ce,t.encodeRlp=bs,t.ethers=Ep,t.fetchData=jo,t.formatBytes32String=hi,t.formatFixed=Gt,t.fromTwos=Ot,t.getAccountPath=kd,t.getAddress=ds,t.getCreate2Address=Ps,t.getCreateAddress=Ns,t.getIcapAddress=ps,t.getStore=c,t.hashMessage=ji,t.hexlify=ue,t.id=_i,t.isAddress=Os,t.isAddressable=xs,t.isBytesLike=ee,t.isHexString=te,t.isValidName=Ui,t.keccak256=un,t.lock=is,t.mask=St,t.messagePrefix=Mi,t.namehash=Li,t.nameprep=ki,t.parseBytes32String=fi,t.parseFixed=$t,t.pbkdf2=Cn,t.quantity=he,t.randomBytes=Ln,t.resolveAddress=Is,t.resolveProperties=e,t.ripemd160=In,t.scrypt=qn,t.scryptSync=Xn,t.setStore=l,t.sha256=ns,t.sha512=ss,t.showThrottleMessage=vu,t.stripZerosLeft=we,t.toArray=Nt,t.toBigInt=Tt,t.toHex=At,t.toNumber=kt,t.toTwos=It,t.toUtf8Bytes=ii,t.toUtf8CodePoints=ui,t.toUtf8String=li,t.version=vp,t.wordlists=Vf,t.zeroPadLeft=me,t.zeroPadRight=ye,Object.defineProperty(t,"__esModule",{value:!0})})); +//# sourceMappingURL=ethers.umd.min.js.map diff --git a/packages/ethers/dist/ethers.umd.min.js.map b/packages/ethers/dist/ethers.umd.min.js.map new file mode 100644 index 000000000..a4ecc71b5 --- /dev/null +++ b/packages/ethers/dist/ethers.umd.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ethers.umd.min.js","sources":["../../properties/lib/properties.js","../../properties/lib/events.js","../../properties/lib/storage.js","../../logger/lib/errors.js","../../logger/lib/logger.js","../../logger/lib/_version.js","../../abi/lib/_version.js","../../abi/lib/logger.js","../../abi/lib/fragments.js","../../math/lib/_version.js","../../math/lib/logger.js","../../math/lib/convert.js","../../math/lib/maths.js","../../math/lib/fixednumber.js","../../math/lib/base58.js","../../bytes/lib/check.js","../../bytes/lib/_version.js","../../bytes/lib/logger.js","../../bytes/lib/array.js","../../bytes/lib/base64.js","../../bytes/lib/hex.js","../../bytes/lib/data.js","../../bytes/lib/pad.js","../../abi/lib/coders/abstract-coder.js","../../../node_modules/@noble/hashes/esm/utils.js","../../../node_modules/@noble/hashes/esm/hmac.js","../../../node_modules/@noble/hashes/esm/pbkdf2.js","../../../node_modules/@noble/hashes/esm/_sha2.js","../../../node_modules/@noble/hashes/esm/sha256.js","../../../node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/@noble/hashes/esm/sha512.js","../../crypto/lib/_version.js","../../crypto/lib/logger.js","../../crypto/lib/crypto-browser.js","../../crypto/lib/hmac.js","../../../node_modules/@noble/hashes/esm/sha3.js","../../crypto/lib/keccak.js","../../../node_modules/@noble/hashes/esm/ripemd160.js","../../crypto/lib/ripemd160.js","../../crypto/lib/pbkdf2.js","../../crypto/lib/random.js","../../../node_modules/@noble/hashes/esm/scrypt.js","../../crypto/lib/scrypt.js","../../crypto/lib/sha2.js","../../crypto/lib/index.js","../../address/lib/_version.js","../../address/lib/logger.js","../../address/lib/address.js","../../rlp/lib/_version.js","../../rlp/lib/logger.js","../../rlp/lib/encode.js","../../rlp/lib/decode.js","../../address/lib/contract-address.js","../../address/lib/checks.js","../../abi/lib/typed.js","../../abi/lib/coders/address.js","../../abi/lib/coders/anonymous.js","../../abi/lib/coders/array.js","../../abi/lib/coders/boolean.js","../../abi/lib/coders/bytes.js","../../abi/lib/coders/fixed-bytes.js","../../abi/lib/coders/null.js","../../abi/lib/coders/number.js","../../strings/lib/_version.js","../../strings/lib/logger.js","../../strings/lib/utf8.js","../../strings/lib/bytes32.js","../../strings/lib/idna.js","../../abi/lib/coders/string.js","../../abi/lib/coders/tuple.js","../../abi/lib/abi-coder.js","../../hash/lib/id.js","../../hash/lib/_version.js","../../hash/lib/logger.js","../../hash/lib/namehash.js","../../hash/lib/message.js","../../hash/lib/typed-data.js","../../abi/lib/interface.js","../../web/lib/_version.js","../../web/lib/logger.js","../../web/lib/response.js","../../web/lib/get-url-browser.js","../../web/lib/request.js","../../web/lib/fetch-data.js","../../providers/lib/_version.js","../../providers/lib/logger.js","../../providers/lib/ens-resolver.js","../../signing-key/lib/_version.js","../../signing-key/lib/logger.js","../../signing-key/lib/signature.js","../../../node_modules/@noble/secp256k1/lib/esm/index.js","../../signing-key/lib/signing-key.js","../../transactions/lib/accesslist.js","../../transactions/lib/_version.js","../../transactions/lib/logger.js","../../transactions/lib/transaction.js","../../providers/lib/provider.js","../../providers/lib/formatter.js","../../providers/lib/plugins-network.js","../../providers/lib/network.js","../../providers/lib/subscriber-polling.js","../../providers/lib/abstract-provider.js","../../providers/lib/abstract-signer.js","../../providers/lib/community.js","../../providers/lib/subscriber-filterid.js","../../providers/lib/provider-jsonrpc.js","../../providers/lib/provider-ankr.js","../../providers/lib/provider-alchemy.js","../../providers/lib/provider-cloudflare.js","../../providers/lib/provider-etherscan.js","../../providers/lib/provider-infura.js","../../providers/lib/provider-pocket.js","../../providers/lib/provider-fallback.js","../../providers/lib/shuffle.js","../../providers/lib/ws-browser.js","../../providers/lib/provider-socket.js","../../providers/lib/provider-websocket.js","../../providers/lib/common-networks.js","../../providers/lib/provider-ipcsocket-browser.js","../../contract/lib/wrappers.js","../../contract/lib/_version.js","../../contract/lib/logger.js","../../contract/lib/contract.js","../../wallet/lib/address.js","../../wordlists/lib/decode-owl.js","../../wordlists/lib/_version.js","../../wordlists/lib/logger.js","../../wordlists/lib/wordlist.js","../../wordlists/lib/wordlist-owl.js","../../wordlists/lib/lang-en.js","../../wallet/lib/logger.js","../../wallet/lib/_version.js","../../wordlists/lib/wordlists-en.js","../../wordlists/lib/wordlist-owla.js","../../wordlists/lib/decode-owla.js","../../wordlists/lib/bit-reader.js","../../wallet/lib/mnemonic.js","../../wallet/lib/base-wallet.js","../../wallet/lib/hdwallet.js","../../../node_modules/aes-js/lib/aes.js","../../../node_modules/aes-js/lib/mode.js","../../../node_modules/aes-js/lib/mode-cbc.js","../../../node_modules/aes-js/lib/mode-cfb.js","../../../node_modules/aes-js/lib/mode-ctr.js","../../wallet/lib/utils.js","../../wallet/lib/json-crowdsale.js","../../../node_modules/aes-js/lib/padding.js","../../../node_modules/aes-js/lib/mode-ofb.js","../../wallet/lib/json-keystore.js","../../wallet/lib/wallet.js","../lib/_version.js"],"sourcesContent":["//import type { BigNumber, BigNumberish } from \"./big-number\";\n//import type { Bytes, BytesLike } from \"./bytes\";\n//import type { Signature, SignatureLike } from \"./signature\";\n/*\nexport type Loose = T extends BigNumber ? BigNumberish:\n T extends number ? BigNumberish:\n T extends Bytes ? BytesLike:\n T extends Signature ? SignatureLike:\n T;\nexport type LooseObject = { [P in keyof T]?: Loose; };\n*/\n//export type Deferrable = T | Promise;\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\n/*\nexport type Frozen = Readonly<{\n [ P in keyof T ]: T[P] extends Freezable ? Frozen: T[P];\n}>;\n\nexport interface Freezable {\n clone(): T;\n freeze(): Frozen;\n isFrozen(): boolean;\n}\n*/\n/*\nconst _data: WeakMap = new WeakMap();\n\nexport class Data implements Freezable {\n #props: {\n data: Uint8Array\n };\n\n [ index: number ]: number;\n\n constructor(lengthOrData: number | Uint8Array) {\n if (typeof(lengthOrData) === \"number\") {\n _data[this] = new Uint8Array(lengthOrData);\n } else {\n _data[this] = lengthOrData;\n }\n\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return Reflect.get(target, prop, receiver); }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n throw new Error(\"\");\n }\n return data[index];\n },\n\n set: (target, prop, value, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return false; }\n\n if (value < 0 || value > 255 || value % 1) { return false; }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n return false;\n }\n\n data[index] = value;\n\n return true;\n },\n });\n }\n\n toString(): string {\n return this.slice().toString();\n }\n\n slice(): Uint8Array {\n return _data.get(this).slice();\n }\n\n clone(): Data {\n return new Data(this.slice());\n }\n\n freeze(): Frozen {\n //Object.freeze(this.#props);\n return this;\n }\n\n isFrozen(): boolean {\n return Object.isFrozen(this.#props);\n }\n}\nconst d = new Data(4);\nconsole.log(d.toString());\nd[0] = 45;\nconsole.log(d.toString());\n*/\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\nexport function defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n/*\nexport type IsCancelled = () => Promise;\n\nexport function createPromise(resolve: (isCancelled: IsCancelled, (result: T) => void) => void, reject: (error: Error) => void, isCancelled: IsCancelled): CancellablePromise {\n let cancelled = false;\n\n const promise = new Promise((resolve, reject) => {\n \n });\n\n (>promise).cancel = function() {\n cancelled = true;\n };\n\n return (>promise);\n}\n*/\n/*\nexport class A implements Freezable {\n foo: number;\n constructor(foo: number) {\n this.foo = foo;\n }\n freeze(): Frozen {\n Object.freeze(this);\n return this;\n }\n clone(): A {\n return new A(this.foo);\n }\n}\n\nexport class B implements Freezable {\n a: A;\n constructor(a: A) {\n this.a = a;\n }\n freeze(): Frozen {\n this.a.freeze();\n Object.freeze(this);\n return this;\n }\n clone(): B {\n return new B(this.a);\n }\n}\n\nexport function test() {\n const a = new A(123);\n const b = new B(a);\n b.a = new A(234);\n const b2 = b.freeze();\n b2.a.foo = 123; // = a;\n}\n*/\nfunction checkType(value, type) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n throw new Error(\"invalid value for type\");\n}\nexport function defineProperties(target, values, types, defaults) {\n for (let key in values) {\n let value = values[key];\n const fallback = (defaults ? defaults[key] : undefined);\n if (fallback !== undefined) {\n value = fallback;\n }\n else {\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type);\n }\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","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 _EventPayload_listener;\nimport { defineProperties } from \"./properties.js\";\nexport class EventPayload {\n constructor(emitter, listener, filter) {\n _EventPayload_listener.set(this, void 0);\n __classPrivateFieldSet(this, _EventPayload_listener, listener, \"f\");\n defineProperties(this, { emitter, filter });\n }\n async removeListener() {\n if (__classPrivateFieldGet(this, _EventPayload_listener, \"f\") == null) {\n return;\n }\n await this.emitter.off(this.filter, __classPrivateFieldGet(this, _EventPayload_listener, \"f\"));\n }\n}\n_EventPayload_listener = new WeakMap();\n//# sourceMappingURL=events.js.map","export function getStore(store, key) {\n return store[key];\n}\nexport function setStore(store, key, value) {\n if (Object.isFrozen(store)) {\n throw new Error(\"frozen object is immuatable; cannot set \" + key);\n }\n store[key] = value;\n}\n//# sourceMappingURL=storage.js.map","//export type TransactionReceipt {\n//}\n/**\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, errors.CALL_EXCEPTION)) {\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/*\nexport function isContractCallException(error: any): error is ContractCallExceptionError {\n return isError(error, \"CALL_EXCEPTION\") && (error).method;\n}\n*/\n//# sourceMappingURL=errors.js.map","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 _Logger_instances, _Logger_assertIntRange, _Logger_getBytes, _Logger_log;\nimport { version } from \"./_version.js\";\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\n;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nlet _globalLogger = null;\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\nfunction defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true, writable: false, value,\n });\n}\n/*\nenum Censor {\n OFF = 0,\n ON = 1,\n PERMANENT = 2\n};\nlet _censor = Censor.OFF;\n*/\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n// The type of error to use for various error codes\nconst ErrorConstructors = {};\nErrorConstructors.INVALID_ARGUMENT = TypeError;\nErrorConstructors.NUMERIC_FAULT = RangeError;\nErrorConstructors.BUFFER_OVERRUN = RangeError;\nexport class Logger {\n constructor(version) {\n _Logger_instances.add(this);\n defineReadOnly(this, \"version\", version || \"_\");\n }\n makeError(message, code, info) {\n // Errors are being censored\n //if (_censor === Censor.ON || _censor === Censor.PERMANENT) {\n // return this.makeError(\"censored error\", code, { });\n //}\n {\n const details = [];\n if (info) {\n for (const key in info) {\n const value = (info[key]);\n try {\n details.push(key + \"=\" + JSON.stringify(value));\n }\n catch (error) {\n details.push(key + \"=[could not serialize object]\");\n }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${this.version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n const create = ErrorConstructors[code] || Error;\n const error = (new create(message));\n defineReadOnly(error, \"code\", code);\n if (info) {\n for (const key in info) {\n defineReadOnly(error, key, (info[key]));\n }\n }\n return error;\n }\n throwError(message, code, info) {\n throw this.makeError(message, code, info);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, \"INVALID_ARGUMENT\", {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, info) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code || \"UNKNOWN_ERROR\", info);\n }\n assertArgument(condition, message, name, value) {\n return this.assert(condition, message, \"INVALID_ARGUMENT\", {\n argument: name,\n value\n });\n }\n assertIntegerArgument(name, value, lower, upper) {\n let message = null;\n if (typeof (value) !== \"number\") {\n message = \"expected a number\";\n }\n else if (!Number.isInteger(value)) {\n message = \"invalid integer\";\n }\n else if ((lower != null && value < lower) || (upper != null && value > upper)) {\n message = \"value is out of range\";\n }\n if (message) {\n this.throwArgumentError(message, name, value);\n }\n }\n assertSafeUint53(value, message) {\n this.assertArgument((typeof (value) === \"number\"), \"invalid number\", \"value\", value);\n if (message == null) {\n message = \"value not safe\";\n }\n const operation = \"assertSafeInteger\";\n this.assert((value >= 0 && value < 0x1fffffffffffff), message, \"NUMERIC_FAULT\", {\n operation, fault: \"out-of-safe-range\", value\n });\n this.assert((value % 1) === 0, message, \"NUMERIC_FAULT\", {\n operation, fault: \"non-integer\", value\n });\n }\n assertNormalize(form) {\n if (_normalizeForms.indexOf(form) === -1) {\n this.throwError(\"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n }\n }\n assertPrivate(givenGuard, guard, className = \"\") {\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n this.throwError(`private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n }\n assertArgumentCount(count, expectedCount, message = \"\") {\n if (message) {\n message = \": \" + message;\n }\n this.assert((count >= expectedCount), \"missing arguemnt\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n this.assert((count >= expectedCount), \"too many arguemnts\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n }\n assertInt53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", -maxValue);\n }\n assertUint53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", 0);\n }\n assertInteger(value, operation = \"unknown\", min = 0, max = maxValue) {\n //this.#assertIntRange(\"Int53\", value, operation || \"unknown\", 0);\n }\n getBytes(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, false);\n }\n getBytesCopy(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, true);\n }\n getNumber(value, name) {\n switch (typeof (value)) {\n case \"bigint\":\n if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return Number(value);\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return value;\n case \"string\":\n try {\n return this.getNumber(BigInt(value), name);\n }\n catch (e) {\n this.throwArgumentError(`invalid numeric string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid numeric value\", name || \"value\", value);\n }\n getBigInt(value, name) {\n switch (typeof (value)) {\n case \"bigint\": return value;\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return BigInt(value);\n case \"string\":\n try {\n return BigInt(value);\n }\n catch (e) {\n this.throwArgumentError(`invalid BigNumberish string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid BigNumberish value\", name || \"value\", value);\n }\n debug(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.DEBUG, args);\n }\n info(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.INFO, args);\n }\n warn(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.WARNING, args);\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n}\n_Logger_instances = new WeakSet(), _Logger_assertIntRange = function _Logger_assertIntRange(name, value, operation, minValue) {\n if (typeof (value) !== \"number\" || isNaN(value)) {\n this.throwArgumentError(`invalid ${name}`, \"INVALID_ARGUMENT\", {\n name: \"value\", value\n });\n }\n let message = `invalid ${name} value`;\n let fault = null;\n if (isNaN(value)) {\n fault = \"not-a-number\";\n }\n else if (value < minValue || value > maxValue) {\n message = `unsafe ${name} value`;\n fault = \"overflow\";\n }\n else if (Math.floor(value) !== value) {\n fault = \"underflow\";\n }\n if (fault) {\n this.throwError(message, \"NUMERIC_FAULT\", {\n operation, fault, value\n });\n }\n}, _Logger_getBytes = function _Logger_getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n return this.throwArgumentError(\"invalid BytesLike value\", name || \"value\", value);\n}, _Logger_log = function _Logger_log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n};\n//static readonly Errors = ErrorCode;\nLogger.LogLevels = LogLevel;\n//const l = new Logger();\n//l.makeError(\"foo\", Logger.Errors.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", value: 3 });\n//l.makeError(\"foo\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { transaction: null });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\" });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", gii: \"5\" });\n//console.log(LogLevel);\n//# sourceMappingURL=logger.js.map","export const version = \"@ethersproject/logger@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","export const version = \"@ethersproject/abi@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _TokenString_instances, _TokenString_offset, _TokenString_tokens, _TokenString_subTokenString, _ParamType_instances, _ParamType_walkAsync;\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\n;\nexport var FormatType;\n(function (FormatType) {\n // Bare formatting, as is needed for computing a sighash of an event or function\n FormatType[\"sighash\"] = \"sighash\";\n // Human-Readable with Minimal spacing and without names (compact human-readable)\n FormatType[\"minimal\"] = \"minimal\";\n // Human-Readable with nice spacing, including all names\n FormatType[\"full\"] = \"full\";\n // JSON-format a la Solidity\n FormatType[\"json\"] = \"json\";\n})(FormatType || (FormatType = {}));\n;\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items) {\n const result = new Set();\n items.forEach((k) => result.add(k));\n return Object.freeze(result);\n}\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\nconst _kwTypes = \"constructor error event function struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\nconst _kwOther = \"tuple returns\";\n// All Keywords\nconst _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n// Single character tokens\nconst SimpleTokens = {\n \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n \",\": \"COMMA\", \"@\": \"AT\"\n};\n// Parser regexes to consume the next token\nconst regexWhitespace = new RegExp(\"^(\\\\s*)\");\nconst regexNumber = new RegExp(\"^([0-9]+)\");\nconst regexIdentifier = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\nconst regexType = new RegExp(\"^(address|bool|bytes(0-9*)|string|u?int([0-9]*))\");\nexport class TokenString {\n constructor(tokens) {\n _TokenString_instances.add(this);\n _TokenString_offset.set(this, void 0);\n _TokenString_tokens.set(this, void 0);\n __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\");\n __classPrivateFieldSet(this, _TokenString_tokens, tokens.slice(), \"f\");\n }\n get offset() { return __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n get length() { return __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length - __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n clone() { return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\")); }\n reset() { __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\"); }\n // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n popKeyword(allowed) {\n const top = this.peek();\n if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) {\n throw new Error(`expected keyword ${top.text}`);\n }\n return this.pop().text;\n }\n // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n popType(type) {\n if (this.peek().type !== type) {\n throw new Error(`expected ${type}; got ${JSON.stringify(this.peek())}`);\n }\n return this.pop().text;\n }\n // Pops and returns a \"(\" TOKENS \")\"\n popParen() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = __classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, top.match + 1);\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n popParams() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = [];\n while (__classPrivateFieldGet(this, _TokenString_offset, \"f\") < top.match - 1) {\n const link = this.peek().linkNext;\n result.push(__classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, link));\n __classPrivateFieldSet(this, _TokenString_offset, link, \"f\");\n }\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Returns the top Token, throwing if out of tokens\n peek() {\n if (__classPrivateFieldGet(this, _TokenString_offset, \"f\") >= __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length) {\n throw new Error(\"out-of-bounds\");\n }\n return __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[__classPrivateFieldGet(this, _TokenString_offset, \"f\")];\n }\n // Returns the next value, if it is a keyword in `allowed`\n peekKeyword(allowed) {\n const top = this.peekType(\"KEYWORD\");\n return (top != null && allowed.has(top)) ? top : null;\n }\n // Returns the value of the next token if it is `type`\n peekType(type) {\n if (this.length === 0) {\n return null;\n }\n const top = this.peek();\n return (top.type === type) ? top.text : null;\n }\n // Returns the next token; throws if out of tokens\n pop() {\n var _a;\n const result = this.peek();\n __classPrivateFieldSet(this, _TokenString_offset, (_a = __classPrivateFieldGet(this, _TokenString_offset, \"f\"), _a++, _a), \"f\");\n return result;\n }\n toString() {\n const tokens = [];\n for (let i = __classPrivateFieldGet(this, _TokenString_offset, \"f\"); i < __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length; i++) {\n const token = __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[i];\n tokens.push(`${token.type}:${token.text}`);\n }\n return ``;\n }\n}\n_TokenString_offset = new WeakMap(), _TokenString_tokens = new WeakMap(), _TokenString_instances = new WeakSet(), _TokenString_subTokenString = function _TokenString_subTokenString(from = 0, to = 0) {\n return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\").slice(from, to).map((t) => {\n return Object.freeze(Object.assign({}, t, {\n match: (t.match - from),\n linkBack: (t.linkBack - from),\n linkNext: (t.linkNext - from),\n }));\n return t;\n }));\n};\nexport function lex(text) {\n const tokens = [];\n const throwError = (message) => {\n const token = (offset < text.length) ? JSON.stringify(text[offset]) : \"$EOI\";\n throw new Error(`invalid token ${token} at ${offset}: ${message}`);\n };\n let brackets = [];\n let commas = [];\n let offset = 0;\n while (offset < text.length) {\n // Strip off any leading whitespace\n let cur = text.substring(offset);\n let match = cur.match(regexWhitespace);\n if (match) {\n offset += match[1].length;\n cur = text.substring(offset);\n }\n const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n tokens.push(token);\n let type = (SimpleTokens[cur[0]] || \"\");\n if (type) {\n token.type = type;\n token.text = cur[0];\n offset++;\n if (type === \"OPEN_PAREN\") {\n brackets.push(tokens.length - 1);\n commas.push(tokens.length - 1);\n }\n else if (type == \"CLOSE_PAREN\") {\n if (brackets.length === 0) {\n throwError(\"no matching open bracket\");\n }\n token.match = brackets.pop();\n (tokens[token.match]).match = tokens.length - 1;\n token.depth--;\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n }\n else if (type === \"COMMA\") {\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n commas.push(tokens.length - 1);\n }\n else if (type === \"OPEN_BRACKET\") {\n token.type = \"BRACKET\";\n }\n else if (type === \"CLOSE_BRACKET\") {\n // Remove the CLOSE_BRACKET\n let suffix = tokens.pop().text;\n if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n const value = tokens.pop().text;\n suffix = value + suffix;\n (tokens[tokens.length - 1]).value = logger.getNumber(value);\n }\n if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n throw new Error(\"missing opening bracket\");\n }\n (tokens[tokens.length - 1]).text += suffix;\n }\n continue;\n }\n match = cur.match(regexIdentifier);\n if (match) {\n token.text = match[1];\n offset += token.text.length;\n if (Keywords.has(token.text)) {\n token.type = \"KEYWORD\";\n continue;\n }\n if (token.text.match(regexType)) {\n token.type = \"TYPE\";\n continue;\n }\n token.type = \"ID\";\n continue;\n }\n match = cur.match(regexNumber);\n if (match) {\n token.text = match[1];\n token.type = \"NUMBER\";\n offset += token.text.length;\n continue;\n }\n throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`);\n }\n return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set, allowed) {\n let included = [];\n for (const key in allowed.keys()) {\n if (set.has(key)) {\n included.push(key);\n }\n }\n if (included.length > 1) {\n throw new Error(`conflicting types: ${included.join(\", \")}`);\n }\n}\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n// ...the name with an optional type, returning the name\nfunction consumeName(type, tokens) {\n if (tokens.peekKeyword(KwTypes)) {\n const keyword = tokens.pop().text;\n if (keyword !== type) {\n throw new Error(`expected ${type}, got ${keyword}`);\n }\n }\n return tokens.popType(\"ID\");\n}\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens, allowed) {\n const keywords = new Set();\n while (true) {\n const keyword = tokens.peekType(\"KEYWORD\");\n if (keyword == null || (allowed && !allowed.has(keyword))) {\n break;\n }\n tokens.pop();\n if (keywords.has(keyword)) {\n throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`);\n }\n keywords.add(keyword);\n }\n return Object.freeze(keywords);\n}\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens) {\n let modifiers = consumeKeywords(tokens, KwVisib);\n // Detect conflicting modifiers\n allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n // Process mutability states\n if (modifiers.has(\"view\")) {\n return \"view\";\n }\n if (modifiers.has(\"pure\")) {\n return \"pure\";\n }\n if (modifiers.has(\"payable\")) {\n return \"payable\";\n }\n if (modifiers.has(\"nonpayable\")) {\n return \"nonpayable\";\n }\n // Process legacy `constant` last\n if (modifiers.has(\"constant\")) {\n return \"view\";\n }\n return \"nonpayable\";\n}\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens, allowIndexed) {\n return tokens.popParams().map((t) => ParamType.fromTokens(t, allowIndexed));\n}\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens) {\n if (tokens.peekType(\"AT\")) {\n tokens.pop();\n if (tokens.peekType(\"NUMBER\")) {\n return logger.getBigInt(tokens.pop().text);\n }\n throw new Error(\"invalid gas\");\n }\n return null;\n}\nfunction consumeEoi(tokens) {\n if (tokens.length) {\n throw new Error(`unexpected tokens: ${tokens.toString()}`);\n }\n}\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nfunction verifyBasicType(type) {\n const match = type.match(regexType);\n if (!match) {\n return logger.throwArgumentError(\"invalid type\", \"type\", type);\n }\n if (type === \"uint\") {\n return \"uint256\";\n }\n if (type === \"int\") {\n return \"int256\";\n }\n if (match[2]) {\n // bytesXX\n const length = parseInt(match[2]);\n if (length === 0 || length > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"type\", type);\n }\n }\n else if (match[3]) {\n // intXX or uintXX\n const size = parseInt(match[3]);\n if (size === 0 || size > 256 || size % 8) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n }\n return type;\n}\n// Make the Fragment constructors effectively private\nconst _guard = {};\nconst internal = Symbol.for(\"_ethers_internal\");\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nexport class ParamType {\n constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) {\n _ParamType_instances.add(this);\n logger.assertPrivate(guard, _guard, \"ParamType\");\n Object.defineProperty(this, internal, { value: ParamTypeInternal });\n if (components) {\n components = Object.freeze(components.slice());\n }\n if (baseType === \"array\") {\n if (arrayLength == null || arrayChildren == null) {\n throw new Error(\"\");\n }\n }\n else if (arrayLength != null || arrayChildren != null) {\n throw new Error(\"\");\n }\n if (baseType === \"tuple\") {\n if (components == null) {\n throw new Error(\"\");\n }\n }\n else if (components != null) {\n throw new Error(\"\");\n }\n defineProperties(this, {\n name, type, baseType, indexed, components, arrayLength, arrayChildren\n });\n }\n // Format the parameter fragment\n // - sighash: \"(uint256,address)\"\n // - minimal: \"tuple(uint256,address) indexed\"\n // - full: \"tuple(uint256 foo, address bar) indexed baz\"\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n let result = {\n type: ((this.baseType === \"tuple\") ? \"tuple\" : this.type),\n name: (this.name || undefined)\n };\n if (typeof (this.indexed) === \"boolean\") {\n result.indexed = this.indexed;\n }\n if (this.isTuple()) {\n result.components = this.components.map((c) => JSON.parse(c.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.isArray()) {\n result += this.arrayChildren.format(format);\n result += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n }\n else {\n if (this.isTuple()) {\n if (format !== FormatType.sighash) {\n result += this.type;\n }\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== FormatType.sighash) {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === FormatType.full && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n static isArray(value) {\n return value && (value.baseType === \"array\");\n }\n isArray() {\n return (this.baseType === \"array\");\n }\n isTuple() {\n return (this.baseType === \"tuple\");\n }\n isIndexable() {\n return (this.indexed != null);\n }\n walk(value, process) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v) => (this.arrayChildren.walk(v, process)));\n }\n if (this.isTuple()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid tuple value\");\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v, i) => (this.components[i].walk(v, process)));\n }\n return process(this.type, value);\n }\n async walkAsync(value, process) {\n const promises = [];\n const result = [value];\n __classPrivateFieldGet(this, _ParamType_instances, \"m\", _ParamType_walkAsync).call(this, promises, value, process, (value) => {\n result[0] = value;\n });\n if (promises.length) {\n await Promise.all(promises);\n }\n return result[0];\n }\n static from(obj, allowIndexed) {\n if (ParamType.isParamType(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n return ParamType.fromTokens(lex(obj), allowIndexed);\n }\n if (obj instanceof TokenString) {\n return ParamType.fromTokens(obj, allowIndexed);\n }\n const name = obj.name;\n if (name && (typeof (name) !== \"string\" || !name.match(regexIdentifier))) {\n logger.throwArgumentError(\"invalid name\", \"obj.name\", name);\n }\n let indexed = obj.indexed;\n if (indexed != null) {\n if (!allowIndexed) {\n logger.throwArgumentError(\"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n }\n indexed = !!indexed;\n }\n let type = obj.type;\n let arrayMatch = type.match(regexArrayType);\n if (arrayMatch) {\n const arrayLength = arrayMatch[2];\n const arrayChildren = ParamType.from({\n type: arrayMatch[1],\n components: obj.components\n });\n return new ParamType(_guard, name, type, \"array\", indexed, null, arrayLength, arrayChildren);\n }\n if (type.substring(0, 5) === \"tuple(\" || type[0] === \"(\") {\n const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null;\n const tuple = new ParamType(_guard, name, type, \"tuple\", indexed, comps, null, null);\n // @TODO: use lexer to validate and normalize type\n return tuple;\n }\n type = verifyBasicType(obj.type);\n return new ParamType(_guard, name, type, type, indexed, null, null, null);\n }\n static fromObject(obj, allowIndexed) {\n throw new Error(\"@TODO\");\n }\n static fromTokens(tokens, allowIndexed) {\n let type = \"\", baseType = \"\";\n let comps = null;\n if (consumeKeywords(tokens, setify([\"tuple\"])).has(\"tuple\") || tokens.peekType(\"OPEN_PAREN\")) {\n // Tuple\n baseType = \"tuple\";\n comps = tokens.popParams().map((t) => ParamType.from(t));\n type = `tuple(${comps.map((c) => c.format()).join(\",\")})`;\n }\n else {\n // Normal\n type = verifyBasicType(tokens.popType(\"TYPE\"));\n baseType = type;\n }\n // Check for Array\n let arrayChildren = null;\n let arrayLength = null;\n while (tokens.length && tokens.peekType(\"BRACKET\")) {\n const bracket = tokens.pop(); //arrays[i];\n arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n arrayLength = bracket.value;\n type += bracket.text;\n baseType = \"array\";\n comps = null;\n }\n let indexed = null;\n const keywords = consumeKeywords(tokens, KwModifiers);\n if (keywords.has(\"indexed\")) {\n if (!allowIndexed) {\n throw new Error(\"\");\n }\n indexed = true;\n }\n const name = (tokens.peekType(\"ID\") ? tokens.pop().text : \"\");\n if (tokens.length) {\n throw new Error(\"leftover tokens\");\n }\n return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n }\n static isParamType(value) {\n return (value && value[internal] === ParamTypeInternal);\n }\n}\n_ParamType_instances = new WeakSet(), _ParamType_walkAsync = function _ParamType_walkAsync(promises, value, process, setValue) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const childType = this.arrayChildren;\n const result = value.slice();\n result.forEach((value, index) => {\n __classPrivateFieldGet(childType, _ParamType_instances, \"m\", _ParamType_walkAsync).call(childType, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n if (this.isTuple()) {\n const components = this.components;\n // Convert the object into an array\n let result;\n if (Array.isArray(value)) {\n result = value.slice();\n }\n else {\n if (value == null || typeof (value) !== \"object\") {\n throw new Error(\"invlaid tuple value\");\n }\n result = components.map((param) => {\n if (!param.name) {\n throw new Error(\"cannot use object value with unnamed components\");\n }\n if (!(param.name in value)) {\n throw new Error(`missing value for component ${param.name}`);\n }\n return value[param.name];\n });\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n result.forEach((value, index) => {\n var _a;\n __classPrivateFieldGet((_a = components[index]), _ParamType_instances, \"m\", _ParamType_walkAsync).call(_a, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n const result = process(this.type, value);\n if (result.then) {\n promises.push((async function () { setValue(await result); })());\n }\n else {\n setValue(result);\n }\n};\nexport var FragmentType;\n(function (FragmentType) {\n FragmentType[\"constructor\"] = \"constructor\";\n FragmentType[\"error\"] = \"error\";\n FragmentType[\"event\"] = \"event\";\n FragmentType[\"function\"] = \"function\";\n FragmentType[\"struct\"] = \"struct\";\n})(FragmentType || (FragmentType = {}));\n;\nexport class Fragment {\n constructor(guard, type, inputs) {\n logger.assertPrivate(guard, _guard, \"Fragment\");\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { type, inputs });\n }\n static from(obj) {\n if (typeof (obj) === \"string\") {\n return this.fromString(obj);\n }\n if (obj instanceof TokenString) {\n return this.fromTokens(obj);\n }\n if (typeof (obj) === \"object\") {\n return this.fromObject(obj);\n }\n throw new Error(`unsupported type: ${obj}`);\n }\n static fromObject(obj) {\n switch (obj.type) {\n case \"constructor\": return ConstructorFragment.fromObject(obj);\n case \"error\": return ErrorFragment.fromObject(obj);\n case \"event\": return EventFragment.fromObject(obj);\n case \"function\": return FunctionFragment.fromObject(obj);\n case \"struct\": return StructFragment.fromObject(obj);\n }\n throw new Error(\"not implemented yet\");\n }\n static fromString(text) {\n try {\n Fragment.from(JSON.parse(text));\n }\n catch (e) { }\n return Fragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const type = tokens.popKeyword(KwTypes);\n switch (type) {\n case \"constructor\": return ConstructorFragment.fromTokens(tokens);\n case \"error\": return ErrorFragment.fromTokens(tokens);\n case \"event\": return EventFragment.fromTokens(tokens);\n case \"function\": return FunctionFragment.fromTokens(tokens);\n case \"struct\": return StructFragment.fromTokens(tokens);\n }\n throw new Error(`unsupported type: ${type}`);\n }\n /*\n static fromTokens(tokens: TokenString): Fragment {\n const assertDone = () => {\n if (tokens.length) { throw new Error(`unexpected tokens: ${ tokens.toString() }`); }\n });\n\n const type = (tokens.length && tokens.peek().type === \"KEYWORD\") ? tokens.peek().text: \"unknown\";\n\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens, type === \"event\");\n\n switch (type) {\n case \"event\": case \"struct\":\n assertDone();\n }\n\n }\n */\n static isConstructor(value) {\n return (value && value.type === \"constructor\");\n }\n static isError(value) {\n return (value && value.type === \"error\");\n }\n static isEvent(value) {\n return (value && value.type === \"event\");\n }\n static isFunction(value) {\n return (value && value.type === \"function\");\n }\n static isStruct(value) {\n return (value && value.type === \"struct\");\n }\n}\nexport class NamedFragment extends Fragment {\n constructor(guard, type, name, inputs) {\n super(guard, type, inputs);\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { name });\n }\n}\nfunction joinParams(format, params) {\n return \"(\" + params.map((p) => p.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n}\nexport class ErrorFragment extends NamedFragment {\n constructor(guard, name, inputs) {\n super(guard, FragmentType.error, name, inputs);\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"error\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n return result.join(\" \");\n }\n static fromString(text) {\n return ErrorFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new ErrorFragment(_guard, name, inputs);\n }\n}\nexport class EventFragment extends NamedFragment {\n constructor(guard, name, inputs, anonymous) {\n super(guard, FragmentType.event, name, inputs);\n defineProperties(this, { anonymous });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"event\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash && this.anonymous) {\n result.push(\"anonymous\");\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return EventFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"event\", tokens);\n const inputs = consumeParams(tokens, true);\n const anonymous = !!consumeKeywords(tokens, setify([\"anonymous\"])).has(\"anonymous\");\n consumeEoi(tokens);\n return new EventFragment(_guard, name, inputs, anonymous);\n }\n}\nexport class ConstructorFragment extends Fragment {\n constructor(guard, type, inputs, payable, gas) {\n super(guard, type, inputs);\n defineProperties(this, { payable, gas });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.sighash) {\n logger.throwError(\"cannot format a constructor for sighash\", \"UNSUPPORTED_OPERATION\", {\n operation: \"format(sighash)\"\n });\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: (this.payable ? \"payable\" : \"undefined\"),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [`constructor${joinParams(format, this.inputs)}`];\n result.push((this.payable) ? \"payable\" : \"nonpayable\");\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return ConstructorFragment.fromTokens(lex(text));\n }\n static fromObject(obj) {\n throw new Error(\"TODO\");\n }\n static fromTokens(tokens) {\n consumeKeywords(tokens, setify([\"constructor\"]));\n const inputs = consumeParams(tokens);\n const payable = !!consumeKeywords(tokens, setify([\"payable\"])).has(\"payable\");\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new ConstructorFragment(_guard, FragmentType.constructor, inputs, payable, gas);\n }\n}\nexport class FunctionFragment extends NamedFragment {\n constructor(guard, name, stateMutability, inputs, outputs, gas) {\n super(guard, FragmentType.function, name, inputs);\n outputs = Object.freeze(outputs.slice());\n const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n const payable = (stateMutability === \"payable\");\n defineProperties(this, { constant, gas, outputs, payable, stateMutability });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"function\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash) {\n if (this.stateMutability !== \"nonpayable\") {\n result.push(this.stateMutability);\n }\n if (this.outputs && this.outputs.length) {\n result.push(\"returns\");\n result.push(joinParams(format, this.outputs));\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return FunctionFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"function\", tokens);\n const inputs = consumeParams(tokens);\n const mutability = consumeMutability(tokens);\n let outputs = [];\n if (consumeKeywords(tokens, setify([\"returns\"])).has(\"returns\")) {\n outputs = consumeParams(tokens);\n }\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n }\n}\nexport class StructFragment extends NamedFragment {\n format() {\n throw new Error(\"@TODO\");\n }\n static fromString(text) {\n return StructFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"struct\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new StructFragment(_guard, FragmentType.struct, name, inputs);\n }\n}\n//# sourceMappingURL=fragments.js.map","export const version = \"@ethersproject/math@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\nconst nibbles = \"0123456789abcdef\";\nconst BN_0 = BigInt(0);\n// Converts a value to a BigInt, including big endian data\nexport function toBigInt(_value) {\n if (_value instanceof Uint8Array) {\n let result = \"0x0\";\n for (const v of _value) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0x0f];\n }\n return BigInt(result);\n }\n return logger.getBigInt(_value, \"value\");\n}\nexport function toNumber(_value) {\n const value = toBigInt(_value);\n if (value < -maxValue || value > maxValue) {\n logger.throwArgumentError(\"overflow\", \"value\", _value);\n }\n return Number(value);\n}\n// Converts value to hex, optionally padding on the left to width bytes\nexport function toHex(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n let result = value.toString(16);\n if (_width == null) {\n // Ensure the value is of even length\n if (result.length % 2) {\n result = \"0\" + result;\n }\n }\n else {\n const width = logger.getNumber(_width, \"width\");\n if (width * 2 < result.length) {\n throw new Error(`value ${value} exceeds width ${width}`);\n }\n // Pad the value to the required width\n while (result.length < (width * 2)) {\n result = \"0\" + result;\n }\n }\n return \"0x\" + result;\n}\nexport function toArray(_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n if (value === BN_0) {\n return new Uint8Array([]);\n }\n let hex = value.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < result.length; i++) {\n const offset = i * 2;\n result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n }\n return result;\n}\n//# sourceMappingURL=convert.js.map","import { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n// Convert a value from a twos-compliment value\nexport function fromTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n // Top bit set; treat as a negative value\n if (value >> (width - BN_1)) {\n const mask = (BN_1 << width) - BN_1;\n return -(((~value) & mask) + BN_1);\n }\n return value;\n}\n// Convert value to a twos-compliment value\nexport function toTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n if (value < BN_0) {\n const mask = (BN_1 << width) - BN_1;\n return ((~(-value)) & mask) + BN_1;\n }\n return value;\n}\nexport function mask(_value, _bits) {\n const value = logger.getBigInt(_value, \"value\");\n const bits = logger.getBigInt(_bits, \"bits\");\n return value & ((BN_1 << bits) - BN_1);\n}\n//# sourceMappingURL=maths.js.map","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 _FixedNumber_instances, _FixedNumber_value, _FixedNumber_checkFormat;\nimport { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nimport { fromTwos, toTwos } from \"./maths.js\";\nconst _constructorGuard = {};\n//const Zero = BigInt(0);\nconst NegativeOne = BigInt(-1);\nfunction throwFault(message, fault, operation, value) {\n const params = { fault: fault, operation: operation };\n if (value !== undefined) {\n params.value = value;\n }\n return logger.throwError(message, \"NUMERIC_FAULT\", params);\n}\n// Constant to pull zeros from for multipliers\nlet zeros = \"0\";\nwhile (zeros.length < 256) {\n zeros += zeros;\n}\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getMultiplier(decimals) {\n if (typeof (decimals) !== \"number\" || decimals < 0 || decimals > 256 || decimals % 1) {\n logger.throwArgumentError(\"invalid decimal length\", \"decimals\", decimals);\n }\n return BigInt(\"1\" + zeros.substring(0, decimals));\n}\nexport function formatFixed(_value, _decimals = 0) {\n let value = logger.getBigInt(_value, \"value\");\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n const multiplierStr = String(multiplier);\n const negative = (value < 0);\n if (negative) {\n value *= NegativeOne;\n }\n let fraction = String(value % multiplier);\n // Make sure there are enough place-holders\n while (fraction.length < multiplierStr.length - 1) {\n fraction = \"0\" + fraction;\n }\n // Strip training 0\n while (fraction.length > 1 && fraction.substring(fraction.length - 1) === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n let result = String(value / multiplier);\n if (multiplierStr.length !== 1) {\n result += \".\" + fraction;\n }\n if (negative) {\n result = \"-\" + result;\n }\n return result;\n}\nexport function parseFixed(value, _decimals = 0) {\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n if (typeof (value) !== \"string\" || !value.match(/^-?[0-9.]+$/)) {\n logger.throwArgumentError(\"invalid decimal value\", \"value\", value);\n }\n // Is it negative?\n const negative = (value.substring(0, 1) === \"-\");\n if (negative) {\n value = value.substring(1);\n }\n if (value === \".\") {\n logger.throwArgumentError(\"missing value\", \"value\", value);\n }\n // Split it into a whole and fractional part\n const comps = value.split(\".\");\n if (comps.length > 2) {\n logger.throwArgumentError(\"too many decimal points\", \"value\", value);\n }\n let whole = (comps[0] || \"0\"), fraction = (comps[1] || \"0\");\n // Trim trialing zeros\n while (fraction[fraction.length - 1] === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n // Check the fraction doesn't exceed our decimals size\n if (fraction.length > String(multiplier).length - 1) {\n throwFault(\"fractional component exceeds decimals\", \"underflow\", \"parseFixed\");\n }\n // If decimals is 0, we have an empty string for fraction\n if (fraction === \"\") {\n fraction = \"0\";\n }\n // Fully pad the string with zeros to get to wei\n while (fraction.length < String(multiplier).length - 1) {\n fraction += \"0\";\n }\n const wholeValue = BigInt(whole);\n const fractionValue = BigInt(fraction);\n let wei = (wholeValue * multiplier) + fractionValue;\n if (negative) {\n wei *= NegativeOne;\n }\n return wei;\n}\nexport class FixedFormat {\n constructor(constructorGuard, signed, width, decimals) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedFormat constructor; use FixedFormat.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.signed = signed;\n this.width = width;\n this.decimals = decimals;\n this.name = (signed ? \"\" : \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n this._multiplier = getMultiplier(decimals);\n Object.freeze(this);\n }\n static from(value) {\n if (value instanceof FixedFormat) {\n return value;\n }\n if (typeof (value) === \"number\") {\n value = `fixed128x${value}`;\n }\n let signed = true;\n let width = 128;\n let decimals = 18;\n if (typeof (value) === \"string\") {\n if (value === \"fixed\") {\n // defaults...\n }\n else if (value === \"ufixed\") {\n signed = false;\n }\n else {\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n if (!match) {\n return logger.throwArgumentError(\"invalid fixed format\", \"format\", value);\n }\n signed = (match[1] !== \"u\");\n width = parseInt(match[2]);\n decimals = parseInt(match[3]);\n }\n }\n else if (value) {\n const check = (key, type, defaultValue) => {\n if (value[key] == null) {\n return defaultValue;\n }\n if (typeof (value[key]) !== type) {\n logger.throwArgumentError(\"invalid fixed format (\" + key + \" not \" + type + \")\", \"format.\" + key, value[key]);\n }\n return value[key];\n };\n signed = check(\"signed\", \"boolean\", signed);\n width = check(\"width\", \"number\", width);\n decimals = check(\"decimals\", \"number\", decimals);\n }\n if (width % 8) {\n logger.throwArgumentError(\"invalid fixed format width (not byte aligned)\", \"format.width\", width);\n }\n if (decimals > 80) {\n logger.throwArgumentError(\"invalid fixed format (decimals too large)\", \"format.decimals\", decimals);\n }\n return new FixedFormat(_constructorGuard, signed, width, decimals);\n }\n}\nexport class FixedNumber {\n constructor(constructorGuard, hex, value, format) {\n _FixedNumber_instances.add(this);\n //#hex: string;\n _FixedNumber_value.set(this, void 0);\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedNumber constructor; use FixedNumber.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.format = FixedFormat.from(format);\n //this.#hex = hex;\n __classPrivateFieldSet(this, _FixedNumber_value, value, \"f\");\n this._isFixedNumber = true;\n Object.freeze(this);\n }\n addUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a + b, this.format.decimals, this.format);\n }\n subUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a - b, this.format.decimals, this.format);\n }\n mulUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * b) / this.format._multiplier, this.format.decimals, this.format);\n }\n divUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * this.format._multiplier) / b, this.format.decimals, this.format);\n }\n floor() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (this.isNegative() && hasFraction) {\n result = result.subUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n ceiling() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (!this.isNegative() && hasFraction) {\n result = result.addUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n // @TODO: Support other rounding algorithms\n round(decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n // If we are already in range, we're done\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n if (decimals < 0 || decimals > 80 || (decimals % 1)) {\n logger.throwArgumentError(\"invalid decimal count\", \"decimals\", decimals);\n }\n if (comps[1].length <= decimals) {\n return this;\n }\n const factor = FixedNumber.from(\"1\" + zeros.substring(0, decimals), this.format);\n const bump = BUMP.toFormat(this.format);\n return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor);\n }\n isZero() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0.0\" || __classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0\");\n }\n isNegative() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\")[0] === \"-\");\n }\n toString() { return __classPrivateFieldGet(this, _FixedNumber_value, \"f\"); }\n toHexString(_width) {\n throw new Error(\"TODO\");\n /*\n return toHex();\n if (width == null) { return this.#hex; }\n\n const width = logger.getNumeric(_width);\n if (width % 8) { logger.throwArgumentError(\"invalid byte width\", \"width\", width); }\n\n const hex = BigNumber.from(this.#hex).fromTwos(this.format.width).toTwos(width).toHexString();\n return zeroPadLeft(hex, width / 8);\n */\n }\n toUnsafeFloat() { return parseFloat(this.toString()); }\n toFormat(format) {\n return FixedNumber.fromString(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), format);\n }\n static fromValue(value, decimals = 0, format = \"fixed\") {\n return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\n }\n static fromString(value, format = \"fixed\") {\n const fixedFormat = FixedFormat.from(format);\n const numeric = parseFixed(value, fixedFormat.decimals);\n if (!fixedFormat.signed && numeric < 0) {\n throwFault(\"unsigned value cannot be negative\", \"overflow\", \"value\", value);\n }\n const hex = (function () {\n if (fixedFormat.signed) {\n return toHex(toTwos(numeric, fixedFormat.width));\n }\n return toHex(numeric, fixedFormat.width / 8);\n })();\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static fromBytes(_value, format = \"fixed\") {\n const value = logger.getBytes(_value, \"value\");\n const fixedFormat = FixedFormat.from(format);\n if (value.length > fixedFormat.width / 8) {\n throw new Error(\"overflow\");\n }\n let numeric = toBigInt(value);\n if (fixedFormat.signed) {\n numeric = fromTwos(numeric, fixedFormat.width);\n }\n const hex = toHex(toTwos(numeric, (fixedFormat.signed ? 0 : 1) + fixedFormat.width));\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static from(value, format) {\n if (typeof (value) === \"string\") {\n return FixedNumber.fromString(value, format);\n }\n if (value instanceof Uint8Array) {\n return FixedNumber.fromBytes(value, format);\n }\n try {\n return FixedNumber.fromValue(value, 0, format);\n }\n catch (error) {\n // Allow NUMERIC_FAULT to bubble up\n if (error.code !== \"INVALID_ARGUMENT\") {\n throw error;\n }\n }\n return logger.throwArgumentError(\"invalid FixedNumber value\", \"value\", value);\n }\n static isFixedNumber(value) {\n return !!(value && value._isFixedNumber);\n }\n}\n_FixedNumber_value = new WeakMap(), _FixedNumber_instances = new WeakSet(), _FixedNumber_checkFormat = function _FixedNumber_checkFormat(other) {\n if (this.format.name !== other.format.name) {\n logger.throwArgumentError(\"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n }\n};\nconst ONE = FixedNumber.from(1);\nconst BUMP = FixedNumber.from(\"0.5\");\n//# sourceMappingURL=fixednumber.js.map","import { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nconst Alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nlet Lookup = null;\nfunction getAlpha(letter) {\n if (Lookup == null) {\n Lookup = {};\n for (let i = 0; i < Alphabet.length; i++) {\n Lookup[Alphabet[i]] = BigInt(i);\n }\n }\n const result = Lookup[letter];\n if (result == null) {\n logger.throwArgumentError(`invalid base58 value`, \"letter\", letter);\n }\n return result;\n}\nconst BN_0 = BigInt(0);\nconst BN_58 = BigInt(58);\nexport function encodeBase58(_value) {\n let value = toBigInt(logger.getBytes(_value));\n let result = \"\";\n while (value) {\n result = Alphabet[Number(value % BN_58)] + result;\n value /= BN_58;\n }\n return result;\n}\nexport function decodeBase58(value) {\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result *= BN_58;\n result += getAlpha(value[i]);\n }\n return toHex(result);\n}\n//# sourceMappingURL=base58.js.map","export function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/*\nfunction _isByte(value: number): boolean {\n return (typeof(value) === \"number\" && value >= 0 && value < 256 && Math.floor(value) === value);\n}\nexport function isBytes(value: any): value is Bytes {\n if (value == null) { return false; }\n\n if (value instanceof Uint8Array) { return true; }\n if (typeof(value) === \"string\") { return false; }\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n if (!_isByte(value[i])) { return false; }\n }\n return true;\n }\n\n return false;\n}\n*/\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\n//# sourceMappingURL=check.js.map","export const version = \"@ethersproject/bytes@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { isBytesLike } from \"./check.js\";\nimport { logger } from \"./logger.js\";\nlet BN_8 = null;\nlet BN_255 = null;\ntry {\n BN_8 = BigInt(\"8\");\n BN_255 = BigInt(\"255\");\n}\ncatch (error) {\n console.log(\"Unsupported bigint\", error);\n}\nfunction isHexable(value) {\n return (value && typeof (value.toHexString) === \"function\");\n}\nexport function arrayify(data) {\n if (data == null) {\n logger.throwArgumentError(\"cannot arrayify nullish\", \"data\", data);\n }\n if (typeof (data) === \"number\") {\n logger.assertUint53(data);\n const result = [];\n while (data) {\n result.unshift(data & 0xff);\n data = parseInt(String(data / 256));\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (BN_8 && typeof (data) === \"bigint\") {\n const result = [];\n while (data) {\n result.unshift(Number(data & BN_255));\n data >>= BN_8;\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (isHexable(data)) {\n return arrayify(data.toHexString());\n }\n if (typeof (data) === \"string\") {\n let hex = data;\n //if (options.allowMissingPrefix && hex.substring(0, 2) !== \"0x\") {\n // hex = \"0x\" + hex;\n //}\n if (!hex.match(/^0x[0-9a-f]*$/i)) {\n throw new RangeError(`invalid hex data string (${JSON.stringify(data)})`);\n }\n const result = [];\n for (let i = 2; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n return new Uint8Array(result);\n }\n if (data instanceof Uint8Array) {\n return new Uint8Array(data);\n }\n throw new TypeError(`cannot arrayify ${JSON.stringify(data)}`);\n}\nexport function _noCopyArrayify(data) {\n if (!isBytesLike(data)) {\n logger.throwArgumentError(\"invalid BytesLike value\", \"data\", data);\n } // @TODO: ArgumentE>\n if (data instanceof Uint8Array) {\n return data;\n }\n return arrayify(data);\n}\n//# sourceMappingURL=array.js.map","import { logger } from \"./logger.js\";\nexport function decodeBase64(textData) {\n return new Uint8Array(Buffer.from(textData, \"base64\"));\n}\n;\nexport function encodeBase64(data) {\n return Buffer.from(logger.getBytes(data, \"data\")).toString(\"base64\");\n}\n//# sourceMappingURL=base64.js.map","import { arrayify, _noCopyArrayify } from \"./array.js\";\nconst HexCharacters = \"0123456789abcdef\";\nexport function hexlify(data) {\n const bytes = _noCopyArrayify(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\nexport function quantity(value) {\n let result = hexlify(arrayify(value)).substring(2);\n while (result.substring(0, 1) === \"0\") {\n result = result.substring(1);\n }\n if (result === \"\") {\n result = \"0\";\n }\n return \"0x\" + result;\n}\n//# sourceMappingURL=hex.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { isHexString } from \"./check.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return _noCopyArrayify(data).length;\n}\nexport function dataSlice(data, start, end) {\n const bytes = _noCopyArrayify(data);\n if (end != null && end > bytes.length) {\n logger.throwError(\"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.substring(0, 2) == \"00\") {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\n//# sourceMappingURL=data.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nfunction zeroPad(data, length, left) {\n const bytes = _noCopyArrayify(data);\n if (length < bytes.length) {\n logger.throwError(\"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n }\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\nexport function zeroPadLeft(data, length) {\n return zeroPad(data, length, true);\n}\nexport function zeroPadRight(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=pad.js.map","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 _Result_instances, _Result_indices, _Result_throwError, _Writer_instances, _Writer_data, _Writer_dataLength, _Writer_writeData, _Reader_instances, _Reader_data, _Reader_offset, _Reader_coerceFunc, _Reader_peekBytes;\nimport { toArray, toBigInt, toNumber } from \"@ethersproject/math\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nexport const WordSize = 32;\nconst Padding = new Uint8Array(WordSize);\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [\"then\"];\nconst _guard = {};\nexport class Result extends Array {\n constructor(guard, items, keys) {\n logger.assertPrivate(guard, _guard, \"Result\");\n super(...items);\n _Result_instances.add(this);\n _Result_indices.set(this, void 0);\n // Name lookup table\n __classPrivateFieldSet(this, _Result_indices, new Map(), \"f\");\n if (keys) {\n keys.forEach((key, index) => {\n if (key == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _Result_indices, \"f\").has(key)) {\n (__classPrivateFieldGet(this, _Result_indices, \"f\").get(key)).push(index);\n }\n else {\n __classPrivateFieldGet(this, _Result_indices, \"f\").set(key, [index]);\n }\n });\n }\n Object.freeze(this);\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n if (typeof (prop) === \"string\") {\n if (prop.match(/^[0-9]+$/)) {\n const index = logger.getNumber(prop, \"%index\");\n if (index < 0 || index >= this.length) {\n throw new RangeError(\"out of result range\");\n }\n const item = target[index];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `index ${index}`, item);\n }\n return item;\n }\n // Pass important checks (like `then` for Promise) through\n if (prop in target || passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n // Something that could be a result keyword value\n if (!(prop in target)) {\n return target.getValue(prop);\n }\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n }\n slice(start, end) {\n if (start == null) {\n start = 0;\n }\n if (end == null) {\n end = this.length;\n }\n const result = [];\n for (let i = start; i < end; i++) {\n let value;\n try {\n value = this[i];\n }\n catch (error) {\n value = error.error;\n }\n result.push(value);\n }\n return result;\n }\n getValue(name) {\n const index = __classPrivateFieldGet(this, _Result_indices, \"f\").get(name);\n if (index != null && index.length === 1) {\n const item = this[index[0]];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `property ${JSON.stringify(name)}`, item);\n }\n return item;\n }\n throw new Error(`no named parameter: ${JSON.stringify(name)}`);\n }\n static fromItems(items, keys) {\n return new Result(_guard, items, keys);\n }\n}\n_Result_indices = new WeakMap(), _Result_instances = new WeakSet(), _Result_throwError = function _Result_throwError(name, error) {\n const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`);\n wrapped.error = error;\n throw wrapped;\n};\nexport function checkResultErrors(result) {\n // Find the first error (if any)\n const errors = [];\n const checkErrors = function (path, object) {\n if (!Array.isArray(object)) {\n return;\n }\n for (let key in object) {\n const childPath = path.slice();\n childPath.push(key);\n try {\n checkErrors(childPath, object[key]);\n }\n catch (error) {\n errors.push({ path: childPath, error: error });\n }\n }\n };\n checkErrors([], result);\n return errors;\n}\nfunction getValue(value) {\n let bytes = toArray(value);\n if (bytes.length > WordSize) {\n logger.throwError(\"value out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes,\n length: WordSize,\n offset: bytes.length\n });\n }\n if (bytes.length % WordSize) {\n bytes = arrayify(concat([Padding.slice(bytes.length % WordSize), bytes]));\n }\n return bytes;\n}\nexport class Coder {\n constructor(name, type, localName, dynamic) {\n defineProperties(this, { name, type, localName, dynamic }, {\n name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n });\n }\n _throwError(message, value) {\n return logger.throwArgumentError(message, this.localName, value);\n }\n}\nexport class Writer {\n constructor() {\n _Writer_instances.add(this);\n // An array of WordSize lengthed objects to concatenation\n _Writer_data.set(this, void 0);\n _Writer_dataLength.set(this, void 0);\n __classPrivateFieldSet(this, _Writer_data, [], \"f\");\n __classPrivateFieldSet(this, _Writer_dataLength, 0, \"f\");\n }\n get data() {\n return concat(__classPrivateFieldGet(this, _Writer_data, \"f\"));\n }\n get length() { return __classPrivateFieldGet(this, _Writer_dataLength, \"f\"); }\n appendWriter(writer) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, arrayify(writer.data));\n }\n // Arrayish item; pad on the right to *nearest* WordSize\n writeBytes(value) {\n let bytes = arrayify(value);\n const paddingOffset = bytes.length % WordSize;\n if (paddingOffset) {\n bytes = arrayify(concat([bytes, Padding.slice(paddingOffset)]));\n }\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, bytes);\n }\n // Numeric item; pad on the left *to* WordSize\n writeValue(value) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, getValue(value));\n }\n // Inserts a numeric place-holder, returning a callback that can\n // be used to asjust the value later\n writeUpdatableValue() {\n const offset = __classPrivateFieldGet(this, _Writer_data, \"f\").length;\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(Padding);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + WordSize, \"f\");\n return (value) => {\n __classPrivateFieldGet(this, _Writer_data, \"f\")[offset] = getValue(value);\n };\n }\n}\n_Writer_data = new WeakMap(), _Writer_dataLength = new WeakMap(), _Writer_instances = new WeakSet(), _Writer_writeData = function _Writer_writeData(data) {\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(data);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + data.length, \"f\");\n return data.length;\n};\nexport class Reader {\n constructor(data, coerceFunc, allowLoose) {\n _Reader_instances.add(this);\n _Reader_data.set(this, void 0);\n _Reader_offset.set(this, void 0);\n _Reader_coerceFunc.set(this, void 0);\n defineProperties(this, { allowLoose: !!allowLoose });\n __classPrivateFieldSet(this, _Reader_data, arrayify(data), \"f\");\n __classPrivateFieldSet(this, _Reader_coerceFunc, coerceFunc || Reader.coerce, \"f\");\n __classPrivateFieldSet(this, _Reader_offset, 0, \"f\");\n }\n get data() { return hexlify(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n get dataLength() { return __classPrivateFieldGet(this, _Reader_data, \"f\").length; }\n get consumed() { return __classPrivateFieldGet(this, _Reader_offset, \"f\"); }\n get bytes() { return new Uint8Array(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n // The default Coerce function\n static coerce(type, value) {\n let match = type.match(\"^u?int([0-9]+)$\");\n if (match && parseInt(match[1]) <= 48) {\n value = value.toNumber();\n }\n return value;\n }\n coerce(type, value) {\n return __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\").call(this, type, value);\n }\n // Create a sub-reader with the same underlying data, but offset\n subReader(offset) {\n return new Reader(__classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\") + offset), __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\"), this.allowLoose);\n }\n // Read bytes\n readBytes(length, loose) {\n let bytes = __classPrivateFieldGet(this, _Reader_instances, \"m\", _Reader_peekBytes).call(this, 0, length, !!loose);\n __classPrivateFieldSet(this, _Reader_offset, __classPrivateFieldGet(this, _Reader_offset, \"f\") + bytes.length, \"f\");\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n // Read a numeric values\n readValue() {\n return toBigInt(this.readBytes(WordSize));\n }\n readIndex() {\n return toNumber(this.readBytes(WordSize));\n }\n}\n_Reader_data = new WeakMap(), _Reader_offset = new WeakMap(), _Reader_coerceFunc = new WeakMap(), _Reader_instances = new WeakSet(), _Reader_peekBytes = function _Reader_peekBytes(offset, length, loose) {\n let alignedLength = Math.ceil(length / WordSize) * WordSize;\n if (__classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength > __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n if (this.allowLoose && loose && __classPrivateFieldGet(this, _Reader_offset, \"f\") + length <= __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n alignedLength = length;\n }\n else {\n logger.throwError(\"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: arrayify(__classPrivateFieldGet(this, _Reader_data, \"f\")),\n length: __classPrivateFieldGet(this, _Reader_data, \"f\").length,\n offset: __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength\n });\n }\n }\n return __classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\"), __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength);\n};\n//# sourceMappingURL=abstract-coder.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// The import here is via the package name. This is to ensure\n// that exports mapping/resolution does fall into place.\nimport { crypto } from '@noble/hashes/crypto';\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// There is almost no big endian hardware, but js typed arrays uses platform specific endianess.\n// So, just to be sure not to corrupt anything.\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xde, 0xad, 0xbe, 0xef]))\n */\nexport function bytesToHex(uint8a) {\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('deadbeef')\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 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))\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// Currently avoid insertion of polyfills with packers (browserify/webpack/etc)\n// But setTimeout is pretty slow, maybe worth to investigate howto do minimal polyfill here\nexport const nextTick = (() => {\n const nodeRequire = typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n try {\n if (nodeRequire) {\n const { setImmediate } = nodeRequire('timers');\n return () => new Promise((resolve) => setImmediate(resolve));\n }\n }\n catch (e) { }\n return () => new Promise((resolve) => setTimeout(resolve, 0));\n})();\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\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)\n continue;\n await nextTick();\n ts += diff;\n }\n}\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string') {\n throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`);\n }\n return new TextEncoder().encode(str);\n}\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!(data instanceof Uint8Array))\n throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`);\n return data;\n}\n/**\n * Concats Uint8Array-s into one; like `Buffer.concat([buf1, buf2])`\n * @example concatBytes(buf1, buf2)\n */\nexport function concatBytes(...arrays) {\n if (!arrays.every((a) => a instanceof Uint8Array))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nexport function assertNumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nexport function assertBool(b) {\n if (typeof b !== 'boolean') {\n throw new Error(`Expected boolean, not ${b}`);\n }\n}\nexport function assertBytes(bytes, ...lengths) {\n if (bytes instanceof Uint8Array && (!lengths.length || lengths.includes(bytes.length))) {\n return;\n }\n throw new TypeError(`Expected ${lengths} bytes, not ${typeof bytes} with length=${bytes.length}`);\n}\nexport function assertHash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n assertNumber(hash.outputLen);\n assertNumber(hash.blockLen);\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\nexport function checkOpts(def, _opts) {\n if (_opts !== undefined && (typeof _opts !== 'object' || !isPlainObject(_opts)))\n throw new TypeError('Options should be object or undefined');\n const opts = Object.assign(def, _opts);\n return opts;\n}\nexport function wrapConstructor(hashConstructor) {\n const hashC = (message) => hashConstructor().update(toBytes(message)).digest();\n const tmp = hashConstructor();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashConstructor();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n return new Uint8Array(crypto.node.randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n}\n","import { assertHash, Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nclass HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n assertHash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (!(this.iHash instanceof Hash))\n throw new TypeError('Expected instance of class which extends utils.Hash');\n const blockLen = (this.blockLen = this.iHash.blockLen);\n this.outputLen = this.iHash.outputLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > this.iHash.blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n 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();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n pad.fill(0);\n }\n update(buf) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length !== this.outputLen)\n throw new Error('HMAC: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\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) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\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 * 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, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n","import { hmac } from './hmac.js';\n// prettier-ignore\nimport { createView, toBytes, assertNumber, assertHash, checkOpts, asyncLoop } from './utils.js';\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash, _password, _salt, _opts) {\n assertHash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n assertNumber(c);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n if (c < 1)\n throw new Error('PBKDF2: iterations (c) should be >= 1');\n const password = toBytes(_password);\n const salt = toBytes(_salt);\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\nfunction pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW)\n prfW.destroy();\n u.fill(0);\n return DK;\n}\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n */\nexport function pbkdf2(hash, password, salt, opts) {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\nexport async function pbkdf2Async(hash, password, salt, opts) {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, (i) => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n","import { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n 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// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n const { view, buffer, blockLen, finished } = this;\n if (finished)\n throw new Error('digest() was already called');\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)\n 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) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length < this.outputLen)\n throw new Error('_Sha2: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\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++)\n 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 64bit of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n this.get().forEach((v, i) => oview.setUint32(4 * i, v, 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) {\n to || (to = new this.constructor());\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)\n to.buffer.set(buffer);\n return to;\n }\n}\n","import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\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// 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// 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 {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = IV[7] | 0;\n }\n get() {\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 set(A, B, C, D, E, F, G, H) {\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 process(view, offset) {\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)\n 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 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/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\n","const U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\nexport function fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nexport function split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nexport const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nexport const shrSH = (h, l, s) => h >>> s;\nexport const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nexport const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexport const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexport const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nexport const rotr32H = (h, l) => l;\nexport const rotr32L = (h, l) => h;\n// Left rotate for Shift in [1, 32)\nexport const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexport const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexport const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nexport function add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nexport const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexport const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexport const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexport const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexport const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexport const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n","import { SHA2 } from './_sha2.js';\nimport * as u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n)));\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = new Uint32Array(80);\nconst SHA512_W_L = new Uint32Array(80);\nexport class SHA512 extends SHA2 {\n constructor() {\n super(128, 64, 16, false);\n // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n // Also looks cleaner and easier to verify with spec.\n // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x6a09e667 | 0;\n this.Al = 0xf3bcc908 | 0;\n this.Bh = 0xbb67ae85 | 0;\n this.Bl = 0x84caa73b | 0;\n this.Ch = 0x3c6ef372 | 0;\n this.Cl = 0xfe94f82b | 0;\n this.Dh = 0xa54ff53a | 0;\n this.Dl = 0x5f1d36f1 | 0;\n this.Eh = 0x510e527f | 0;\n this.El = 0xade682d1 | 0;\n this.Fh = 0x9b05688c | 0;\n this.Fl = 0x2b3e6c1f | 0;\n this.Gh = 0x1f83d9ab | 0;\n this.Gl = 0xfb41bd6b | 0;\n this.Hh = 0x5be0cd19 | 0;\n this.Hl = 0x137e2179 | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n SHA512_W_H.fill(0);\n SHA512_W_L.fill(0);\n }\n destroy() {\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nclass SHA512_256 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x22312194 | 0;\n this.Al = 0xfc2bf72c | 0;\n this.Bh = 0x9f555fa3 | 0;\n this.Bl = 0xc84c64c2 | 0;\n this.Ch = 0x2393b86b | 0;\n this.Cl = 0x6f53b151 | 0;\n this.Dh = 0x96387719 | 0;\n this.Dl = 0x5940eabd | 0;\n this.Eh = 0x96283ee2 | 0;\n this.El = 0xa88effe3 | 0;\n this.Fh = 0xbe5e1e25 | 0;\n this.Fl = 0x53863992 | 0;\n this.Gh = 0x2b0199fc | 0;\n this.Gl = 0x2c85b8aa | 0;\n this.Hh = 0x0eb72ddc | 0;\n this.Hl = 0x81c52ca2 | 0;\n this.outputLen = 32;\n }\n}\nclass SHA384 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0xcbbb9d5d | 0;\n this.Al = 0xc1059ed8 | 0;\n this.Bh = 0x629a292a | 0;\n this.Bl = 0x367cd507 | 0;\n this.Ch = 0x9159015a | 0;\n this.Cl = 0x3070dd17 | 0;\n this.Dh = 0x152fecd8 | 0;\n this.Dl = 0xf70e5939 | 0;\n this.Eh = 0x67332667 | 0;\n this.El = 0xffc00b31 | 0;\n this.Fh = 0x8eb44a87 | 0;\n this.Fl = 0x68581511 | 0;\n this.Gh = 0xdb0c2e0d | 0;\n this.Gl = 0x64f98fa7 | 0;\n this.Hh = 0x47b5481d | 0;\n this.Hl = 0xbefa4fa4 | 0;\n this.outputLen = 48;\n }\n}\nexport const sha512 = wrapConstructor(() => new SHA512());\nexport const sha512_256 = wrapConstructor(() => new SHA512_256());\nexport const sha384 = wrapConstructor(() => new SHA384());\n","export const version = \"@ethersproject/crypto@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","/* Browser Crypto Shims */\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { pbkdf2 } from \"@noble/hashes/pbkdf2\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { sha512 } from \"@noble/hashes/sha512\";\nimport { logger } from \"./logger.js\";\nfunction getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst anyGlobal = getGlobal();\nlet crypto = anyGlobal.crypto || anyGlobal.msCrypto;\nexport function createHash(algo) {\n switch (algo) {\n case \"sha256\": return sha256.create();\n case \"sha512\": return sha512.create();\n }\n return logger.throwArgumentError(\"invalid hashing algorithm name\", \"algorithm\", algo);\n}\nexport function createHmac(_algo, key) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid hmac algorithm\", \"algorithm\", _algo);\n }\n return hmac.create(algo, key);\n}\nexport function pbkdf2Sync(password, salt, iterations, keylen, _algo) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid pbkdf2 algorithm\", \"algorithm\", _algo);\n }\n return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen });\n}\nexport function randomBytes(length) {\n if (crypto == null) {\n return logger.throwError(\"platform does not support secure random numbers\", \"UNSUPPORTED_OPERATION\", {\n operation: \"randomBytes\"\n });\n }\n if (length <= 0 || length > 1024 || (length % 1) || length != length) {\n logger.throwArgumentError(\"invalid length\", \"length\", length);\n }\n const result = new Uint8Array(length);\n crypto.getRandomValues(result);\n return result;\n}\n//# sourceMappingURL=crypto-browser.js.map","import { createHmac } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _computeHmac = function (algorithm, key, data) {\n return \"0x\" + createHmac(algorithm, key).update(data).digest(\"hex\");\n};\nlet __computeHmac = _computeHmac;\nexport function computeHmac(algorithm, _key, _data) {\n const key = logger.getBytes(_key, \"key\");\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__computeHmac(algorithm, key, data));\n}\ncomputeHmac._ = _computeHmac;\ncomputeHmac.lock = function () { locked = true; };\ncomputeHmac.register = function (func) {\n if (locked) {\n throw new Error(\"computeHmac is locked\");\n }\n __computeHmac = func;\n};\nObject.freeze(computeHmac);\n//# sourceMappingURL=hmac.js.map","import * as u64 from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapConstructorWithOpts, assertNumber, } from './utils.js';\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = u64.split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => s > 32 ? u64.rotlBH(h, l, s) : u64.rotlSH(h, l, s);\nconst rotlL = (h, l, s) => s > 32 ? u64.rotlBL(h, l, s) : u64.rotlSL(h, l, s);\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n assertNumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (this.finished)\n throw new Error('digest() was already called');\n const { blockLen, state } = 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 for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array))\n throw new Error('Keccak: invalid output buffer');\n this.finish();\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= this.blockLen)\n this.keccak();\n const take = Math.min(this.blockLen - this.posOut, len - pos);\n out.set(this.state.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n assertNumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n if (out.length < this.outputLen)\n throw new Error('Keccak: invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finish();\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = gen(0x06, 136, 256 / 8);\nexport const sha3_384 = gen(0x06, 104, 384 / 8);\nexport const sha3_512 = gen(0x06, 72, 512 / 8);\nexport const keccak_224 = gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = gen(0x01, 136, 256 / 8);\nexport const keccak_384 = gen(0x01, 104, 384 / 8);\nexport const keccak_512 = gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen !== undefined ? opts.dkLen : outputLen, true));\nexport const shake128 = genShake(0x1f, 168, 128 / 8);\nexport const shake256 = genShake(0x1f, 136, 256 / 8);\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\nexport function keccak256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","import { SHA2 } from './_sha2.js';\nimport { wrapConstructor } from './utils.js';\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\nconst Rho = new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]);\nconst Id = Uint8Array.from({ length: 16 }, (_, i) => i);\nconst Pi = Id.map((i) => (9 * i + 5) % 16);\nlet idxL = [Id];\nlet idxR = [Pi];\nfor (let i = 0; i < 4; i++)\n for (let j of [idxL, idxR])\n j.push(j[i].map((k) => Rho[k]));\nconst shifts = [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => new Uint8Array(i));\nconst shiftsL = idxL.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst shiftsR = idxR.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst Kl = new Uint32Array([0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]);\nconst Kr = new Uint32Array([0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]);\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word, shift) => (word << shift) | (word >>> (32 - shift));\n// It's called f() in spec.\nfunction f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n else if (group === 1)\n return (x & y) | (~x & z);\n else if (group === 2)\n return (x | ~y) ^ z;\n else if (group === 3)\n return (x & z) | (y & ~z);\n else\n return x ^ (y | ~z);\n}\n// Temporary buffer, not used to store anything between runs\nconst BUF = new Uint32Array(16);\nexport class RIPEMD160 extends SHA2 {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = (rotl(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = (rotl(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n BUF.fill(0);\n }\n destroy() {\n this.destroyed = true;\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0);\n }\n}\n/**\n * RIPEMD-160 - a hash function from 1990s.\n * @param message - msg that would be hashed\n */\nexport const ripemd160 = wrapConstructor(() => new RIPEMD160());\n","import { ripemd160 as noble_ripemd160 } from \"@noble/hashes/ripemd160\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _ripemd160 = function (data) {\n return noble_ripemd160(data);\n};\nlet __ripemd160 = _ripemd160;\nexport function ripemd160(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__ripemd160(data));\n}\nripemd160._ = _ripemd160;\nripemd160.lock = function () { locked = true; };\nripemd160.register = function (func) {\n if (locked) {\n throw new TypeError(\"ripemd160 is locked\");\n }\n __ripemd160 = func;\n};\nObject.freeze(ripemd160);\n//# sourceMappingURL=ripemd160.js.map","import { pbkdf2Sync } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _pbkdf2 = function (password, salt, iterations, keylen, algo) {\n return pbkdf2Sync(password, salt, iterations, keylen, algo);\n};\nlet __pbkdf2 = _pbkdf2;\nexport function pbkdf2(_password, _salt, iterations, keylen, algo) {\n const password = logger.getBytes(_password, \"password\");\n const salt = logger.getBytes(_salt, \"salt\");\n return hexlify(__pbkdf2(password, salt, iterations, keylen, algo));\n}\npbkdf2._ = _pbkdf2;\npbkdf2.lock = function () { locked = true; };\npbkdf2.register = function (func) {\n if (locked) {\n throw new Error(\"pbkdf2 is locked\");\n }\n __pbkdf2 = func;\n};\nObject.freeze(pbkdf2);\n//# sourceMappingURL=pbkdf2.js.map","import { randomBytes as crypto_random } from \"crypto\"; /*-browser*/\nlet locked = false;\nconst _randomBytes = function (length) {\n return new Uint8Array(crypto_random(length));\n};\nlet __randomBytes = _randomBytes;\nexport function randomBytes(length) {\n return __randomBytes(length);\n}\nrandomBytes._ = _randomBytes;\nrandomBytes.lock = function () { locked = true; };\nrandomBytes.register = function (func) {\n if (locked) {\n throw new Error(\"random is locked\");\n }\n __randomBytes = func;\n};\nObject.freeze(randomBytes);\n//# sourceMappingURL=random.js.map","import { sha256 } from './sha256.js';\nimport { pbkdf2 } from './pbkdf2.js';\nimport { assertNumber, asyncLoop, checkOpts, u32 } from './utils.js';\n// RFC 7914 Scrypt KDF\n// Left rotate for uint32\nconst rotl = (a, b) => (a << b) | (a >>> (32 - b));\n// The main Scrypt loop: uses Salsa extensively.\n// Six versions of the function were tried, this is the fastest one.\n// prettier-ignore\nfunction XorAndSalsa(prev, pi, input, ii, out, oi) {\n // Based on https://cr.yp.to/salsa20.html\n // Xor blocks\n let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];\n let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];\n let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];\n let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];\n let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];\n let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];\n let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];\n let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];\n // Save state to temporary variables (salsa)\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n // Main loop (salsa)\n for (let i = 0; i < 8; i += 2) {\n x04 ^= rotl(x00 + x12 | 0, 7);\n x08 ^= rotl(x04 + x00 | 0, 9);\n x12 ^= rotl(x08 + x04 | 0, 13);\n x00 ^= rotl(x12 + x08 | 0, 18);\n x09 ^= rotl(x05 + x01 | 0, 7);\n x13 ^= rotl(x09 + x05 | 0, 9);\n x01 ^= rotl(x13 + x09 | 0, 13);\n x05 ^= rotl(x01 + x13 | 0, 18);\n x14 ^= rotl(x10 + x06 | 0, 7);\n x02 ^= rotl(x14 + x10 | 0, 9);\n x06 ^= rotl(x02 + x14 | 0, 13);\n x10 ^= rotl(x06 + x02 | 0, 18);\n x03 ^= rotl(x15 + x11 | 0, 7);\n x07 ^= rotl(x03 + x15 | 0, 9);\n x11 ^= rotl(x07 + x03 | 0, 13);\n x15 ^= rotl(x11 + x07 | 0, 18);\n x01 ^= rotl(x00 + x03 | 0, 7);\n x02 ^= rotl(x01 + x00 | 0, 9);\n x03 ^= rotl(x02 + x01 | 0, 13);\n x00 ^= rotl(x03 + x02 | 0, 18);\n x06 ^= rotl(x05 + x04 | 0, 7);\n x07 ^= rotl(x06 + x05 | 0, 9);\n x04 ^= rotl(x07 + x06 | 0, 13);\n x05 ^= rotl(x04 + x07 | 0, 18);\n x11 ^= rotl(x10 + x09 | 0, 7);\n x08 ^= rotl(x11 + x10 | 0, 9);\n x09 ^= rotl(x08 + x11 | 0, 13);\n x10 ^= rotl(x09 + x08 | 0, 18);\n x12 ^= rotl(x15 + x14 | 0, 7);\n x13 ^= rotl(x12 + x15 | 0, 9);\n x14 ^= rotl(x13 + x12 | 0, 13);\n x15 ^= rotl(x14 + x13 | 0, 18);\n }\n // Write output (salsa)\n out[oi++] = (y00 + x00) | 0;\n out[oi++] = (y01 + x01) | 0;\n out[oi++] = (y02 + x02) | 0;\n out[oi++] = (y03 + x03) | 0;\n out[oi++] = (y04 + x04) | 0;\n out[oi++] = (y05 + x05) | 0;\n out[oi++] = (y06 + x06) | 0;\n out[oi++] = (y07 + x07) | 0;\n out[oi++] = (y08 + x08) | 0;\n out[oi++] = (y09 + x09) | 0;\n out[oi++] = (y10 + x10) | 0;\n out[oi++] = (y11 + x11) | 0;\n out[oi++] = (y12 + x12) | 0;\n out[oi++] = (y13 + x13) | 0;\n out[oi++] = (y14 + x14) | 0;\n out[oi++] = (y15 + x15) | 0;\n}\nfunction BlockMix(input, ii, out, oi, r) {\n // The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)\n let head = oi + 0;\n let tail = oi + 16 * r;\n for (let i = 0; i < 16; i++)\n out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; // X ← B[2r−1]\n for (let i = 0; i < r; i++, head += 16, ii += 16) {\n // We write odd & even Yi at same time. Even: 0bXXXXX0 Odd: 0bXXXXX1\n XorAndSalsa(out, tail, input, ii, out, head); // head[i] = Salsa(blockIn[2*i] ^ tail[i-1])\n if (i > 0)\n tail += 16; // First iteration overwrites tmp value in tail\n XorAndSalsa(out, head, input, (ii += 16), out, tail); // tail[i] = Salsa(blockIn[2*i+1] ^ head[i])\n }\n}\n// Common prologue and epilogue for sync/async functions\nfunction scryptInit(password, salt, _opts) {\n // Maxmem - 1GB+1KB by default\n const opts = checkOpts({\n dkLen: 32,\n asyncTick: 10,\n maxmem: 1024 ** 3 + 1024,\n }, _opts);\n const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts;\n assertNumber(N);\n assertNumber(r);\n assertNumber(p);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n assertNumber(maxmem);\n if (onProgress !== undefined && typeof onProgress !== 'function')\n throw new Error('progressCb should be function');\n const blockSize = 128 * r;\n const blockSize32 = blockSize / 4;\n if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) {\n // NOTE: we limit N to be less than 2**32 because of 32 bit variant of Integrify function\n // There is no JS engines that allows alocate more than 4GB per single Uint8Array for now, but can change in future.\n throw new Error('Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32');\n }\n if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) {\n throw new Error('Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)');\n }\n if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) {\n throw new Error('Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32');\n }\n const memUsed = blockSize * (N + p);\n if (memUsed > maxmem) {\n throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`);\n }\n // [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)\n // Since it has only one iteration there is no reason to use async variant\n const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });\n const B32 = u32(B);\n // Re-used between parallel iterations. Array(iterations) of B\n const V = u32(new Uint8Array(blockSize * N));\n const tmp = u32(new Uint8Array(blockSize));\n let blockMixCb = () => { };\n if (onProgress) {\n const totalBlockMix = 2 * N * p;\n // Invoke callback if progress changes from 10.01 to 10.02\n // Allows to draw smooth progress bar on up to 8K screen\n const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1);\n let blockMixCnt = 0;\n blockMixCb = () => {\n blockMixCnt++;\n if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))\n onProgress(blockMixCnt / totalBlockMix);\n };\n }\n return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };\n}\nfunction scryptOutput(password, dkLen, B, V, tmp) {\n const res = pbkdf2(sha256, password, B, { c: 1, dkLen });\n B.fill(0);\n V.fill(0);\n tmp.fill(0);\n return res;\n}\n/**\n * Scrypt KDF from RFC 7914.\n * @param password - pass\n * @param salt - salt\n * @param opts - parameters\n * - `N` is cpu/mem work factor (power of 2 e.g. 2**18)\n * - `r` is block size (8 is common), fine-tunes sequential memory read size and performance\n * - `p` is parallelization factor (1 is common)\n * - `dkLen` is output key length in bytes e.g. 32.\n * - `asyncTick` - (default: 10) max time in ms for which async function can block execution\n * - `maxmem` - (default: `1024 ** 3 + 1024` aka 1GB+1KB). A limit that the app could use for scrypt\n * - `onProgress` - callback function that would be executed for progress report\n * @returns Derived key\n */\nexport function scrypt(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n for (let i = 0, pos = 0; i < N - 1; i++) {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n }\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n for (let i = 0; i < N; i++) {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n }\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n/**\n * Scrypt KDF from RFC 7914.\n */\nexport async function scryptAsync(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n let pos = 0;\n await asyncLoop(N - 1, asyncTick, (i) => {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n });\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n await asyncLoop(N, asyncTick, (i) => {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n });\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n","import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from \"@noble/hashes/scrypt\";\nimport { hexlify as H } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet lockedSync = false, lockedAsync = false;\nconst _scryptAsync = async function (passwd, salt, N, r, p, dkLen, onProgress) {\n return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress });\n};\nconst _scryptSync = function (passwd, salt, N, r, p, dkLen) {\n return _nobleSync(passwd, salt, { N, r, p, dkLen });\n};\nlet __scryptAsync = _scryptAsync;\nlet __scryptSync = _scryptSync;\nexport async function scrypt(_passwd, _salt, N, r, p, dkLen, progress) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress));\n}\nscrypt._ = _scryptAsync;\nscrypt.lock = function () { lockedAsync = true; };\nscrypt.register = function (func) {\n if (lockedAsync) {\n throw new Error(\"scrypt is locked\");\n }\n __scryptAsync = func;\n};\nObject.freeze(scrypt);\nexport function scryptSync(_passwd, _salt, N, r, p, dkLen) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(__scryptSync(passwd, salt, N, r, p, dkLen));\n}\nscryptSync._ = _scryptSync;\nscryptSync.lock = function () { lockedSync = true; };\nscryptSync.register = function (func) {\n if (lockedSync) {\n throw new Error(\"scryptSync is locked\");\n }\n __scryptSync = func;\n};\nObject.freeze(scryptSync);\n//# sourceMappingURL=scrypt.js.map","import { createHash } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nconst _sha256 = function (data) {\n return createHash(\"sha256\").update(data).digest();\n};\nconst _sha512 = function (data) {\n return createHash(\"sha512\").update(data).digest();\n};\nlet __sha256 = _sha256;\nlet __sha512 = _sha512;\nlet locked256 = false, locked512 = false;\nexport function sha256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha256(data));\n}\nsha256._ = _sha256;\nsha256.lock = function () { locked256 = true; };\nsha256.register = function (func) {\n if (locked256) {\n throw new Error(\"sha256 is locked\");\n }\n __sha256 = func;\n};\nObject.freeze(sha256);\nexport function sha512(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha512(data));\n}\nsha512._ = _sha512;\nsha512.lock = function () { locked512 = true; };\nsha512.register = function (func) {\n if (locked512) {\n throw new Error(\"sha512 is locked\");\n }\n __sha512 = func;\n};\nObject.freeze(sha256);\n//# sourceMappingURL=sha2.js.map","// We import all these so we can export lock()\nimport { computeHmac } from \"./hmac.js\";\nimport { keccak256 } from \"./keccak.js\";\nimport { ripemd160 } from \"./ripemd160.js\";\nimport { pbkdf2 } from \"./pbkdf2.js\";\nimport { randomBytes } from \"./random.js\";\nimport { scrypt, scryptSync } from \"./scrypt.js\";\nimport { sha256, sha512 } from \"./sha2.js\";\nexport { computeHmac, randomBytes, keccak256, ripemd160, sha256, sha512, pbkdf2, scrypt, scryptSync };\nexport function lock() {\n computeHmac.lock();\n keccak256.lock();\n pbkdf2.lock();\n randomBytes.lock();\n ripemd160.lock();\n scrypt.lock();\n scryptSync.lock();\n sha256.lock();\n sha512.lock();\n}\n//# sourceMappingURL=index.js.map","export const version = \"@ethersproject/address@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { arrayify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\nfunction getChecksumAddress(address) {\n // if (!isHexString(address, 20)) {\n // logger.throwArgumentError(\"invalid address\", \"address\", address);\n // }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = arrayify(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nconst Base36 = (function () {\n ;\n const result = {};\n for (let i = 0; i < 36; i++) {\n const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n result[key] = BigInt(i);\n }\n return result;\n})();\nfunction fromBase36(value) {\n value = value.toLowerCase();\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result = result * BN_36 + Base36[value[i]];\n }\n return result;\n}\nexport function getAddress(address) {\n if (typeof (address) !== \"string\") {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (address.substring(0, 2) !== \"0x\") {\n address = \"0x\" + address;\n }\n const result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n logger.throwArgumentError(\"bad address checksum\", \"address\", address);\n }\n return result;\n }\n // Maybe ICAP? (we only support direct mode)\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n logger.throwArgumentError(\"bad icap checksum\", \"address\", address);\n }\n let result = fromBase36(address.substring(4)).toString(16);\n while (result.length < 40) {\n result = \"0\" + result;\n }\n return getChecksumAddress(\"0x\" + result);\n }\n return logger.throwArgumentError(\"invalid address\", \"address\", address);\n}\nexport function getIcapAddress(address) {\n //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n//# sourceMappingURL=address.js.map","export const version = \"@ethersproject/rlp@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { logger } from \"./logger.js\";\nfunction arrayifyInteger(value) {\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\nfunction _encode(object) {\n if (Array.isArray(object)) {\n let payload = [];\n object.forEach(function (child) {\n payload = payload.concat(_encode(child));\n });\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length);\n return payload;\n }\n const length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n return length.concat(payload);\n }\n const data = Array.prototype.slice.call(logger.getBytes(object, \"object\"));\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n }\n else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n const length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n return length.concat(data);\n}\nconst nibbles = \"0123456789abcdef\";\nexport function encodeRlp(object) {\n let result = \"0x\";\n for (const v of _encode(object)) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0xf];\n }\n return result;\n}\n//# sourceMappingURL=encode.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction hexlifyByte(value) {\n let result = value.toString(16);\n while (result.length < 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction unarrayifyInteger(data, offset, length) {\n let result = 0;\n for (let i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\nfunction _decodeChildren(data, offset, childOffset, length) {\n const result = [];\n while (childOffset < offset + 1 + length) {\n const decoded = _decode(data, childOffset);\n result.push(decoded.result);\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n logger.throwError(\"child data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length, offset\n });\n }\n }\n return { consumed: (1 + length), result: result };\n}\n// returns { consumed: number, result: Object }\nfunction _decode(data, offset) {\n if (data.length === 0) {\n logger.throwError(\"data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: 0, offset: 1\n });\n }\n const checkOffset = (offset) => {\n if (offset > data.length) {\n logger.throwError(\"data short segment too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: data.length, offset\n });\n }\n };\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n const lengthLength = data[offset] - 0xf7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n }\n else if (data[offset] >= 0xc0) {\n const length = data[offset] - 0xc0;\n checkOffset(offset + 1 + length);\n return _decodeChildren(data, offset, offset + 1, length);\n }\n else if (data[offset] >= 0xb8) {\n const lengthLength = data[offset] - 0xb7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result };\n }\n else if (data[offset] >= 0x80) {\n const length = data[offset] - 0x80;\n checkOffset(offset + 1 + length);\n const result = hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result };\n }\n return { consumed: 1, result: hexlifyByte(data[offset]) };\n}\nexport function decodeRlp(_data) {\n const data = logger.getBytes(_data, \"data\");\n const decoded = _decode(data, 0);\n if (decoded.consumed !== data.length) {\n logger.throwArgumentError(\"unexpected junk after rlp payload\", \"data\", _data);\n }\n return decoded.result;\n}\n//# sourceMappingURL=decode.js.map","import { concat, dataSlice } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nexport function getCreateAddress(tx) {\n const from = getAddress(tx.from);\n const nonce = logger.getBigInt(tx.nonce, \"tx.nonce\");\n let nonceHex = nonce.toString(16);\n if (nonceHex === \"0\") {\n nonceHex = \"0x\";\n }\n else if (nonceHex.length % 2) {\n nonceHex = \"0x0\" + nonceHex;\n }\n else {\n nonceHex = \"0x\" + nonceHex;\n }\n return getAddress(dataSlice(keccak256(encodeRlp([from, nonceHex])), 12));\n}\nexport function getCreate2Address(_from, _salt, _initCodeHash) {\n const from = getAddress(_from);\n const salt = logger.getBytes(_salt, \"salt\");\n const initCodeHash = logger.getBytes(_initCodeHash, \"initCodeHash\");\n if (salt.length !== 32) {\n logger.throwArgumentError(\"salt must be 32 bytes\", \"salt\", _salt);\n }\n if (initCodeHash.length !== 32) {\n logger.throwArgumentError(\"initCodeHash must be 32 bytes\", \"initCodeHash\", _initCodeHash);\n }\n return getAddress(dataSlice(keccak256(concat([\"0xff\", from, salt, initCodeHash])), 12));\n}\n//# sourceMappingURL=contract-address.js.map","import { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport function isAddressable(value) {\n return (value && typeof (value.getAddress) === \"function\");\n}\nexport function isAddress(value) {\n try {\n getAddress(value);\n return true;\n }\n catch (error) { }\n return false;\n}\n// Resolves an Ethereum address, ENS name or Addressable object,\n// throwing if the result is null; an explicit null returns null\n//export async function resolveAddress(target?: null, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: null | undefined | string | Addressable, resolver?: null | NameResolver) {\nexport async function resolveAddress(target, resolver) {\n //if (target == null) { return null; }\n if (typeof (target) === \"string\") {\n if (target.match(/^0x[0-9a-f]{40}$/i)) {\n return getAddress(target);\n }\n if (resolver == null) {\n return logger.throwError(\"ENS resolution requires a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n });\n }\n const result = await resolver.resolveName(target);\n if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n return logger.throwError(\"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n }\n return getAddress(result);\n }\n else if (isAddressable(target)) {\n const result = await target.getAddress();\n if (result == null) {\n logger.throwArgumentError(\"addressable resolved to null\", \"target\", target);\n }\n return getAddress(result);\n }\n return logger.throwArgumentError(\"unsupported addressable value\", \"target\", target);\n}\n//# sourceMappingURL=checks.js.map","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 _Typed_options;\nimport { defineProperties } from \"@ethersproject/properties\";\nconst _gaurd = {};\nfunction n(value, width) {\n let signed = false;\n if (width < 0) {\n signed = true;\n width *= -1;\n }\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `${signed ? \"\" : \"u\"}int${width}`, value, { signed, width });\n}\nfunction b(value, size) {\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `bytes${(size) ? size : \"\"}`, value, { size });\n}\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\nexport class Typed {\n constructor(gaurd, type, value, options = null) {\n _Typed_options.set(this, void 0);\n if (gaurd !== _gaurd) {\n throw new Error(\"private constructor\");\n }\n defineProperties(this, { _typedSymbol, type, value });\n __classPrivateFieldSet(this, _Typed_options, options, \"f\");\n // Check the value is valid\n this.format();\n }\n format() {\n if (this.type === \"array\") {\n throw new Error(\"\");\n }\n else if (this.type === \"dynamicArray\") {\n throw new Error(\"\");\n }\n else if (this.type === \"tuple\") {\n return `tuple(${this.value.map((v) => v.format()).join(\",\")})`;\n }\n return this.type;\n }\n defaultValue() {\n return 0;\n }\n minValue() {\n return 0;\n }\n maxValue() {\n return 0;\n }\n isBigInt() {\n return !!(this.type.match(/^u?int[0-9]+$/));\n }\n isData() {\n return (this.type.substring(0, 5) === \"bytes\");\n }\n isString() {\n return (this.type === \"string\");\n }\n get tupleName() {\n if (this.type !== \"tuple\") {\n throw TypeError(\"not a tuple\");\n }\n return __classPrivateFieldGet(this, _Typed_options, \"f\");\n }\n // Returns the length of this type as an array\n // - `null` indicates the length is unforced, it could be dynamic\n // - `-1` indicates the length is dynamic\n // - any other value indicates it is a static array and is its length\n get arrayLength() {\n if (this.type !== \"array\") {\n throw TypeError(\"not an array\");\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === true) {\n return -1;\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === false) {\n return (this.value).length;\n }\n return null;\n }\n static from(type, value) {\n return new Typed(_gaurd, type, value);\n }\n static uint8(v) { return n(v, 8); }\n static uint16(v) { return n(v, 16); }\n static uint24(v) { return n(v, 24); }\n static uint32(v) { return n(v, 32); }\n static uint40(v) { return n(v, 40); }\n static uint48(v) { return n(v, 46); }\n static uint56(v) { return n(v, 56); }\n static uint64(v) { return n(v, 64); }\n static uint72(v) { return n(v, 72); }\n static uint80(v) { return n(v, 80); }\n static uint88(v) { return n(v, 88); }\n static uint96(v) { return n(v, 96); }\n static uint104(v) { return n(v, 104); }\n static uint112(v) { return n(v, 112); }\n static uint120(v) { return n(v, 120); }\n static uint128(v) { return n(v, 128); }\n static uint136(v) { return n(v, 136); }\n static uint144(v) { return n(v, 144); }\n static uint152(v) { return n(v, 152); }\n static uint160(v) { return n(v, 160); }\n static uint168(v) { return n(v, 168); }\n static uint176(v) { return n(v, 176); }\n static uint184(v) { return n(v, 184); }\n static uint192(v) { return n(v, 192); }\n static uint200(v) { return n(v, 200); }\n static uint208(v) { return n(v, 208); }\n static uint216(v) { return n(v, 216); }\n static uint224(v) { return n(v, 224); }\n static uint232(v) { return n(v, 232); }\n static uint240(v) { return n(v, 240); }\n static uint248(v) { return n(v, 248); }\n static uint256(v) { return n(v, 256); }\n static uint(v) { return n(v, 256); }\n static int8(v) { return n(v, -8); }\n static int16(v) { return n(v, -16); }\n static int24(v) { return n(v, -24); }\n static int32(v) { return n(v, -32); }\n static int40(v) { return n(v, -40); }\n static int48(v) { return n(v, -46); }\n static int56(v) { return n(v, -56); }\n static int64(v) { return n(v, -64); }\n static int72(v) { return n(v, -72); }\n static int80(v) { return n(v, -80); }\n static int88(v) { return n(v, -88); }\n static int96(v) { return n(v, -96); }\n static int104(v) { return n(v, -104); }\n static int112(v) { return n(v, -112); }\n static int120(v) { return n(v, -120); }\n static int128(v) { return n(v, -128); }\n static int136(v) { return n(v, -136); }\n static int144(v) { return n(v, -144); }\n static int152(v) { return n(v, -152); }\n static int160(v) { return n(v, -160); }\n static int168(v) { return n(v, -168); }\n static int176(v) { return n(v, -176); }\n static int184(v) { return n(v, -184); }\n static int192(v) { return n(v, -192); }\n static int200(v) { return n(v, -200); }\n static int208(v) { return n(v, -208); }\n static int216(v) { return n(v, -216); }\n static int224(v) { return n(v, -224); }\n static int232(v) { return n(v, -232); }\n static int240(v) { return n(v, -240); }\n static int248(v) { return n(v, -248); }\n static int256(v) { return n(v, -256); }\n static int(v) { return n(v, -256); }\n static bytes(v) { return b(v); }\n static bytes1(v) { return b(v, 1); }\n static bytes2(v) { return b(v, 2); }\n static bytes3(v) { return b(v, 3); }\n static bytes4(v) { return b(v, 4); }\n static bytes5(v) { return b(v, 5); }\n static bytes6(v) { return b(v, 6); }\n static bytes7(v) { return b(v, 7); }\n static bytes8(v) { return b(v, 8); }\n static bytes9(v) { return b(v, 9); }\n static bytes10(v) { return b(v, 10); }\n static bytes11(v) { return b(v, 11); }\n static bytes12(v) { return b(v, 12); }\n static bytes13(v) { return b(v, 13); }\n static bytes14(v) { return b(v, 14); }\n static bytes15(v) { return b(v, 15); }\n static bytes16(v) { return b(v, 16); }\n static bytes17(v) { return b(v, 17); }\n static bytes18(v) { return b(v, 18); }\n static bytes19(v) { return b(v, 19); }\n static bytes20(v) { return b(v, 20); }\n static bytes21(v) { return b(v, 21); }\n static bytes22(v) { return b(v, 22); }\n static bytes23(v) { return b(v, 23); }\n static bytes24(v) { return b(v, 24); }\n static bytes25(v) { return b(v, 25); }\n static bytes26(v) { return b(v, 26); }\n static bytes27(v) { return b(v, 27); }\n static bytes28(v) { return b(v, 28); }\n static bytes29(v) { return b(v, 29); }\n static bytes30(v) { return b(v, 30); }\n static bytes31(v) { return b(v, 31); }\n static bytes32(v) { return b(v, 32); }\n static address(v) { return new Typed(_gaurd, \"address\", v); }\n static bool(v) { return new Typed(_gaurd, \"bool\", !!v); }\n static string(v) { return new Typed(_gaurd, \"string\", v); }\n static array(v, dynamic) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"array\", v, dynamic);\n }\n static tuple(v, name) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"tuple\", v, name);\n }\n static overrides(v) {\n return new Typed(_gaurd, \"overrides\", Object.assign({}, v));\n }\n static isTyped(value) {\n return (value && value._typedSymbol === _typedSymbol);\n }\n static dereference(value, type) {\n if (Typed.isTyped(value)) {\n if (value.type !== type) {\n throw new Error(`invalid type: expecetd ${type}, got ${value.type}`);\n }\n return value.value;\n }\n return value;\n }\n}\n_Typed_options = new WeakMap();\n//# sourceMappingURL=typed.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class AddressCoder extends Coder {\n constructor(localName) {\n super(\"address\", \"address\", localName, false);\n }\n defaultValue() {\n return \"0x0000000000000000000000000000000000000000\";\n }\n encode(writer, _value) {\n let value = Typed.dereference(_value, \"string\");\n try {\n value = getAddress(value);\n }\n catch (error) {\n return this._throwError(error.message, _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n return getAddress(toHex(reader.readValue(), 20));\n }\n}\n//# sourceMappingURL=address.js.map","import { Coder } from \"./abstract-coder.js\";\n// Clones the functionality of an existing Coder, but without a localName\nexport class AnonymousCoder extends Coder {\n constructor(coder) {\n super(coder.name, coder.type, \"_\", coder.dynamic);\n this.coder = coder;\n }\n defaultValue() {\n return this.coder.defaultValue();\n }\n encode(writer, value) {\n return this.coder.encode(writer, value);\n }\n decode(reader) {\n return this.coder.decode(reader);\n }\n}\n//# sourceMappingURL=anonymous.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { isError } from \"@ethersproject/logger\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\nexport function pack(writer, coders, values) {\n let arrayValues = [];\n if (Array.isArray(values)) {\n arrayValues = values;\n }\n else if (values && typeof (values) === \"object\") {\n let unique = {};\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n if (!name) {\n logger.throwError(\"cannot encode object for signature with missing names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n if (unique[name]) {\n logger.throwError(\"cannot encode object for signature with duplicate names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n unique[name] = true;\n return values[name];\n });\n }\n else {\n logger.throwArgumentError(\"invalid tuple value\", \"tuple\", values);\n }\n if (coders.length !== arrayValues.length) {\n logger.throwArgumentError(\"types/value length mismatch\", \"tuple\", values);\n }\n let staticWriter = new Writer();\n let dynamicWriter = new Writer();\n let updateFuncs = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n }\n else {\n coder.encode(staticWriter, value);\n }\n });\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\nexport function unpack(reader, coders) {\n let values = [];\n let keys = [];\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n coders.forEach((coder) => {\n let value = null;\n if (coder.dynamic) {\n let offset = reader.readIndex();\n let offsetReader = baseReader.subReader(offset);\n try {\n value = coder.decode(offsetReader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n else {\n try {\n value = coder.decode(reader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n if (value == undefined) {\n throw new Error(\"investigate\");\n }\n values.push(value);\n keys.push(coder.localName || null);\n });\n return Result.fromItems(values, keys);\n}\nexport class ArrayCoder extends Coder {\n constructor(coder, length, localName) {\n const type = (coder.type + \"[\" + (length >= 0 ? length : \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n defineProperties(this, { coder, length });\n }\n defaultValue() {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n const result = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"array\");\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n let count = this.length;\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n logger.assertArgumentCount(value.length, count, \"coder array\" + (this.localName ? (\" \" + this.localName) : \"\"));\n let coders = [];\n for (let i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return pack(writer, coders, value);\n }\n decode(reader) {\n let count = this.length;\n if (count === -1) {\n count = reader.readIndex();\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n if (count * WordSize > reader.dataLength) {\n logger.throwError(\"insufficient data length\", \"BUFFER_OVERRUN\", {\n buffer: reader.bytes,\n offset: count * WordSize,\n length: reader.dataLength\n });\n }\n }\n let coders = [];\n for (let i = 0; i < count; i++) {\n coders.push(new AnonymousCoder(this.coder));\n }\n return reader.coerce(this.name, unpack(reader, coders));\n }\n}\n//# sourceMappingURL=array.js.map","import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class BooleanCoder extends Coder {\n constructor(localName) {\n super(\"bool\", \"bool\", localName, false);\n }\n defaultValue() {\n return false;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"bool\");\n return writer.writeValue(value ? 1 : 0);\n }\n decode(reader) {\n return reader.coerce(this.type, !reader.readValue());\n }\n}\n//# sourceMappingURL=boolean.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class DynamicBytesCoder extends Coder {\n constructor(type, localName) {\n super(type, type, localName, true);\n }\n defaultValue() {\n return \"0x\";\n }\n encode(writer, value) {\n value = arrayify(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n decode(reader) {\n return reader.readBytes(reader.readIndex(), true);\n }\n}\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"bytes\", localName);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(super.decode(reader)));\n }\n}\n//# sourceMappingURL=bytes.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class FixedBytesCoder extends Coder {\n constructor(size, localName) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n defineProperties(this, { size }, { size: \"number\" });\n }\n defaultValue() {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n encode(writer, _value) {\n let data = arrayify(Typed.dereference(_value, this.type));\n if (data.length !== this.size) {\n this._throwError(\"incorrect data length\", _value);\n }\n return writer.writeBytes(data);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));\n }\n}\n//# sourceMappingURL=fixed-bytes.js.map","import { Coder } from \"./abstract-coder.js\";\nconst Empty = new Uint8Array([]);\nexport class NullCoder extends Coder {\n constructor(localName) {\n super(\"null\", \"\", localName, false);\n }\n defaultValue() {\n return null;\n }\n encode(writer, value) {\n if (value != null) {\n this._throwError(\"not null\", value);\n }\n return writer.writeBytes(Empty);\n }\n decode(reader) {\n reader.readBytes(0);\n return reader.coerce(this.name, null);\n }\n}\n//# sourceMappingURL=null.js.map","import { fromTwos, mask, toTwos } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\nexport class NumberCoder extends Coder {\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n defineProperties(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n }\n defaultValue() {\n return 0;\n }\n encode(writer, _value) {\n let value = logger.getBigInt(Typed.dereference(_value, this.type));\n // Check bounds are safe for encoding\n let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n if (this.signed) {\n let bounds = mask(maxUintValue, (this.size * 8) - 1);\n if (value > bounds || value < -(bounds + BN_1)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n }\n else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n value = mask(toTwos(value, this.size * 8), this.size * 8);\n if (this.signed) {\n value = toTwos(fromTwos(value, this.size * 8), 8 * WordSize);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n let value = mask(reader.readValue(), this.size * 8);\n if (this.signed) {\n value = fromTwos(value, this.size * 8);\n }\n return reader.coerce(this.name, value);\n }\n}\n//# sourceMappingURL=number.js.map","export const version = \"@ethersproject/strings@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push((badCodepoint != null) ? badCodepoint : -1);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n const bytes = logger.getBytes(_bytes, \"bytes\");\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.assertNormalize(form);\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return new Uint8Array(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","import { zeroPadRight } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8.js\";\nexport function formatBytes32String(text) {\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error(\"bytes32 string must be less than 32 bytes\");\n }\n // Zero-pad (implicitly null-terminates)\n return zeroPadRight(bytes, 32);\n}\nexport function parseBytes32String(_bytes) {\n const data = logger.getBytes(_bytes, \"bytes\");\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error(\"invalid bytes32 - not 32 bytes long\");\n }\n if (data[31] !== 0) {\n throw new Error(\"invalid bytes32 string - no null terminator\");\n }\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n//# sourceMappingURL=bytes32.js.map","import { logger } from \"./logger.js\";\nimport { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from \"./utf8.js\";\nfunction bytes2(data) {\n if ((data.length % 4) !== 0) {\n throw new Error(\"should not happen; bad data\");\n }\n let result = [];\n for (let i = 0; i < data.length; i += 4) {\n result.push(parseInt(data.substring(i, i + 4), 16));\n }\n return result;\n}\nfunction createTable(data, _func) {\n const func = _func || function (value) { return [parseInt(value, 16)]; };\n let lo = 0;\n let result = {};\n data.split(\",\").forEach((pair) => {\n let comps = pair.split(\":\");\n lo += parseInt(comps[0], 16);\n result[lo] = func(comps[1]);\n });\n return result;\n}\nfunction createRangeTable(data) {\n let hi = 0;\n return data.split(\",\").map((v) => {\n let comps = v.split(\"-\");\n if (comps.length === 1) {\n comps[1] = \"0\";\n }\n else if (comps[1] === \"\") {\n comps[1] = \"1\";\n }\n let lo = hi + parseInt(comps[0], 16);\n hi = parseInt(comps[1], 16);\n return { l: lo, h: hi };\n });\n}\nfunction matchMap(value, ranges) {\n let lo = 0;\n for (let i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n lo += range.l;\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n if (range.e && range.e.indexOf(value - lo) !== -1) {\n continue;\n }\n return range;\n }\n }\n return null;\n}\nconst Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n// @TODO: Make this relative...\nconst Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map((v) => parseInt(v, 16));\nconst Table_B_2_ranges = [\n { h: 25, s: 32, l: 65 },\n { h: 30, s: 32, e: [23], l: 127 },\n { h: 54, s: 1, e: [48], l: 64, d: 2 },\n { h: 14, s: 1, l: 57, d: 2 },\n { h: 44, s: 1, l: 17, d: 2 },\n { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\n { h: 16, s: 1, l: 68, d: 2 },\n { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\n { h: 26, s: 32, e: [17], l: 435 },\n { h: 22, s: 1, l: 71, d: 2 },\n { h: 15, s: 80, l: 40 },\n { h: 31, s: 32, l: 16 },\n { h: 32, s: 1, l: 80, d: 2 },\n { h: 52, s: 1, l: 42, d: 2 },\n { h: 12, s: 1, l: 55, d: 2 },\n { h: 40, s: 1, e: [38], l: 15, d: 2 },\n { h: 14, s: 1, l: 48, d: 2 },\n { h: 37, s: 48, l: 49 },\n { h: 148, s: 1, l: 6351, d: 2 },\n { h: 88, s: 1, l: 160, d: 2 },\n { h: 15, s: 16, l: 704 },\n { h: 25, s: 26, l: 854 },\n { h: 25, s: 32, l: 55915 },\n { h: 37, s: 40, l: 1247 },\n { h: 25, s: -119711, l: 53248 },\n { h: 25, s: -119763, l: 52 },\n { h: 25, s: -119815, l: 52 },\n { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\n { h: 25, s: -119919, l: 52 },\n { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\n { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\n { h: 25, s: -120075, l: 52 },\n { h: 25, s: -120127, l: 52 },\n { h: 25, s: -120179, l: 52 },\n { h: 25, s: -120231, l: 52 },\n { h: 25, s: -120283, l: 52 },\n { h: 25, s: -120335, l: 52 },\n { h: 24, s: -119543, e: [17], l: 56 },\n { h: 24, s: -119601, e: [17], l: 58 },\n { h: 24, s: -119659, e: [17], l: 58 },\n { h: 24, s: -119717, e: [17], l: 58 },\n { h: 24, s: -119775, e: [17], l: 58 }\n];\nconst Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nconst Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nconst Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\nconst Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\nfunction flatten(values) {\n return values.reduce((accum, value) => {\n value.forEach((value) => { accum.push(value); });\n return accum;\n }, []);\n}\nexport function _nameprepTableA1(codepoint) {\n return !!matchMap(codepoint, Table_A_1_ranges);\n}\nexport function _nameprepTableB2(codepoint) {\n const range = matchMap(codepoint, Table_B_2_ranges);\n if (range) {\n if (range.s == null) {\n throw new Error(\"should not happenl bad range\");\n }\n return [codepoint + range.s];\n }\n const codes = Table_B_2_lut_abs[codepoint];\n if (codes) {\n return codes;\n }\n const shift = Table_B_2_lut_rel[codepoint];\n if (shift) {\n return [codepoint + shift[0]];\n }\n const complex = Table_B_2_complex[codepoint];\n if (complex) {\n return complex;\n }\n return null;\n}\nexport function _nameprepTableC(codepoint) {\n return !!matchMap(codepoint, Table_C_ranges);\n}\nexport function nameprep(value) {\n // This allows platforms with incomplete normalize to bypass\n // it for very basic names which the built-in toLowerCase\n // will certainly handle correctly\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\n return value.toLowerCase();\n }\n // Get the code points (keeping the current normalization)\n let codes = toUtf8CodePoints(value);\n codes = flatten(codes.map((code) => {\n // Substitute Table B.1 (Maps to Nothing)\n if (Table_B_1_flags.indexOf(code) >= 0) {\n return [];\n }\n if (code >= 0xfe00 && code <= 0xfe0f) {\n return [];\n }\n // Substitute Table B.2 (Case Folding)\n let codesTableB2 = _nameprepTableB2(code);\n if (codesTableB2) {\n return codesTableB2;\n }\n // No Substitution\n return [code];\n }));\n // Normalize using form KC\n codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC);\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n codes.forEach((code) => {\n if (_nameprepTableC(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_PROHIBITED\", \"value\", value);\n }\n });\n // Prohibit Unassigned Code Points (Table A.1)\n codes.forEach((code) => {\n if (_nameprepTableA1(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_UNASSIGNED\", \"value\", value);\n }\n });\n // IDNA extras\n let name = _toUtf8String(codes);\n // IDNA: 4.2.3.1\n if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n logger.throwArgumentError(\"invalid hyphen\", \"value\", value);\n }\n // IDNA: 4.2.4\n if (name.length > 63) {\n logger.throwArgumentError(\"too long\", \"value\", value);\n }\n return name;\n}\n//# sourceMappingURL=idna.js.map","import { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, _value) {\n return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nimport { pack, unpack } from \"./array.js\";\nexport class TupleCoder extends Coder {\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n defineProperties(this, { coders: Object.freeze(coders.slice()) });\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"tuple\");\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return reader.coerce(this.name, unpack(reader, this.coders));\n }\n}\n//# sourceMappingURL=tuple.js.map","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 _AbiCoder_instances, _AbiCoder_getCoder;\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n//import { arrayify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nimport { Reader, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nexport class AbiCoder {\n constructor(coerceFunc) {\n _AbiCoder_instances.add(this);\n defineProperties(this, { coerceFunc }, {}, { coerceFunc: null });\n }\n getDefaultValue(types) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n encode(types, values) {\n logger.assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n const writer = new Writer();\n coder.encode(writer, values);\n return writer.data;\n }\n decode(types, data, loose) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(new Reader(data, this.coerceFunc, loose));\n }\n}\n_AbiCoder_instances = new WeakSet(), _AbiCoder_getCoder = function _AbiCoder_getCoder(param) {\n if (param.isArray()) {\n return new ArrayCoder(__classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, param.arrayChildren), param.arrayLength, param.name);\n }\n if (param.isTuple()) {\n return new TupleCoder(param.components.map((c) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, c)), param.name);\n }\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n logger.throwArgumentError(\"invalid \" + match[1] + \" bit length\", \"param\", param);\n }\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"param\", param);\n }\n return new FixedBytesCoder(size, param.name);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", param.type);\n};\nexport const defaultAbiCoder = new AbiCoder();\n//# sourceMappingURL=abi-coder.js.map","import { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport function id(value) {\n return keccak256(toUtf8Bytes(value));\n}\n//# sourceMappingURL=id.js.map","export const version = \"@ethersproject/hash@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { nameprep, toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\nconst Partition = new RegExp(\"^((.*)\\\\.)?([^.]+)$\");\nexport function isValidName(name) {\n try {\n const comps = name.split(\".\");\n for (let i = 0; i < comps.length; i++) {\n if (nameprep(comps[i]).length === 0) {\n throw new Error(\"empty\");\n }\n }\n return true;\n }\n catch (error) { }\n return false;\n}\nexport function namehash(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name; not a string\", \"name\", name);\n }\n let current = name;\n let result = Zeros;\n while (current.length) {\n const partition = current.match(Partition);\n if (partition == null || partition[2] === \"\") {\n return logger.throwArgumentError(\"invalid ENS name; missing component\", \"name\", name);\n }\n const label = toUtf8Bytes(nameprep(partition[3]));\n result = keccak256(concat([result, keccak256(label)]));\n current = partition[2] || \"\";\n }\n return hexlify(result);\n}\nexport function dnsEncode(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid DNS name; not a string\", \"name\", name);\n }\n if (name === \"\") {\n return \"0x00\";\n }\n // @TODO: should we enforce the 255 octet limit?\n return concat(name.split(\".\").map((comp) => {\n if (comp === \"\") {\n logger.throwArgumentError(\"invalid DNS name; missing component\", \"name\", name);\n }\n // We jam in an _ prefix to fill in with the length later\n // Note: Nameprep throws if the component is over 63 bytes\n const bytes = toUtf8Bytes(\"_\" + nameprep(comp));\n bytes[0] = bytes.length - 1;\n return bytes;\n })) + \"00\";\n}\n//# sourceMappingURL=namehash.js.map","import { concat } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport const messagePrefix = \"\\x19Ethereum Signed Message:\\n\";\nexport function hashMessage(message) {\n if (typeof (message) === \"string\") {\n message = toUtf8Bytes(message);\n }\n return keccak256(concat([\n toUtf8Bytes(messagePrefix),\n toUtf8Bytes(String(message.length)),\n message\n ]));\n}\n//# sourceMappingURL=message.js.map","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 _TypedDataEncoder_instances, _TypedDataEncoder_types, _TypedDataEncoder_fullTypes, _TypedDataEncoder_encoderCache, _TypedDataEncoder_getEncoder;\n//import { TypedDataDomain, TypedDataField } from \"@ethersproject/providerabstract-signer\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { mask, toHex, toTwos } from \"@ethersproject/math\";\nimport { id } from \"./id.js\";\nimport { logger } from \"./logger.js\";\nconst padding = new Uint8Array(32);\npadding.fill(0);\nconst BN__1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n;\n;\nfunction hexPadRight(value) {\n const bytes = arrayify(value);\n const padOffset = bytes.length % 32;\n if (padOffset) {\n return concat([bytes, padding.slice(padOffset)]);\n }\n return hexlify(bytes);\n}\nconst hexTrue = toHex(BN_1, 32);\nconst hexFalse = toHex(BN_0, 32);\nconst domainFieldTypes = {\n name: \"string\",\n version: \"string\",\n chainId: \"uint256\",\n verifyingContract: \"address\",\n salt: \"bytes32\"\n};\nconst domainFieldNames = [\n \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\nfunction checkString(key) {\n return function (value) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);\n }\n return value;\n };\n}\nconst domainChecks = {\n name: checkString(\"name\"),\n version: checkString(\"version\"),\n chainId: function (value) {\n return logger.getBigInt(value, \"domain.chainId\");\n },\n verifyingContract: function (value) {\n try {\n return getAddress(value).toLowerCase();\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n },\n salt: function (value) {\n const bytes = logger.getBytes(value, \"domain.salt\");\n if (bytes.length !== 32) {\n logger.throwArgumentError(`invalid domain value \"salt\"`, \"domain.salt\", value);\n }\n return hexlify(bytes);\n }\n};\nfunction getBaseEncoder(type) {\n // intXX and uintXX\n {\n const match = type.match(/^(u?)int(\\d*)$/);\n if (match) {\n const signed = (match[1] === \"\");\n const width = parseInt(match[2] || \"256\");\n if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n const boundsUpper = mask(BN_MAX_UINT256, signed ? (width - 1) : width);\n const boundsLower = signed ? ((boundsUpper + BN_1) * BN__1) : BN_0;\n return function (_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < boundsLower || value > boundsUpper) {\n logger.throwArgumentError(`value out-of-bounds for ${type}`, \"value\", value);\n }\n return toHex(toTwos(value, 256), 32);\n };\n }\n }\n // bytesXX\n {\n const match = type.match(/^bytes(\\d+)$/);\n if (match) {\n const width = parseInt(match[1]);\n if (width === 0 || width > 32 || match[1] !== String(width)) {\n logger.throwArgumentError(\"invalid bytes width\", \"type\", type);\n }\n return function (value) {\n const bytes = arrayify(value);\n if (bytes.length !== width) {\n logger.throwArgumentError(`invalid length for ${type}`, \"value\", value);\n }\n return hexPadRight(value);\n };\n }\n }\n switch (type) {\n case \"address\": return function (value) {\n return zeroPadLeft(getAddress(value), 32);\n };\n case \"bool\": return function (value) {\n return ((!value) ? hexFalse : hexTrue);\n };\n case \"bytes\": return function (value) {\n return keccak256(value);\n };\n case \"string\": return function (value) {\n return id(value);\n };\n }\n return null;\n}\nfunction encodeType(name, fields) {\n return `${name}(${fields.map(({ name, type }) => (type + \" \" + name)).join(\",\")})`;\n}\nexport class TypedDataEncoder {\n constructor(types) {\n _TypedDataEncoder_instances.add(this);\n _TypedDataEncoder_types.set(this, void 0);\n _TypedDataEncoder_fullTypes.set(this, void 0);\n _TypedDataEncoder_encoderCache.set(this, void 0);\n __classPrivateFieldSet(this, _TypedDataEncoder_types, JSON.stringify(types), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_fullTypes, new Map(), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_encoderCache, new Map(), \"f\");\n // Link struct types to their direct child structs\n const links = new Map();\n // Link structs to structs which contain them as a child\n const parents = new Map();\n // Link all subtypes within a given struct\n const subtypes = new Map();\n Object.keys(types).forEach((type) => {\n links.set(type, new Set());\n parents.set(type, []);\n subtypes.set(type, new Set());\n });\n for (const name in types) {\n const uniqueNames = new Set();\n for (const field of types[name]) {\n // Check each field has a unique name\n if (uniqueNames.has(field.name)) {\n logger.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, \"types\", types);\n }\n uniqueNames.add(field.name);\n // Get the base type (drop any array specifiers)\n const baseType = (field.type.match(/^([^\\x5b]*)(\\x5b|$)/))[1] || null;\n if (baseType === name) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Is this a base encoding type?\n const encoder = getBaseEncoder(baseType);\n if (encoder) {\n continue;\n }\n if (!parents.has(baseType)) {\n logger.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Add linkage\n parents.get(baseType).push(name);\n links.get(name).add(baseType);\n }\n }\n // Deduce the primary type\n const primaryTypes = Array.from(parents.keys()).filter((n) => (parents.get(n).length === 0));\n if (primaryTypes.length === 0) {\n logger.throwArgumentError(\"missing primary type\", \"types\", types);\n }\n else if (primaryTypes.length > 1) {\n logger.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(\", \")}`, \"types\", types);\n }\n defineProperties(this, { primaryType: primaryTypes[0] });\n // Check for circular type references\n function checkCircular(type, found) {\n if (found.has(type)) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, \"types\", types);\n }\n found.add(type);\n for (const child of links.get(type)) {\n if (!parents.has(child)) {\n continue;\n }\n // Recursively check children\n checkCircular(child, found);\n // Mark all ancestors as having this decendant\n for (const subtype of found) {\n subtypes.get(subtype).add(child);\n }\n }\n found.delete(type);\n }\n checkCircular(this.primaryType, new Set());\n // Compute each fully describe type\n for (const [name, set] of subtypes) {\n const st = Array.from(set);\n st.sort();\n __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\"));\n }\n }\n get types() {\n return JSON.parse(__classPrivateFieldGet(this, _TypedDataEncoder_types, \"f\"));\n }\n getEncoder(type) {\n let encoder = __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").get(type);\n if (!encoder) {\n encoder = __classPrivateFieldGet(this, _TypedDataEncoder_instances, \"m\", _TypedDataEncoder_getEncoder).call(this, type);\n __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").set(type, encoder);\n }\n return encoder;\n }\n encodeType(name) {\n const result = __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(name);\n if (!result) {\n return logger.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, \"name\", name);\n }\n return result;\n }\n encodeData(type, value) {\n return this.getEncoder(type)(value);\n }\n hashStruct(name, value) {\n return keccak256(this.encodeData(name, value));\n }\n encode(value) {\n return this.encodeData(this.primaryType, value);\n }\n hash(value) {\n return this.hashStruct(this.primaryType, value);\n }\n _visit(type, value, callback) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return callback(type, value);\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const length = parseInt(match[3]);\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n return value.map((v) => this._visit(subtype, v, callback));\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n return fields.reduce((accum, { name, type }) => {\n accum[name] = this._visit(type, value[name], callback);\n return accum;\n }, {});\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n }\n visit(value, callback) {\n return this._visit(this.primaryType, value, callback);\n }\n static from(types) {\n return new TypedDataEncoder(types);\n }\n static getPrimaryType(types) {\n return TypedDataEncoder.from(types).primaryType;\n }\n static hashStruct(name, types, value) {\n return TypedDataEncoder.from(types).hashStruct(name, value);\n }\n static hashDomain(domain) {\n const domainFields = [];\n for (const name in domain) {\n const type = domainFieldTypes[name];\n if (!type) {\n logger.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, \"domain\", domain);\n }\n domainFields.push({ name, type });\n }\n domainFields.sort((a, b) => {\n return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n });\n return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n }\n static encode(domain, types, value) {\n return concat([\n \"0x1901\",\n TypedDataEncoder.hashDomain(domain),\n TypedDataEncoder.from(types).hash(value)\n ]);\n }\n static hash(domain, types, value) {\n return keccak256(TypedDataEncoder.encode(domain, types, value));\n }\n // Replaces all address types with ENS names with their looked up address\n static async resolveNames(domain, types, value, resolveName) {\n // Make a copy to isolate it from the object passed in\n domain = Object.assign({}, domain);\n // Look up all ENS names\n const ensCache = {};\n // Do we need to look up the domain's verifyingContract?\n if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n ensCache[domain.verifyingContract] = \"0x\";\n }\n // We are going to use the encoder to visit all the base values\n const encoder = TypedDataEncoder.from(types);\n // Get a list of all the addresses\n encoder.visit(value, (type, value) => {\n if (type === \"address\" && !isHexString(value, 20)) {\n ensCache[value] = \"0x\";\n }\n return value;\n });\n // Lookup each name\n for (const name in ensCache) {\n ensCache[name] = await resolveName(name);\n }\n // Replace the domain verifyingContract if needed\n if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n domain.verifyingContract = ensCache[domain.verifyingContract];\n }\n // Replace all ENS names with their address\n value = encoder.visit(value, (type, value) => {\n if (type === \"address\" && ensCache[value]) {\n return ensCache[value];\n }\n return value;\n });\n return { domain, value };\n }\n static getPayload(domain, types, value) {\n // Validate the domain fields\n TypedDataEncoder.hashDomain(domain);\n // Derive the EIP712Domain Struct reference type\n const domainValues = {};\n const domainTypes = [];\n domainFieldNames.forEach((name) => {\n const value = domain[name];\n if (value == null) {\n return;\n }\n domainValues[name] = domainChecks[name](value);\n domainTypes.push({ name, type: domainFieldTypes[name] });\n });\n const encoder = TypedDataEncoder.from(types);\n const typesWithDomain = Object.assign({}, types);\n if (typesWithDomain.EIP712Domain) {\n logger.throwArgumentError(\"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n }\n else {\n typesWithDomain.EIP712Domain = domainTypes;\n }\n // Validate the data structures and types\n encoder.encode(value);\n return {\n types: typesWithDomain,\n domain: domainValues,\n primaryType: encoder.primaryType,\n message: encoder.visit(value, (type, value) => {\n // bytes\n if (type.match(/^bytes(\\d*)/)) {\n return hexlify(logger.getBytes(value));\n }\n // uint or int\n if (type.match(/^u?int/)) {\n return logger.getBigInt(value).toString();\n }\n switch (type) {\n case \"address\":\n return value.toLowerCase();\n case \"bool\":\n return !!value;\n case \"string\":\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid string`, \"value\", value);\n }\n return value;\n }\n return logger.throwArgumentError(\"unsupported type\", \"type\", type);\n })\n };\n }\n}\n_TypedDataEncoder_types = new WeakMap(), _TypedDataEncoder_fullTypes = new WeakMap(), _TypedDataEncoder_encoderCache = new WeakMap(), _TypedDataEncoder_instances = new WeakSet(), _TypedDataEncoder_getEncoder = function _TypedDataEncoder_getEncoder(type) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return encoder;\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const subEncoder = this.getEncoder(subtype);\n const length = parseInt(match[3]);\n return (value) => {\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n let result = value.map(subEncoder);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(subtype)) {\n result = result.map(keccak256);\n }\n return keccak256(concat(result));\n };\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n const encodedType = id(__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(type));\n return (value) => {\n const values = fields.map(({ name, type }) => {\n const result = this.getEncoder(type)(value[name]);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(type)) {\n return keccak256(result);\n }\n return result;\n });\n values.unshift(encodedType);\n return concat(values);\n };\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n};\n//# sourceMappingURL=typed-data.js.map","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 _Interface_instances, _Interface_errors, _Interface_events, _Interface_functions, _Interface_abiCoder, _Interface_getFunction, _Interface_getEvent;\nimport { arrayify, concat, dataSlice, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { defaultAbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport { ConstructorFragment, ErrorFragment, EventFragment, FormatType, Fragment, FunctionFragment, ParamType } from \"./fragments.js\";\nimport { logger } from \"./logger.js\";\nimport { Typed } from \"./typed.js\";\nexport { checkResultErrors, Result };\nexport class LogDescription {\n constructor(fragment, topic, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, signature, topic, args\n });\n }\n}\nexport class TransactionDescription {\n constructor(fragment, selector, args, value) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector, value\n });\n }\n}\nexport class ErrorDescription {\n constructor(fragment, selector, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector\n });\n }\n}\nexport class Indexed {\n constructor(hash) {\n defineProperties(this, { hash, _isIndexed: true });\n }\n static isIndexed(value) {\n return !!(value && value._isIndexed);\n }\n}\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons = {\n \"0\": \"generic panic\",\n \"1\": \"assert(false)\",\n \"17\": \"arithmetic overflow\",\n \"18\": \"division or modulo by zero\",\n \"33\": \"enum overflow\",\n \"34\": \"invalid encoded storage byte array accessed\",\n \"49\": \"out-of-bounds array access; popping on an empty array\",\n \"50\": \"out-of-bounds access of an array or bytesN\",\n \"65\": \"out of memory\",\n \"81\": \"uninitialized function\",\n};\nconst BuiltinErrors = {\n \"0x08c379a0\": {\n signature: \"Error(string)\",\n name: \"Error\",\n inputs: [\"string\"],\n reason: (message) => {\n return `reverted with reason string ${JSON.stringify(message)}`;\n }\n },\n \"0x4e487b71\": {\n signature: \"Panic(uint256)\",\n name: \"Panic\",\n inputs: [\"uint256\"],\n reason: (code) => {\n let reason = \"unknown panic code\";\n if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n reason = PanicReasons[code.toString()];\n }\n return `reverted with panic code 0x${code.toString(16)} (${reason})`;\n }\n }\n};\nexport class Interface {\n constructor(fragments) {\n _Interface_instances.add(this);\n _Interface_errors.set(this, void 0);\n _Interface_events.set(this, void 0);\n _Interface_functions.set(this, void 0);\n // #structs: Map;\n _Interface_abiCoder.set(this, void 0);\n let abi = [];\n if (typeof (fragments) === \"string\") {\n abi = JSON.parse(fragments);\n }\n else {\n abi = fragments;\n }\n __classPrivateFieldSet(this, _Interface_functions, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_errors, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_events, new Map(), \"f\");\n // this.#structs = new Map();\n defineProperties(this, {\n fragments: Object.freeze(abi.map((f) => Fragment.from(f)).filter((f) => (f != null))),\n });\n __classPrivateFieldSet(this, _Interface_abiCoder, this.getAbiCoder(), \"f\");\n // Add all fragments by their signature\n this.fragments.forEach((fragment) => {\n let bucket;\n switch (fragment.type) {\n case \"constructor\":\n if (this.deploy) {\n logger.warn(\"duplicate definition - constructor\");\n return;\n }\n //checkNames(fragment, \"input\", fragment.inputs);\n defineProperties(this, { deploy: fragment });\n return;\n case \"function\":\n //checkNames(fragment, \"input\", fragment.inputs);\n //checkNames(fragment, \"output\", (fragment).outputs);\n bucket = __classPrivateFieldGet(this, _Interface_functions, \"f\");\n break;\n case \"event\":\n //checkNames(fragment, \"input\", fragment.inputs);\n bucket = __classPrivateFieldGet(this, _Interface_events, \"f\");\n break;\n case \"error\":\n bucket = __classPrivateFieldGet(this, _Interface_errors, \"f\");\n break;\n default:\n return;\n }\n const signature = fragment.format();\n if (bucket.has(signature)) {\n logger.warn(\"duplicate definition - \" + signature);\n return;\n }\n bucket.set(signature, fragment);\n });\n // If we do not have a constructor add a default\n if (!this.deploy) {\n defineProperties(this, {\n deploy: ConstructorFragment.fromString(\"constructor()\")\n });\n }\n }\n // @TODO: multi sig?\n format(format) {\n if (!format) {\n format = FormatType.full;\n }\n if (format === FormatType.sighash) {\n logger.throwArgumentError(\"interface does not support formatting sighash\", \"format\", format);\n }\n const abi = this.fragments.map((f) => f.format(format));\n // We need to re-bundle the JSON fragments a bit\n if (format === FormatType.json) {\n return JSON.stringify(abi.map((j) => JSON.parse(j)));\n }\n return abi;\n }\n getAbiCoder() {\n return defaultAbiCoder;\n }\n getFunctionName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, null, false)).name;\n }\n getFunction(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, values || null, true);\n }\n getEventName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, null, false)).name;\n }\n getEvent(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, values || null, true);\n }\n // Find a function definition by any means necessary (unless it is ambiguous)\n getError(key, values) {\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_errors, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching error\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_errors, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching error\", \"name\", key);\n }\n else if (matching.length > 1) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching errors\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_errors, \"f\").get(ErrorFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching error\", \"signature\", key);\n }\n // Get the 4-byte selector used by Solidity to identify a function\n getSelector(fragment) {\n /*\n if (typeof(fragment) === \"string\") {\n const matches: Array = [ ];\n\n try { matches.push(this.getFunction(fragment)); } catch (error) { }\n try { matches.push(this.getError(fragment)); } catch (_) { }\n\n if (matches.length === 0) {\n logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n } else if (matches.length > 1) {\n logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n }\n\n fragment = matches[0];\n }\n */\n return dataSlice(id(fragment.format()), 0, 4);\n }\n // Get the 32-byte topic hash used by Solidity to identify an event\n getEventTopic(fragment) {\n //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n return id(fragment.format());\n }\n _decodeParams(params, data) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(params, data);\n }\n _encodeParams(params, values) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(params, values);\n }\n encodeDeploy(values) {\n return this._encodeParams(this.deploy.inputs, values || []);\n }\n decodeErrorResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match error ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n encodeErrorResult(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the data for a function call (e.g. tx.data)\n decodeFunctionData(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match function ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n // Encode the data for a function call (e.g. tx.data)\n encodeFunctionData(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the result from a function call (e.g. from eth_call)\n decodeFunctionResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n let message = \"invalid length for result data\";\n const bytes = arrayify(data);\n if ((bytes.length % 32) === 0) {\n try {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.outputs, bytes);\n }\n catch (error) {\n message = \"could not decode result data\";\n }\n }\n // Call returned data with no error, but the data is junk\n return logger.throwError(message, \"BAD_DATA\", {\n value: hexlify(bytes),\n info: { method: fragment.name, signature: fragment.format() }\n });\n }\n makeError(fragment, _data, tx) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n const data = logger.getBytes(_data);\n let args = undefined;\n if (tx) {\n try {\n args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, tx.data || \"0x\");\n }\n catch (error) {\n console.log(error);\n }\n }\n let errorArgs = undefined;\n let errorName = undefined;\n let errorSignature = undefined;\n let reason = \"unknown reason\";\n if (data.length === 0) {\n reason = \"missing error reason\";\n }\n else if ((data.length % 32) === 4) {\n const selector = hexlify(data.slice(0, 4));\n const builtin = BuiltinErrors[selector];\n if (builtin) {\n try {\n errorName = builtin.name;\n errorSignature = builtin.signature;\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(builtin.inputs, data.slice(4));\n reason = builtin.reason(...errorArgs);\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n else {\n reason = \"unknown custom error\";\n try {\n const error = this.getError(selector);\n errorName = error.name;\n errorSignature = error.format();\n reason = `custom error: ${errorSignature}`;\n try {\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(error.inputs, data.slice(4));\n }\n catch (error) {\n reason = `custom error: ${errorSignature} (coult not decode error data)`;\n }\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n }\n return logger.makeError(\"call revert exception\", \"CALL_EXCEPTION\", {\n data: hexlify(data), transaction: null,\n method: fragment.name, signature: fragment.format(), args,\n errorArgs, errorName, errorSignature, reason\n });\n }\n // Encode the result for a function call (e.g. for eth_call)\n encodeFunctionResult(functionFragment, values) {\n if (typeof (functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n return hexlify(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(functionFragment.outputs, values || []));\n }\n /*\n spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> {\n const promises: Array> = [ ];\n const process = function(type: ParamType, value: any): any {\n if (type.baseType === \"array\") {\n return descend(type.child\n }\n if (type. === \"address\") {\n }\n };\n \n const descend = function (inputs: Array, values: ReadonlyArray) {\n if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n \n };\n \n const result: Array = [ ];\n values.forEach((value, index) => {\n if (value == null) {\n topics.push(null);\n } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n } else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n } else {\n topics.push(encodeTopic(param, value));\n }\n });\n }\n */\n // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n encodeFilterTopics(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (values.length > eventFragment.inputs.length) {\n logger.throwError(\"too many arguments for \" + eventFragment.format(), \"UNEXPECTED_ARGUMENT\", {\n count: values.length,\n expectedCount: eventFragment.inputs.length\n });\n }\n const topics = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n const encodeTopic = (param, value) => {\n if (param.type === \"string\") {\n return id(value);\n }\n else if (param.type === \"bytes\") {\n return keccak256(hexlify(value));\n }\n // Check addresses are valid\n if (param.type === \"address\") {\n __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([\"address\"], [value]);\n }\n return zeroPadLeft(hexlify(value), 32);\n //@TOOD should probably be return toHex(value, 32)\n };\n values.forEach((value, index) => {\n const param = eventFragment.inputs[index];\n if (!param.indexed) {\n if (value != null) {\n logger.throwArgumentError(\"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n }\n return;\n }\n if (value == null) {\n topics.push(null);\n }\n else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n }\n else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n }\n else {\n topics.push(encodeTopic(param, value));\n }\n });\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n return topics;\n }\n encodeEventLog(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n const topics = [];\n const dataTypes = [];\n const dataValues = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n if (values.length !== eventFragment.inputs.length) {\n logger.throwArgumentError(\"event arguments/values mismatch\", \"values\", values);\n }\n eventFragment.inputs.forEach((param, index) => {\n const value = values[index];\n if (param.indexed) {\n if (param.type === \"string\") {\n topics.push(id(value));\n }\n else if (param.type === \"bytes\") {\n topics.push(keccak256(value));\n }\n else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n // @TODO\n throw new Error(\"not implemented\");\n }\n else {\n topics.push(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([param.type], [value]));\n }\n }\n else {\n dataTypes.push(param);\n dataValues.push(value);\n }\n });\n return {\n data: __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(dataTypes, dataValues),\n topics: topics\n };\n }\n // Decode a filter for the event and the search criteria\n decodeEventLog(eventFragment, data, topics) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (topics != null && !eventFragment.anonymous) {\n const eventTopic = this.getEventTopic(eventFragment);\n if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== eventTopic) {\n logger.throwArgumentError(\"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n }\n topics = topics.slice(1);\n }\n const indexed = [];\n const nonIndexed = [];\n const dynamic = [];\n eventFragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n indexed.push(ParamType.fromObject({ type: \"bytes32\", name: param.name }));\n dynamic.push(true);\n }\n else {\n indexed.push(param);\n dynamic.push(false);\n }\n }\n else {\n nonIndexed.push(param);\n dynamic.push(false);\n }\n });\n const resultIndexed = (topics != null) ? __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(indexed, concat(topics)) : null;\n const resultNonIndexed = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(nonIndexed, data, true);\n //const result: (Array & { [ key: string ]: any }) = [ ];\n const values = [];\n const keys = [];\n let nonIndexedIndex = 0, indexedIndex = 0;\n eventFragment.inputs.forEach((param, index) => {\n let value = null;\n if (param.indexed) {\n if (resultIndexed == null) {\n value = new Indexed(null);\n }\n else if (dynamic[index]) {\n value = new Indexed(resultIndexed[indexedIndex++]);\n }\n else {\n try {\n value = resultIndexed[indexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n }\n else {\n try {\n value = resultNonIndexed[nonIndexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n values.push(value);\n keys.push(param.name || null);\n });\n return Result.fromItems(values, keys);\n }\n // Given a transaction, find the matching function fragment (if any) and\n // determine all its properties and call parameters\n parseTransaction(tx) {\n const data = logger.getBytes(tx.data, \"tx.data\");\n const value = logger.getBigInt((tx.value != null) ? tx.value : 0, \"tx.value\");\n const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, data.slice(4));\n return new TransactionDescription(fragment, this.getSelector(fragment), args, value);\n }\n // @TODO\n //parseCallResult(data: BytesLike): ??\n // Given an event log, find the matching event fragment (if any) and\n // determine all its properties and values\n parseLog(log) {\n const fragment = this.getEvent(log.topics[0]);\n if (!fragment || fragment.anonymous) {\n return null;\n }\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n // Probably not, because just because it is the only event in the ABI does\n // not mean we have the full ABI; maybe just a fragment?\n return new LogDescription(fragment, this.getEventTopic(fragment), this.decodeEventLog(fragment, log.data, log.topics));\n }\n parseError(data) {\n const hexData = hexlify(data);\n const fragment = this.getError(dataSlice(hexData, 0, 4));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, dataSlice(hexData, 4));\n return new ErrorDescription(fragment, this.getSelector(fragment), args);\n }\n static from(value) {\n // Already an Interface, which is immutable\n if (value instanceof Interface) {\n return value;\n }\n // JSON\n if (typeof (value) === \"string\") {\n return new Interface(JSON.parse(value));\n }\n // Maybe an interface from an older version, or from a symlinked copy\n if (typeof (value.format) === \"function\") {\n return new Interface(value.format(FormatType.json));\n }\n // Array of fragments\n return new Interface(value);\n }\n}\n_Interface_errors = new WeakMap(), _Interface_events = new WeakMap(), _Interface_functions = new WeakMap(), _Interface_abiCoder = new WeakMap(), _Interface_instances = new WeakSet(), _Interface_getFunction = function _Interface_getFunction(key, values, forceUnique) {\n // Selector\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_functions, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching function\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_functions, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n const lastValue = (values.length > 0) ? values[values.length - 1] : null;\n let valueLength = values.length;\n let allowOptions = true;\n if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n allowOptions = false;\n valueLength--;\n }\n // Remove all matches that don't have a compatible length. The args\n // may contain an overrides, so the match may have n or n - 1 parameters\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs.length;\n if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // We are past the inputs\n if (j >= inputs.length) {\n if (values[j].type === \"overrides\") {\n continue;\n }\n matching.splice(i, 1);\n break;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n // We found a single matching signature with an overrides, but the\n // last value is something that cannot possibly be an options\n if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n const lastArg = values[values.length - 1];\n if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== \"object\") {\n matching.splice(0, 1);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching function\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n logger.throwArgumentError(`multiple matching functions (i.e. ${matchStr})`, \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_functions, \"f\").get(FunctionFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching function\", \"signature\", key);\n}, _Interface_getEvent = function _Interface_getEvent(key, values, forceUnique) {\n // EventTopic\n if (isHexString(key)) {\n const eventTopic = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_events, \"f\").values()) {\n if (eventTopic === this.getEventTopic(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching event\", \"eventTopic\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_events, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n // Remove all matches that don't have a compatible length.\n for (let i = matching.length - 1; i >= 0; i--) {\n if (matching[i].inputs.length < values.length) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching event\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching events\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_events, \"f\").get(EventFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching event\", \"signature\", key);\n};\n//# sourceMappingURL=interface.js.map","export const version = \"@ethersproject/web@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _FetchResponse_props, _FetchResponse_error;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties, getStore } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\n;\nexport class FetchResponse {\n constructor(statusCode, statusMessage, headers, body, request) {\n _FetchResponse_props.set(this, void 0);\n _FetchResponse_error.set(this, void 0);\n __classPrivateFieldSet(this, _FetchResponse_props, {\n statusCode,\n statusMessage,\n headers: Object.freeze(Object.assign({}, Object.keys(headers).reduce((accum, k) => {\n accum[k.toLowerCase()] = headers[k];\n return accum;\n }, {}))),\n body: ((body == null) ? null : new Uint8Array(body)),\n request: (request || null),\n }, \"f\");\n __classPrivateFieldSet(this, _FetchResponse_error, { message: \"\" }, \"f\");\n }\n toString() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return ``;\n }\n get statusCode() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusCode\"); }\n get statusMessage() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusMessage\"); }\n get headers() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"headers\"); }\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? null : new Uint8Array(body);\n }\n get bodyText() {\n try {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? \"\" : toUtf8String(body);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid UTF-8 data\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyText\", info: { response: this }\n });\n }\n }\n get bodyJson() {\n try {\n return JSON.parse(this.bodyText);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid JSON\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyJson\", info: { response: this }\n });\n }\n }\n [(_FetchResponse_props = new WeakMap(), _FetchResponse_error = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n makeServerError(message, error) {\n let statusMessage;\n if (!message) {\n message = `${this.statusCode} ${this.statusMessage}`;\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${message})`;\n }\n else {\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${this.statusCode} ${this.statusMessage}; ${message})`;\n }\n const response = new FetchResponse(599, statusMessage, this.headers, this.body, getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\") || undefined);\n __classPrivateFieldSet(response, _FetchResponse_error, { message, error }, \"f\");\n return response;\n }\n throwThrottleError(message, stall) {\n if (stall == null) {\n stall = 1000;\n }\n if (typeof (stall) !== \"number\" || !Number.isInteger(stall) || stall < 0) {\n logger.throwArgumentError(\"invalid stall timeout\", \"stall\", stall);\n }\n const error = new Error(message || \"throttling requests\");\n defineProperties(error, { stall, throttle: true });\n throw error;\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n hasBody() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body != null);\n }\n get request() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\"); }\n ok() {\n return (__classPrivateFieldGet(this, _FetchResponse_error, \"f\").message === \"\" && this.statusCode >= 200 && this.statusCode < 300);\n }\n assertOk() {\n if (this.ok()) {\n return;\n }\n let { message, error } = __classPrivateFieldGet(this, _FetchResponse_error, \"f\");\n if (message === \"\") {\n message = `server response ${this.statusCode} ${this.statusMessage}`;\n }\n logger.throwError(message, \"SERVER_ERROR\", {\n request: (this.request || \"unknown request\"), response: this, error\n });\n }\n}\n//# sourceMappingURL=response.js.map","import { logger } from \"./logger.js\";\nimport { FetchResponse } from \"./response.js\";\nexport async function getUrl(req, timeout) {\n const protocol = req.url.split(\":\")[0].toLowerCase();\n if (protocol !== \"http\" && protocol !== \"https\") {\n logger.throwError(`unsupported protocol ${protocol}`, \"UNSUPPORTED_OPERATION\", {\n info: { protocol },\n operation: \"request\"\n });\n }\n if (req.credentials && !req.allowInsecureAuthentication) {\n logger.throwError(\"insecure authorized connections unsupported\", \"UNSUPPORTED_OPERATION\", {\n operation: \"request\"\n });\n }\n const init = {\n method: req.method,\n headers: new Headers(Array.from(req)),\n body: req.body || undefined,\n };\n const resp = await fetch(req.url, init);\n const headers = {};\n resp.headers.forEach((value, key) => {\n headers[key.toLowerCase()] = value;\n });\n const body = new Uint8Array(await resp.arrayBuffer());\n return new FetchResponse(resp.status, resp.statusText, headers, body, req);\n}\n//# sourceMappingURL=get-url-browser.js.map","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 _FetchRequest_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nfunction check(value, type, name) {\n if (typeof (value) !== type) {\n throw new Error(`invalid ${name}`);\n }\n return value;\n}\nexport class FetchRequest {\n constructor(url) {\n _FetchRequest_props.set(this, void 0);\n __classPrivateFieldSet(this, _FetchRequest_props, {\n allowInsecure: false,\n gzip: false,\n headers: {},\n method: \"\",\n timeout: 300,\n url: check(url, \"string\", \"url\")\n }, \"f\");\n }\n // URL\n get url() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\"); }\n set url(url) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\", check(url, \"string\", \"url\"));\n }\n // Body\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body == null) {\n return null;\n }\n if (this.isFrozen()) {\n return new Uint8Array(body);\n }\n return body;\n }\n set body(body) {\n if (body == null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", undefined);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", undefined);\n }\n else if (typeof (body) === \"string\") {\n // @TODO: utf8-check\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(body));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"text/plain\");\n }\n else if (body instanceof Uint8Array) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", body);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/octet-stream\");\n }\n else if (typeof (body) === \"object\") {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(JSON.stringify(body)));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/json\");\n }\n else {\n throw new Error(\"invalid body\");\n }\n }\n hasBody() {\n return (getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\") != null);\n }\n // Method (default: GET with no body, POST with a body)\n get method() {\n const method = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\");\n if (method) {\n return method.toUpperCase();\n }\n if (this.body) {\n return \"POST\";\n }\n return \"GET\";\n }\n set method(method) {\n if (method == null) {\n method = \"\";\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\", check(method, \"string\", \"method\"));\n }\n // Headers (automatically fills content-type if not explicitly set)\n get headers() {\n const headers = Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\"));\n const bodyType = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\");\n if (this.credentials) { /* TODO */ }\n ;\n if (this.allowGzip) {\n headers[\"accept-encoding\"] = \"gzip\";\n }\n if (headers[\"content-type\"] == null && bodyType) {\n headers[\"content-type\"] = bodyType;\n }\n if (this.body) {\n headers[\"content-length\"] = String(this.body.length);\n }\n return Object.freeze(headers);\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n setHeader(key, value) {\n const headers = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\");\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", headers);\n headers[check(key, \"string\", \"key\").toLowerCase()] = String(value);\n }\n clearHeaders() {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", {});\n }\n [(_FetchRequest_props = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n // Configure an Authorization header\n get credentials() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\") || null;\n }\n setCredentials(username, password) {\n if (username.match(/:/)) {\n logger.throwArgumentError(\"invalid basic authentication username\", \"username\", \"[REDACTED]\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\", `${username}:${password}`);\n // @TODO:\n //const auth = username + \":\" + password;\n //this.setHeader(\"authorization\", \"Basic \" + base64Encode(toUtf8Bytes(auth)))\n //this.setHeader(\"authorization\", \"Basic TODO:\" + auth);\n }\n // Configure the request to allow gzipped responses\n get allowGzip() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\");\n }\n set allowGzip(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\", !!value);\n }\n // Allow credentials to be sent over an insecure (non-HTTPS) channel\n get allowInsecureAuthentication() {\n return !!getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\");\n }\n set allowInsecureAuthentication(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\", check(value, \"boolean\", \"allowInsecureAuthentication\"));\n }\n // Timeout (seconds)\n get timeout() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\"); }\n set timeout(timeout) {\n timeout = check(timeout, \"number\", \"timeout\");\n if (timeout <= 0) {\n throw new Error(\"invalid timerout\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\", timeout);\n }\n redirect(location) {\n // Redirection; for now we only support absolute locataions\n const current = this.url.split(\":\")[0].toLowerCase();\n const target = location.split(\":\")[0].toLowerCase();\n if (this.method !== \"GET\" || (current === \"https\" && target === \"http\") ||\n !location.match(/^https?:$/)) {\n return logger.throwError(`unsupported redirect`, \"UNSUPPORTED_OPERATION\", {\n operation: `redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(location)})`\n });\n }\n // Create a copy of this request, with a new URL\n const req = new FetchRequest(location);\n req.method = \"GET\";\n req.allowGzip = this.allowGzip;\n req.timeout = this.timeout;\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"body\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\"));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Do not forward credentials unless on the same domain; only absolute\n //req.allowInsecure = false;\n // paths are currently supported; may want a way to specify to forward?\n //setStore(req.#props, \"creds\", getStore(this.#pros, \"creds\"));\n return req;\n }\n clone() {\n const clone = new FetchRequest(this.url);\n // Preserve \"default method\" (i.e. null)\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"method\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\"));\n // Preserve \"default body\" with type, copying the Uint8Array is present\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"body\", (body == null) ? undefined : new Uint8Array(body));\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Preserve \"default headers\"\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n // Credentials is readonly, so we copy internally\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"creds\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\"));\n if (this.allowGzip) {\n clone.allowGzip = true;\n }\n clone.timeout = this.timeout;\n if (this.allowInsecureAuthentication) {\n clone.allowInsecureAuthentication = true;\n }\n return clone;\n }\n freeze() {\n // Copy the body so any changes to previous access do not modify it\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body != null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", new Uint8Array(body));\n }\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\").headers);\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n }\n}\n//# sourceMappingURL=request.js.map","import { decodeBase64 } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { getUrl } from \"./get-url.js\"; /*-browser*/\nimport { logger } from \"./logger.js\";\nimport { FetchRequest } from \"./request.js\";\nimport { FetchResponse } from \"./response.js\";\nasync function delay(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\n// @TODO: Add option for global preflightRequest?\nfunction getTime() { return (new Date()).getTime(); }\nfunction unpercent(value) {\n value = value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => {\n return String.fromCharCode(parseInt(code, 16));\n });\n return toUtf8Bytes(value);\n}\nlet lockGateways = false;\nlet ipfsGateway = \"https:/\\/gateway.ipfs.io/\";\nlet arGateway = \"https:/\\/gateway.ar.io/\";\nexport async function fetchData(connection) {\n const conn = (typeof (connection) === \"string\") ? {\n request: new FetchRequest(connection)\n } : (connection instanceof FetchRequest) ? {\n request: connection\n } : Object.assign({}, connection);\n if (conn.request == null) {\n return logger.throwArgumentError(\"missing request\", \"connection\", connection);\n }\n let req = conn.request.clone().freeze();\n switch (conn.request.url.split(\":\")[0]) {\n case \"data\": {\n const match = req.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i);\n if (match) {\n try {\n const headers = {\n \"content-type\": (match[1] ? match[1] : \"text/plain\")\n };\n const body = (match[2] ? decodeBase64(match[3]) : unpercent(match[3]));\n return new FetchResponse(200, \"OK\", headers, body, req.clone());\n }\n catch (error) {\n return new FetchResponse(400, \"BAD REQUEST (invalid base64 encoded data)\", {}, null, req.clone());\n }\n }\n return new FetchResponse(500, \"INTERNAL SERVER ERROR (unsupported dara URI)\", {}, null, req.clone());\n }\n case \"ipfs\":\n case \"ipns\":\n case \"ar\":\n throw new Error(\"not implemented yet\");\n console.log(\"FF\", arGateway, ipfsGateway);\n case \"http\":\n case \"https\":\n break;\n default:\n throw new Error(\"unsupported scheme\");\n }\n const attempts = (conn.throttleLimit != null) ? conn.throttleLimit : 12;\n if (!Number.isInteger(attempts) || attempts < 1) {\n return logger.throwArgumentError(\"invalid throttleLimit\", \"connection\", connection);\n }\n const slotInterval = (conn.throttleSlotInterval != null) ? conn.throttleSlotInterval : 100;\n //logger.assertInteger(slotInterval, \"connection.throttleSlotInterval\", connection.throttleSlotInterval);\n if (!Number.isInteger(slotInterval) || attempts < 0) {\n return logger.throwArgumentError(\"invalid throttleSlotInterval\", \"connection\", connection);\n }\n const retryFunc = (conn.throttleRetry != null) ? conn.throttleRetry : null;\n if (retryFunc && typeof (retryFunc) !== \"function\") {\n return logger.throwArgumentError(\"invalid throttleRetry callback\", \"connection\", connection);\n }\n const preflightRequest = conn.preflightRequest || null;\n if (preflightRequest && typeof (preflightRequest) !== \"function\") {\n return logger.throwArgumentError(\"invalid preflightRequest callback\", \"connection\", connection);\n }\n const processResponse = conn.processResponse || null;\n if (processResponse && typeof (processResponse) !== \"function\") {\n return logger.throwArgumentError(\"invalid processResponse callback\", \"connection\", connection);\n }\n // Start time of this fetch (for timeouts)\n const t0 = getTime();\n let response = null;\n for (let a = 0; a < attempts; a++) {\n let request = req.clone();\n if (preflightRequest) {\n request = (await preflightRequest(request.freeze())).clone();\n }\n const remainingTime = getTime() - t0;\n if (remainingTime < 0) {\n return logger.throwError(\"timeout\", \"TIMEOUT\", { operation: \"request\", request });\n }\n response = await getUrl(request, remainingTime);\n // Retry logic (server forced)\n if (a < attempts) {\n if (response.statusCode === 301 || response.statusCode === 302) {\n // Try following the redirect; the request will through if the\n // type of redirect is not supported\n try {\n req = request.redirect(response.headers.location || \"\");\n continue;\n }\n catch (error) { }\n ;\n // Things won't get any better on another attempt; abort\n return response;\n }\n else if (response.statusCode === 429) {\n if (retryFunc == null || (await retryFunc(request.freeze(), response, a))) {\n const retryAfter = response.headers[\"retry-after\"];\n if (typeof (retryAfter) === \"string\" && retryAfter.match(/^[1-9][0-9]*$/)) {\n await delay(parseInt(retryAfter));\n }\n else {\n await delay(slotInterval * Math.trunc(Math.random() * Math.pow(2, a)));\n }\n continue;\n }\n }\n }\n // Optional post-processing response; also allows trapping\n // HTTP status errors and doing \"something different\",\n // including any further throttling.\n if (processResponse) {\n try {\n return await processResponse(request, response);\n }\n catch (error) {\n // response.throwThrottleError\n if (error.throttle && typeof (error.stall) === \"number\") {\n if (a < attempts) {\n await delay(error.stall);\n continue;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\", error);\n }\n // Something went wrong during processing; throw a 5xx server error\n response.makeServerError(\"error in post-processing function\", error).assertOk();\n }\n }\n return response;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\");\n}\nfetchData.lock = function () {\n lockGateways = true;\n};\n// @TODO: Allow a master Gateway function\nfetchData.setGateway = function (gateway) {\n};\nfetchData.setIpfsGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setIpfsGateway\"\n });\n }\n ipfsGateway = gateway;\n};\nfetchData.setArGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setArGateway\"\n });\n }\n arGateway = gateway;\n};\n//# sourceMappingURL=fetch-data.js.map","export const version = \"@ethersproject/providers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _a, _EnsResolver_supports2544, _EnsResolver_getResolver;\nimport { concat, dataSlice, hexlify, zeroPadLeft } from \"@ethersproject/bytes\";\nimport { dnsEncode, namehash } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { encodeBase58, toArray, toNumber } from \"@ethersproject/math\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData } from \"@ethersproject/web\";\nimport { logger } from \"./logger.js\";\nconst BN_1 = BigInt(1);\nconst Empty = new Uint8Array([]);\nconst HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n const offset = toNumber(dataSlice(result, start, start + 32));\n const length = toNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n}\nfunction parseString(result, start) {\n try {\n const bytes = parseBytes(result, start);\n if (bytes != null) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(Empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\n// @TODO: This should use the fetch-data:ipfs gateway\n// Trim off the ipfs:// prefix and return the default gateway URL\nfunction getIpfsLink(link) {\n if (link.match(/^ipfs:\\/\\/ipfs\\//i)) {\n link = link.substring(12);\n }\n else if (link.match(/^ipfs:\\/\\//i)) {\n link = link.substring(7);\n }\n else {\n logger.throwArgumentError(\"unsupported IPFS format\", \"link\", link);\n }\n return `https:/\\/gateway.ipfs.io/ipfs/${link}`;\n}\n;\n;\nexport class MulticoinProviderPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n validate(proivder) {\n return this;\n }\n supportsCoinType(coinType) {\n return false;\n }\n async encodeAddress(coinType, address) {\n throw new Error(\"unsupported coin\");\n }\n async decodeAddress(coinType, data) {\n throw new Error(\"unsupported coin\");\n }\n}\nconst BasicMulticoinPluginId = \"org.ethers.provider-prugins.basicmulticoin\";\nexport class BasicMulticoinProviderPlugin extends MulticoinProviderPlugin {\n constructor() {\n super(BasicMulticoinPluginId);\n }\n}\nconst matcherIpfs = new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\");\nconst matchers = [\n new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n new RegExp(\"^(data):(.*)$\", \"i\"),\n matcherIpfs,\n new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\nexport class EnsResolver {\n constructor(provider, address, name) {\n // For EIP-2544 names, the ancestor that provided the resolver\n _EnsResolver_supports2544.set(this, void 0);\n defineProperties(this, { provider, address, name });\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n }\n async supportsWildcard() {\n if (!__classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\")) {\n // supportsInterface(bytes4 = selector(\"resolve(bytes,bytes)\"))\n __classPrivateFieldSet(this, _EnsResolver_supports2544, this.provider.call({\n to: this.address,\n data: \"0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000\"\n }).then((result) => {\n return (logger.getBigInt(result) === BN_1);\n }).catch((error) => {\n if (error.code === \"CALL_EXCEPTION\") {\n return false;\n }\n // Rethrow the error: link is down, etc. Let future attempts retry.\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n throw error;\n }), \"f\");\n }\n return await __classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\");\n }\n async _fetch(selector, parameters = \"0x\") {\n // e.g. keccak256(\"addr(bytes32,uint256)\")\n const addrData = concat([selector, namehash(this.name), parameters]);\n const tx = {\n to: this.address,\n enableCcipRead: true,\n data: addrData\n };\n // Wildcard support; use EIP-2544 to resolve the request\n let wrapped = false;\n if (await this.supportsWildcard()) {\n wrapped = true;\n // selector(\"resolve(bytes,bytes)\")\n tx.data = concat([\"0x9061b923\", encodeBytes([dnsEncode(this.name), addrData])]);\n }\n try {\n let data = await this.provider.call(tx);\n if ((logger.getBytes(data).length % 32) === 4) {\n return logger.throwError(\"resolver threw error\", \"CALL_EXCEPTION\", {\n transaction: tx, data\n });\n }\n if (wrapped) {\n return parseBytes(data, 0);\n }\n return data;\n }\n catch (error) {\n if (error.code !== \"CALL_EXCEPTION\") {\n throw error;\n }\n }\n return null;\n }\n async getAddress(coinType = 60) {\n if (coinType === 60) {\n try {\n // keccak256(\"addr(bytes32)\")\n const result = await this._fetch(\"0x3b3b57de\");\n // No address\n if (result === \"0x\" || result === HashZero) {\n return null;\n }\n const network = await this.provider.getNetwork();\n return network.formatter.callAddress(result);\n }\n catch (error) {\n if (error.code === \"CALL_EXCEPTION\") {\n return null;\n }\n throw error;\n }\n }\n let coinPlugin = null;\n for (const plugin of this.provider.plugins) {\n if (!(plugin instanceof MulticoinProviderPlugin)) {\n continue;\n }\n if (plugin.supportsCoinType(coinType)) {\n coinPlugin = plugin;\n break;\n }\n }\n if (coinPlugin == null) {\n return null;\n }\n // keccak256(\"addr(bytes32,uint256\")\n const data = parseBytes((await this._fetch(\"0xf1cb7e06\", numPad(coinType))) || \"0x\", 0);\n // No address\n if (data == null || data === \"0x\") {\n return null;\n }\n // Compute the address\n const address = await coinPlugin.encodeAddress(coinType, data);\n if (address != null) {\n return address;\n }\n return logger.throwError(`invalid coin data`, \"UNSUPPORTED_OPERATION\", {\n operation: `getAddress(${coinType})`,\n info: { coinType, data }\n });\n }\n async getText(key) {\n // The key encoded as parameter to fetchBytes\n let keyBytes = toUtf8Bytes(key);\n // The nodehash consumes the first slot, so the string pointer targets\n // offset 64, with the length at offset 64 and data starting at offset 96\n const calldata = logger.getBytes(concat([numPad(64), numPad(keyBytes.length), keyBytes]));\n const hexBytes = parseBytes((await this._fetch(\"0x59d1d43c\", bytesPad(calldata))) || \"0x\", 0);\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n return toUtf8String(hexBytes);\n }\n async getContentHash() {\n // keccak256(\"contenthash()\")\n const hexBytes = parseBytes((await this._fetch(\"0xbc1c58d1\")) || \"0x\", 0);\n // No contenthash\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key)\n const ipfs = hexBytes.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipfs) {\n const scheme = (ipfs[1] === \"e3010170\") ? \"ipfs\" : \"ipns\";\n const length = parseInt(ipfs[4], 16);\n if (ipfs[5].length === length * 2) {\n return `${scheme}:/\\/${encodeBase58(\"0x\" + ipfs[2])}`;\n }\n }\n // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/);\n if (swarm && swarm[1].length === 64) {\n return `bzz:/\\/${swarm[1]}`;\n }\n return logger.throwError(`invalid or unsupported content hash data`, \"UNSUPPORTED_OPERATION\", {\n operation: \"getContentHash()\",\n info: { data: hexBytes }\n });\n }\n async getAvatar() {\n return (await this._getAvatar()).url;\n }\n async _getAvatar() {\n const linkage = [{ type: \"name\", value: this.name }];\n try {\n // test data for ricmoo.eth\n //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n const avatar = await this.getText(\"avatar\");\n if (avatar == null) {\n linkage.push({ type: \"!avatar\", value: \"\" });\n throw new Error(\"!avatar\");\n }\n linkage.push({ type: \"avatar\", value: avatar });\n for (let i = 0; i < matchers.length; i++) {\n const match = avatar.match(matchers[i]);\n if (match == null) {\n continue;\n }\n const scheme = match[1].toLowerCase();\n switch (scheme) {\n case \"https\":\n case \"data\":\n linkage.push({ type: \"url\", value: avatar });\n return { linkage, url: avatar };\n case \"ipfs\": {\n const url = getIpfsLink(avatar);\n linkage.push({ type: \"ipfs\", value: avatar });\n linkage.push({ type: \"url\", value: url });\n return { linkage, url };\n }\n case \"erc721\":\n case \"erc1155\": {\n // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n const selector = (scheme === \"erc721\") ? \"0xc87b56dd\" : \"0x0e89341c\";\n linkage.push({ type: scheme, value: avatar });\n // The owner of this name\n const owner = await this.getAddress();\n if (owner == null) {\n linkage.push({ type: \"!owner\", value: \"\" });\n throw new Error(\"!owner\");\n }\n const comps = (match[2] || \"\").split(\"/\");\n if (comps.length !== 2) {\n linkage.push({ type: `!${scheme}caip`, value: (match[2] || \"\") });\n throw new Error(\"!caip\");\n }\n const formatter = (await this.provider.getNetwork()).formatter;\n const addr = formatter.address(comps[0]);\n const tokenId = numPad(comps[1]);\n // Check that this account owns the token\n if (scheme === \"erc721\") {\n // ownerOf(uint256 tokenId)\n const tokenOwner = formatter.callAddress(await this.provider.call({\n to: addr, data: concat([\"0x6352211e\", tokenId])\n }));\n if (owner !== tokenOwner) {\n linkage.push({ type: \"!owner\", value: tokenOwner });\n throw new Error(\"!owner\");\n }\n linkage.push({ type: \"owner\", value: tokenOwner });\n }\n else if (scheme === \"erc1155\") {\n // balanceOf(address owner, uint256 tokenId)\n const balance = logger.getBigInt(await this.provider.call({\n to: addr, data: concat([\"0x00fdd58e\", zeroPadLeft(owner, 32), tokenId])\n }));\n if (!balance) {\n linkage.push({ type: \"!balance\", value: \"0\" });\n throw new Error(\"!balance\");\n }\n linkage.push({ type: \"balance\", value: balance.toString() });\n }\n // Call the token contract for the metadata URL\n const tx = {\n to: comps[0],\n data: concat([selector, tokenId])\n };\n let metadataUrl = parseString(await this.provider.call(tx), 0);\n if (metadataUrl == null) {\n linkage.push({ type: \"!metadata-url\", value: \"\" });\n throw new Error(\"!metadata-url\");\n }\n linkage.push({ type: \"metadata-url-base\", value: metadataUrl });\n // ERC-1155 allows a generic {id} in the URL\n if (scheme === \"erc1155\") {\n metadataUrl = metadataUrl.replace(\"{id}\", hexlify(tokenId).substring(2));\n linkage.push({ type: \"metadata-url-expanded\", value: metadataUrl });\n }\n // Transform IPFS metadata links\n if (metadataUrl.match(/^ipfs:/i)) {\n metadataUrl = getIpfsLink(metadataUrl);\n }\n linkage.push({ type: \"metadata-url\", value: metadataUrl });\n // Get the token metadata\n let metadata = {};\n const response = await fetchData(metadataUrl);\n try {\n metadata = response.bodyJson;\n }\n catch (error) {\n try {\n linkage.push({ type: \"!metadata\", value: response.bodyText });\n }\n catch (error) {\n const bytes = response.body;\n if (bytes) {\n linkage.push({ type: \"!metadata\", value: hexlify(bytes) });\n }\n throw error;\n }\n throw error;\n }\n if (!metadata) {\n linkage.push({ type: \"!metadata\", value: \"\" });\n throw new Error(\"!metadata\");\n }\n linkage.push({ type: \"metadata\", value: JSON.stringify(metadata) });\n // Pull the image URL out\n let imageUrl = metadata.image;\n if (typeof (imageUrl) !== \"string\") {\n linkage.push({ type: \"!imageUrl\", value: \"\" });\n throw new Error(\"!imageUrl\");\n }\n if (imageUrl.match(/^(https:\\/\\/|data:)/i)) {\n // Allow\n }\n else {\n // Transform IPFS link to gateway\n const ipfs = imageUrl.match(matcherIpfs);\n if (ipfs == null) {\n linkage.push({ type: \"!imageUrl-ipfs\", value: imageUrl });\n throw new Error(\"!imageUrl-ipfs\");\n }\n linkage.push({ type: \"imageUrl-ipfs\", value: imageUrl });\n imageUrl = getIpfsLink(imageUrl);\n }\n linkage.push({ type: \"url\", value: imageUrl });\n return { linkage, url: imageUrl };\n }\n }\n }\n }\n catch (error) {\n console.log(\"EE\", error);\n }\n return { linkage, url: null };\n }\n static async fromName(provider, name) {\n let currentName = name;\n while (true) {\n if (currentName === \"\" || currentName === \".\") {\n return null;\n }\n // Optimization since the eth node cannot change and does\n // not have a wildcar resolver\n if (name !== \"eth\" && currentName === \"eth\") {\n return null;\n }\n // Check the current node for a resolver\n const addr = await __classPrivateFieldGet(EnsResolver, _a, \"m\", _EnsResolver_getResolver).call(EnsResolver, provider, currentName);\n // Found a resolver!\n if (addr != null) {\n const resolver = new EnsResolver(provider, addr, name);\n // Legacy resolver found, using EIP-2544 so it isn't safe to use\n if (currentName !== name && !(await resolver.supportsWildcard())) {\n return null;\n }\n return resolver;\n }\n // Get the parent node\n currentName = currentName.split(\".\").slice(1).join(\".\");\n }\n }\n}\n_a = EnsResolver, _EnsResolver_supports2544 = new WeakMap(), _EnsResolver_getResolver = async function _EnsResolver_getResolver(provider, name) {\n const network = await provider.getNetwork();\n const ensPlugin = network.getPlugin(\"org.ethers.plugins.ens\");\n // No ENS...\n if (!ensPlugin) {\n return logger.throwError(\"network does not support ENS\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getResolver\", info: { network: network.name }\n });\n }\n try {\n // keccak256(\"resolver(bytes32)\")\n const addrData = await provider.call({\n to: ensPlugin.address,\n data: concat([\"0x0178b8bf\" + namehash(name)]),\n enableCcipRead: true\n });\n const addr = network.formatter.callAddress(addrData);\n if (addr === dataSlice(HashZero, 0, 20)) {\n return null;\n }\n return addr;\n }\n catch (error) {\n // ENS registry cannot throw errors on resolver(bytes32),\n // so probably a link error\n throw error;\n }\n return null;\n};\n//# sourceMappingURL=ens-resolver.js.map","export const version = \"@ethersproject/signing-key@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _Signature_props;\nimport { toHex } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { arrayify, concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\n// Constants\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27);\nconst BN_28 = BigInt(28);\nconst BN_35 = BigInt(35);\nconst BN_255 = BigInt(255);\nconst BN_MASK_255 = (BN_1 << BN_255) - BN_1;\nconst _guard = {};\nconst Zero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nexport class Signature {\n constructor(guard, r, s, v) {\n _Signature_props.set(this, void 0);\n logger.assertPrivate(guard, _guard, \"Signature\");\n __classPrivateFieldSet(this, _Signature_props, { r, s, v, networkV: null }, \"f\");\n }\n get r() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\"); }\n set r(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\", hexlify(value));\n }\n get s() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\"); }\n set s(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n else if (arrayify(value)[0] & 0x80) {\n logger.throwArgumentError(\"non-canonical s\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\", hexlify(value));\n }\n get v() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\"); }\n set v(value) {\n const v = logger.getNumber(value, \"value\");\n if (v !== 27 && v !== 28) {\n throw new Error(\"@TODO\");\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\", v);\n }\n get networkV() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\"); }\n get legacyChainId() {\n const v = this.networkV;\n if (v == null) {\n return null;\n }\n return Signature.getChainId(v);\n }\n get vs() {\n // The EIP-2098 compact representation\n const vs = arrayify(this.s);\n if (this.yParity) {\n vs[0] |= 0x80;\n }\n return hexlify(vs);\n }\n get yParity() {\n if (this.v === 27) {\n return 0;\n }\n return 1;\n /*\n // When v is 0 or 1 it is the recid directly\n if (this.v.isZero()) { return 0; }\n if (this.v.eq(1)) { return 1; }\n\n // Otherwise, odd (e.g. 27) is 0 and even (e.g. 28) is 1\n return this.v.and(1).isZero() ? 1: 0;\n */\n }\n get serialized() {\n return concat([this.r, this.s, (this.yParity ? \"0x1c\" : \"0x1b\")]);\n }\n [(_Signature_props = new WeakMap(), Symbol.for('nodejs.util.inspect.custom'))]() {\n return `Signature { r: \"${this.r}\", s: \"${this.s}\", yParity: ${this.yParity}, networkV: ${this.networkV} }`;\n }\n clone() {\n if (getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\")) {\n logger.throwError(\"cannot clone EIP-155 signatures\", \"UNSUPPORTED_OPERATION\", {\n operation: \"clone\"\n });\n }\n const { r, s, v } = __classPrivateFieldGet(this, _Signature_props, \"f\");\n return new Signature(_guard, r, s, v);\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n }\n toJSON() {\n const { r, s, v, networkV } = this;\n return {\n _type: \"signature\",\n networkV: ((networkV != null) ? networkV.toString() : null),\n r, s, v,\n };\n }\n static create() {\n return new Signature(_guard, Zero, Zero, 27);\n }\n // Get the chain ID from an EIP-155 v\n static getChainId(v) {\n const bv = logger.getBigInt(v, \"v\");\n // The v is not an EIP-155 v, so it is the unspecified chain ID\n if ((bv == BN_27) || (bv == BN_28)) {\n return BN_0;\n }\n // Bad value for an EIP-155 v\n if (bv < BN_35) {\n logger.throwArgumentError(\"invalid EIP-155 v\", \"v\", v);\n }\n return (bv - BN_35) / BN_2;\n }\n // Get the EIP-155 v transformed for a given chainId\n static getChainIdV(chainId, v) {\n return (logger.getBigInt(chainId) * BN_2) + BigInt(35 + v - 27);\n }\n // Convert an EIP-155 v into a normalized v\n static getNormalizedV(v) {\n const bv = logger.getBigInt(v);\n if (bv == BN_0) {\n return 27;\n }\n if (bv == BN_1) {\n return 28;\n }\n // Otherwise, EIP-155 v means odd is 27 and even is 28\n return (bv & BN_1) ? 27 : 28;\n }\n static fromTransaction(r, s, _v) {\n const v = logger.getBigInt(_v, \"v\");\n const sig = Signature.from({ r, s, v });\n setStore(__classPrivateFieldGet(sig, _Signature_props, \"f\"), \"networkV\", v);\n return sig.freeze();\n }\n static from(sig) {\n const throwError = (message) => {\n return logger.throwArgumentError(message, \"signature\", sig);\n };\n if (typeof (sig) === \"string\") {\n if (dataLength(sig) !== 65) {\n throwError(\"invlaid raw signature length\");\n }\n const r = dataSlice(sig, 0, 32);\n const s = dataSlice(sig, 32, 64);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = Signature.getNormalizedV(dataSlice(sig, 64, 65));\n return new Signature(_guard, r, s, v);\n }\n if (sig instanceof Signature) {\n return sig.clone();\n }\n const r = sig.r;\n if (r == null) {\n throwError(\"missing r\");\n }\n if (!isHexString(r, 32)) {\n throwError(\"invalid r\");\n }\n const s = (function (s, vs) {\n if (s) {\n if (!isHexString(s, 32)) {\n throwError(\"invalid s\");\n }\n return s;\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return toHex(BigInt(vs) & BN_MASK_255, 32);\n }\n return throwError(\"missing s\");\n })(sig.s, sig.vs);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = (function (v, vs, yParity) {\n if (v) {\n return Signature.getNormalizedV(v);\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return ((arrayify(vs)[0] & 0x80) ? 28 : 27);\n }\n if (yParity) {\n switch (yParity) {\n case 0: return 27;\n case 1: return 28;\n }\n return throwError(\"invalid yParity\");\n }\n //if (chainId) { return BigNumber.from(chainId).and(1).sub(27); } // @TODO: check this\n return throwError(\"missing v\");\n })(sig.v, sig.vs, sig.yParity);\n // @TODO: check vs, chainId, yParity\n const result = new Signature(_guard, r, s, v);\n if (sig.yParity && sig.yParity !== result.yParity) {\n }\n if (sig.vs && sig.vs !== result.vs) {\n }\n //if (sig.chainId && sig.chainId !== result.chainId) {\n //}\n return result;\n }\n}\n//# sourceMappingURL=signature.js.map","/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nimport nodeCrypto from 'crypto';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _3n = BigInt(3);\nconst _8n = BigInt(8);\nconst POW_2_256 = _2n ** BigInt(256);\nconst CURVE = {\n a: _0n,\n b: BigInt(7),\n P: POW_2_256 - _2n ** BigInt(32) - BigInt(977),\n n: POW_2_256 - BigInt('432420386565659656852420866394968145599'),\n h: _1n,\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n};\nexport { CURVE };\nfunction weistrass(x) {\n const { a, b } = CURVE;\n const x2 = mod(x * x);\n const x3 = mod(x2 * x);\n return mod(x3 + a * x + b);\n}\nconst USE_ENDOMORPHISM = CURVE.a === _0n;\nclass JacobianPoint {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('JacobianPoint#fromAffine: expected Point');\n }\n return new JacobianPoint(p.x, p.y, _1n);\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return JacobianPoint.toAffineBatch(points).map(JacobianPoint.fromAffine);\n }\n equals(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n return U1 === U2 && S1 === S2;\n }\n negate() {\n return new JacobianPoint(this.x, mod(-this.y), this.z);\n }\n double() {\n const { x: X1, y: Y1, z: Z1 } = this;\n const A = mod(X1 ** _2n);\n const B = mod(Y1 ** _2n);\n const C = mod(B ** _2n);\n const D = mod(_2n * (mod((X1 + B) ** _2n) - A - C));\n const E = mod(_3n * A);\n const F = mod(E ** _2n);\n const X3 = mod(F - _2n * D);\n const Y3 = mod(E * (D - X3) - _8n * C);\n const Z3 = mod(_2n * Y1 * Z1);\n return new JacobianPoint(X3, Y3, Z3);\n }\n add(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n if (X2 === _0n || Y2 === _0n)\n return this;\n if (X1 === _0n || Y1 === _0n)\n return other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n const H = mod(U2 - U1);\n const r = mod(S2 - S1);\n if (H === _0n) {\n if (r === _0n) {\n return this.double();\n }\n else {\n return JacobianPoint.ZERO;\n }\n }\n const HH = mod(H ** _2n);\n const HHH = mod(H * HH);\n const V = mod(U1 * HH);\n const X3 = mod(r ** _2n - HHH - _2n * V);\n const Y3 = mod(r * (V - X3) - S1 * HHH);\n const Z3 = mod(Z1 * Z2 * H);\n return new JacobianPoint(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiplyUnsafe(scalar) {\n let n = normalizeScalar(scalar);\n const G = JacobianPoint.BASE;\n const P0 = JacobianPoint.ZERO;\n if (n === _0n)\n return P0;\n if (n === _1n)\n return this;\n if (!USE_ENDOMORPHISM) {\n let p = P0;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n let { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let k1p = P0;\n let k2p = P0;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n return k1p.add(k2p);\n }\n precomputeWindow(W) {\n const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1;\n const points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(JacobianPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = JacobianPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = JacobianPoint.ZERO;\n let f = JacobianPoint.ZERO;\n const windows = 1 + (USE_ENDOMORPHISM ? 128 / W : 256 / W);\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n if (wbits === 0) {\n let pr = precomputes[offset];\n if (window % 2)\n pr = pr.negate();\n f = f.add(pr);\n }\n else {\n let cached = precomputes[offset + Math.abs(wbits) - 1];\n if (wbits < 0)\n cached = cached.negate();\n p = p.add(cached);\n }\n }\n return { p, f };\n }\n multiply(scalar, affinePoint) {\n let n = normalizeScalar(scalar);\n let point;\n let fake;\n if (USE_ENDOMORPHISM) {\n const { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let { p: k1p, f: f1p } = this.wNAF(k1, affinePoint);\n let { p: k2p, f: f2p } = this.wNAF(k2, affinePoint);\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(n, affinePoint);\n point = p;\n fake = f;\n }\n return JacobianPoint.normalizeZ([point, fake])[0];\n }\n toAffine(invZ = invert(this.z)) {\n const { x, y, z } = this;\n const iz1 = invZ;\n const iz2 = mod(iz1 * iz1);\n const iz3 = mod(iz2 * iz1);\n const ax = mod(x * iz2);\n const ay = mod(y * iz3);\n const zz = mod(z * iz1);\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return new Point(ax, ay);\n }\n}\nJacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n);\nJacobianPoint.ZERO = new JacobianPoint(_0n, _1n, _0n);\nconst pointPrecomputes = new WeakMap();\nexport class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n static fromCompressedHex(bytes) {\n const isShort = bytes.length === 32;\n const x = bytesToNumber(isShort ? bytes : bytes.subarray(1));\n if (!isValidFieldElement(x))\n throw new Error('Point is not on curve');\n const y2 = weistrass(x);\n let y = sqrtMod(y2);\n const isYOdd = (y & _1n) === _1n;\n if (isShort) {\n if (isYOdd)\n y = mod(-y);\n }\n else {\n const isFirstByteOdd = (bytes[0] & 1) === 1;\n if (isFirstByteOdd !== isYOdd)\n y = mod(-y);\n }\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromUncompressedHex(bytes) {\n const x = bytesToNumber(bytes.subarray(1, 33));\n const y = bytesToNumber(bytes.subarray(33, 65));\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n const len = bytes.length;\n const header = bytes[0];\n if (len === 32 || (len === 33 && (header === 0x02 || header === 0x03))) {\n return this.fromCompressedHex(bytes);\n }\n if (len === 65 && header === 0x04)\n return this.fromUncompressedHex(bytes);\n throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${len}`);\n }\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normalizePrivateKey(privateKey));\n }\n static fromSignature(msgHash, signature, recovery) {\n msgHash = ensureBytes(msgHash);\n const h = truncateHash(msgHash);\n const { r, s } = normalizeSignature(signature);\n if (recovery !== 0 && recovery !== 1) {\n throw new Error('Cannot recover signature: invalid recovery bit');\n }\n if (h === _0n)\n throw new Error('Cannot recover signature: msgHash cannot be 0');\n const prefix = recovery & 1 ? '03' : '02';\n const R = Point.fromHex(prefix + numTo32bStr(r));\n const { n } = CURVE;\n const rinv = invert(r, n);\n const u1 = mod(-h * rinv, n);\n const u2 = mod(s * rinv, n);\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2);\n if (!Q)\n throw new Error('Cannot recover signature: point at infinify');\n Q.assertValidity();\n return Q;\n }\n toRawBytes(isCompressed = false) {\n return hexToBytes(this.toHex(isCompressed));\n }\n toHex(isCompressed = false) {\n const x = numTo32bStr(this.x);\n if (isCompressed) {\n const prefix = this.y & _1n ? '03' : '02';\n return `${prefix}${x}`;\n }\n else {\n return `04${x}${numTo32bStr(this.y)}`;\n }\n }\n toHexX() {\n return this.toHex(true).slice(2);\n }\n toRawX() {\n return this.toRawBytes(true).slice(1);\n }\n assertValidity() {\n const msg = 'Point is not on elliptic curve';\n const { x, y } = this;\n if (!isValidFieldElement(x) || !isValidFieldElement(y))\n throw new Error(msg);\n const left = mod(y * y);\n const right = weistrass(x);\n if (mod(left - right) !== _0n)\n throw new Error(msg);\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(this.x, mod(-this.y));\n }\n double() {\n return JacobianPoint.fromAffine(this).double().toAffine();\n }\n add(other) {\n return JacobianPoint.fromAffine(this).add(JacobianPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return JacobianPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n multiplyAndAddUnsafe(Q, a, b) {\n const P = JacobianPoint.fromAffine(this);\n const aP = P.multiply(a);\n const bQ = JacobianPoint.fromAffine(Q).multiplyUnsafe(b);\n const sum = aP.add(bQ);\n return sum.equals(JacobianPoint.ZERO) ? undefined : sum.toAffine();\n }\n}\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _0n);\nfunction sliceDER(s) {\n return Number.parseInt(s[0], 16) >= 8 ? '00' + s : s;\n}\nfunction parseDERInt(data) {\n if (data.length < 2 || data[0] !== 0x02) {\n throw new Error(`Invalid signature integer tag: ${bytesToHex(data)}`);\n }\n const len = data[1];\n const res = data.subarray(2, len + 2);\n if (!len || res.length !== len) {\n throw new Error(`Invalid signature integer: wrong length`);\n }\n if (res[0] === 0x00 && res[1] <= 0x7f) {\n throw new Error('Invalid signature integer: trailing length');\n }\n return { data: bytesToNumber(res), left: data.subarray(len + 2) };\n}\nfunction parseDERSignature(data) {\n if (data.length < 2 || data[0] != 0x30) {\n throw new Error(`Invalid signature tag: ${bytesToHex(data)}`);\n }\n if (data[1] !== data.length - 2) {\n throw new Error('Invalid signature: incorrect length');\n }\n const { data: r, left: sBytes } = parseDERInt(data.subarray(2));\n const { data: s, left: rBytesLeft } = parseDERInt(sBytes);\n if (rBytesLeft.length) {\n throw new Error(`Invalid signature: left bytes after parsing: ${bytesToHex(rBytesLeft)}`);\n }\n return { r, s };\n}\nexport class Signature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromCompact(hex) {\n const arr = isUint8a(hex);\n const name = 'Signature.fromCompact';\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`${name}: Expected string or Uint8Array`);\n const str = arr ? bytesToHex(hex) : hex;\n if (str.length !== 128)\n throw new Error(`${name}: Expected 64-byte hex`);\n return new Signature(hexToNumber(str.slice(0, 64)), hexToNumber(str.slice(64, 128)));\n }\n static fromDER(hex) {\n const arr = isUint8a(hex);\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`Signature.fromDER: Expected string or Uint8Array`);\n const { r, s } = parseDERSignature(arr ? hex : hexToBytes(hex));\n return new Signature(r, s);\n }\n static fromHex(hex) {\n return this.fromDER(hex);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isWithinCurveOrder(r))\n throw new Error('Invalid Signature: r must be 0 < r < n');\n if (!isWithinCurveOrder(s))\n throw new Error('Invalid Signature: s must be 0 < s < n');\n }\n hasHighS() {\n const HALF = CURVE.n >> _1n;\n return this.s > HALF;\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, CURVE.n - this.s) : this;\n }\n toDERRawBytes(isCompressed = false) {\n return hexToBytes(this.toDERHex(isCompressed));\n }\n toDERHex(isCompressed = false) {\n const sHex = sliceDER(numberToHexUnpadded(this.s));\n if (isCompressed)\n return sHex;\n const rHex = sliceDER(numberToHexUnpadded(this.r));\n const rLen = numberToHexUnpadded(rHex.length / 2);\n const sLen = numberToHexUnpadded(sHex.length / 2);\n const length = numberToHexUnpadded(rHex.length / 2 + sHex.length / 2 + 4);\n return `30${length}02${rLen}${rHex}02${sLen}${sHex}`;\n }\n toRawBytes() {\n return this.toDERRawBytes();\n }\n toHex() {\n return this.toDERHex();\n }\n toCompactRawBytes() {\n return hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n}\nfunction concatBytes(...arrays) {\n if (!arrays.every(isUint8a))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nfunction isUint8a(bytes) {\n return bytes instanceof Uint8Array;\n}\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\nfunction bytesToHex(uint8a) {\n if (!(uint8a instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\nfunction numTo32bStr(num) {\n if (num > POW_2_256)\n throw new Error('Expected number < 2^256');\n return num.toString(16).padStart(64, '0');\n}\nfunction numTo32b(num) {\n return hexToBytes(numTo32bStr(num));\n}\nfunction numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n}\nfunction hexToNumber(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToNumber: expected string, got ' + typeof hex);\n }\n return BigInt(`0x${hex}`);\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex' + hex.length);\n const array = new Uint8Array(hex.length / 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)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\nfunction bytesToNumber(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nfunction ensureBytes(hex) {\n return hex instanceof Uint8Array ? Uint8Array.from(hex) : hexToBytes(hex);\n}\nfunction normalizeScalar(num) {\n if (typeof num === 'number' && Number.isSafeInteger(num) && num > 0)\n return BigInt(num);\n if (typeof num === 'bigint' && isWithinCurveOrder(num))\n return num;\n throw new TypeError('Expected valid private scalar: 0 < scalar < curve.n');\n}\nfunction mod(a, b = CURVE.P) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction sqrtMod(x) {\n const { P } = CURVE;\n const _6n = BigInt(6);\n const _11n = BigInt(11);\n const _22n = BigInt(22);\n const _23n = BigInt(23);\n const _44n = BigInt(44);\n const _88n = BigInt(88);\n const b2 = (x * x * x) % P;\n const b3 = (b2 * b2 * x) % P;\n const b6 = (pow2(b3, _3n) * b3) % P;\n const b9 = (pow2(b6, _3n) * b3) % P;\n const b11 = (pow2(b9, _2n) * b2) % P;\n const b22 = (pow2(b11, _11n) * b11) % P;\n const b44 = (pow2(b22, _22n) * b22) % P;\n const b88 = (pow2(b44, _44n) * b44) % P;\n const b176 = (pow2(b88, _88n) * b88) % P;\n const b220 = (pow2(b176, _44n) * b44) % P;\n const b223 = (pow2(b220, _3n) * b3) % P;\n const t1 = (pow2(b223, _23n) * b22) % P;\n const t2 = (pow2(t1, _6n) * b2) % P;\n return pow2(t2, _2n);\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, p = CURVE.P) {\n const scratch = new Array(nums.length);\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = acc;\n return mod(acc * num, p);\n }, _1n);\n const inverted = invert(lastMultiplied, p);\n nums.reduceRight((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = mod(acc * scratch[i], p);\n return mod(acc * num, p);\n }, inverted);\n return scratch;\n}\nconst divNearest = (a, b) => (a + b / _2n) / b;\nconst POW_2_128 = _2n ** BigInt(128);\nfunction splitScalarEndo(k) {\n const { n } = CURVE;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\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)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalarEndo: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n}\nfunction truncateHash(hash) {\n const { n } = CURVE;\n const byteLength = hash.length;\n const delta = byteLength * 8 - 256;\n let h = bytesToNumber(hash);\n if (delta > 0)\n h = h >> BigInt(delta);\n if (h >= n)\n h -= n;\n return h;\n}\nclass HmacDrbg {\n constructor() {\n this.v = new Uint8Array(32).fill(1);\n this.k = new Uint8Array(32).fill(0);\n this.counter = 0;\n }\n hmac(...values) {\n return utils.hmacSha256(this.k, ...values);\n }\n hmacSync(...values) {\n if (typeof utils.hmacSha256Sync !== 'function')\n throw new Error('utils.hmacSha256Sync is undefined, you need to set it');\n const res = utils.hmacSha256Sync(this.k, ...values);\n if (res instanceof Promise)\n throw new Error('To use sync sign(), ensure utils.hmacSha256 is sync');\n return res;\n }\n incr() {\n if (this.counter >= 1000) {\n throw new Error('Tried 1,000 k values for sign(), all were invalid');\n }\n this.counter += 1;\n }\n async reseed(seed = new Uint8Array()) {\n this.k = await this.hmac(this.v, Uint8Array.from([0x00]), seed);\n this.v = await this.hmac(this.v);\n if (seed.length === 0)\n return;\n this.k = await this.hmac(this.v, Uint8Array.from([0x01]), seed);\n this.v = await this.hmac(this.v);\n }\n reseedSync(seed = new Uint8Array()) {\n this.k = this.hmacSync(this.v, Uint8Array.from([0x00]), seed);\n this.v = this.hmacSync(this.v);\n if (seed.length === 0)\n return;\n this.k = this.hmacSync(this.v, Uint8Array.from([0x01]), seed);\n this.v = this.hmacSync(this.v);\n }\n async generate() {\n this.incr();\n this.v = await this.hmac(this.v);\n return this.v;\n }\n generateSync() {\n this.incr();\n this.v = this.hmacSync(this.v);\n return this.v;\n }\n}\nfunction isWithinCurveOrder(num) {\n return _0n < num && num < CURVE.n;\n}\nfunction isValidFieldElement(num) {\n return _0n < num && num < CURVE.P;\n}\nfunction kmdToSig(kBytes, m, d) {\n const k = bytesToNumber(kBytes);\n if (!isWithinCurveOrder(k))\n return;\n const { n } = CURVE;\n const q = Point.BASE.multiply(k);\n const r = mod(q.x, n);\n if (r === _0n)\n return;\n const s = mod(invert(k, n) * mod(m + d * r, n), n);\n if (s === _0n)\n return;\n const sig = new Signature(r, s);\n const recovery = (q.x === sig.r ? 0 : 2) | Number(q.y & _1n);\n return { sig, recovery };\n}\nfunction normalizePrivateKey(key) {\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else if (typeof key === 'number' && Number.isSafeInteger(key) && key > 0) {\n num = BigInt(key);\n }\n else if (typeof key === 'string') {\n if (key.length !== 64)\n throw new Error('Expected 32 bytes of private key');\n num = hexToNumber(key);\n }\n else if (isUint8a(key)) {\n if (key.length !== 32)\n throw new Error('Expected 32 bytes of private key');\n num = bytesToNumber(key);\n }\n else {\n throw new TypeError('Expected valid private key');\n }\n if (!isWithinCurveOrder(num))\n throw new Error('Expected private key: 0 < key < n');\n return num;\n}\nfunction normalizePublicKey(publicKey) {\n if (publicKey instanceof Point) {\n publicKey.assertValidity();\n return publicKey;\n }\n else {\n return Point.fromHex(publicKey);\n }\n}\nfunction normalizeSignature(signature) {\n if (signature instanceof Signature) {\n signature.assertValidity();\n return signature;\n }\n try {\n return Signature.fromDER(signature);\n }\n catch (error) {\n return Signature.fromCompact(signature);\n }\n}\nexport function getPublicKey(privateKey, isCompressed = false) {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n}\nexport function recoverPublicKey(msgHash, signature, recovery, isCompressed = false) {\n return Point.fromSignature(msgHash, signature, recovery).toRawBytes(isCompressed);\n}\nfunction isPub(item) {\n const arr = isUint8a(item);\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === 33 || len === 65;\n if (str)\n return len === 66 || len === 130;\n if (item instanceof Point)\n return true;\n return false;\n}\nexport function getSharedSecret(privateA, publicB, isCompressed = false) {\n if (isPub(privateA))\n throw new TypeError('getSharedSecret: first arg must be private key');\n if (!isPub(publicB))\n throw new TypeError('getSharedSecret: second arg must be public key');\n const b = normalizePublicKey(publicB);\n b.assertValidity();\n return b.multiply(normalizePrivateKey(privateA)).toRawBytes(isCompressed);\n}\nfunction bits2int(bytes) {\n const slice = bytes.length > 32 ? bytes.slice(0, 32) : bytes;\n return bytesToNumber(slice);\n}\nfunction bits2octets(bytes) {\n const z1 = bits2int(bytes);\n const z2 = mod(z1, CURVE.n);\n return int2octets(z2 < _0n ? z1 : z2);\n}\nfunction int2octets(num) {\n if (typeof num !== 'bigint')\n throw new Error('Expected bigint');\n const hex = numTo32bStr(num);\n return hexToBytes(hex);\n}\nfunction initSigArgs(msgHash, privateKey, extraEntropy) {\n if (msgHash == null)\n throw new Error(`sign: expected valid message hash, not \"${msgHash}\"`);\n const h1 = ensureBytes(msgHash);\n const d = normalizePrivateKey(privateKey);\n const seedArgs = [int2octets(d), bits2octets(h1)];\n if (extraEntropy != null) {\n if (extraEntropy === true)\n extraEntropy = utils.randomBytes(32);\n const e = ensureBytes(extraEntropy);\n if (e.length !== 32)\n throw new Error('sign: Expected 32 bytes of extra data');\n seedArgs.push(e);\n }\n const seed = concatBytes(...seedArgs);\n const m = bits2int(h1);\n return { seed, m, d };\n}\nfunction finalizeSig(recSig, opts) {\n let { sig, recovery } = recSig;\n const { canonical, der, recovered } = Object.assign({ canonical: true, der: true }, opts);\n if (canonical && sig.hasHighS()) {\n sig = sig.normalizeS();\n recovery ^= 1;\n }\n const hashed = der ? sig.toDERRawBytes() : sig.toCompactRawBytes();\n return recovered ? [hashed, recovery] : hashed;\n}\nasync function sign(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n await drbg.reseed(seed);\n while (!(sig = kmdToSig(await drbg.generate(), m, d)))\n await drbg.reseed();\n return finalizeSig(sig, opts);\n}\nfunction signSync(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n drbg.reseedSync(seed);\n while (!(sig = kmdToSig(drbg.generateSync(), m, d)))\n drbg.reseedSync();\n return finalizeSig(sig, opts);\n}\nexport { sign, signSync };\nconst vopts = { strict: true };\nexport function verify(signature, msgHash, publicKey, opts = vopts) {\n let sig;\n try {\n sig = normalizeSignature(signature);\n msgHash = ensureBytes(msgHash);\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n if (opts.strict && sig.hasHighS())\n return false;\n const h = truncateHash(msgHash);\n if (h === _0n)\n return false;\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const { n } = CURVE;\n const sinv = invert(s, n);\n const u1 = mod(h * sinv, n);\n const u2 = mod(r * sinv, n);\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2);\n if (!R)\n return false;\n const v = mod(R.x, n);\n return v === r;\n}\nasync function taggedHash(tag, ...messages) {\n const tagB = new Uint8Array(tag.split('').map((c) => c.charCodeAt(0)));\n const tagH = await utils.sha256(tagB);\n const h = await utils.sha256(concatBytes(tagH, tagH, ...messages));\n return bytesToNumber(h);\n}\nasync function createChallenge(x, P, message) {\n const rx = numTo32b(x);\n const t = await taggedHash('BIP0340/challenge', rx, P.toRawX(), message);\n return mod(t, CURVE.n);\n}\nfunction hasEvenY(point) {\n return (point.y & _1n) === _0n;\n}\nclass SchnorrSignature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n if (bytes.length !== 64)\n throw new TypeError(`SchnorrSignature.fromHex: expected 64 bytes, not ${bytes.length}`);\n const r = bytesToNumber(bytes.subarray(0, 32));\n const s = bytesToNumber(bytes.subarray(32, 64));\n return new SchnorrSignature(r, s);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isValidFieldElement(r) || !isWithinCurveOrder(s))\n throw new Error('Invalid signature');\n }\n toHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n toRawBytes() {\n return hexToBytes(this.toHex());\n }\n}\nfunction schnorrGetPublicKey(privateKey) {\n return Point.fromPrivateKey(privateKey).toRawX();\n}\nasync function schnorrSign(message, privateKey, auxRand = utils.randomBytes()) {\n if (message == null)\n throw new TypeError(`sign: Expected valid message, not \"${message}\"`);\n const { n } = CURVE;\n const m = ensureBytes(message);\n const d0 = normalizePrivateKey(privateKey);\n const rand = ensureBytes(auxRand);\n if (rand.length !== 32)\n throw new TypeError('sign: Expected 32 bytes of aux randomness');\n const P = Point.fromPrivateKey(d0);\n const d = hasEvenY(P) ? d0 : n - d0;\n const t0h = await taggedHash('BIP0340/aux', rand);\n const t = d ^ t0h;\n const k0h = await taggedHash('BIP0340/nonce', numTo32b(t), P.toRawX(), m);\n const k0 = mod(k0h, n);\n if (k0 === _0n)\n throw new Error('sign: Creation of signature failed. k is zero');\n const R = Point.fromPrivateKey(k0);\n const k = hasEvenY(R) ? k0 : n - k0;\n const e = await createChallenge(R.x, P, m);\n const sig = new SchnorrSignature(R.x, mod(k + e * d, n)).toRawBytes();\n const isValid = await schnorrVerify(sig, m, P.toRawX());\n if (!isValid)\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\nasync function schnorrVerify(signature, message, publicKey) {\n const raw = signature instanceof SchnorrSignature;\n let sig;\n try {\n sig = raw ? signature : SchnorrSignature.fromHex(signature);\n if (raw)\n sig.assertValidity();\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n const m = ensureBytes(message);\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const e = await createChallenge(r, P, m);\n const R = Point.BASE.multiplyAndAddUnsafe(P, normalizePrivateKey(s), mod(-e, CURVE.n));\n if (!R || !hasEvenY(R) || R.x !== r)\n return false;\n return true;\n}\nexport const schnorr = {\n Signature: SchnorrSignature,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n};\nPoint.BASE._setWindowSize(8);\nconst crypto = {\n node: nodeCrypto,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nexport const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normalizePrivateKey(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n hashToPrivateKey: (hash) => {\n hash = ensureBytes(hash);\n if (hash.length < 40 || hash.length > 1024)\n throw new Error('Expected 40-1024 bytes of private key as per FIPS 186');\n const num = mod(bytesToNumber(hash), CURVE.n);\n if (num === _0n || num === _1n)\n throw new Error('Invalid private key');\n return numTo32b(num);\n },\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return Uint8Array.from(randomBytes(bytesLength));\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => {\n return utils.hashToPrivateKey(utils.randomBytes(40));\n },\n bytesToHex,\n mod,\n sha256: async (message) => {\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-256', message.buffer);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHash } = crypto.node;\n return Uint8Array.from(createHash('sha256').update(message).digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha256 function\");\n }\n },\n hmacSha256: async (key, ...messages) => {\n if (crypto.web) {\n const ckey = await crypto.web.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n const message = concatBytes(...messages);\n const buffer = await crypto.web.subtle.sign('HMAC', ckey, message);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHmac } = crypto.node;\n const hash = createHmac('sha256', key);\n messages.forEach((m) => hash.update(m));\n return Uint8Array.from(hash.digest());\n }\n else {\n throw new Error(\"The environment doesn't have hmac-sha256 function\");\n }\n },\n sha256Sync: undefined,\n hmacSha256Sync: undefined,\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point === Point.BASE ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_3n);\n return cached;\n },\n};\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 _SigningKey_privateKey;\nimport * as secp256k1 from \"@noble/secp256k1\";\nimport { arrayify, concat, dataLength, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac } from \"@ethersproject/crypto\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"./signature.js\";\nimport { logger } from \"./logger.js\";\n// Make noble-secp256k1 sync\nsecp256k1.utils.hmacSha256Sync = function (key, ...messages) {\n return arrayify(computeHmac(\"sha256\", key, concat(messages)));\n};\nexport class SigningKey {\n constructor(privateKey) {\n _SigningKey_privateKey.set(this, void 0);\n logger.assertArgument((dataLength(privateKey) === 32), \"invalid private key length\", \"privateKey\", \"[REDACTED]\");\n __classPrivateFieldSet(this, _SigningKey_privateKey, hexlify(privateKey), \"f\");\n }\n get privateKey() { return __classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"); }\n get publicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")); }\n get compressedPublicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"), true); }\n sign(digest) {\n logger.assertArgument((dataLength(digest) === 32), \"invalid digest length\", \"digest\", digest);\n const [sigDer, recid] = secp256k1.signSync(arrayify(digest), arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), {\n recovered: true,\n canonical: true\n });\n const sig = secp256k1.Signature.fromHex(sigDer);\n return Signature.from({\n r: toHex(\"0x\" + sig.r.toString(16), 32),\n s: toHex(\"0x\" + sig.s.toString(16), 32),\n v: (recid ? 0x1c : 0x1b)\n }).freeze();\n }\n computeShardSecret(other) {\n const pubKey = SigningKey.computePublicKey(other);\n return hexlify(secp256k1.getSharedSecret(arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), pubKey));\n }\n static computePublicKey(key, compressed) {\n let bytes = logger.getBytes(key, \"key\");\n if (bytes.length === 32) {\n const pubKey = secp256k1.getPublicKey(bytes, !!compressed);\n return hexlify(pubKey);\n }\n if (bytes.length === 64) {\n const pub = new Uint8Array(65);\n pub[0] = 0x04;\n pub.set(bytes, 1);\n bytes = pub;\n }\n const point = secp256k1.Point.fromHex(bytes);\n return hexlify(point.toRawBytes(compressed));\n }\n static recoverPublicKey(digest, signature) {\n const sig = Signature.from(signature);\n const der = secp256k1.Signature.fromCompact(arrayify(concat([sig.r, sig.s]))).toDERRawBytes();\n const pubKey = secp256k1.recoverPublicKey(arrayify(digest), der, sig.yParity);\n if (pubKey != null) {\n return hexlify(pubKey);\n }\n return logger.throwArgumentError(\"invalid signautre for digest\", \"signature\", signature);\n }\n static _addPoints(p0, p1, compressed) {\n const pub0 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p0).substring(2));\n const pub1 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p1).substring(2));\n return \"0x\" + pub0.add(pub1).toHex(!!compressed);\n }\n}\n_SigningKey_privateKey = new WeakMap();\n/*\nconst key = new SigningKey(\"0x1234567890123456789012345678901234567890123456789012345678901234\");\nconsole.log(key);\nconsole.log(key.sign(\"0x1234567890123456789012345678901234567890123456789012345678901234\"));\n{\n const privKey = \"0x1234567812345678123456781234567812345678123456781234567812345678\";\n const signingKey = new SigningKey(privKey);\n console.log(\"0\", signingKey, signingKey.publicKey, signingKey.publicKeyCompressed);\n\n let pubKey = SigningKey.computePublicKey(privKey);\n let pubKeyComp = SigningKey.computePublicKey(privKey, true);\n let pubKeyRaw = \"0x\" + SigningKey.computePublicKey(privKey).substring(4);\n console.log(\"A\", pubKey, pubKeyComp);\n\n let a = SigningKey.computePublicKey(pubKey);\n let b = SigningKey.computePublicKey(pubKey, true);\n console.log(\"B\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyComp);\n b = SigningKey.computePublicKey(pubKeyComp, true);\n console.log(\"C\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyRaw);\n b = SigningKey.computePublicKey(pubKeyRaw, true);\n console.log(\"D\", a, b);\n\n const digest = \"0x1122334411223344112233441122334411223344112233441122334411223344\";\n const sig = signingKey.sign(digest);\n console.log(\"SS\", sig, sig.r, sig.s, sig.yParity);\n\n console.log(\"R\", SigningKey.recoverPublicKey(digest, sig));\n}\n*/\n//# sourceMappingURL=signing-key.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { dataLength } from \"@ethersproject/bytes\";\nfunction accessSetify(addr, storageKeys) {\n return {\n address: getAddress(addr),\n storageKeys: (storageKeys || []).map((storageKey, index) => {\n if (dataLength(storageKey) !== 32) {\n //logger.throwArgumentError(\"invalid access list storageKey\", `accessList[${ addr }>\n throw new Error(\"\");\n }\n return storageKey.toLowerCase();\n })\n };\n}\nexport function accessListify(value) {\n if (Array.isArray(value)) {\n return value.map((set, index) => {\n if (Array.isArray(set)) {\n if (set.length > 2) {\n //logger.throwArgumentError(\"access list expected to be [ address, storageKeys[>\n throw new Error(\"\");\n }\n return accessSetify(set[0], set[1]);\n }\n return accessSetify(set.address, set.storageKeys);\n });\n }\n const result = Object.keys(value).map((addr) => {\n const storageKeys = value[addr].reduce((accum, storageKey) => {\n accum[storageKey] = true;\n return accum;\n }, {});\n return accessSetify(addr, Object.keys(storageKeys).sort());\n });\n result.sort((a, b) => (a.address.localeCompare(b.address)));\n return result;\n}\n//# sourceMappingURL=accesslist.js.map","export const version = \"@ethersproject/transactions@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _Transaction_props;\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toArray } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"./accesslist.js\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nfunction formatNumber(_value, name) {\n const value = logger.getBigInt(_value, \"value\");\n const result = toArray(value);\n if (result.length > 32) {\n logger.throwArgumentError(`value too large`, `tx.${name}`, value);\n }\n return result;\n}\nfunction formatAccessList(value) {\n return accessListify(value).map((set) => [set.address, set.storageKeys]);\n}\nfunction _parseLegacy(data) {\n return {};\n}\nfunction _serializeLegacy(tx, sig) {\n const fields = [\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n ];\n let chainId = BN_0;\n if (tx.chainId != null) {\n // A chainId was provided; if non-zero we'll use EIP-155\n chainId = logger.getBigInt(tx.chainId, \"tx.chainId\");\n // We have a chainId in the tx and an EIP-155 v in the signature,\n // make sure they agree with each other\n if (sig && sig.networkV != null && sig.legacyChainId !== chainId) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n }\n else if (sig) {\n // No chainId provided, but the signature is signing with EIP-155; derive chainId\n const legacy = sig.legacyChainId;\n if (legacy != null) {\n chainId = legacy;\n }\n }\n // Requesting an unsigned transaction\n if (!sig) {\n // We have an EIP-155 transaction (chainId was specified and non-zero)\n if (chainId !== BN_0) {\n fields.push(toArray(chainId));\n fields.push(\"0x\");\n fields.push(\"0x\");\n }\n return encodeRlp(fields);\n }\n // We pushed a chainId and null r, s on for hashing only; remove those\n let v = BigInt(27 + sig.yParity);\n if (chainId !== BN_0) {\n v = Signature.getChainIdV(chainId, sig.v);\n }\n else if (BigInt(sig.v) !== v) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n fields.push(toArray(v));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n return encodeRlp(fields);\n}\nfunction _parseEip1559(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip1559(tx, sig) {\n // If there is an explicit gasPrice, make sure it matches the\n // EIP-1559 fees; otherwise they may not understand what they\n // think they are setting in terms of fee.\n //if (tx.gasPrice != null) {\n // if (tx.gasPrice !== (tx.maxFeePerGas || BN_0)) {\n // logger.throwArgumentError(\"mismatch EIP-1559 gasPrice != maxFeePerGas\", \"tx\", tx);\n // }\n //}\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n formatNumber(tx.maxFeePerGas || 0, \"maxFeePerGas\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"yParity\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x02\", encodeRlp(fields)]);\n}\nfunction _parseEip2930(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip2930(tx, sig) {\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"recoveryParam\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x01\", encodeRlp(fields)]);\n}\nexport class Transaction {\n constructor() {\n _Transaction_props.set(this, void 0);\n __classPrivateFieldSet(this, _Transaction_props, {\n type: null,\n to: null,\n nonce: 0,\n gasLimit: BigInt(0),\n gasPrice: null,\n maxPriorityFeePerGas: null,\n maxFeePerGas: null,\n data: \"0x\",\n value: BigInt(0),\n chainId: BigInt(0),\n sig: null,\n accessList: null\n }, \"f\");\n }\n // A type of null indicates the type will be populated automatically\n get type() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\"); }\n get typeName() {\n switch (this.type) {\n case 0: return \"legacy\";\n case 1: return \"eip-2930\";\n case 2: return \"eip-1559\";\n }\n return null;\n }\n set type(value) {\n switch (value) {\n case null:\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", null);\n break;\n case 0:\n case \"legacy\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 0);\n break;\n case 1:\n case \"berlin\":\n case \"eip-2930\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 1);\n break;\n case 2:\n case \"london\":\n case \"eip-1559\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 2);\n break;\n default:\n throw new Error(`unsupported transaction type`);\n }\n }\n /*\n detectType(): number {\n const hasFee = (this.maxFeePerGas != null) || (this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n const hasLegacy = (this.gasPrice != null);\n\n if (hasLegacy) {\n if (hasFee) {\n throw new Error(\"cannot mix legacy and london properties\");\n }\n if (hasAccessList) { return 1; }\n return 0;\n }\n\n return 2;\n }\n */\n get to() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\"); }\n set to(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\", (value == null) ? null : getAddress(value));\n }\n get nonce() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\"); }\n set nonce(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\", logger.getNumber(value, \"value\")); }\n get gasLimit() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\"); }\n set gasLimit(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\", logger.getBigInt(value)); }\n get gasPrice() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\"); }\n set gasPrice(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxPriorityFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\"); }\n set maxPriorityFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\"); }\n set maxFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get data() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\"); }\n set data(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\", hexlify(value)); }\n get value() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\"); }\n set value(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\", logger.getBigInt(value));\n }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\", logger.getBigInt(value)); }\n get signature() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\") || null; }\n set signature(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\", (value == null) ? null : Signature.from(value));\n }\n get accessList() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\") || null; }\n set accessList(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\", (value == null) ? null : accessListify(value));\n }\n get hash() {\n if (this.signature == null) {\n throw new Error(\"cannot hash unsigned transaction; maybe you meant .unsignedHash\");\n }\n return keccak256(this.serialized);\n }\n get unsignedHash() {\n return keccak256(this.unsignedSerialized);\n }\n get from() {\n if (this.signature == null) {\n return null;\n }\n // use ecomputeAddress(this.fromPublicKey);\n return \"\";\n }\n get fromPublicKey() {\n if (this.signature == null) {\n return null;\n }\n // use ecrecover\n return \"\";\n }\n isSigned() {\n return this.signature != null;\n }\n get serialized() {\n if (this.signature == null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this, this.signature);\n case 1:\n return _serializeEip2930(this, this.signature);\n case 2:\n return _serializeEip1559(this, this.signature);\n }\n throw new Error(\"unsupported type\");\n }\n get unsignedSerialized() {\n if (this.signature != null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this);\n case 1:\n return _serializeEip2930(this);\n case 2:\n return _serializeEip1559(this);\n }\n throw new Error(\"unsupported type\");\n }\n // Validates properties and lists possible types this transaction adheres to\n inferTypes() {\n // Checks that there are no conflicting properties set\n const hasGasPrice = this.gasPrice != null;\n const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n //if (hasGasPrice && hasFee) {\n // throw new Error(\"transaction cannot have gasPrice and maxFeePerGas\");\n //}\n if (!!this.maxFeePerGas && !!this.maxPriorityFeePerGas) {\n if (this.maxFeePerGas < this.maxPriorityFeePerGas) {\n throw new Error(\"priorityFee cannot be more than maxFee\");\n }\n }\n //if (this.type === 2 && hasGasPrice) {\n // throw new Error(\"eip-1559 transaction cannot have gasPrice\");\n //}\n if ((this.type === 0 || this.type === 1) && hasFee) {\n throw new Error(\"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas\");\n }\n if (this.type === 0 && hasAccessList) {\n throw new Error(\"legacy transaction cannot have accessList\");\n }\n const types = [];\n // Explicit type\n if (this.type != null) {\n types.push(this.type);\n }\n else {\n if (hasFee) {\n types.push(2);\n }\n else if (hasGasPrice) {\n types.push(1);\n if (!hasAccessList) {\n types.push(0);\n }\n }\n else if (hasAccessList) {\n types.push(1);\n types.push(2);\n }\n else {\n types.push(0);\n types.push(1);\n types.push(2);\n }\n }\n types.sort();\n return types;\n }\n clone() {\n return Transaction.from(this);\n }\n freeze() {\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").sig = (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig.clone().freeze());\n }\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").accessList = Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList.map((set) => {\n Object.freeze(set.storageKeys);\n return Object.freeze(set);\n }));\n }\n Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n }\n static from(tx) {\n if (typeof (tx) === \"string\") {\n const payload = arrayify(tx);\n if (payload[0] >= 0x7f) { // @TODO: > vs >= ??\n return Transaction.from(_parseLegacy(payload));\n }\n switch (payload[0]) {\n case 1: return Transaction.from(_parseEip2930(payload.slice(1)));\n case 2: return Transaction.from(_parseEip1559(payload.slice(1)));\n }\n throw new Error(\"unsupported transaction type\");\n }\n const result = new Transaction();\n if (tx.type != null) {\n result.type = tx.type;\n }\n if (tx.to != null) {\n result.to = tx.to;\n }\n if (tx.nonce != null) {\n result.nonce = tx.nonce;\n }\n if (tx.gasLimit != null) {\n result.gasLimit = tx.gasLimit;\n }\n if (tx.gasPrice != null) {\n result.gasPrice = tx.gasPrice;\n }\n if (tx.maxPriorityFeePerGas != null) {\n result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas;\n }\n if (tx.maxFeePerGas != null) {\n result.maxFeePerGas = tx.maxFeePerGas;\n }\n if (tx.data != null) {\n result.data = tx.data;\n }\n if (tx.value != null) {\n result.value = tx.value;\n }\n if (tx.chainId != null) {\n result.chainId = tx.chainId;\n }\n if (tx.signature != null) {\n result.signature = Signature.from(tx.signature);\n }\n if (tx.accessList != null) {\n result.accessList = tx.accessList;\n }\n // Should these be checked?? Should from be allowed if there is no signature?\n // from?: null | A;\n // hash?: null | string;\n return result;\n }\n}\n_Transaction_props = new WeakMap();\n//# sourceMappingURL=transaction.js.map","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 _Block_transactions, _TransactionReceipt_logs;\n//import { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\n// -----------------------\nfunction getValue(value) {\n if (value == null) {\n return null;\n }\n return value;\n}\nfunction toJson(value) {\n if (value == null) {\n return null;\n }\n return value.toString();\n}\n// @TODO? implements Required\nexport class FeeData {\n constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) {\n defineProperties(this, {\n gasPrice: getValue(gasPrice),\n maxFeePerGas: getValue(maxFeePerGas),\n maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n });\n }\n toJSON() {\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this;\n return {\n _type: \"FeeData\",\n gasPrice: toJson(gasPrice),\n maxFeePerGas: toJson(maxFeePerGas),\n maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n };\n }\n}\n;\nexport function copyRequest(req) {\n const result = {};\n // These could be addresses, ENS names or Addressables\n if (req.to) {\n result.to = req.to;\n }\n if (req.from) {\n result.from = req.from;\n }\n if (req.data) {\n result.data = hexlify(req.data);\n }\n const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value\".split(/,/);\n for (const key in bigIntKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getBigInt(req[key], `request.${key}`);\n }\n const numberKeys = \"type,nonce\".split(/,/);\n for (const key in numberKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getNumber(req[key], `request.${key}`);\n }\n if (req.accessList) {\n result.accessList = accessListify(req.accessList);\n }\n if (\"blockTag\" in req) {\n result.blockTag = req.blockTag;\n }\n if (\"enableCcipRead\" in req) {\n result.enableCcipReadEnabled = !!req.enableCcipRead;\n }\n if (\"customData\" in req) {\n result.customData = req.customData;\n }\n return result;\n}\n;\nexport class Block {\n constructor(block, provider) {\n _Block_transactions.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _Block_transactions, Object.freeze(block.transactions.map((tx) => {\n if (typeof (tx) !== \"string\" && tx.provider !== provider) {\n throw new Error(\"provider mismatch\");\n }\n return tx;\n })), \"f\");\n ;\n defineProperties(this, {\n provider,\n hash: getValue(block.hash),\n number: block.number,\n timestamp: block.timestamp,\n parentHash: block.parentHash,\n nonce: block.nonce,\n difficulty: block.difficulty,\n gasLimit: block.gasLimit,\n gasUsed: block.gasUsed,\n miner: block.miner,\n extraData: block.extraData,\n baseFeePerGas: getValue(block.baseFeePerGas)\n });\n }\n get transactions() { return __classPrivateFieldGet(this, _Block_transactions, \"f\"); }\n //connect(provider: Provider): Block {\n // return new Block(this, provider);\n //}\n toJSON() {\n const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, nonce, number, parentHash, timestamp, transactions } = this;\n return {\n _type: \"Block\",\n baseFeePerGas: toJson(baseFeePerGas),\n difficulty: toJson(difficulty),\n extraData,\n gasLimit: toJson(gasLimit),\n gasUsed: toJson(gasUsed),\n hash, miner, nonce, number, parentHash, timestamp,\n transactions,\n };\n }\n [(_Block_transactions = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return {\n value: this.transactions[index++], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get length() { return this.transactions.length; }\n get date() {\n if (this.timestamp == null) {\n return null;\n }\n return new Date(this.timestamp * 1000);\n }\n async getTransaction(index) {\n const tx = this.transactions[index];\n if (tx == null) {\n throw new Error(\"no such tx\");\n }\n if (typeof (tx) === \"string\") {\n return (await this.provider.getTransaction(tx));\n }\n else {\n return tx;\n }\n }\n isMined() { return !!this.hash; }\n isLondon() { return !!this.baseFeePerGas; }\n orphanedEvent() {\n if (!this.isMined()) {\n throw new Error(\"\");\n }\n return createOrphanedBlockFilter(this);\n }\n}\nexport class Log {\n constructor(log, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n const topics = Object.freeze(log.topics.slice());\n defineProperties(this, {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n removed: log.removed,\n address: log.address,\n data: log.data,\n topics,\n index: log.index,\n transactionIndex: log.transactionIndex,\n });\n }\n //connect(provider: Provider): Log {\n // return new Log(this, provider);\n //}\n toJSON() {\n const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this;\n return {\n _type: \"log\",\n address, blockHash, blockNumber, data, index,\n removed, topics, transactionHash, transactionIndex\n };\n }\n async getBlock() {\n return (await this.provider.getBlock(this.blockHash));\n }\n async getTransaction() {\n return (await this.provider.getTransaction(this.transactionHash));\n }\n async getTransactionReceipt() {\n return (await this.provider.getTransactionReceipt(this.transactionHash));\n }\n removedEvent() {\n return createRemovedLogFilter(this);\n }\n}\nexport class TransactionReceipt {\n constructor(tx, provider) {\n _TransactionReceipt_logs.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _TransactionReceipt_logs, Object.freeze(tx.logs.map((log) => {\n if (provider !== log.provider) {\n //return log.connect(provider);\n throw new Error(\"provider mismatch\");\n }\n return log;\n })), \"f\");\n defineProperties(this, {\n provider,\n to: tx.to,\n from: tx.from,\n contractAddress: tx.contractAddress,\n hash: tx.hash,\n index: tx.index,\n blockHash: tx.blockHash,\n blockNumber: tx.blockNumber,\n logsBloom: tx.logsBloom,\n gasUsed: tx.gasUsed,\n cumulativeGasUsed: tx.cumulativeGasUsed,\n gasPrice: (tx.effectiveGasPrice || tx.gasPrice),\n byzantium: tx.byzantium,\n status: tx.status,\n root: tx.root\n });\n }\n get logs() { return __classPrivateFieldGet(this, _TransactionReceipt_logs, \"f\"); }\n //connect(provider: Provider): TransactionReceipt {\n // return new TransactionReceipt(this, provider);\n //}\n toJSON() {\n const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, byzantium, status, root } = this;\n return {\n _type: \"TransactionReceipt\",\n blockHash, blockNumber, byzantium, contractAddress,\n cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n from,\n gasPrice: toJson(this.gasPrice),\n gasUsed: toJson(this.gasUsed),\n hash, index, logs, logsBloom, root, status, to\n };\n }\n get length() { return this.logs.length; }\n [(_TransactionReceipt_logs = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return { value: this.logs[index++], done: false };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get fee() {\n return this.gasUsed * this.gasPrice;\n }\n async getBlock() {\n const block = await this.provider.getBlock(this.blockHash);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n const tx = await this.provider.getTransaction(this.hash);\n if (tx == null) {\n throw new Error(\"TODO\");\n }\n return tx;\n }\n async confirmations() {\n return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n }\n removedEvent() {\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transction cannot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"reorderedEvent(other)\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\n;\nexport class TransactionResponse {\n constructor(tx, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null;\n this.blockHash = (tx.blockHash != null) ? tx.blockHash : null;\n this.hash = tx.hash;\n this.index = tx.index;\n this.type = tx.type;\n this.from = tx.from;\n this.to = tx.to || null;\n this.gasLimit = tx.gasLimit;\n this.nonce = tx.nonce;\n this.data = tx.data;\n this.value = tx.value;\n this.gasPrice = tx.gasPrice;\n this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null;\n this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null;\n this.chainId = tx.chainId;\n this.signature = tx.signature;\n this.accessList = (tx.accessList != null) ? tx.accessList : null;\n }\n //connect(provider: Provider): TransactionResponse {\n // return new TransactionResponse(this, provider);\n //}\n toJSON() {\n const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList } = this;\n return {\n _type: \"TransactionReceipt\",\n accessList, blockNumber, blockHash,\n chainId: toJson(this.chainId),\n data, from,\n gasLimit: toJson(this.gasLimit),\n gasPrice: toJson(this.gasPrice),\n hash,\n maxFeePerGas: toJson(this.maxFeePerGas),\n maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n nonce, signature, to, index, type,\n value: toJson(this.value),\n };\n }\n async getBlock() {\n let blockNumber = this.blockNumber;\n if (blockNumber == null) {\n const tx = await this.getTransaction();\n if (tx) {\n blockNumber = tx.blockNumber;\n }\n }\n if (blockNumber == null) {\n return null;\n }\n const block = this.provider.getBlock(blockNumber);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n return this.provider.getTransaction(this.hash);\n }\n async wait(confirms) {\n return this.provider.waitForTransaction(this.hash, confirms);\n }\n isMined() {\n return (this.blockHash != null);\n }\n isLegacy() {\n return (this.type === 0);\n }\n isBerlin() {\n return (this.type === 1);\n }\n isLondon() {\n return (this.type === 2);\n }\n removedEvent() {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\nfunction createOrphanedBlockFilter(block) {\n return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\nfunction createReorderedTransactionFilter(tx, other) {\n return { orphan: \"reorder-transaction\", tx, other };\n}\nfunction createRemovedTransactionFilter(tx) {\n return { orphan: \"drop-transaction\", tx };\n}\nfunction createRemovedLogFilter(log) {\n return { orphan: \"drop-log\", log: {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n address: log.address,\n data: log.data,\n topics: Object.freeze(log.topics.slice()),\n index: log.index\n } };\n}\nfunction fail() {\n throw new Error(\"this provider should not be used\");\n}\nclass DummyProvider {\n async getNetwork() { return fail(); }\n async getFeeData() { return fail(); }\n async estimateGas(tx) { return fail(); }\n async call(tx) { return fail(); }\n async resolveName(name) { return fail(); }\n // State\n async getBlockNumber() { return fail(); }\n // Account\n async getBalanceOf(address, blockTag) {\n return fail();\n }\n async getTransactionCountOf(address, blockTag) {\n return fail();\n }\n async getCode(address, blockTag) {\n return fail();\n }\n async getStorageAt(address, position, blockTag) {\n return fail();\n }\n // Write\n async broadcastTransaction(signedTx) { return fail(); }\n // Queries\n async getBlock(blockHashOrBlockTag) {\n return fail();\n }\n async getBlockWithTransactions(blockHashOrBlockTag) {\n return fail();\n }\n async getTransaction(hash) {\n return fail();\n }\n async getTransactionReceipt(hash) {\n return fail();\n }\n // Bloom-filter Queries\n async getLogs(filter) {\n return fail();\n }\n // ENS\n async lookupAddress(address) {\n return fail();\n }\n async waitForTransaction(hash, confirms, timeout) {\n return fail();\n }\n async waitForBlock(blockTag) {\n return fail();\n }\n // EventEmitterable\n async on(event, listener) { return fail(); }\n async once(event, listener) { return fail(); }\n async emit(event, ...args) { return fail(); }\n async listenerCount(event) { return fail(); }\n async listeners(event) { return fail(); }\n async off(event, listener) { return fail(); }\n async removeAllListeners(event) { return fail(); }\n async addListener(event, listener) { return fail(); }\n async removeListener(event, listener) { return fail(); }\n}\n// A singleton provider instance that can be used as a placeholder. This\n// allows API that have a Provider added later to not require a null check.\nexport const dummyProvider = new DummyProvider();\n//# sourceMappingURL=provider.js.map","// Belongs to Networks; requires abstract-provider\n// provider requires abstract-provider and network\nvar __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 _Formatter_format, _Formatter_baseBlock;\n/**\n * Formatter\n *\n * This is responsibile for converting much of the various\n * loose network values into a concrete ethers-ready value.\n *\n * For example, converting addresses to checksum addresses,\n * validating a hash is 32 bytes, and so on.\n *\n * By sub-classing this class and providing it in a custom\n * Network object this allows exotic (non-Ethereum) networks\n * to be fairly simple to adapt to ethers.\n */\nimport { getAddress, getCreateAddress } from \"@ethersproject/address\";\nimport { dataLength, dataSlice, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { Block, Log, TransactionReceipt, TransactionResponse } from \"./provider.js\";\nimport { logger } from \"./logger.js\";\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n//export type AccessListSet = { address: string, storageKeys: Array };\n//export type AccessList = Array;\n//export type AccessListish = AccessList |\n// Array<[ string, Array ]> |\n// Record>;\nfunction stringify(value) {\n if (typeof (value) !== \"string\") {\n throw new Error(\"invalid string\");\n }\n return value;\n}\nexport class Formatter {\n constructor() {\n _Formatter_format.set(this, void 0);\n _Formatter_baseBlock.set(this, void 0);\n const address = this.address.bind(this);\n const bigNumber = this.bigNumber.bind(this);\n const blockTag = this.blockTag.bind(this);\n const data = this.data.bind(this);\n const hash = this.hash.bind(this);\n const number = this.number.bind(this);\n const uint256 = this.uint256.bind(this);\n const topics = this.arrayOf(hash);\n __classPrivateFieldSet(this, _Formatter_format, {\n address,\n bigNumber,\n blockTag,\n data,\n hash,\n number,\n uint256,\n topics,\n filter: this.object({\n fromBlock: this.allowNull(blockTag, undefined),\n toBlock: this.allowNull(blockTag, undefined),\n blockHash: this.allowNull(hash, undefined),\n address: this.allowNull(address, undefined),\n topics: this.allowNull(topics, undefined)\n }),\n transactionRequest: this.object({\n from: this.allowNull(address),\n type: this.allowNull(number),\n to: this.allowNull(address),\n nonce: this.allowNull(number),\n gasLimit: this.allowNull(uint256),\n gasPrice: this.allowNull(uint256),\n maxFeePerGas: this.allowNull(uint256),\n maxPriorityFeePerGas: this.allowNull(uint256),\n data: this.allowNull(data),\n value: this.allowNull(uint256),\n }),\n transactionResponse: this.object({\n hash: hash,\n index: number,\n type: this.allowNull(number, 0),\n // These can be null for pending blocks\n blockHash: this.allowNull(hash),\n blockNumber: this.allowNull(number),\n // For Legacy transactions, this comes from the v\n chainId: this.allowNull(number),\n from: address,\n to: this.address,\n gasLimit: bigNumber,\n gasPrice: this.allowNull(bigNumber),\n maxFeePerGas: this.allowNull(bigNumber),\n maxPriorityFeePerGas: this.allowNull(bigNumber),\n value: bigNumber,\n data: data,\n nonce: number,\n r: hash,\n s: hash,\n v: number,\n accessList: this.allowNull(this.accessList)\n }, {\n index: [\"transactionIndex\"]\n }),\n }, \"f\");\n __classPrivateFieldSet(this, _Formatter_baseBlock, this.object({\n number: number,\n hash: this.allowNull(hash, null),\n timestamp: number,\n parentHash: hash,\n nonce: this.allowNull(stringify, \"0x0000000000000000\"),\n difficulty: bigNumber,\n gasLimit: bigNumber,\n gasUsed: bigNumber,\n miner: this.allowNull(address, \"0x0000000000000000000000000000000000000000\"),\n extraData: stringify,\n baseFeePerGas: this.allowNull(bigNumber),\n }), \"f\");\n }\n // An address\n address(value) {\n return getAddress(value);\n }\n // An address from a call result; may be zero-padded\n callAddress(value) {\n if (dataLength(value) !== 32 || dataSlice(value, 0, 12) !== \"0x000000000000000000000000\") {\n logger.throwArgumentError(\"invalid call address\", \"value\", value);\n }\n return this.address(dataSlice(value, 12));\n }\n // An address from a transaction (e.g. { from: string, nonce: number })\n contractAddress(value) {\n return getCreateAddress({\n from: this.address(value.from),\n nonce: logger.getNumber(value.nonce, \"value.nonce\")\n });\n }\n // Block Tag\n blockTag(value) {\n if (value == null) {\n return \"latest\";\n }\n switch (value) {\n case \"earliest\":\n return \"0x0\";\n case \"latest\":\n case \"pending\":\n return value;\n }\n if (typeof (value) === \"number\" || (isHexString(value) && dataLength(value) < 32)) {\n return quantity(value);\n }\n return logger.throwArgumentError(\"invalid blockTag\", \"value\", value);\n }\n // Block objects\n block(value, provider) {\n const params = __classPrivateFieldGet(this, _Formatter_baseBlock, \"f\").call(this, value);\n params.transactions = value.transactions.map((t) => this.hash(t));\n return new Block(params, provider);\n }\n blockWithTransactions(value, provider) {\n throw new Error();\n }\n // Transactions\n transactionRequest(value, provider) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionRequest(value);\n }\n transactionResponse(value, provider) {\n value = Object.assign({}, value);\n // @TODO: Use the remap feature\n if (value.data == null && value.input != null) {\n value.data = value.input;\n }\n if (value.gasLimit == null && value.gas) {\n value.gasLimit = value.gas;\n }\n value = __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionResponse(value);\n const sig = Signature.fromTransaction(value.r, value.s, value.v);\n value.signature = sig;\n if (value.chainId == null) {\n value.chainId = sig.legacyChainId;\n }\n return new TransactionResponse(value, provider);\n }\n // Receipts\n log(value, provider) {\n const log = this.object({\n address: this.address,\n blockHash: this.hash,\n blockNumber: this.number,\n data: this.data,\n index: this.number,\n removed: this.boolean,\n topics: this.topics,\n transactionHash: this.hash,\n transactionIndex: this.number,\n }, {\n index: [\"logIndex\"]\n })(value);\n return new Log(log, provider);\n }\n receipt(value, provider) {\n const receipt = this.object({\n blockHash: this.hash,\n blockNumber: this.number,\n contractAddress: this.allowNull(this.address),\n cumulativeGasUsed: this.bigNumber,\n from: this.address,\n gasUsed: this.bigNumber,\n logs: this.arrayOf((v) => (this.log(v, provider))),\n logsBloom: this.data,\n root: this.allowNull(this.data),\n status: this.allowNull(this.number),\n to: this.address,\n gasPrice: this.allowNull(this.bigNumber),\n hash: this.hash,\n index: this.number,\n type: this.allowNull(this.number, 0),\n }, {\n hash: [\"transactionHash\"],\n gasPrice: [\"effectiveGasPrice\"],\n index: [\"transactionIndex\"]\n })(value);\n // RSK incorrectly implemented EIP-658, so we munge things a bit here for it\n if (receipt.root != null) {\n if (receipt.root.length <= 4) {\n // Could be 0x00, 0x0, 0x01 or 0x1\n const value = parseInt(receipt.root);\n if (value === 0 || value === 1) {\n // Make sure if both are specified, they match\n if (receipt.status != null && receipt.status !== value) {\n return logger.throwError(\"alt-root-status/status mismatch\", \"BAD_DATA\", {\n value: { root: receipt.root, status: receipt.status }\n });\n }\n receipt.status = value;\n delete receipt.root;\n }\n else {\n return logger.throwError(\"invalid alt-root-status\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n else if (!isHexString(receipt.root, 32)) {\n // Must be a valid bytes32\n return logger.throwError(\"invalid receipt root hash\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n //receipt.byzantium = (receipt.root == null);\n return new TransactionReceipt(receipt, provider);\n }\n // Fitlers\n topics(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").topics(value);\n }\n filter(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").filter(value);\n }\n filterLog(value) {\n console.log(\"ME\", value);\n return null;\n }\n // Converts a serialized transaction to a TransactionResponse\n transaction(value) {\n throw new Error();\n }\n // Useful utility formatters functions, which if need be use the\n // methods within the formatter to ensure internal compatibility\n // Access List; converts an AccessListish to an AccessList\n accessList(value) {\n return accessListify(value);\n }\n // Converts falsish values to a specific value, otherwise use the formatter. Calls preserve `this`.\n allowFalsish(format, ifFalse) {\n return ((value) => {\n if (!value) {\n return ifFalse;\n }\n return format.call(this, value);\n });\n }\n // Allows null, optionally replacing it with a default value. Calls preserve `this`.\n allowNull(format, ifNull) {\n return ((value) => {\n if (value == null) {\n return ifNull;\n }\n return format.call(this, value);\n });\n }\n // Requires an Array satisfying the formatter. Calls preserves `this`.\n arrayOf(format) {\n return ((array) => {\n if (!Array.isArray(array)) {\n throw new Error(\"not an array\");\n }\n return array.map((i) => format.call(this, i));\n });\n }\n // Requires a value which is a value BigNumber\n bigNumber(value) {\n return logger.getBigInt(value, \"value\");\n }\n uint256(value) {\n const result = this.bigNumber(value);\n if (result < 0 || result > BN_MAX_UINT256) {\n logger.throwArgumentError(\"invalid uint256\", \"value\", value);\n }\n return result;\n }\n // Requires a value which is a value boolean or string equivalent\n boolean(value) {\n switch (value) {\n case true:\n case \"true\":\n return true;\n case false:\n case \"false\":\n return false;\n }\n return logger.throwArgumentError(`invalid boolean; ${JSON.stringify(value)}`, \"value\", value);\n }\n // Requires a value which is a valid hexstring. If dataOrLength is true,\n // the length must be even (i.e. a datahexstring) or if it is a number,\n // specifies teh number of bytes value must represent\n _hexstring(dataOrLength) {\n if (dataOrLength == null) {\n dataOrLength = false;\n }\n return (function (value) {\n if (isHexString(value, dataOrLength)) {\n return value.toLowerCase();\n }\n throw new Error(\"bad hexstring\");\n });\n }\n data(value) {\n if (dataLength(value) == null) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return value;\n }\n // Requires a network-native hash\n hash(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").data(value);\n }\n // Requires a valid number, within the IEEE 754 safe range\n number(value) {\n return logger.getNumber(value);\n }\n // Requires an object which matches a fleet of other formatters\n // Any FormatFunc may return `undefined` to have the value omitted\n // from the result object. Calls preserve `this`.\n object(format, altNames) {\n return ((value) => {\n const result = {};\n for (const key in format) {\n let srcKey = key;\n if (altNames && key in altNames && !(srcKey in value)) {\n for (const altKey of altNames[key]) {\n if (altKey in value) {\n srcKey = altKey;\n break;\n }\n }\n }\n try {\n const nv = format[key].call(this, value[srcKey]);\n if (nv !== undefined) {\n result[key] = nv;\n }\n }\n catch (error) {\n const message = (error instanceof Error) ? error.message : \"not-an-error\";\n logger.throwError(`invalid value for value.${key} (${message})`, \"BAD_DATA\", { value });\n }\n }\n return result;\n });\n }\n // Requires a value which matches a network-native storage slot\n storageSlot(value) {\n return toHex(logger.getBigInt(value), 32);\n }\n}\n_Formatter_format = new WeakMap(), _Formatter_baseBlock = new WeakMap();\n//# sourceMappingURL=formatter.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nconst EnsAddress = \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\";\nexport class NetworkPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n clone() {\n return new NetworkPlugin(this.name);\n }\n validate(network) {\n return this;\n }\n}\nexport class GasCostPlugin extends NetworkPlugin {\n constructor(effectiveBlock = 0, costs) {\n super(`org.ethers.plugins.gas-cost#${(effectiveBlock || 0)}`);\n const props = { effectiveBlock };\n function set(name, nullish) {\n let value = (costs || {})[name];\n if (value == null) {\n value = nullish;\n }\n if (typeof (value) !== \"number\") {\n logger.throwArgumentError(`invalud value for ${name}`, \"costs\", costs);\n }\n props[name] = value;\n }\n set(\"txBase\", 21000);\n set(\"txCreate\", 32000);\n set(\"txDataZero\", 4);\n set(\"txDataNonzero\", 16);\n set(\"txAccessListStorageKey\", 1900);\n set(\"txAccessListAddress\", 2400);\n defineProperties(this, props);\n }\n clone() {\n return new GasCostPlugin(this.effectiveBlock, this);\n }\n}\n// Networks shoudl use this plugin to specify the contract address\n// and network necessary to resolve ENS names.\nexport class EnsPlugin extends NetworkPlugin {\n constructor(address, targetNetwork) {\n super(\"org.ethers.plugins.ens\");\n defineProperties(this, {\n address: (address || EnsAddress),\n targetNetwork: ((targetNetwork == null) ? 1 : targetNetwork)\n });\n }\n clone() {\n return new EnsPlugin(this.address, this.targetNetwork);\n }\n validate(network) {\n network.formatter.address(this.address);\n return this;\n }\n}\nexport class MaxPriorityFeePlugin extends NetworkPlugin {\n constructor(priorityFee) {\n super(\"org.ethers.plugins.max-priority-fee\");\n defineProperties(this, {\n priorityFee: logger.getBigInt(priorityFee)\n });\n }\n async getPriorityFee(provider) {\n return this.priorityFee;\n }\n clone() {\n return new MaxPriorityFeePlugin(this.priorityFee);\n }\n}\n//# sourceMappingURL=plugins-network.js.map","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 _Network_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { Formatter } from \"./formatter.js\";\nimport { logger } from \"./logger.js\";\nimport { EnsPlugin, GasCostPlugin } from \"./plugins-network.js\";\n/* * * *\n// Networks which operation against an L2 can use this plugin to\n// specify how to access L1, for the purpose of resolving ENS,\n// for example.\nexport class LayerOneConnectionPlugin extends NetworkPlugin {\n readonly provider!: Provider;\n// @TODO: Rename to ChainAccess and allow for connecting to any chain\n constructor(provider: Provider) {\n super(\"org.ethers.plugins.layer-one-connection\");\n defineProperties(this, { provider });\n }\n\n clone(): LayerOneConnectionPlugin {\n return new LayerOneConnectionPlugin(this.provider);\n }\n}\n*/\n/* * * *\nexport class PriceOraclePlugin extends NetworkPlugin {\n readonly address!: string;\n\n constructor(address: string) {\n super(\"org.ethers.plugins.price-oracle\");\n defineProperties(this, { address });\n }\n\n clone(): PriceOraclePlugin {\n return new PriceOraclePlugin(this.address);\n }\n}\n*/\n// Networks or clients with a higher need for security (such as clients\n// that may automatically make CCIP requests without user interaction)\n// can use this plugin to anonymize requests or intercept CCIP requests\n// to notify and/or receive authorization from the user\n/* * * *\nexport type FetchDataFunc = (req: Frozen) => Promise;\nexport class CcipPreflightPlugin extends NetworkPlugin {\n readonly fetchData!: FetchDataFunc;\n\n constructor(fetchData: FetchDataFunc) {\n super(\"org.ethers.plugins.ccip-preflight\");\n defineProperties(this, { fetchData });\n }\n\n clone(): CcipPreflightPlugin {\n return new CcipPreflightPlugin(this.fetchData);\n }\n}\n*/\nconst Networks = new Map();\nconst defaultFormatter = new Formatter();\nexport class Network {\n constructor(name, _chainId, formatter) {\n _Network_props.set(this, void 0);\n const chainId = logger.getBigInt(_chainId);\n if (formatter == null) {\n formatter = defaultFormatter;\n }\n const plugins = new Map();\n __classPrivateFieldSet(this, _Network_props, { name, chainId, formatter, plugins }, \"f\");\n }\n toJSON() {\n return { name: this.name, chainId: this.chainId };\n }\n get name() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\"); }\n set name(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\", value); }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\", logger.getBigInt(value, \"chainId\")); }\n get formatter() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\"); }\n set formatter(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\", value); }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _Network_props, \"f\").plugins.values());\n }\n attachPlugin(plugin) {\n if (this.isFrozen()) {\n throw new Error(\"frozen\");\n }\n if (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _Network_props, \"f\").plugins.set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(name)) || null;\n }\n // Gets a list of Plugins which match basename, ignoring any fragment\n getPlugins(basename) {\n return (this.plugins.filter((p) => (p.name.split(\"#\")[0] === basename)));\n }\n clone() {\n const clone = new Network(this.name, this.chainId, this.formatter);\n this.plugins.forEach((plugin) => {\n clone.attachPlugin(plugin.clone());\n });\n return clone;\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Network_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Network_props, \"f\"));\n }\n computeIntrinsicGas(tx) {\n const costs = this.getPlugin(\"org.ethers.gas-cost\") || (new GasCostPlugin());\n let gas = costs.txBase;\n if (tx.to == null) {\n gas += costs.txCreate;\n }\n if (tx.data) {\n for (let i = 2; i < tx.data.length; i += 2) {\n if (tx.data.substring(i, i + 2) === \"00\") {\n gas += costs.txDataZero;\n }\n else {\n gas += costs.txDataNonzero;\n }\n }\n }\n if (tx.accessList) {\n const accessList = this.formatter.accessList(tx.accessList);\n for (const addr in accessList) {\n gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length;\n }\n }\n return gas;\n }\n static from(network) {\n // Default network\n if (network == null) {\n return Network.from(\"homestead\");\n }\n // Canonical name or chain ID\n if (typeof (network) === \"number\") {\n network = BigInt(network);\n }\n if (typeof (network) === \"string\" || typeof (network) === \"bigint\") {\n const networkFunc = Networks.get(network);\n if (networkFunc) {\n return networkFunc();\n }\n if (typeof (network) === \"bigint\") {\n return new Network(\"unknown\", network);\n }\n logger.throwArgumentError(\"unknown network\", \"network\", network);\n }\n // Clonable with network-like abilities\n if (typeof (network.clone) === \"function\") {\n const clone = network.clone();\n //if (typeof(network.name) !== \"string\" || typeof(network.chainId) !== \"number\") {\n //}\n return clone;\n }\n // Networkish\n if (typeof (network) === \"object\") {\n if (typeof (network.name) !== \"string\" || typeof (network.chainId) !== \"number\") {\n logger.throwArgumentError(\"invalid network object name or chainId\", \"network\", network);\n }\n const custom = new Network((network.name), (network.chainId));\n if (network.ensAddress || network.ensNetwork != null) {\n custom.attachPlugin(new EnsPlugin(network.ensAddress, network.ensNetwork));\n }\n //if ((network).layerOneConnection) {\n // custom.attachPlugin(new LayerOneConnectionPlugin((network).layerOneConnection));\n //}\n return custom;\n }\n return logger.throwArgumentError(\"invalid network\", \"network\", network);\n }\n static register(nameOrChainId, networkFunc) {\n if (typeof (nameOrChainId) === \"number\") {\n nameOrChainId = BigInt(nameOrChainId);\n }\n const existing = Networks.get(nameOrChainId);\n if (existing) {\n logger.throwArgumentError(`conflicting network for ${JSON.stringify(existing.name)}`, \"nameOrChainId\", nameOrChainId);\n }\n Networks.set(nameOrChainId, networkFunc);\n }\n}\n_Network_props = new WeakMap();\n//# sourceMappingURL=network.js.map","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 _PollingBlockSubscriber_instances, _PollingBlockSubscriber_provider, _PollingBlockSubscriber_poller, _PollingBlockSubscriber_interval, _PollingBlockSubscriber_blockNumber, _PollingBlockSubscriber_poll, _OnBlockSubscriber_provider, _OnBlockSubscriber_poll, _PollingOrphanSubscriber_filter, _PollingTransactionSubscriber_hash, _PollingEventSubscriber_instances, _PollingEventSubscriber_provider, _PollingEventSubscriber_filter, _PollingEventSubscriber_poller, _PollingEventSubscriber_blockNumber, _PollingEventSubscriber_poll;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport function getPollingSubscriber(provider, event) {\n if (event === \"block\") {\n return new PollingBlockSubscriber(provider);\n }\n if (isHexString(event, 32)) {\n return new PollingTransactionSubscriber(provider, event);\n }\n return logger.throwError(\"unsupported polling event\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getPollingSubscriber\", info: { event }\n });\n}\n// @TODO: refactor this\nexport class PollingBlockSubscriber {\n constructor(provider) {\n _PollingBlockSubscriber_instances.add(this);\n _PollingBlockSubscriber_provider.set(this, void 0);\n _PollingBlockSubscriber_poller.set(this, void 0);\n _PollingBlockSubscriber_interval.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingBlockSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, 4000, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\"); }\n set pollingInterval(value) { __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, value, \"f\"); }\n start() {\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber already running\");\n }\n __classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).call(this);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n }\n stop() {\n if (!__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber not running\");\n }\n clearTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\"));\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingBlockSubscriber_provider = new WeakMap(), _PollingBlockSubscriber_poller = new WeakMap(), _PollingBlockSubscriber_interval = new WeakMap(), _PollingBlockSubscriber_blockNumber = new WeakMap(), _PollingBlockSubscriber_instances = new WeakSet(), _PollingBlockSubscriber_poll = async function _PollingBlockSubscriber_poll() {\n const blockNumber = await __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").getBlockNumber();\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n return;\n }\n // @TODO: Put a cap on the maximum number of events per loop?\n if (blockNumber !== __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\")) {\n for (let b = __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") + 1; b <= blockNumber; b++) {\n __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").emit(\"block\", b);\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n};\nexport class OnBlockSubscriber {\n constructor(provider) {\n _OnBlockSubscriber_provider.set(this, void 0);\n _OnBlockSubscriber_poll.set(this, void 0);\n __classPrivateFieldSet(this, _OnBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _OnBlockSubscriber_poll, (blockNumber) => {\n this._poll(blockNumber, __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\"));\n }, \"f\");\n }\n async _poll(blockNumber, provider) {\n throw new Error(\"sub-classes must override this\");\n }\n start() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\").call(this, -2);\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n pause(dropWhilePaused) { this.stop(); }\n resume() { this.start(); }\n}\n_OnBlockSubscriber_provider = new WeakMap(), _OnBlockSubscriber_poll = new WeakMap();\nexport class PollingOrphanSubscriber extends OnBlockSubscriber {\n constructor(provider, filter) {\n super(provider);\n _PollingOrphanSubscriber_filter.set(this, void 0);\n __classPrivateFieldSet(this, _PollingOrphanSubscriber_filter, copy(filter), \"f\");\n }\n async _poll(blockNumber, provider) {\n console.log(__classPrivateFieldGet(this, _PollingOrphanSubscriber_filter, \"f\"));\n throw new Error(\"@TODO\");\n }\n}\n_PollingOrphanSubscriber_filter = new WeakMap();\nexport class PollingTransactionSubscriber extends OnBlockSubscriber {\n constructor(provider, hash) {\n super(provider);\n _PollingTransactionSubscriber_hash.set(this, void 0);\n __classPrivateFieldSet(this, _PollingTransactionSubscriber_hash, hash, \"f\");\n }\n async _poll(blockNumber, provider) {\n const tx = await provider.getTransactionReceipt(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"));\n if (tx) {\n provider.emit(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"), tx);\n }\n }\n}\n_PollingTransactionSubscriber_hash = new WeakMap();\nexport class PollingEventSubscriber {\n constructor(provider, filter) {\n _PollingEventSubscriber_instances.add(this);\n _PollingEventSubscriber_provider.set(this, void 0);\n _PollingEventSubscriber_filter.set(this, void 0);\n _PollingEventSubscriber_poller.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingEventSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingEventSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_filter, copy(filter), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_poller, __classPrivateFieldGet(this, _PollingEventSubscriber_instances, \"m\", _PollingEventSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n start() {\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getBlockNumber().then((blockNumber) => {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n });\n }\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingEventSubscriber_provider = new WeakMap(), _PollingEventSubscriber_filter = new WeakMap(), _PollingEventSubscriber_poller = new WeakMap(), _PollingEventSubscriber_blockNumber = new WeakMap(), _PollingEventSubscriber_instances = new WeakSet(), _PollingEventSubscriber_poll = async function _PollingEventSubscriber_poll(blockNumber) {\n // The initial block hasn't been determined yet\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n return;\n }\n const filter = copy(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"));\n filter.fromBlock = __classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") + 1;\n filter.toBlock = blockNumber;\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n const logs = await __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getLogs(filter);\n for (const log of logs) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").emit(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"), log);\n }\n};\n//# sourceMappingURL=subscriber-polling.js.map","// @TODO\n// Event coalescence\n// When we register an event with an async value (e.g. address is a Signer\n// or ENS name), we need to add it immeidately for the Event API, but also\n// need time to resolve the address. Upon resolving the address, we need to\n// migrate the listener to the static event. We also need to maintain a map\n// of Signer/ENS name to address so we can sync respond to listenerCount.\nvar __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 _AbstractProvider_instances, _AbstractProvider_subs, _AbstractProvider_plugins, _AbstractProvider_pausedState, _AbstractProvider_networkPromise, _AbstractProvider_anyNetwork, _AbstractProvider_performCache, _AbstractProvider_nextTimer, _AbstractProvider_timers, _AbstractProvider_disableCcipRead, _AbstractProvider_perform, _AbstractProvider_call, _AbstractProvider_getBlock, _AbstractProvider_hasSub, _AbstractProvider_getSub;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { toArray } from \"@ethersproject/math\";\nimport { defineProperties, EventPayload, resolveProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { EnsResolver } from \"./ens-resolver.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { FeeData } from \"./provider.js\";\nimport { PollingBlockSubscriber, PollingEventSubscriber, PollingOrphanSubscriber, PollingTransactionSubscriber } from \"./subscriber-polling.js\";\n// Constants\nconst BN_2 = BigInt(2);\nconst MAX_CCIP_REDIRECTS = 10;\nfunction getTag(prefix, value) {\n return prefix + \":\" + JSON.stringify(value, (k, v) => {\n if (typeof (v) === \"bigint\") {\n return `bigint:${v.toString()}`;\n }\n if (typeof (v) === \"string\") {\n return v.toLowerCase();\n }\n // Sort object keys\n if (typeof (v) === \"object\" && !Array.isArray(v)) {\n const keys = Object.keys(v);\n keys.sort();\n return keys.reduce((accum, key) => {\n accum[key] = v[key];\n return accum;\n }, {});\n }\n return v;\n });\n}\nexport class UnmanagedSubscriber {\n constructor(name) { defineProperties(this, { name }); }\n start() { }\n stop() { }\n pause(dropWhilePaused) { }\n resume() { }\n}\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\n// Normalize a ProviderEvent into a Subscription\n// @TODO: Make events sync if possible; like block\n//function getSyncSubscription(_event: ProviderEvent): Subscription {\n//}\nasync function getSubscription(_event, provider) {\n if (_event == null) {\n throw new Error(\"invalid event\");\n }\n // Normalize topic array info an EventFilter\n if (Array.isArray(_event)) {\n _event = { topics: _event };\n }\n if (typeof (_event) === \"string\") {\n switch (_event) {\n case \"block\":\n case \"pending\":\n case \"debug\":\n case \"network\": {\n return { type: _event, tag: _event };\n }\n }\n }\n if (isHexString(_event, 32)) {\n const hash = _event.toLowerCase();\n return { type: \"transaction\", tag: getTag(\"tx\", { hash }), hash };\n }\n if (_event.orphan) {\n const event = _event;\n // @TODO: Should lowercase and whatnot things here instead of copy...\n return { type: \"orphan\", tag: getTag(\"orphan\", event), filter: copy(event) };\n }\n if ((_event.address || _event.topics)) {\n const event = _event;\n const filter = {\n topics: ((event.topics || []).map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n }))\n };\n if (event.address) {\n const addresses = [];\n const promises = [];\n const addAddress = (addr) => {\n if (isHexString(addr)) {\n addresses.push(addr);\n }\n else {\n promises.push((async () => {\n addresses.push(await resolveAddress(addr, provider));\n })());\n }\n };\n if (Array.isArray(event.address)) {\n event.address.forEach(addAddress);\n }\n else {\n addAddress(event.address);\n }\n if (promises.length) {\n await Promise.all(promises);\n }\n filter.address = concisify(addresses.map((a) => a.toLowerCase()));\n }\n return { filter, tag: getTag(\"event\", filter), type: \"event\" };\n }\n return logger.throwArgumentError(\"unknown ProviderEvent\", \"event\", _event);\n}\nfunction getTime() { return (new Date()).getTime(); }\nexport function copyRequest(tx) {\n // @TODO: copy the copy from contracts and use it from this\n return tx;\n}\nexport class AbstractProvider {\n // @TODO: This should be a () => Promise so network can be\n // done when needed; or rely entirely on _detectNetwork?\n constructor(_network) {\n _AbstractProvider_instances.add(this);\n _AbstractProvider_subs.set(this, void 0);\n _AbstractProvider_plugins.set(this, void 0);\n // null=unpaused, true=paused+dropWhilePaused, false=paused\n _AbstractProvider_pausedState.set(this, void 0);\n _AbstractProvider_networkPromise.set(this, void 0);\n _AbstractProvider_anyNetwork.set(this, void 0);\n _AbstractProvider_performCache.set(this, void 0);\n _AbstractProvider_nextTimer.set(this, void 0);\n _AbstractProvider_timers.set(this, void 0);\n _AbstractProvider_disableCcipRead.set(this, void 0);\n if (_network === \"any\") {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, true, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n else if (_network) {\n const network = Network.from(_network);\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(network), \"f\");\n setTimeout(() => { this.emit(\"network\", network, null); }, 0);\n }\n else {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n //this.#approxNumber = -2;\n //this.#approxNumberT0 = 0;\n __classPrivateFieldSet(this, _AbstractProvider_performCache, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_plugins, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_nextTimer, 0, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_timers, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, false, \"f\");\n }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").values());\n }\n attachPlugin(plugin) {\n if (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(name)) || null;\n }\n set disableCcipRead(value) { __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, !!value, \"f\"); }\n get disableCcipRead() { return __classPrivateFieldGet(this, _AbstractProvider_disableCcipRead, \"f\"); }\n async ccipReadFetch(tx, calldata, urls) {\n if (this.disableCcipRead || urls.length === 0 || tx.to == null) {\n return null;\n }\n const sender = tx.to.toLowerCase();\n const data = calldata.toLowerCase();\n const errorMessages = [];\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n // URL expansion\n const href = url.replace(\"{sender}\", sender).replace(\"{data}\", data);\n // If no {data} is present, use POST; otherwise GET\n //const json: string | null = (url.indexOf(\"{data}\") >= 0) ? null: JSON.stringify({ data, sender });\n //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => {\n // value.status = response.statusCode;\n // return value;\n //});\n const request = new FetchRequest(href);\n if (url.indexOf(\"{data}\") === -1) {\n request.body = { data, sender };\n }\n let errorMessage = \"unknown error\";\n const resp = await fetchData(request);\n try {\n const result = resp.bodyJson;\n if (result.data) {\n return result.data;\n }\n if (result.message) {\n errorMessage = result.message;\n }\n }\n catch (error) { }\n // 4xx indicates the result is not present; stop\n if (resp.statusCode >= 400 && resp.statusCode < 500) {\n return logger.throwError(`response not found during CCIP fetch: ${errorMessage}`, \"OFFCHAIN_FAULT\", {\n reason: \"404_MISSING_RESOURCE\",\n transaction: tx, info: { url, errorMessage }\n });\n }\n // 5xx indicates server issue; try the next url\n errorMessages.push(errorMessage);\n }\n return logger.throwError(`error encountered during CCIP fetch: ${errorMessages.map((m) => JSON.stringify(m)).join(\", \")}`, \"OFFCHAIN_FAULT\", {\n reason: \"500_SERVER_ERROR\",\n transaction: tx, info: { urls, errorMessages }\n });\n }\n _wrapTransaction(tx, hash, blockNumber) {\n return tx;\n }\n _detectNetwork() {\n return logger.throwError(\"sub-classes must implement this\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_detectNetwork\"\n });\n }\n async _perform(req) {\n return logger.throwError(`unsupported method: ${req.method}`, \"UNSUPPORTED_OPERATION\", {\n operation: req.method,\n info: req\n });\n }\n // State\n async getBlockNumber() {\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getBlockNumber\" }), \"%response\");\n }\n async _getAddress(address) {\n if (typeof (address) === \"string\") {\n return address;\n }\n return await address.getAddress();\n }\n async _getBlockTag(blockTag) {\n const network = await this.getNetwork();\n if (typeof (blockTag) === \"number\" && Number.isSafeInteger(blockTag) && blockTag < 0) {\n //let blockNumber = await this._getApproxBlockNumber(500);\n let blockNumber = await this.getBlockNumber();\n blockNumber += blockTag;\n if (blockNumber < 0) {\n blockNumber = 0;\n }\n return network.formatter.blockTag(blockNumber);\n }\n return network.formatter.blockTag(blockTag);\n }\n async getNetwork() {\n // No explicit network was set and this is our first time\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") == null) {\n // Detect the current network (shared with all calls)\n const detectNetwork = this._detectNetwork().then((network) => {\n this.emit(\"network\", network, null);\n return network;\n }, (error) => {\n // Reset the networkPromise on failure, so we will try again\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === detectNetwork) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n throw error;\n });\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, detectNetwork, \"f\");\n return await detectNetwork;\n }\n const networkPromise = __classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\");\n const [expected, actual] = await Promise.all([\n networkPromise,\n this._detectNetwork() // The actual connected network\n ]);\n if (expected.chainId !== actual.chainId) {\n if (__classPrivateFieldGet(this, _AbstractProvider_anyNetwork, \"f\")) {\n // The \"any\" network can change, so notify listeners\n this.emit(\"network\", actual, expected);\n // Update the network if something else hasn't already changed it\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === networkPromise) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(actual), \"f\");\n }\n }\n else {\n // Otherwise, we do not allow changes to the underlying network\n logger.throwError(`network changed: ${expected.chainId} => ${actual.chainId} `, \"NETWORK_ERROR\", {\n event: \"changed\"\n });\n }\n }\n return expected.clone().freeze();\n }\n async getFeeData() {\n const { block, gasPrice } = await resolveProperties({\n block: this.getBlock(\"latest\"),\n gasPrice: ((async () => {\n try {\n const gasPrice = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getGasPrice\" });\n return logger.getBigInt(gasPrice, \"%response\");\n }\n catch (error) { }\n return null;\n })())\n });\n let maxFeePerGas = null, maxPriorityFeePerGas = null;\n if (block && block.baseFeePerGas) {\n // We may want to compute this more accurately in the future,\n // using the formula \"check if the base fee is correct\".\n // See: https://eips.ethereum.org/EIPS/eip-1559\n maxPriorityFeePerGas = BigInt(\"1500000000\");\n // Allow a network to override their maximum priority fee per gas\n const priorityFeePlugin = (await this.getNetwork()).getPlugin(\"org.ethers.plugins.max-priority-fee\");\n if (priorityFeePlugin) {\n maxPriorityFeePerGas = await priorityFeePlugin.getPriorityFee(this);\n }\n maxFeePerGas = (block.baseFeePerGas * BN_2) + maxPriorityFeePerGas;\n }\n return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas);\n }\n async _getTransaction(_request) {\n const network = await this.getNetwork();\n // Fill in any addresses\n const request = Object.assign({}, _request, await resolveProperties({\n to: (_request.to ? resolveAddress(_request.to, this) : undefined),\n from: (_request.from ? resolveAddress(_request.from, this) : undefined),\n }));\n return network.formatter.transactionRequest(request);\n }\n async estimateGas(_tx) {\n const transaction = await this._getTransaction(_tx);\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"estimateGas\", transaction\n }), \"%response\");\n }\n async call(_tx) {\n const { tx, blockTag } = await resolveProperties({\n tx: this._getTransaction(_tx),\n blockTag: this._getBlockTag(_tx.blockTag)\n });\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, tx, blockTag, _tx.enableCcipRead ? 0 : -1);\n }\n // Account\n async getBalanceOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBalance\", address, blockTag\n }), \"%response\");\n }\n async getTransactionCountOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getTransactionCount\", address, blockTag\n }), \"%response\");\n }\n async getCode(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getCode\", address, blockTag\n }));\n }\n async getStorageAt(_address, _position, _blockTag) {\n const position = logger.getBigInt(_position);\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getStorageAt\", address, position, blockTag\n }));\n }\n // Write\n async broadcastTransaction(signedTx) {\n throw new Error();\n return {};\n }\n // Queries\n async getBlock(block) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, false);\n if (params == null) {\n return null;\n }\n return format.block(params, this);\n }\n async getBlockWithTransactions(block) {\n const format = (await this.getNetwork()).formatter;\n const params = __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, true);\n if (params == null) {\n return null;\n }\n return format.blockWithTransactions(params, this);\n }\n async getTransaction(hash) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n return format.transactionResponse(params, this);\n }\n async getTransactionReceipt(hash) {\n const format = (await this.getNetwork()).formatter;\n const receipt = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransactionReceipt\", hash });\n if (receipt == null) {\n return null;\n }\n // Some backends did not backfill the effectiveGasPrice into old transactions\n // in the receipt, so we look it up manually and inject it.\n if (receipt.gasPrice == null && receipt.effectiveGasPrice == null) {\n const tx = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n receipt.effectiveGasPrice = tx.gasPrice;\n }\n return format.receipt(receipt, this);\n }\n async _getFilter(filter) {\n const lookup = {};\n if (filter.address) {\n if (Array.isArray(filter.address)) {\n lookup.address = Promise.all(filter.address.map((a) => resolveAddress(a, this)));\n }\n else {\n lookup.address = resolveAddress(filter.address, this);\n }\n }\n const addBlockTag = (key) => {\n if (filter[key] == null) {\n return;\n }\n lookup[key] = this._getBlockTag(filter[key]);\n };\n addBlockTag(\"fromBlock\");\n addBlockTag(\"toBlock\");\n const result = await resolveProperties(lookup);\n if (Array.isArray(result.address)) {\n result.address.sort();\n }\n if (filter.blockHash) {\n if (filter.fromBlock || filter.toBlock) {\n throw new Error(\"invalid filter\");\n }\n result.blockHash = filter.blockHash;\n }\n return result;\n }\n // Bloom-filter Queries\n async getLogs(_filter) {\n const { network, filter } = await resolveProperties({\n network: this.getNetwork(),\n filter: this._getFilter(_filter)\n });\n return (await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getLogs\", filter })).map((l) => {\n return network.formatter.log(l, this);\n });\n }\n // ENS\n _getProvider(chainId) {\n return logger.throwError(\"provider cannot connect to target network\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_getProvider()\"\n });\n }\n async getResolver(name) {\n return await EnsResolver.fromName(this, name);\n }\n async getAvatar(name) {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAvatar();\n }\n return null;\n }\n async resolveName(name) {\n if (typeof (name) === \"string\") {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAddress();\n }\n }\n else {\n const address = await name.getAddress();\n if (address == null) {\n return logger.throwArgumentError(\"Addressable returned no address\", \"name\", name);\n }\n return address;\n }\n return null;\n }\n async lookupAddress(address) {\n throw new Error();\n //return \"TODO\";\n }\n async waitForTransaction(hash, confirms = 1, timeout) {\n if (confirms === 0) {\n return this.getTransactionReceipt(hash);\n }\n return new Promise(async (resolve, reject) => {\n let timer = null;\n const listener = (async (blockNumber) => {\n try {\n const receipt = await this.getTransactionReceipt(hash);\n if (receipt != null) {\n if (blockNumber - receipt.blockNumber + 1 >= confirms) {\n resolve(receipt);\n this.off(\"block\", listener);\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n return;\n }\n }\n }\n catch (error) {\n console.log(\"EEE\", error);\n }\n this.once(\"block\", listener);\n });\n if (timeout != null) {\n timer = setTimeout(() => {\n if (timer == null) {\n return;\n }\n timer = null;\n this.off(\"block\", listener);\n reject(logger.makeError(\"timeout\", \"TIMEOUT\", {}));\n }, timeout);\n }\n listener(await this.getBlockNumber());\n });\n }\n async waitForBlock(blockTag) {\n throw new Error();\n //return new Block({ }, this);\n }\n _clearTimeout(timerId) {\n const timer = __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").get(timerId);\n if (!timer) {\n return;\n }\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n }\n _setTimeout(_func, timeout = 0) {\n var _a, _b;\n const timerId = (__classPrivateFieldSet(this, _AbstractProvider_nextTimer, (_b = __classPrivateFieldGet(this, _AbstractProvider_nextTimer, \"f\"), _a = _b++, _b), \"f\"), _a);\n const func = () => {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n _func();\n };\n if (this.paused) {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer: null, func, time: timeout });\n }\n else {\n const timer = setTimeout(func, timeout);\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer, func, time: getTime() });\n }\n return timerId;\n }\n _forEachSubscriber(func) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n func(sub.subscriber);\n }\n }\n // Event API; sub-classes should override this; any supported\n // event filter will have been munged into an EventFilter\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"debug\":\n case \"network\":\n return new UnmanagedSubscriber(sub.type);\n case \"block\":\n return new PollingBlockSubscriber(this);\n case \"event\":\n return new PollingEventSubscriber(this, sub.filter);\n case \"transaction\":\n return new PollingTransactionSubscriber(this, sub.hash);\n case \"orphan\":\n return new PollingOrphanSubscriber(this, sub.filter);\n }\n throw new Error(`unsupported event: ${sub.type}`);\n }\n _recoverSubscriber(oldSub, newSub) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n if (sub.subscriber === oldSub) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n sub.subscriber = newSub;\n if (sub.started) {\n newSub.start();\n }\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n newSub.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n break;\n }\n }\n }\n async on(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: false });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async once(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: true });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async emit(event, ...args) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event, args);\n if (!sub) {\n return false;\n }\n ;\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const payload = new EventPayload(this, (once ? null : listener), event);\n setTimeout(() => { listener.call(this, ...args, payload); }, 0);\n return !once;\n });\n return (count > 0);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n let total = 0;\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n let result = [];\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (!listener || sub.listeners.length === 0) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const { tag, started, subscriber } = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n else {\n for (const [tag, { started, subscriber }] of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\")) {\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return this.off(event, listener);\n }\n // Sub-classes should override this to shutdown any sockets, etc.\n // but MUST call this super.shutdown.\n async shutdown() {\n // Stop all listeners\n this.removeAllListeners();\n // Shut down all tiemrs\n for (const timerId of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").keys()) {\n this._clearTimeout(timerId);\n }\n }\n get paused() { return (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null); }\n pause(dropWhilePaused) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == !!dropWhilePaused) {\n return;\n }\n return logger.throwError(\"cannot change pause type; resume first\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause\"\n });\n }\n this._forEachSubscriber((s) => s.pause(dropWhilePaused));\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, !!dropWhilePaused, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Clear the timer\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n // Remaining time needed for when we become unpaused\n timer.time = getTime() - timer.time;\n }\n }\n resume() {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == null) {\n return;\n }\n this._forEachSubscriber((s) => s.resume());\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Remaining time when we were paused\n let timeout = timer.time;\n if (timeout < 0) {\n timeout = 0;\n }\n // Start time (in cause paused, so we con compute remaininf time)\n timer.time = getTime();\n // Start the timer\n setTimeout(timer.func, timeout);\n }\n }\n}\n_AbstractProvider_subs = new WeakMap(), _AbstractProvider_plugins = new WeakMap(), _AbstractProvider_pausedState = new WeakMap(), _AbstractProvider_networkPromise = new WeakMap(), _AbstractProvider_anyNetwork = new WeakMap(), _AbstractProvider_performCache = new WeakMap(), _AbstractProvider_nextTimer = new WeakMap(), _AbstractProvider_timers = new WeakMap(), _AbstractProvider_disableCcipRead = new WeakMap(), _AbstractProvider_instances = new WeakSet(), _AbstractProvider_perform = \n// Shares multiple identical requests made during the same 250ms\nasync function _AbstractProvider_perform(req) {\n // Create a tag\n const tag = getTag(req.method, req);\n let perform = __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag);\n if (!perform) {\n perform = this._perform(req);\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").set(tag, perform);\n setTimeout(() => {\n if (__classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag) === perform) {\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").delete(tag);\n }\n }, 250);\n }\n return await perform;\n}, _AbstractProvider_call = async function _AbstractProvider_call(tx, blockTag, attempt) {\n if (attempt >= MAX_CCIP_REDIRECTS) {\n logger.throwError(\"CCIP read exceeded maximum redirections\", \"OFFCHAIN_FAULT\", {\n reason: \"TOO_MANY_REDIRECTS\",\n transaction: Object.assign({}, tx, { blockTag, enableCcipRead: true })\n });\n }\n const transaction = copyRequest(tx);\n try {\n return hexlify(await this._perform({ method: \"call\", transaction, blockTag }));\n }\n catch (error) {\n // CCIP Read OffchainLookup\n if (!this.disableCcipRead && isCallException(error) && attempt >= 0 && blockTag === \"latest\" && transaction.to != null && dataSlice(error.data, 0, 4) === \"0x556f1830\") {\n const data = error.data;\n const txSender = await resolveAddress(transaction.to, this);\n // Parse the CCIP Read Arguments\n let ccipArgs;\n try {\n ccipArgs = parseOffchainLookup(dataSlice(error.data, 4));\n }\n catch (error) {\n return logger.throwError(error.message, \"OFFCHAIN_FAULT\", {\n reason: \"BAD_DATA\",\n transaction, info: { data }\n });\n }\n // Check the sender of the OffchainLookup matches the transaction\n if (ccipArgs.sender.toLowerCase() !== txSender.toLowerCase()) {\n return logger.throwError(\"CCIP Read sender mismatch\", \"CALL_EXCEPTION\", {\n data, transaction,\n errorSignature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n errorName: \"OffchainLookup\",\n errorArgs: ccipArgs.errorArgs\n });\n }\n const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls);\n if (ccipResult == null) {\n return logger.throwError(\"CCIP Read failed to fetch data\", \"OFFCHAIN_FAULT\", {\n reason: \"FETCH_FAILED\",\n transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs }\n });\n }\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, {\n to: txSender,\n data: concat([\n ccipArgs.selector, encodeBytes([ccipResult, ccipArgs.extraData])\n ]),\n }, blockTag, attempt + 1);\n }\n throw error;\n }\n}, _AbstractProvider_getBlock = async function _AbstractProvider_getBlock(block, includeTransactions) {\n const format = (await this.getNetwork()).formatter;\n if (isHexString(block, 32)) {\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockHash: block, includeTransactions\n });\n }\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockTag: format.blockTag(block), includeTransactions\n });\n}, _AbstractProvider_hasSub = async function _AbstractProvider_hasSub(event, emitArgs) {\n let sub = await getSubscription(event, this);\n // This is a log that is removing an existing log; we actually want\n // to emit an orphan event for the removed log\n if (sub.type === \"event\" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) {\n sub = await getSubscription({ orphan: \"drop-log\", log: emitArgs[0] }, this);\n }\n return __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(sub.tag) || null;\n}, _AbstractProvider_getSub = async function _AbstractProvider_getSub(event) {\n const subscription = await getSubscription(event, this);\n // Prevent tampering with our tag in any subclass' _getSubscriber\n const tag = subscription.tag;\n let sub = __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(tag);\n if (!sub) {\n const subscriber = this._getSubscriber(subscription);\n const addressableMap = new WeakMap();\n const nameMap = new Map();\n sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [] };\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").set(tag, sub);\n }\n return sub;\n};\nfunction _parseString(result, start) {\n try {\n const bytes = _parseBytes(result, start);\n if (bytes) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction _parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n try {\n const offset = logger.getNumber(dataSlice(result, start, start + 32));\n const length = logger.getNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\nconst empty = new Uint8Array([]);\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\nconst zeros = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseOffchainLookup(data) {\n const result = {\n sender: \"\", urls: [], calldata: \"\", selector: \"\", extraData: \"\", errorArgs: []\n };\n if (dataLength(data) < 5 * 32) {\n throw new Error(\"insufficient OffchainLookup data\");\n }\n const sender = dataSlice(data, 0, 32);\n if (dataSlice(sender, 0, 12) !== dataSlice(zeros, 0, 12)) {\n throw new Error(\"corrupt OffchainLookup sender\");\n }\n result.sender = dataSlice(sender, 12);\n // Read the URLs from the response\n try {\n const urls = [];\n const urlsOffset = logger.getNumber(dataSlice(data, 32, 64));\n const urlsLength = logger.getNumber(dataSlice(data, urlsOffset, urlsOffset + 32));\n const urlsData = dataSlice(data, urlsOffset + 32);\n for (let u = 0; u < urlsLength; u++) {\n const url = _parseString(urlsData, u * 32);\n if (url == null) {\n throw new Error(\"abort\");\n }\n urls.push(url);\n }\n result.urls = urls;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup urls\");\n }\n // Get the CCIP calldata to forward\n try {\n const calldata = _parseBytes(data, 64);\n if (calldata == null) {\n throw new Error(\"abort\");\n }\n result.calldata = calldata;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup calldata\");\n }\n // Get the callbackSelector (bytes4)\n if (dataSlice(data, 100, 128) !== dataSlice(zeros, 0, 28)) {\n throw new Error(\"corrupt OffchainLookup callbaackSelector\");\n }\n result.selector = dataSlice(data, 96, 100);\n // Get the extra data to send back to the contract as context\n try {\n const extraData = _parseBytes(data, 128);\n if (extraData == null) {\n throw new Error(\"abort\");\n }\n result.extraData = extraData;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup extraData\");\n }\n result.errorArgs = \"sender,urls,calldata,selector,extraData\".split(/,/).map((k) => result[k]);\n return result;\n}\n//# sourceMappingURL=abstract-provider.js.map","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 __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 _AbstractSigner_instances, _AbstractSigner_checkProvider, _AbstractSigner_fromify, _VoidSigner_instances, _VoidSigner_throwUnsupported, _WrappedSigner_signer;\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\nexport class AbstractSigner {\n constructor(provider) {\n _AbstractSigner_instances.add(this);\n defineProperties(this, { provider: (provider || null) });\n }\n async getBalance(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getBalance\").getBalanceOf(await this.getAddress(), blockTag);\n }\n async getTransactionCount(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getTransactionCount\").getTransactionCountOf(await this.getAddress(), blockTag);\n }\n async estimateGas(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"estimateGas\").estimateGas(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async call(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"call\").call(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async populateTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"populateTransaction\");\n //let pop: Deferrable = Object.assign({ }, tx);\n let pop = Object.assign({}, tx);\n if (pop.to != null) {\n pop.to = provider.resolveName(pop.to).then((to) => {\n if (to == null) {\n return logger.throwArgumentError(\"transaction to ENS name not configured\", \"tx.to\", pop.to);\n }\n return to;\n });\n }\n if (pop.from != null) {\n const from = pop.from;\n pop.from = Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n return logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n return address;\n });\n }\n if (pop.nonce == null) {\n pop.nonce = this.getTransactionCount();\n }\n pop = resolveProperties(pop);\n if (pop.gasLimit == null) {\n pop.gasLimit = provider.estimateGas(pop);\n }\n pop = resolveProperties(pop);\n //@TODO: Copy logic from AbstractSigner in v5\n return await resolveProperties(pop);\n }\n async resolveName(name) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"resolveName\");\n return await provider.resolveName(name);\n }\n async sendTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"sendTransaction\");\n const txObj = Transaction.from(await this.populateTransaction(tx));\n return await provider.broadcastTransaction(await this.signTransaction(txObj));\n }\n}\n_AbstractSigner_instances = new WeakSet(), _AbstractSigner_checkProvider = function _AbstractSigner_checkProvider(operation) {\n if (this.provider) {\n return this.provider;\n }\n return logger.throwError(\"missing provider\", \"UNSUPPORTED_OPERATION\", { operation });\n}, _AbstractSigner_fromify = async function _AbstractSigner_fromify(tx) {\n tx = Object.assign({}, tx);\n const actions = [];\n if (tx.from != null) {\n const from = tx.from;\n actions.push(Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n tx.from = address;\n }));\n }\n await Promise.all(actions);\n return tx;\n};\nexport class VoidSigner extends AbstractSigner {\n constructor(address, provider) {\n super(provider);\n _VoidSigner_instances.add(this);\n defineProperties(this, { address });\n }\n async getAddress() { return this.address; }\n connect(provider) {\n return new VoidSigner(this.address, provider);\n }\n async signTransaction(tx) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"transactions\", \"signTransaction\");\n }\n async signMessage(message) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"messages\", \"signMessage\");\n }\n async signTypedData(domain, types, value) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"typed-data\", \"signTypedData\");\n }\n}\n_VoidSigner_instances = new WeakSet(), _VoidSigner_throwUnsupported = function _VoidSigner_throwUnsupported(suffix, operation) {\n return logger.throwError(`VoidSigner cannot sign ${suffix}`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n};\nexport class WrappedSigner extends AbstractSigner {\n //get provider(): null | Provider { return this.#signer.provider; }\n constructor(signer) {\n super(signer.provider);\n _WrappedSigner_signer.set(this, void 0);\n __classPrivateFieldSet(this, _WrappedSigner_signer, signer, \"f\");\n }\n async getAddress() {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").getAddress();\n }\n connect(provider) {\n return new WrappedSigner(__classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").connect(provider));\n }\n async signTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTransaction(tx);\n }\n async sendTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").sendTransaction(tx);\n }\n async signMessage(message) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signMessage(message);\n }\n async signTypedData(domain, types, value) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTypedData(domain, types, value);\n }\n}\n_WrappedSigner_signer = new WeakMap();\n//# sourceMappingURL=abstract-signer.js.map","// Show the throttle message only once\nconst shown = new Set();\nexport function showThrottleMessage(service) {\n if (shown.has(service)) {\n return;\n }\n shown.add(service);\n console.log(\"========= NOTICE =========\");\n console.log(`Request-Rate Exceeded for ${service} (this message will not be repeated)`);\n console.log(\"\");\n console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n console.log(\"community resource for low-traffic projects and early prototyping.\");\n console.log(\"\");\n console.log(\"While your application will continue to function, we highly recommended\");\n console.log(\"signing up for your own API keys to improve performance, increase your\");\n console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n console.log(\"\");\n console.log(\"For more details: https:/\\/docs.ethers.io/api-keys/\");\n console.log(\"==========================\");\n}\n//# sourceMappingURL=community.js.map","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 _FilterIdSubscriber_instances, _FilterIdSubscriber_provider, _FilterIdSubscriber_filterIdPromise, _FilterIdSubscriber_poller, _FilterIdSubscriber_network, _FilterIdSubscriber_poll, _FilterIdSubscriber_teardown, _FilterIdEventSubscriber_event;\nimport { PollingEventSubscriber } from \"./subscriber-polling.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport class FilterIdSubscriber {\n constructor(provider) {\n _FilterIdSubscriber_instances.add(this);\n _FilterIdSubscriber_provider.set(this, void 0);\n _FilterIdSubscriber_filterIdPromise.set(this, void 0);\n _FilterIdSubscriber_poller.set(this, void 0);\n _FilterIdSubscriber_network.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_poller, __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, null, \"f\");\n }\n _subscribe(provider) {\n throw new Error(\"subclasses must override this\");\n }\n _emitResults(provider, result) {\n throw new Error(\"subclasses must override this\");\n }\n _recover(provider) {\n throw new Error(\"subclasses must override this\");\n }\n start() { __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).call(this, -2); }\n stop() {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n if (dropWhilePaused) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n resume() { this.start(); }\n}\n_FilterIdSubscriber_provider = new WeakMap(), _FilterIdSubscriber_filterIdPromise = new WeakMap(), _FilterIdSubscriber_poller = new WeakMap(), _FilterIdSubscriber_network = new WeakMap(), _FilterIdSubscriber_instances = new WeakSet(), _FilterIdSubscriber_poll = async function _FilterIdSubscriber_poll(blockNumber) {\n try {\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\") == null) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, this._subscribe(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")), \"f\");\n }\n const filterId = await __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterId == null) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")._recoverSubscriber(this, this._recover(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")));\n return;\n }\n const network = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").getNetwork();\n if (!__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\")) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, network, \"f\");\n }\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\").chainId !== network.chainId) {\n throw new Error(\"chaid changed\");\n }\n const result = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_getFilterChanges\", [filterId]);\n await this._emitResults(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\"), result);\n }\n catch (error) {\n console.log(\"@TODO\", error);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").once(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n}, _FilterIdSubscriber_teardown = function _FilterIdSubscriber_teardown() {\n const filterIdPromise = __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterIdPromise) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n filterIdPromise.then((filterId) => {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_uninstallFilter\", [filterId]);\n });\n }\n};\nexport class FilterIdEventSubscriber extends FilterIdSubscriber {\n constructor(provider, filter) {\n super(provider);\n _FilterIdEventSubscriber_event.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdEventSubscriber_event, copy(filter), \"f\");\n }\n _recover(provider) {\n return new PollingEventSubscriber(provider, __classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"));\n }\n async _subscribe(provider) {\n const filterId = await provider.send(\"eth_newFilter\", [__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\")]);\n console.log(\"____SUB\", filterId);\n return filterId;\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n const log = network.formatter.log(result, provider);\n provider.emit(__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"), log);\n }\n }\n}\n_FilterIdEventSubscriber_event = new WeakMap();\nexport class FilterIdPendingSubscriber extends FilterIdSubscriber {\n async _subscribe(provider) {\n return await provider.send(\"eth_newPendingTransactionFilter\", []);\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n provider.emit(\"pending\", network.formatter.hash(result));\n }\n }\n}\n//# sourceMappingURL=subscriber-filterid.js.map","// @TODO:\n// - Add the batching API\nvar __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 _JsonRpcApiProvider_nextId, _JsonRpcApiProvider_options, _JsonRpcProvider_connect, _JsonRpcProvider_pollingInterval;\n// https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=true&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { TypedDataEncoder } from \"@ethersproject/hash\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { AbstractProvider, UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { FilterIdEventSubscriber, FilterIdPendingSubscriber } from \"./subscriber-filterid.js\";\nimport { logger } from \"./logger.js\";\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nconst Primitive = \"bigint,boolean,function,number,string,symbol\".split(/,/g);\n//const Methods = \"getAddress,then\".split(/,/g);\nfunction deepCopy(value) {\n if (value == null || Primitive.indexOf(typeof (value)) >= 0) {\n return value;\n }\n // Keep any Addressable\n if (typeof (value.getAddress) === \"function\") {\n return value;\n }\n if (Array.isArray(value)) {\n return (value.map(deepCopy));\n }\n if (typeof (value) === \"object\") {\n return Object.keys(value).reduce((accum, key) => {\n accum[key] = value[key];\n return accum;\n }, {});\n }\n throw new Error(`should not happen: ${value} (${typeof (value)})`);\n}\nfunction getLowerCase(value) {\n if (value) {\n return value.toLowerCase();\n }\n return value;\n}\nfunction isPollable(value) {\n return (value && typeof (value.pollingInterval) === \"number\");\n}\nconst defaultOptions = {\n // Default to use filter ID (the FilterIdSubscriber will\n // fallback onto polling if subscription fails)\n polling: false,\n // Maximum batch size (in bytes)\n batchMaxSize: (1 << 20),\n // How long to wait before dispatching a new batch\n batchStallTime: 250,\n};\n// @TODO: Unchecked Signers\nexport class JsonRpcSigner {\n constructor(provider, address) {\n defineProperties(this, { provider, address });\n }\n connect(provider) {\n return logger.throwError(\"cannot reconnect JsonRpcSigner\", \"UNSUPPORTED_OPERATION\", {\n operation: \"signer.connect\"\n });\n }\n async getAddress() {\n return this.address;\n }\n async getNetwork() {\n return await this.provider.getNetwork();\n }\n async getFeeData() {\n return await this.provider.getFeeData();\n }\n async estimateGas(tx) {\n return await this.provider.estimateGas(tx);\n }\n async call(tx) {\n return await this.provider.call(tx);\n }\n async resolveName(name) {\n return await this.provider.resolveName(name);\n }\n async getBalance(blockTag) {\n return await this.provider.getBalanceOf(this.address);\n }\n async getTransactionCount(blockTag) {\n return await this.provider.getTransactionCountOf(this.address);\n }\n // Returns just the hash of the transaction after sent, which is what\n // the bare JSON-RPC API does;\n async sendUncheckedTransaction(_tx) {\n const tx = deepCopy(_tx);\n const promises = [];\n // Make sure the from matches the sender\n if (tx.from) {\n const _from = tx.from;\n promises.push((async () => {\n const from = await resolveAddress(_from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n })());\n }\n else {\n tx.from = this.address;\n }\n // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n // wishes to use this, it is easy to specify explicitly, otherwise\n // we look it up for them.\n if (tx.gasLimit == null) {\n promises.push((async () => {\n tx.gasLimit = await this.provider.estimateGas(Object.assign(Object.assign({}, tx), { from: this.address }));\n })());\n }\n // The address may be an ENS name or Addressable\n if (tx.to != null) {\n const _to = tx.to;\n promises.push((async () => {\n tx.to = await resolveAddress(_to, this.provider);\n })());\n }\n // Wait until all of our properties are filled in\n if (promises.length) {\n await Promise.all(promises);\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return this.provider.send(\"eth_sendTransaction\", [hexTx]);\n }\n async sendTransaction(tx) {\n // This cannot be mined any earlier than any recent block\n const blockNumber = await this.provider.getBlockNumber();\n // Send the transaction\n const hash = await this.sendUncheckedTransaction(tx);\n // Unfortunately, JSON-RPC only provides and opaque transaction hash\n // for a response, and we need the actual transaction, so we poll\n // for it; it should show up very quickly\n return await (new Promise((resolve, reject) => {\n const checkTx = async (duration) => {\n // Try getting the transaction\n const tx = await this.provider.getTransaction(hash);\n if (tx != null) {\n resolve(this.provider._wrapTransaction(tx, hash, blockNumber));\n return;\n }\n // Wait another 4 seconds\n this.provider._setTimeout(() => { checkTx(4000); }, duration);\n };\n checkTx(1000);\n }));\n }\n async signTransaction(_tx) {\n const tx = deepCopy(_tx);\n // Make sure the from matches the sender\n if (tx.from) {\n const from = await resolveAddress(tx.from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n return logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n }\n else {\n tx.from = this.address;\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return await this.provider.send(\"eth_sign_Transaction\", [hexTx]);\n }\n async signMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"personal_sign\", [\n hexlify(message), this.address.toLowerCase()\n ]);\n }\n async signTypedData(domain, types, _value) {\n const value = deepCopy(_value);\n // Populate any ENS names (in-place)\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value) => {\n const address = await resolveAddress(value);\n if (address == null) {\n return logger.throwArgumentError(\"TypedData does not support null address\", \"value\", value);\n }\n return address;\n });\n return await this.provider.send(\"eth_signTypedData_v4\", [\n this.address.toLowerCase(),\n JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n ]);\n }\n async unlock(password) {\n return this.provider.send(\"personal_unlockAccount\", [\n this.address.toLowerCase(), password, null\n ]);\n }\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n async _legacySignMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"eth_sign\", [\n this.address.toLowerCase(), hexlify(message)\n ]);\n }\n}\nexport class JsonRpcApiProvider extends AbstractProvider {\n constructor(network) {\n super(network);\n _JsonRpcApiProvider_nextId.set(this, void 0);\n _JsonRpcApiProvider_options.set(this, void 0);\n __classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, 1, \"f\");\n __classPrivateFieldSet(this, _JsonRpcApiProvider_options, Object.assign({}, defaultOptions), \"f\");\n }\n _getOptions(key) {\n return __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key];\n }\n _setOptions(options) {\n // Validate all the options\n for (const _key in options) {\n const key = _key;\n const value = options[key];\n if (typeof (value) !== typeof (__classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key])) {\n return logger.throwArgumentError(\"invalid option value\", `options.${key}`, value);\n }\n }\n // Update the values\n for (const _key in options) {\n const key = _key;\n __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key] = (options[key]);\n }\n }\n prepareRequest(method, params) {\n var _a, _b;\n return {\n method, params, id: (__classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, (_b = __classPrivateFieldGet(this, _JsonRpcApiProvider_nextId, \"f\"), _a = _b++, _b), \"f\"), _a), jsonrpc: \"2.0\"\n };\n }\n // Sends the payload to the backend\n //async sendPayload(payload: any): Promise {\n // throw new Error(\"sub-class must implement this\");\n //}\n async send(method, params) {\n // @TODO: This should construct and queue the payload\n throw new Error(\"sub-class must implement this\");\n }\n async getSigner(address = 0) {\n const network = await this.getNetwork();\n const accounts = await this.send(\"eth_accounts\", []);\n // Account index\n if (typeof (address) === \"number\") {\n if (address > accounts.length) {\n throw new Error(\"no such account\");\n }\n return new JsonRpcSigner(this, accounts[address]);\n }\n // Account address\n address = network.formatter.address(address);\n for (const account of accounts) {\n if (network.formatter.address(account) === account) {\n return new JsonRpcSigner(this, account);\n }\n }\n throw new Error(\"invalid account\");\n }\n // Sub-classes can override this; it detects the *actual* network we\n // are connected to\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" })));\n }\n _getSubscriber(sub) {\n // Pending Filters aren't availble via polling\n if (sub.type === \"pending\") {\n return new FilterIdPendingSubscriber(this);\n }\n if (sub.type === \"event\") {\n return new FilterIdEventSubscriber(this, sub.filter);\n }\n // Orphaned Logs are handled automatically, by the filter, since\n // logs with removed are emitted by it\n if (sub.type === \"orphan\" && sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"orphan\");\n }\n return super._getSubscriber(sub);\n }\n getRpcTransaction(tx) {\n const result = {};\n // JSON-RPC now requires numeric values to be \"quantity\" values\n [\"chainId\", \"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n let dstKey = key;\n if (key === \"gasLimit\") {\n dstKey = \"gas\";\n }\n result[dstKey] = quantity(tx[key]);\n });\n // Make sure addresses and data are lowercase\n [\"from\", \"to\", \"data\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n result[key] = hexlify(tx[key]);\n });\n // Normalize the access list object\n if (tx.accessList) {\n result[\"accessList\"] = accessListify(tx.accessList);\n }\n return result;\n }\n getRpcRequest(req) {\n switch (req.method) {\n case \"chainId\":\n return { method: \"eth_chainId\", args: [] };\n case \"getBlockNumber\":\n return { method: \"eth_blockNumber\", args: [] };\n case \"getGasPrice\":\n return { method: \"eth_gasPrice\", args: [] };\n case \"getBalance\":\n return {\n method: \"eth_getBalance\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getTransactionCount\":\n return {\n method: \"eth_getTransactionCount\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getCode\":\n return {\n method: \"eth_getCode\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getStorageAt\":\n return {\n method: \"eth_getStorageAt\",\n args: [\n getLowerCase(req.address),\n (\"0x\" + req.position.toString(16)),\n req.blockTag\n ]\n };\n case \"sendTransaction\":\n return {\n method: \"eth_sendRawTransaction\",\n args: [req.signedTransaction]\n };\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return {\n method: \"eth_getBlockByNumber\",\n args: [req.blockTag, !!req.includeTransactions]\n };\n }\n else if (\"blockHash\" in req) {\n return {\n method: \"eth_getBlockByHash\",\n args: [req.blockHash, !!req.includeTransactions]\n };\n }\n break;\n case \"getTransaction\":\n return {\n method: \"eth_getTransactionByHash\",\n args: [req.hash]\n };\n case \"getTransactionReceipt\":\n return {\n method: \"eth_getTransactionReceipt\",\n args: [req.hash]\n };\n case \"call\":\n return {\n method: \"eth_call\",\n args: [this.getRpcTransaction(req.transaction), req.blockTag]\n };\n case \"estimateGas\": {\n return {\n method: \"eth_estimateGas\",\n args: [this.getRpcTransaction(req.transaction)]\n };\n }\n case \"getLogs\":\n if (req.filter && req.filter.address != null) {\n if (Array.isArray(req.filter.address)) {\n req.filter.address = req.filter.address.map(getLowerCase);\n }\n else {\n req.filter.address = getLowerCase(req.filter.address);\n }\n }\n return { method: \"eth_getLogs\", args: [req.filter] };\n }\n return null;\n }\n getRpcError(method, args, error) {\n if (method === \"eth_call\") {\n const result = spelunkData(error);\n if (result) {\n // @TODO: Extract errorSignature, errorName, errorArgs, reason if\n // it is Error(string) or Panic(uint25)\n return logger.makeError(\"execution reverted during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: result.data,\n transaction: args[0]\n });\n }\n return logger.makeError(\"missing revert data during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: \"0x\", transaction: args[0], info: { error }\n });\n }\n if (method === \"eth_estimateGas\") {\n }\n const message = JSON.stringify(spelunkMessage(error));\n if (message.match(/insufficient funds|base fee exceeds gas limit/)) {\n return logger.makeError(\"insufficient funds for intrinsic transaction cost\", \"INSUFFICIENT_FUNDS\", {\n transaction: args[0]\n });\n }\n if (message.match(/nonce/) && message.match(/too low/)) {\n return logger.makeError(\"nonce has already been used\", \"NONCE_EXPIRED\", {\n transaction: args[0]\n });\n }\n // \"replacement transaction underpriced\"\n if (message.match(/replacement transaction/) && message.match(/underpriced/)) {\n return logger.makeError(\"replacement fee too low\", \"REPLACEMENT_UNDERPRICED\", {\n transaction: args[0]\n });\n }\n if (message.match(/only replay-protected/)) {\n return logger.makeError(\"legacy pre-eip-155 transactions not supported\", \"UNSUPPORTED_OPERATION\", {\n operation: method, info: { transaction: args[0] }\n });\n }\n if (method === \"estimateGas\" && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) {\n return logger.makeError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", \"UNPREDICTABLE_GAS_LIMIT\", {\n transaction: args[0]\n });\n }\n return error;\n }\n async _perform(req) {\n // Legacy networks do not like the type field being passed along (which\n // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n if (req.method === \"call\" || req.method === \"estimateGas\") {\n let tx = req.transaction;\n if (tx && tx.type != null && logger.getBigInt(tx.type)) {\n // If there are no EIP-1559 properties, it might be non-EIP-a559\n if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n const feeData = await this.getFeeData();\n if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n // Network doesn't know about EIP-1559 (and hence type)\n req = Object.assign({}, req, {\n transaction: Object.assign({}, tx, { type: undefined })\n });\n }\n }\n }\n }\n const request = this.getRpcRequest(req);\n if (request != null) {\n this.emit(\"debug\", { type: \"sendRequest\", request });\n try {\n const result = await this.send(request.method, request.args);\n //console.log(\"RR\", result);\n this.emit(\"debug\", { type: \"getResponse\", result });\n return result;\n }\n catch (error) {\n this.emit(\"debug\", { type: \"getError\", error });\n throw this.getRpcError(request.method, request.args, error);\n }\n }\n return super._perform(req);\n }\n}\n_JsonRpcApiProvider_nextId = new WeakMap(), _JsonRpcApiProvider_options = new WeakMap();\nexport class JsonRpcProvider extends JsonRpcApiProvider {\n constructor(url, network) {\n if (url == null) {\n url = \"http:/\\/localhost:8545\";\n }\n super(network);\n _JsonRpcProvider_connect.set(this, void 0);\n _JsonRpcProvider_pollingInterval.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, { request: new FetchRequest(url) }, \"f\");\n }\n else {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, Object.assign({}, url), \"f\");\n __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request = __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request.clone();\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, 4000, \"f\");\n }\n async send(method, params) {\n params = copy(params);\n // Configure a POST connection for the requested method\n const connection = Object.assign({}, __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\"));\n connection.request = connection.request.clone();\n connection.request.body = this.prepareRequest(method, params);\n const result = (await fetchData(connection)).bodyJson;\n if (\"error\" in result) {\n return logger.throwError(\"error from JSON-RPC\", \"UNKNOWN_ERROR\", {\n result\n });\n }\n return result.result;\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\"); }\n set pollingInterval(value) {\n if (!Number.isInteger(value) || value < 0) {\n throw new Error(\"invalid interval\");\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, value, \"f\");\n this._forEachSubscriber((sub) => {\n if (isPollable(sub)) {\n sub.pollingInterval = __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\");\n }\n });\n }\n}\n_JsonRpcProvider_connect = new WeakMap(), _JsonRpcProvider_pollingInterval = new WeakMap();\n// This class should only be used when it is not possible for the\n// underlying network to change, such as with INFURA. If you are\n// using MetaMask or some other client which allows users to change\n// their network DO NOT USE THIS. Bad things will happen.\nexport class StaticJsonRpcProvider extends JsonRpcProvider {\n constructor(url, network) {\n super(url, network);\n defineProperties(this, { network });\n }\n async _detectNetwork() {\n return this.network;\n }\n}\nfunction spelunkData(value) {\n if (value == null) {\n return null;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\" && value.message.match(\"reverted\") && isHexString(value.data)) {\n return { message: value.message, data: value.data };\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n const result = spelunkData(value[key]);\n if (result) {\n return result;\n }\n }\n return null;\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return spelunkData(JSON.parse(value));\n }\n catch (error) { }\n }\n return null;\n}\nfunction _spelunkMessage(value, result) {\n if (value == null) {\n return;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\") {\n result.push(value.message);\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n _spelunkMessage(value[key], result);\n }\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return _spelunkMessage(JSON.parse(value), result);\n }\n catch (error) { }\n }\n}\nfunction spelunkMessage(value) {\n const result = [];\n _spelunkMessage(value, result);\n return result;\n}\n//# sourceMappingURL=provider-jsonrpc.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"rpc.ankr.com/eth\";\n case \"matic\":\n return \"rpc.ankr.com/polygon\";\n case \"arbitrum\":\n return \"rpc.ankr.com/arbitrum\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AnkrProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const connection = AnkrProvider.getConnection(network, apiKey);\n super(connection, network);\n defineProperties(this, { apiKey });\n // Ankr does not support filterId, so we force polling\n super._setOptions({ polling: true });\n }\n _getProvider(chainId) {\n try {\n return new AnkrProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"AnkrProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n}\n//# sourceMappingURL=provider-ankr.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.alchemyapi.io\";\n case \"ropsten\":\n return \"eth-ropsten.alchemyapi.io\";\n case \"rinkeby\":\n return \"eth-rinkeby.alchemyapi.io\";\n case \"goerli\":\n return \"eth-goerli.alchemyapi.io\";\n case \"kovan\":\n return \"eth-kovan.alchemyapi.io\";\n case \"matic\":\n return \"polygon-mainnet.g.alchemy.com\";\n case \"maticmum\":\n return \"polygon-mumbai.g.alchemy.com\";\n case \"arbitrum\":\n return \"arb-mainnet.g.alchemy.com\";\n case \"arbitrum-rinkeby\":\n return \"arb-rinkeby.g.alchemy.com\";\n case \"optimism\":\n return \"opt-mainnet.g.alchemy.com\";\n case \"optimism-kovan\":\n return \"opt-kovan.g.alchemy.com\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AlchemyProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n super(AlchemyProvider.getConnection(network, apiKey), network);\n defineProperties(this, { apiKey });\n }\n _getProvider(chainId) {\n try {\n return new AlchemyProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v2/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"alchemy\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n}\n//# sourceMappingURL=provider-alchemy.js.map","import { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nexport class CloudflareProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\") {\n const network = Network.from(_network);\n if (network.name !== \"homestead\") {\n return logger.throwArgumentError(\"unsupported network\", \"network\", _network);\n }\n super(\"https:/\\/cloudflare-eth.com/\", network);\n }\n}\n//# sourceMappingURL=provider-cloudflare.js.map","import { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { isError } from \"@ethersproject/logger\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nif (false) {\n console.log(isHexString, isError);\n} // @TODO\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { NetworkPlugin } from \"./plugins-network.js\";\nimport { logger } from \"./logger.js\";\nconst defaultApiKey = \"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB\";\nconst EtherscanPluginId = \"org.ethers.plugins.etherscan\";\nexport class EtherscanPlugin extends NetworkPlugin {\n constructor(baseUrl, communityApiKey) {\n super(EtherscanPluginId);\n //if (communityApiKey == null) { communityApiKey = null; }\n defineProperties(this, { baseUrl, communityApiKey });\n }\n clone() {\n return new EtherscanPlugin(this.baseUrl, this.communityApiKey);\n }\n}\nexport class EtherscanProvider extends AbstractProvider {\n constructor(_network, apiKey) {\n super();\n const network = Network.from(_network);\n if (apiKey == null) {\n const plugin = network.getPlugin(EtherscanPluginId);\n if (plugin) {\n apiKey = plugin.communityApiKey;\n }\n else {\n apiKey = defaultApiKey;\n }\n }\n defineProperties(this, { apiKey, network });\n // Test that the network is supported by Etherscan\n this.getBaseUrl();\n }\n getBaseUrl() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return plugin.baseUrl;\n }\n switch (this.network.name) {\n case \"homestead\":\n return \"https:/\\/api.etherscan.io\";\n case \"ropsten\":\n return \"https:/\\/api-ropsten.etherscan.io\";\n case \"rinkeby\":\n return \"https:/\\/api-rinkeby.etherscan.io\";\n case \"kovan\":\n return \"https:/\\/api-kovan.etherscan.io\";\n case \"goerli\":\n return \"https:/\\/api-goerli.etherscan.io\";\n default:\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", this.network);\n }\n getUrl(module, params) {\n const query = Object.keys(params).reduce((accum, key) => {\n const value = params[key];\n if (value != null) {\n accum += `&${key}=${value}`;\n }\n return accum;\n }, \"\");\n const apiKey = ((this.apiKey) ? `&apikey=${this.apiKey}` : \"\");\n return `${this.getBaseUrl()}/api?module=${module}${query}${apiKey}`;\n }\n getPostUrl() {\n return `${this.getBaseUrl()}/api`;\n }\n getPostData(module, params) {\n params.module = module;\n params.apikey = this.apiKey;\n return params;\n }\n async detectNetwork() {\n return this.network;\n }\n async fetch(module, params, post) {\n const url = (post ? this.getPostUrl() : this.getUrl(module, params));\n const payload = (post ? this.getPostData(module, params) : null);\n /*\n this.emit(\"debug\", {\n action: \"request\",\n request: url,\n provider: this\n });\n */\n const request = new FetchRequest(url);\n const connection = {\n request,\n throttleSlotInterval: 1000,\n processResponse: async (request, response) => {\n const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)) : {};\n const throttle = ((typeof (result.result) === \"string\") ? result.result : \"\").toLowerCase().indexOf(\"rate limit\") >= 0;\n if (module === \"proxy\") {\n // This JSON response indicates we are being throttled\n if (result && result.status == 0 && result.message == \"NOTOK\" && throttle) {\n response.throwThrottleError(result.result);\n }\n }\n else {\n if (throttle) {\n response.throwThrottleError(result.result);\n }\n }\n return response;\n },\n };\n if (payload) {\n request.setHeader(\"content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n request.body = Object.keys(payload).map((k) => `${k}=${payload[k]}`).join(\"&\");\n }\n const response = await fetchData(connection);\n if (!response.hasBody()) {\n throw new Error();\n }\n /*\n this.emit(\"debug\", {\n action: \"response\",\n request: url,\n response: deepCopy(result),\n provider: this\n });\n */\n const result = JSON.parse(toUtf8String(response.body));\n if (module === \"proxy\") {\n if (result.jsonrpc != \"2.0\") {\n // @TODO: not any\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n throw error;\n }\n if (result.error) {\n // @TODO: not any\n const error = new Error(result.error.message || \"unknown error\");\n if (result.error.code) {\n error.code = result.error.code;\n }\n if (result.error.data) {\n error.data = result.error.data;\n }\n throw error;\n }\n return result.result;\n }\n else {\n // getLogs, getHistory have weird success responses\n if (result.status == 0 && (result.message === \"No records found\" || result.message === \"No transactions found\")) {\n return result.result;\n }\n if (result.status != 1 || result.message != \"OK\") {\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n // if ((result.result || \"\").toLowerCase().indexOf(\"rate limit\") >= 0) {\n // error.throttleRetry = true;\n // }\n throw error;\n }\n return result.result;\n }\n }\n // The transaction has already been sanitized by the calls in Provider\n _getTransactionPostData(transaction) {\n const result = {};\n for (let key in transaction) {\n if (transaction[key] == null) {\n continue;\n }\n let value = transaction[key];\n if (key === \"type\" && value === 0) {\n continue;\n }\n // Quantity-types require no leading zero, unless 0\n if ({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true }[key]) {\n value = quantity(hexlify(value));\n }\n else if (key === \"accessList\") {\n value = \"[\" + this.network.formatter.accessList(value).map((set) => {\n return `{address:\"${set.address}\",storageKeys:[\"${set.storageKeys.join('\",\"')}\"]}`;\n }).join(\",\") + \"]\";\n }\n else {\n value = hexlify(value);\n }\n result[key] = value;\n }\n return result;\n }\n _checkError(req, error, transaction) {\n /*\n let body = \"\";\n if (isError(error, Logger.Errors.SERVER_ERROR) && error.response && error.response.hasBody()) {\n body = toUtf8String(error.response.body);\n }\n console.log(body);\n \n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\" && body) {\n \n // Etherscan keeps changing their string\n if (body.match(/reverted/i) || body.match(/VM execution error/i)) {\n \n // Etherscan prefixes the data like \"Reverted 0x1234\"\n let data = e.data;\n if (data) { data = \"0x\" + data.replace(/^.*0x/i, \"\"); }\n if (!isHexString(data)) { data = \"0x\"; }\n \n logger.throwError(\"call exception\", Logger.Errors.CALL_EXCEPTION, {\n error, data\n });\n }\n }\n \n // Get the message from any nested error structure\n let message = error.message;\n if (isError(error, Logger.Errors.SERVER_ERROR)) {\n if (error.error && typeof(error.error.message) === \"string\") {\n message = error.error.message;\n } else if (typeof(error.body) === \"string\") {\n message = error.body;\n } else if (typeof(error.responseText) === \"string\") {\n message = error.responseText;\n }\n }\n message = (message || \"\").toLowerCase();\n \n // \"Insufficient funds. The account you tried to send transaction from\n // does not have enough funds. Required 21464000000000 and got: 0\"\n if (message.match(/insufficient funds/)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.Errors.INSUFFICIENT_FUNDS, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction with the same hash was already imported.\"\n if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) {\n logger.throwError(\"nonce has already been used\", Logger.Errors.NONCE_EXPIRED, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction gas price is too low. There is another transaction with\n // same nonce in the queue. Try increasing the gas price or incrementing the nonce.\"\n if (message.match(/another transaction with same nonce/)) {\n logger.throwError(\"replacement fee too low\", Logger.Errors.REPLACEMENT_UNDERPRICED, {\n error, transaction, info: { method }\n });\n }\n \n if (message.match(/execution failed due to an exception|execution reverted/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, {\n error, transaction, info: { method }\n });\n }\n */\n throw error;\n }\n async _detectNetwork() {\n return this.network;\n }\n async _perform(req) {\n switch (req.method) {\n case \"chainId\":\n return this.network.chainId;\n case \"getBlockNumber\":\n return this.fetch(\"proxy\", { action: \"eth_blockNumber\" });\n case \"getGasPrice\":\n return this.fetch(\"proxy\", { action: \"eth_gasPrice\" });\n case \"getBalance\":\n // Returns base-10 result\n return this.fetch(\"account\", {\n action: \"balance\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getTransactionCount\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionCount\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getCode\":\n return this.fetch(\"proxy\", {\n action: \"eth_getCode\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getStorageAt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getStorageAt\",\n address: req.address,\n position: req.position,\n tag: req.blockTag\n });\n case \"sendTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_sendRawTransaction\",\n hex: req.signedTransaction\n }, true).catch((error) => {\n return this._checkError(req, error, req.signedTransaction);\n });\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return this.fetch(\"proxy\", {\n action: \"eth_getBlockByNumber\",\n tag: req.blockTag,\n boolean: (req.includeTransactions ? \"true\" : \"false\")\n });\n }\n return logger.throwError(\"getBlock by blockHash not supported by Etherscan\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getBlock(blockHash)\"\n });\n case \"getTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionByHash\",\n txhash: req.hash\n });\n case \"getTransactionReceipt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionReceipt\",\n txhash: req.hash\n });\n case \"call\": {\n if (req.blockTag !== \"latest\") {\n throw new Error(\"EtherscanProvider does not support blockTag for call\");\n }\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_call\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n case \"estimateGas\": {\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_estimateGas\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n /*\n case \"getLogs\": {\n // Needs to complain if more than one address is passed in\n const args: Record = { action: \"getLogs\" }\n \n if (params.filter.fromBlock) {\n args.fromBlock = checkLogTag(params.filter.fromBlock);\n }\n \n if (params.filter.toBlock) {\n args.toBlock = checkLogTag(params.filter.toBlock);\n }\n \n if (params.filter.address) {\n args.address = params.filter.address;\n }\n \n // @TODO: We can handle slightly more complicated logs using the logs API\n if (params.filter.topics && params.filter.topics.length > 0) {\n if (params.filter.topics.length > 1) {\n logger.throwError(\"unsupported topic count\", Logger.Errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics });\n }\n if (params.filter.topics.length === 1) {\n const topic0 = params.filter.topics[0];\n if (typeof(topic0) !== \"string\" || topic0.length !== 66) {\n logger.throwError(\"unsupported topic format\", Logger.Errors.UNSUPPORTED_OPERATION, { topic0: topic0 });\n }\n args.topic0 = topic0;\n }\n }\n \n const logs: Array = await this.fetch(\"logs\", args);\n \n // Cache txHash => blockHash\n let blocks: { [tag: string]: string } = {};\n \n // Add any missing blockHash to the logs\n for (let i = 0; i < logs.length; i++) {\n const log = logs[i];\n if (log.blockHash != null) { continue; }\n if (blocks[log.blockNumber] == null) {\n const block = await this.getBlock(log.blockNumber);\n if (block) {\n blocks[log.blockNumber] = block.hash;\n }\n }\n \n log.blockHash = blocks[log.blockNumber];\n }\n \n return logs;\n }\n */\n default:\n break;\n }\n return super._perform(req);\n }\n async getNetwork() {\n return this.network;\n }\n async getEtherPrice() {\n if (this.network.name !== \"homestead\") {\n return 0.0;\n }\n return parseFloat((await this.fetch(\"stats\", { action: \"ethprice\" })).ethusd);\n }\n isCommunityResource() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return (plugin.communityApiKey === this.apiKey);\n }\n return (defaultApiKey === this.apiKey);\n }\n}\n/*\n(async function() {\n const provider = new EtherscanProvider();\n console.log(provider);\n console.log(await provider.getBlockNumber());\n / *\n provider.on(\"block\", (b) => {\n console.log(\"BB\", b);\n });\n console.log(await provider.getTransactionReceipt(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\"));\n\n provider.once(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\", (tx) => {\n console.log(\"TT\", tx);\n });\n * /\n try {\n console.log(await provider.getBlock(100));\n } catch (error) {\n console.log(error);\n }\n\n try {\n console.log(await provider.getBlock(13821768));\n } catch (error) {\n console.log(error);\n }\n\n})();\n*/\n//# sourceMappingURL=provider-etherscan.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultProjectId = \"84842078b09946638c03157f83405213\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"mainnet.infura.io\";\n case \"ropsten\":\n return \"ropsten.infura.io\";\n case \"rinkeby\":\n return \"rinkeby.infura.io\";\n case \"kovan\":\n return \"kovan.infura.io\";\n case \"goerli\":\n return \"goerli.infura.io\";\n case \"matic\":\n return \"polygon-mainnet.infura.io\";\n case \"maticmum\":\n return \"polygon-mumbai.infura.io\";\n case \"optimism\":\n return \"optimism-mainnet.infura.io\";\n case \"optimism-kovan\":\n return \"optimism-kovan.infura.io\";\n case \"arbitrum\":\n return \"arbitrum-mainnet.infura.io\";\n case \"arbitrum-rinkeby\":\n return \"arbitrum-rinkeby.infura.io\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class InfuraProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", projectId, projectSecret) {\n const network = Network.from(_network);\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const connection = InfuraProvider.getConnection(network, projectId, projectSecret);\n super(connection, network);\n defineProperties(this, { projectId, projectSecret });\n }\n _getProvider(chainId) {\n try {\n return new InfuraProvider(chainId, this.projectId, this.projectSecret);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, projectId, projectSecret) {\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v3/${projectId}`);\n request.allowGzip = true;\n if (projectSecret) {\n request.setCredentials(\"\", projectSecret);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (projectId === defaultProjectId) {\n showThrottleMessage(\"InfuraProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.projectId === defaultProjectId);\n }\n}\n//# sourceMappingURL=provider-infura.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\n// These are load-balancer-based application IDs\nconst defaultAppIds = {\n homestead: \"6004bcd10040261633ade990\",\n ropsten: \"6004bd4d0040261633ade991\",\n rinkeby: \"6004bda20040261633ade994\",\n goerli: \"6004bd860040261633ade992\",\n};\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.gateway.pokt.network\";\n case \"ropsten\":\n return \"eth-ropsten.gateway.pokt.network\";\n case \"rinkeby\":\n return \"eth-rinkeby.gateway.pokt.network\";\n case \"goerli\":\n return \"eth-goerli.gateway.pokt.network\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nfunction normalizeApiKey(network, _appId, applicationSecretKey, loadBalancer) {\n loadBalancer = !!loadBalancer;\n let community = false;\n let applicationId = _appId;\n if (applicationId == null) {\n applicationId = defaultAppIds[network.name];\n if (applicationId == null) {\n logger.throwArgumentError(\"network does not support default applicationId\", \"applicationId\", _appId);\n }\n loadBalancer = true;\n community = true;\n }\n else if (applicationId === defaultAppIds[network.name]) {\n loadBalancer = true;\n community = true;\n }\n if (applicationSecretKey == null) {\n applicationSecretKey = null;\n }\n return { applicationId, applicationSecretKey, community, loadBalancer };\n}\nexport class PocketProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", _appId, _secretKey, _loadBalancer) {\n const network = Network.from(_network);\n const { applicationId, applicationSecretKey, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n const connection = PocketProvider.getConnection(network, applicationId, applicationSecretKey, loadBalancer);\n super(connection, network);\n defineProperties(this, { applicationId, applicationSecretKey, loadBalancer });\n }\n static getConnection(network, _appId, _secretKey, _loadBalancer) {\n const { applicationId, applicationSecretKey, community, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n let url = `https:/\\/${getHost(network.name)}/v1/`;\n if (loadBalancer) {\n url += \"lb/\";\n }\n url += applicationId;\n const request = new FetchRequest(url);\n request.allowGzip = true;\n if (applicationSecretKey) {\n request.setCredentials(\"\", applicationSecretKey);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (community) {\n showThrottleMessage(\"PocketProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.applicationId === defaultAppIds[this.network.name]);\n }\n}\n//# sourceMappingURL=provider-pocket.js.map","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 _FallbackProvider_instances, _FallbackProvider_configs, _FallbackProvider_initialSyncPromise, _FallbackProvider_getNextConfig, _FallbackProvider_addRunner, _FallbackProvider_initialSync, _FallbackProvider_checkQuorum, _FallbackProvider_waitForQuorum;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { shuffle } from \"./shuffle.js\";\n//const BN_0 = BigInt(\"0\");\nconst BN_1 = BigInt(\"1\");\nconst BN_2 = BigInt(\"2\");\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\nfunction getTime() { return (new Date()).getTime(); }\n;\nconst defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 };\nconst defaultState = {\n blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0,\n outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0,\n _network: null, _updateNumber: null, _totalTime: 0\n};\nasync function waitForSync(config, blockNumber) {\n while (config.blockNumber < 0 || config.blockNumber < blockNumber) {\n if (!config._updateNumber) {\n config._updateNumber = (async () => {\n const blockNumber = await config.provider.getBlockNumber();\n if (blockNumber > config.blockNumber) {\n config.blockNumber = blockNumber;\n }\n config._updateNumber = null;\n })();\n }\n await config._updateNumber;\n config.outOfSync++;\n }\n}\n// Normalizes a result to a string that can be used to compare against\n// other results using normal string equality\nfunction normalize(network, value, req) {\n switch (req.method) {\n case \"chainId\":\n return logger.getBigInt(value).toString();\n case \"getBlockNumber\":\n return logger.getNumber(value).toString();\n case \"getGasPrice\":\n return logger.getBigInt(value).toString();\n case \"getBalance\":\n return logger.getBigInt(value).toString();\n case \"getTransactionCount\":\n return logger.getNumber(value).toString();\n case \"getCode\":\n return hexlify(value);\n case \"getStorageAt\":\n return hexlify(value);\n case \"getBlock\":\n if (req.includeTransactions) {\n return JSON.stringify(network.formatter.blockWithTransactions(value));\n }\n return JSON.stringify(network.formatter.block(value));\n case \"getTransaction\":\n return JSON.stringify(network.formatter.transactionResponse(value));\n case \"getTransactionReceipt\":\n return JSON.stringify(network.formatter.receipt(value));\n case \"call\":\n return hexlify(value);\n case \"estimateGas\":\n return logger.getBigInt(value).toString();\n case \"getLogs\":\n return JSON.stringify(value.map((v) => network.formatter.log(v)));\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}\n// This strategy picks the highest wieght result, as long as the weight is\n// equal to or greater than quorum\nfunction checkQuorum(quorum, results) {\n const tally = new Map();\n for (const { result, normal, weight } of results) {\n const t = tally.get(normal) || { result, weight: 0 };\n t.weight += weight;\n tally.set(normal, t);\n }\n let bestWeight = 0;\n let bestResult = undefined;\n for (const { weight, result } of tally.values()) {\n if (weight >= quorum && weight > bestWeight) {\n bestWeight = weight;\n bestResult = result;\n }\n }\n return bestResult;\n}\n/*\nfunction getMean(results: Array): bigint {\n const total = results.reduce((a, r) => (a + BigInt(r.result)), BN_0);\n return total / BigInt(results.length);\n}\n*/\nfunction getMedian(results) {\n // Get the sorted values\n const values = results.map((r) => BigInt(r.result));\n values.sort((a, b) => ((a < b) ? -1 : (b > a) ? 1 : 0));\n const mid = values.length / 2;\n // Odd-length; take the middle value\n if (values.length % 2) {\n return values[mid];\n }\n // Even length; take the ceiling of the mean of the center two values\n return (values[mid - 1] + values[mid] + BN_1) / BN_2;\n}\nexport class FallbackProvider extends AbstractProvider {\n constructor(providers, network) {\n super(network);\n _FallbackProvider_instances.add(this);\n _FallbackProvider_configs.set(this, void 0);\n _FallbackProvider_initialSyncPromise.set(this, void 0);\n __classPrivateFieldSet(this, _FallbackProvider_configs, providers.map((p) => {\n if (p instanceof AbstractProvider) {\n return Object.assign({ provider: p }, defaultConfig, defaultState);\n }\n else {\n return Object.assign({}, defaultConfig, p, defaultState);\n }\n }), \"f\");\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, null, \"f\");\n this.quorum = 2; //Math.ceil(providers.length / 2);\n this.eventQuorum = 1;\n this.eventWorkers = 1;\n if (this.quorum > __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").reduce((a, c) => (a + c.weight), 0)) {\n logger.throwArgumentError(\"quorum exceed provider wieght\", \"quorum\", this.quorum);\n }\n }\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" }))).freeze();\n }\n _getSubscriber(sub) {\n throw new Error(\"@TODO\");\n }\n async _perform(req) {\n await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_initialSync).call(this);\n // Bootstrap enough to meet quorum\n const running = new Set();\n for (let i = 0; i < this.quorum; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n const result = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n for (const runner of running) {\n runner.done = true;\n }\n return result;\n }\n}\n_FallbackProvider_configs = new WeakMap(), _FallbackProvider_initialSyncPromise = new WeakMap(), _FallbackProvider_instances = new WeakSet(), _FallbackProvider_getNextConfig = function _FallbackProvider_getNextConfig(configs) {\n // Shuffle the states, sorted by priority\n const allConfigs = __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").slice();\n shuffle(allConfigs);\n allConfigs.sort((a, b) => (b.priority - a.priority));\n for (const config of allConfigs) {\n if (configs.indexOf(config) === -1) {\n return config;\n }\n }\n return null;\n}, _FallbackProvider_addRunner = function _FallbackProvider_addRunner(running, req) {\n const config = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_getNextConfig).call(this, Array.from(running).map((r) => r.config));\n if (config == null) {\n return null;\n }\n const result = {};\n const runner = {\n config, result, didBump: false, done: false,\n perform: null, staller: null\n };\n const now = getTime();\n runner.perform = (async () => {\n try {\n config.requests++;\n result.result = await config.provider._perform(req);\n }\n catch (error) {\n config.errorResponses++;\n result.error = error;\n }\n if (runner.done) {\n config.lateResponses++;\n }\n const dt = (getTime() - now);\n config._totalTime += dt;\n config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt;\n runner.perform = null;\n })();\n runner.staller = (async () => {\n await stall(config.stallTimeout);\n runner.staller = null;\n })();\n running.add(runner);\n return runner;\n}, _FallbackProvider_initialSync = \n// Initializes the blockNumber and network for each runner and\n// blocks until initialized\nasync function _FallbackProvider_initialSync() {\n let initialSync = __classPrivateFieldGet(this, _FallbackProvider_initialSyncPromise, \"f\");\n if (!initialSync) {\n const promises = [];\n __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").forEach((config) => {\n promises.push(waitForSync(config, 0));\n promises.push((async () => {\n config._network = await config.provider.getNetwork();\n })());\n });\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, initialSync = (async () => {\n // Wait for all providers to have a block number and network\n await Promise.all(promises);\n // Check all the networks match\n let chainId = null;\n for (const config of __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\")) {\n const network = (config._network);\n if (chainId == null) {\n chainId = network.chainId;\n }\n else if (network.chainId !== chainId) {\n logger.throwError(\"cannot mix providers on different networks\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FallbackProvider\"\n });\n }\n }\n })(), \"f\");\n }\n await initialSync;\n}, _FallbackProvider_checkQuorum = async function _FallbackProvider_checkQuorum(running, req) {\n // Get all the result objects\n const results = [];\n for (const runner of running) {\n if (\"result\" in runner.result) {\n const result = runner.result.result;\n results.push({\n result,\n normal: normalize((runner.config._network), result, req),\n weight: runner.config.weight\n });\n }\n }\n // Are there enough results to event meet quorum?\n if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) {\n return undefined;\n }\n switch (req.method) {\n case \"getBlockNumber\": {\n throw new Error(\"TODO\");\n }\n case \"getGasPrice\":\n case \"estimateGas\":\n return getMedian(results);\n case \"getBlock\":\n // Pending blocks are mempool dependant and already\n // quite untrustworthy\n if (\"blockTag\" in req && req.blockTag === \"pending\") {\n return results[0].result;\n }\n return checkQuorum(this.quorum, results);\n case \"chainId\":\n case \"getBalance\":\n case \"getTransactionCount\":\n case \"getCode\":\n case \"getStorageAt\":\n case \"getTransaction\":\n case \"getTransactionReceipt\":\n case \"getLogs\":\n return checkQuorum(this.quorum, results);\n case \"call\":\n // @TODO: Check errors\n return checkQuorum(this.quorum, results);\n case \"sendTransaction\":\n throw new Error(\"TODO\");\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}, _FallbackProvider_waitForQuorum = async function _FallbackProvider_waitForQuorum(running, req) {\n if (running.size === 0) {\n throw new Error(\"no runners?!\");\n }\n // Any promises that are interesting to watch for; an expired stall\n // or a successful perform\n const interesting = [];\n //const results: Array = [ ];\n //const errors: Array = [ ];\n let newRunners = 0;\n for (const runner of running) {\n // @TODO: use runner.perfom != null\n /*\n if (\"result\" in runner.result) {\n results.push(runner.result.result);\n } else if (\"error\" in runner.result) {\n errors.push(runner.result.error);\n }\n*/\n // No responses, yet; keep an eye on it\n if (runner.perform) {\n interesting.push(runner.perform);\n }\n // Still stalling...\n if (runner.staller) {\n interesting.push(runner.staller);\n continue;\n }\n // This runner has already triggered another runner\n if (runner.didBump) {\n continue;\n }\n // Got a response (result or error) or stalled; kick off another runner\n runner.didBump = true;\n newRunners++;\n }\n // Check for quorum\n /*\n console.log({ results, errors } );\n if (results.length >= this.quorum) {\n return results[0];\n }\n\n if (errors.length >= this.quorum) {\n return errors[0];\n }\n */\n const value = await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_checkQuorum).call(this, running, req);\n if (value !== undefined) {\n if (value instanceof Error) {\n throw value;\n }\n return value;\n }\n // Add any new runners, because a staller timed out or a result\n // or error response came in.\n for (let i = 0; i < newRunners; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n if (interesting.length === 0) {\n throw new Error(\"quorum not met\");\n // return logger.throwError(\"failed to meet quorum\", \"\", {\n // });\n }\n // Wait for someone to either complete its perform or trigger a stall\n await Promise.race(interesting);\n return await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n};\n//# sourceMappingURL=provider-fallback.js.map","export function shuffle(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n }\n}\n//# sourceMappingURL=shuffle.js.map","function getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst _WebSocket = getGlobal().WebSocket;\nexport { _WebSocket as WebSocket };\n//# sourceMappingURL=ws-browser.js.map","/**\n * SocketProvider\n *\n * Generic long-lived socket provider.\n *\n * Sub-classing notes\n * - a sub-class MUST call the `_start()` method once connected\n * - a sub-class MUST override the `_write(string)` method\n * - a sub-class MUST call `_processMessage(string)` for each message\n */\nvar __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 _SocketSubscriber_provider, _SocketSubscriber_filter, _SocketSubscriber_filterId, _SocketSubscriber_paused, _SocketSubscriber_emitPromise, _SocketEventSubscriber_logFilter, _SocketEventSubscriber_formatter, _SocketProvider_callbacks, _SocketProvider_ready, _SocketProvider_subs, _SocketProvider_pending;\nimport { UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { JsonRpcApiProvider } from \"./provider-jsonrpc.js\";\nexport class SocketSubscriber {\n constructor(provider, filter) {\n _SocketSubscriber_provider.set(this, void 0);\n _SocketSubscriber_filter.set(this, void 0);\n _SocketSubscriber_filterId.set(this, void 0);\n _SocketSubscriber_paused.set(this, void 0);\n _SocketSubscriber_emitPromise.set(this, void 0);\n __classPrivateFieldSet(this, _SocketSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n get filter() { return JSON.parse(__classPrivateFieldGet(this, _SocketSubscriber_filter, \"f\")); }\n start() {\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_subscribe\", this.filter).then((filterId) => {\n ;\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\")._register(filterId, this);\n return filterId;\n }), \"f\");\n }\n stop() {\n (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\")).then((filterId) => {\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_unsubscribe\", [filterId]);\n });\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n }\n // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs\n // and resume\n pause(dropWhilePaused) {\n if (!dropWhilePaused) {\n logger.throwError(\"preserve logs while paused not supported by SocketSubscriber yet\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause(false)\"\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_paused, !!dropWhilePaused, \"f\");\n }\n resume() {\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n }\n _handleMessage(message) {\n if (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\") == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _SocketSubscriber_paused, \"f\") === null) {\n let emitPromise = __classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\");\n if (emitPromise == null) {\n emitPromise = this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n }\n else {\n emitPromise = emitPromise.then(async () => {\n await this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, emitPromise.then(() => {\n if (__classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\") === emitPromise) {\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n }), \"f\");\n }\n }\n async _emit(provider, message) {\n throw new Error(\"sub-classes must implemente this; _emit\");\n }\n}\n_SocketSubscriber_provider = new WeakMap(), _SocketSubscriber_filter = new WeakMap(), _SocketSubscriber_filterId = new WeakMap(), _SocketSubscriber_paused = new WeakMap(), _SocketSubscriber_emitPromise = new WeakMap();\nexport class SocketBlockSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newHeads\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"block\", parseInt(message.number));\n }\n}\nexport class SocketPendingSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newPendingTransactions\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"pending\", message);\n }\n}\nexport class SocketEventSubscriber extends SocketSubscriber {\n constructor(provider, filter) {\n super(provider, [\"logs\", filter]);\n _SocketEventSubscriber_logFilter.set(this, void 0);\n _SocketEventSubscriber_formatter.set(this, void 0);\n __classPrivateFieldSet(this, _SocketEventSubscriber_logFilter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketEventSubscriber_formatter, provider.getNetwork().then((network) => network.formatter), \"f\");\n }\n get logFilter() { return JSON.parse(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\")); }\n async _emit(provider, message) {\n const formatter = await __classPrivateFieldGet(this, _SocketEventSubscriber_formatter, \"f\");\n provider.emit(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\"), formatter.log(message, provider));\n }\n}\n_SocketEventSubscriber_logFilter = new WeakMap(), _SocketEventSubscriber_formatter = new WeakMap();\nexport class SocketProvider extends JsonRpcApiProvider {\n constructor(network) {\n super(network);\n _SocketProvider_callbacks.set(this, void 0);\n _SocketProvider_ready.set(this, void 0);\n // Maps each filterId to its subscriber\n _SocketProvider_subs.set(this, void 0);\n // If any events come in before a subscriber has finished\n // registering, queue them\n _SocketProvider_pending.set(this, void 0);\n __classPrivateFieldSet(this, _SocketProvider_callbacks, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_ready, false, \"f\");\n __classPrivateFieldSet(this, _SocketProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_pending, new Map(), \"f\");\n }\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"close\":\n return new UnmanagedSubscriber(\"close\");\n case \"block\":\n return new SocketBlockSubscriber(this);\n case \"pending\":\n return new SocketPendingSubscriber(this);\n case \"event\":\n return new SocketEventSubscriber(this, sub.filter);\n case \"orphan\":\n // Handled auto-matically within AbstractProvider\n // when the log.removed = true\n if (sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"drop-log\");\n }\n }\n return super._getSubscriber(sub);\n }\n _register(filterId, subscriber) {\n __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").set(filterId, subscriber);\n const pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending) {\n for (const message of pending) {\n subscriber._handleMessage(message);\n }\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").delete(filterId);\n }\n }\n async send(method, params) {\n const payload = this.prepareRequest(method, params);\n const promise = new Promise((resolve, reject) => {\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").set(payload.id, { payload, resolve, reject });\n });\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n await this._write(JSON.stringify(payload));\n }\n return await promise;\n }\n // Sub-classes must call this once they are connected\n async _start() {\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _SocketProvider_ready, true, \"f\");\n for (const { payload } of __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").values()) {\n await this._write(JSON.stringify(payload));\n }\n }\n // Sub-classes must call this for each message\n async _processMessage(message) {\n const result = JSON.parse(message);\n if (\"id\" in result) {\n const promise = __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").get(result.id);\n if (!promise) {\n console.log(\"Weird... Response for not a thing we sent\");\n return;\n }\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").delete(result.id);\n if (\"error\" in result) {\n const { message, code, data } = result.error;\n const error = logger.makeError(message || \"unkonwn error\", \"SERVER_ERROR\", {\n request: `ws:${JSON.stringify(promise.payload)}`,\n info: { code, data }\n });\n promise.reject(error);\n }\n else {\n promise.resolve(result.result);\n }\n }\n else if (result.method === \"eth_subscription\") {\n const filterId = result.params.subscription;\n const subscriber = __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").get(filterId);\n if (subscriber) {\n subscriber._handleMessage(result.params.result);\n }\n else {\n let pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending == null) {\n pending = [];\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").set(filterId, pending);\n }\n pending.push(result.params.result);\n }\n }\n }\n async _write(message) {\n throw new Error(\"sub-classes must override this\");\n }\n}\n_SocketProvider_callbacks = new WeakMap(), _SocketProvider_ready = new WeakMap(), _SocketProvider_subs = new WeakMap(), _SocketProvider_pending = new WeakMap();\n//# sourceMappingURL=provider-socket.js.map","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 _WebSocketProvider_websocket;\nimport { WebSocket } from \"ws\"; /*-browser*/\nimport { SocketProvider } from \"./provider-socket.js\";\nexport class WebSocketProvider extends SocketProvider {\n constructor(url, network) {\n super(network);\n _WebSocketProvider_websocket.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, new WebSocket(url), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, url, \"f\");\n }\n this.websocket.onopen = () => {\n this._start();\n };\n this.websocket.onmessage = (message) => {\n this._processMessage(message.data);\n };\n }\n get websocket() { return __classPrivateFieldGet(this, _WebSocketProvider_websocket, \"f\"); }\n async _write(message) {\n this.websocket.send(message);\n }\n}\n_WebSocketProvider_websocket = new WeakMap();\n//# sourceMappingURL=provider-websocket.js.map","import { EnsPlugin, GasCostPlugin, MaxPriorityFeePlugin } from \"./plugins-network.js\";\nimport { EtherscanPlugin } from \"./provider-etherscan.js\";\nimport { Network as _Network } from \"./network.js\";\n// See: https://chainlist.org\nfunction injectCommonNetworks(Network) {\n /// Register popular Ethereum networks\n function registerEth(name, chainId, options) {\n const func = function () {\n const network = new Network(name, chainId);\n // We use 0 to disable ENS\n if (options.ensNetwork != null) {\n network.attachPlugin(new EnsPlugin(null, options.ensNetwork));\n }\n if (options.priorityFee) {\n network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee));\n }\n if (options.etherscan) {\n const { url, apiKey } = options.etherscan;\n network.attachPlugin(new EtherscanPlugin(url, apiKey));\n }\n network.attachPlugin(new GasCostPlugin());\n return network;\n };\n // Register the network by name and chain ID\n Network.register(name, func);\n Network.register(chainId, func);\n if (options.altNames) {\n options.altNames.forEach((name) => {\n Network.register(name, func);\n });\n }\n }\n registerEth(\"homestead\", 1, { ensNetwork: 1, altNames: [\"mainnet\"] });\n registerEth(\"ropsten\", 3, { ensNetwork: 3 });\n registerEth(\"rinkeby\", 4, { ensNetwork: 4 });\n registerEth(\"goerli\", 5, { ensNetwork: 5 });\n registerEth(\"kovan\", 42, { ensNetwork: 42 });\n registerEth(\"classic\", 61, {});\n registerEth(\"classicKotti\", 6, {});\n registerEth(\"xdai\", 100, { ensNetwork: 1 });\n // Polygon has a 35 gwei maxPriorityFee requirement\n registerEth(\"matic\", 137, {\n ensNetwork: 1,\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api.polygonscan.com/\"\n }\n });\n registerEth(\"maticMumbai\", 80001, {\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api-testnet.polygonscan.com/\"\n }\n });\n registerEth(\"bnb\", 56, {\n ensNetwork: 1,\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api.bscscan.com\"\n }\n });\n registerEth(\"bnbt\", 97, {\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api-testnet.bscscan.com\"\n }\n });\n return Network;\n}\nconst Network = injectCommonNetworks(_Network);\nexport { Network };\n//# sourceMappingURL=common-networks.js.map","const IpcSocketProvider = undefined;\nexport { IpcSocketProvider };\n//# sourceMappingURL=provider-ipcsocket-browser.js.map","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 _ContractTransactionReceipt_interface, _ContractTransactionResponse_interface;\nimport { defineProperties, EventPayload } from \"@ethersproject/properties\";\nimport { Log, TransactionReceipt, TransactionResponse } from \"@ethersproject/providers\";\nexport class EventLog extends Log {\n constructor(log, iface, fragment) {\n super(log, log.provider);\n const args = iface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, interface: iface });\n }\n get eventName() { return this.fragment.name; }\n get eventSignature() { return this.fragment.format(); }\n}\nexport class ContractTransactionReceipt extends TransactionReceipt {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionReceipt_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionReceipt_interface, iface, \"f\");\n }\n get logs() {\n return super.logs.map((log) => {\n const fragment = log.topics.length ? __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\").getEvent(log.topics[0]) : null;\n if (fragment) {\n return new EventLog(log, __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\"), fragment);\n }\n else {\n return log;\n }\n });\n }\n}\n_ContractTransactionReceipt_interface = new WeakMap();\nexport class ContractTransactionResponse extends TransactionResponse {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionResponse_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionResponse_interface, iface, \"f\");\n }\n async wait(confirms) {\n const receipt = await super.wait();\n if (receipt == null) {\n return null;\n }\n return new ContractTransactionReceipt(__classPrivateFieldGet(this, _ContractTransactionResponse_interface, \"f\"), this.provider, receipt);\n }\n}\n_ContractTransactionResponse_interface = new WeakMap();\nexport class ContractEventPayload extends EventPayload {\n constructor(contract, listener, filter, fragment, _log) {\n super(contract, listener, filter);\n const log = new EventLog(_log, contract.interface, fragment);\n const args = contract.interface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, log });\n }\n get eventName() {\n return this.fragment.name;\n }\n get eventSignature() {\n return this.fragment.format();\n }\n async getBlock() {\n return await this.log.getBlock();\n }\n async getTransaction() {\n return await this.log.getTransaction();\n }\n async getTransactionReceipt() {\n return await this.log.getTransactionReceipt();\n }\n}\n//# sourceMappingURL=wrappers.js.map","export const version = \"@ethersproject/contract@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","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 _PreparedTopicFilter_filter;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { Interface, Typed } from \"@ethersproject/abi\";\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { copyRequest } from \"@ethersproject/providers\";\nimport { ContractEventPayload, ContractTransactionResponse, EventLog } from \"./wrappers.js\";\nimport { logger } from \"./logger.js\";\nfunction canEstimate(value) {\n return (value && typeof (value.estimateGas) === \"function\");\n}\nfunction canCall(value) {\n return (value && typeof (value.call) === \"function\");\n}\nfunction canSend(value) {\n return (value && typeof (value.sendTransaction) === \"function\");\n}\nfunction canResolve(value) {\n return (value && typeof (value.resolveName) === \"function\");\n}\nfunction canQuery(value) {\n return (value && typeof (value.getLogs) === \"function\");\n}\nfunction canSubscribe(value) {\n return (value && typeof (value.on) === \"function\" && typeof (value.off) === \"function\");\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\nclass PreparedTopicFilter {\n constructor(contract, fragment, args) {\n _PreparedTopicFilter_filter.set(this, void 0);\n defineProperties(this, { fragment });\n if (fragment.inputs.length < args.length) {\n throw new Error(\"too many arguments\");\n }\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(contract.runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n __classPrivateFieldSet(this, _PreparedTopicFilter_filter, (async function () {\n const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n })(), \"f\");\n }\n getTopicFilter() {\n return __classPrivateFieldGet(this, _PreparedTopicFilter_filter, \"f\");\n }\n}\n_PreparedTopicFilter_filter = new WeakMap();\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n// the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n// TransactionResponse otherwise)\n//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\nfunction _WrappedMethodBase() {\n return Function;\n}\nfunction getRunner(value, feature) {\n if (value == null) {\n return null;\n }\n if (typeof (value[feature]) === \"function\") {\n return value;\n }\n if (value.provider && typeof (value.provider[feature]) === \"function\") {\n return value.provider;\n }\n return null;\n}\nexport async function copyOverrides(arg) {\n // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n const overrides = copyRequest(Typed.dereference(arg, \"overrides\"));\n // Some sanity checking; these are what these methods adds\n //if ((overrides).to) {\n if (overrides.to) {\n logger.throwArgumentError(\"cannot override to\", \"overrides.to\", overrides.to);\n }\n else if (overrides.data) {\n logger.throwArgumentError(\"cannot override data\", \"overrides.data\", overrides.data);\n }\n // Resolve any from\n if (overrides.from) {\n overrides.from = await resolveAddress(overrides.from);\n }\n return overrides;\n}\nexport async function resolveArgs(_runner, inputs, args) {\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(_runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n return await Promise.all(inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n}\nclass WrappedMethod extends _WrappedMethodBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getFunctionName(key),\n _contract: contract, _key: key\n });\n const proxy = new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n const fragment = target.getFragment(...args);\n if (fragment.constant) {\n return await target.staticCall(...args);\n }\n return await target.send(...args);\n },\n });\n return proxy;\n }\n // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n get fragment() {\n return this._contract.interface.getFunction(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getFunction(this._key, args);\n }\n async populateTransaction(...args) {\n const fragment = this.getFragment(...args);\n // If an overrides was passed in, copy it and normalize the values\n let overrides = {};\n if (fragment.inputs.length + 1 === args.length) {\n overrides = await copyOverrides(args.pop());\n }\n if (fragment.inputs.length !== args.length) {\n throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n }\n const resolvedArgs = await resolveArgs(this._contract.runner, fragment.inputs, args);\n return Object.assign({}, overrides, await resolveProperties({\n to: this._contract.getAddress(),\n data: this._contract.interface.encodeFunctionData(fragment, resolvedArgs)\n }));\n }\n async staticCall(...args) {\n const result = await this.staticCallResult(...args);\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n async send(...args) {\n const runner = getRunner(this._contract.runner, \"sendTransaction\");\n if (!canSend(runner)) {\n return logger.throwError(\"contract runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", {\n operation: \"sendTransaction\"\n });\n }\n const tx = await runner.sendTransaction(await this.populateTransaction(...args));\n const provider = getRunner(this._contract.runner, \"getLogs\");\n return new ContractTransactionResponse(this._contract.interface, provider, tx);\n }\n async estimateGas(...args) {\n const runner = getRunner(this._contract.runner, \"estimateGas\");\n if (!canEstimate(runner)) {\n return logger.throwError(\"contract runner does not support gas estimation\", \"UNSUPPORTED_OPERATION\", {\n operation: \"estimateGas\"\n });\n }\n return await runner.estimateGas(await this.populateTransaction(...args));\n }\n async staticCallResult(...args) {\n const runner = getRunner(this._contract.runner, \"call\");\n if (!canCall(runner)) {\n return logger.throwError(\"contract runner does not support calling\", \"UNSUPPORTED_OPERATION\", {\n operation: \"call\"\n });\n }\n const fragment = this.getFragment(...args);\n const tx = await this.populateTransaction(...args);\n let result = \"0x\";\n try {\n result = await runner.call(tx);\n }\n catch (error) {\n if (isCallException(error)) {\n throw this._contract.interface.makeError(fragment, error.data, tx);\n }\n throw error;\n }\n return this._contract.interface.decodeFunctionResult(fragment, result);\n }\n}\nfunction _WrappedEventBase() {\n return Function;\n}\nclass WrappedEvent extends _WrappedEventBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getEventName(key),\n _contract: contract, _key: key\n });\n return new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n return new PreparedTopicFilter(contract, target.getFragment(...args), args);\n },\n });\n }\n // Only works on non-ambiguous keys\n get fragment() {\n return this._contract.interface.getEvent(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getEvent(this._key, args);\n }\n}\n;\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\nconst internal = Symbol.for(\"_ethersInternal_contract\");\nconst internalValues = new WeakMap();\nfunction setInternal(contract, values) {\n internalValues.set(contract[internal], values);\n}\nfunction getInternal(contract) {\n return internalValues.get(contract[internal]);\n}\nfunction isDeferred(value) {\n return (value && typeof (value) === \"object\" && (\"getTopicFilter\" in value) &&\n (typeof (value.getTopicFilter) === \"function\") && value.fragment);\n}\nasync function getSubTag(contract, event) {\n let fragment;\n let topics;\n if (Array.isArray(event)) {\n // Topics; e.g. `[ \"0x1234...89ab\" ]`\n fragment = contract.interface.getEvent(event[0]);\n topics = event;\n }\n else if (typeof (event) === \"string\") {\n // Event name (name or signature); `\"Transfer\"`\n fragment = contract.interface.getEvent(event);\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else if (isDeferred(event)) {\n // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n fragment = event.fragment;\n topics = await event.getTopicFilter();\n }\n else if (\"fragment\" in event) {\n // ContractEvent; e.g. `contract.filter.Transfer`\n fragment = event.fragment;\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else {\n console.log(event);\n throw new Error(\"TODO\");\n }\n // Normalize topics and sort TopicSets\n topics = topics.map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n });\n const tag = topics.map((t) => {\n if (t == null) {\n return \"null\";\n }\n if (Array.isArray(t)) {\n return t.join(\"|\");\n }\n return t;\n }).join(\"&\");\n return { fragment, tag, topics };\n}\nasync function hasSub(contract, event) {\n const { subs } = getInternal(contract);\n return subs.get((await getSubTag(contract, event)).tag) || null;\n}\nasync function getSub(contract, event) {\n // Make sure our runner can actually subscribe to events\n const runner = getRunner(contract.runner, \"on\");\n const runnerOff = getRunner(contract.runner, \"off\");\n if (!runner || runner !== runnerOff || !canSubscribe(runner)) {\n return logger.throwError(\"contract runner does not support subscribing\", \"UNSUPPORTED_OPERATION\", {\n operation: \"on\"\n });\n }\n const { fragment, tag, topics } = await getSubTag(contract, event);\n const { addr, subs } = getInternal(contract);\n let sub = subs.get(tag);\n if (!sub) {\n const address = (addr ? addr : contract);\n const filter = { address, topics };\n const listener = (log) => {\n const payload = new ContractEventPayload(contract, null, event, fragment, log);\n emit(contract, event, payload.args, payload);\n };\n let started = false;\n const start = () => {\n if (started) {\n return;\n }\n runner.on(filter, listener);\n started = true;\n };\n const stop = () => {\n if (!started) {\n return;\n }\n runner.off(filter, listener);\n started = false;\n };\n sub = { tag, listeners: [], start, stop };\n subs.set(tag, sub);\n }\n return sub;\n}\nasync function _emit(contract, event, args, payload) {\n await lastEmit;\n const sub = await hasSub(contract, event);\n if (!sub) {\n return false;\n }\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const passArgs = args.slice();\n if (payload) {\n passArgs.push(new ContractEventPayload(contract, (once ? null : listener), event, payload.fragment, payload.log));\n }\n setTimeout(() => { listener.call(contract, ...passArgs); }, 0);\n return !once;\n });\n return (count > 0);\n}\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit = Promise.resolve();\nasync function emit(contract, event, args, payload) {\n try {\n await lastEmit;\n }\n catch (error) { }\n const resultPromise = _emit(contract, event, args, payload);\n lastEmit = resultPromise;\n return await resultPromise;\n}\nconst passProperties = [\"then\"];\nexport class BaseContract {\n constructor(target, abi, runner = null, _deployTx) {\n const iface = Interface.from(abi);\n defineProperties(this, { target, runner, interface: iface });\n Object.defineProperty(this, internal, { value: {} });\n let addrPromise;\n let addr = null;\n let deployTx = null;\n if (_deployTx) {\n const provider = getRunner(runner, \"getLogs\");\n deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx);\n }\n let subs = new Map();\n // Resolve the target as the address\n if (typeof (target) === \"string\") {\n if (isHexString(target)) {\n addr = target;\n addrPromise = Promise.resolve(target);\n }\n else {\n const resolver = getRunner(runner, \"resolveName\");\n if (!canResolve(resolver)) {\n throw logger.makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\"\n });\n }\n addrPromise = resolver.resolveName(target).then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n }\n else {\n addrPromise = target.getAddress().then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n // Set our private values\n setInternal(this, { addrPromise, addr, deployTx, subs });\n // Add the event filters\n const filters = new Proxy({}, {\n get: (target, _prop, receiver) => {\n // Pass important checks (like `then` for Promise) through\n if (passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = this.getEvent(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract event: ${prop}`);\n }\n });\n defineProperties(this, { filters });\n // Return a Proxy that will respond to functions\n return new Proxy(this, {\n get: (target, _prop, receiver) => {\n if (_prop in target || passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = target.getFunction(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract method: ${prop}`);\n }\n });\n }\n async getAddress() { return await getInternal(this).addrPromise; }\n deploymentTransaction() {\n return getInternal(this).deployTx;\n }\n getFunction(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedMethod(this, key));\n }\n getEvent(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedEvent(this, key));\n }\n async queryFilter(event, fromBlock = 0, toBlock = \"latest\") {\n const { addr, addrPromise } = getInternal(this);\n const address = (addr ? addr : (await addrPromise));\n const { fragment, topics } = await getSubTag(this, event);\n const filter = { address, topics, fromBlock, toBlock };\n const runner = getRunner(this.runner, \"getLogs\");\n if (!canQuery(runner)) {\n return logger.throwError(\"contract runner does not support querying\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getLogs\"\n });\n }\n return (await runner.getLogs(filter)).map((log) => {\n return new EventLog(log, this.interface, fragment);\n });\n }\n async on(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: false });\n sub.start();\n return this;\n }\n async once(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: true });\n sub.start();\n return this;\n }\n async emit(event, ...args) {\n return await emit(this, event, args, null);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n const { subs } = getInternal(this);\n let total = 0;\n for (const { listeners } of subs.values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n const { subs } = getInternal(this);\n let result = [];\n for (const { listeners } of subs.values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (listener == null || sub.listeners.length === 0) {\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n else {\n const { subs } = getInternal(this);\n for (const { tag, stop } of subs.values()) {\n stop();\n subs.delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return await this.off(event, listener);\n }\n static buildClass(abi) {\n class CustomContract extends BaseContract {\n constructor(address, runner = null) {\n super(address, abi, runner);\n }\n }\n return CustomContract;\n }\n ;\n static from(target, abi, runner = null) {\n const contract = new this(target, abi, runner);\n return contract;\n }\n}\nfunction _ContractBase() {\n return BaseContract;\n}\nexport class Contract extends _ContractBase() {\n}\n//# sourceMappingURL=contract.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nexport function computeAddress(key) {\n const publicKey = SigningKey.computePublicKey(key, false);\n return getAddress(keccak256(\"0x\" + publicKey.substring(4)).substring(26));\n}\n//# sourceMappingURL=address.js.map","const subsChrs = \" !#$%&'()*+,-./<=>?@[]^_`{|}~\";\nconst Word = /^[a-z]*$/i;\nfunction unfold(words, sep) {\n let initial = 97;\n return words.reduce((accum, word) => {\n if (word === sep) {\n initial++;\n }\n else if (word.match(Word)) {\n accum.push(String.fromCharCode(initial) + word);\n }\n else {\n initial = 97;\n accum.push(word);\n }\n return accum;\n }, []);\n}\nexport function decode(data, subs) {\n // Replace all the substitutions with their expanded form\n for (let i = subsChrs.length - 1; i >= 0; i--) {\n data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2));\n }\n // Get all tle clumps; each suffix, first-increment and second-increment\n const clumps = [];\n const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => {\n if (semi) {\n for (let i = parseInt(semi); i >= 0; i--) {\n clumps.push(\";\");\n }\n }\n else {\n clumps.push(item.toLowerCase());\n }\n return \"\";\n });\n if (leftover) {\n throw new Error(`leftovers: ${JSON.stringify(leftover)}`);\n }\n return unfold(unfold(clumps, \";\"), \":\");\n}\nexport function decodeOwl(data) {\n if (data[0] !== \"0\") {\n throw TypeError(\"unsupported auwl data\");\n }\n return decode(data.substring(1 + 2 * subsChrs.length), data.substring(1, 1 + 2 * subsChrs.length));\n}\n//# sourceMappingURL=decode-owl.js.map","export const version = \"@ethersproject/wordlists@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { defineProperties } from \"@ethersproject/properties\";\nexport class Wordlist {\n constructor(locale) {\n defineProperties(this, { locale });\n }\n // Subclasses may override this\n split(mnemonic) {\n return mnemonic.toLowerCase().split(/ +/g);\n }\n // Subclasses may override this\n join(words) {\n return words.join(\" \");\n }\n}\n//# sourceMappingURL=wordlist.js.map","// Use the encode-latin.js script to create the necessary\n// data files to be consumed by this class\nvar __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 _WordlistOwl_instances, _WordlistOwl_data, _WordlistOwl_checksum, _WordlistOwl_words, _WordlistOwl_loadWords;\nimport { id } from \"@ethersproject/hash\";\nimport { decodeOwl } from \"./decode-owl.js\";\nimport { logger } from \"./logger.js\";\nimport { Wordlist } from \"./wordlist.js\";\nexport class WordlistOwl extends Wordlist {\n constructor(locale, data, checksum) {\n super(locale);\n _WordlistOwl_instances.add(this);\n _WordlistOwl_data.set(this, void 0);\n _WordlistOwl_checksum.set(this, void 0);\n _WordlistOwl_words.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwl_data, data, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_checksum, checksum, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_words, null, \"f\");\n }\n get _data() { return __classPrivateFieldGet(this, _WordlistOwl_data, \"f\"); }\n _decodeWords() {\n return decodeOwl(__classPrivateFieldGet(this, _WordlistOwl_data, \"f\"));\n }\n getWord(index) {\n const words = __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this);\n if (index < 0 || index >= words.length) {\n logger.throwArgumentError(`invalid word index: ${index}`, \"index\", index);\n }\n return words[index];\n }\n getWordIndex(word) {\n return __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this).indexOf(word);\n }\n}\n_WordlistOwl_data = new WeakMap(), _WordlistOwl_checksum = new WeakMap(), _WordlistOwl_words = new WeakMap(), _WordlistOwl_instances = new WeakSet(), _WordlistOwl_loadWords = function _WordlistOwl_loadWords() {\n if (__classPrivateFieldGet(this, _WordlistOwl_words, \"f\") == null) {\n const words = this._decodeWords();\n // Verify the computed list matches the official list\n const checksum = id(words.join(\"\\n\") + \"\\n\");\n /* c8 ignore start */\n if (checksum !== __classPrivateFieldGet(this, _WordlistOwl_checksum, \"f\")) {\n throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);\n }\n /* c8 ignore stop */\n __classPrivateFieldSet(this, _WordlistOwl_words, words, \"f\");\n }\n return __classPrivateFieldGet(this, _WordlistOwl_words, \"f\");\n};\n//# sourceMappingURL=wordlist-owl.js.map","import { WordlistOwl } from \"./wordlist-owl.js\";\nconst words = \"0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO\";\nconst checksum = \"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\";\nexport class LangEn extends WordlistOwl {\n constructor() { super(\"en\", words, checksum); }\n}\nexport const langEn = new LangEn();\n//# sourceMappingURL=lang-en.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","export const version = \"@ethersproject/wallet@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { langEn as en } from \"./lang-en.js\";\nexport const wordlists = Object.freeze({\n en\n});\n//# sourceMappingURL=wordlists-en.js.map","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 _WordlistOwlA_accent;\nimport { WordlistOwl } from \"./wordlist-owl.js\";\nimport { decodeOwlA } from \"./decode-owla.js\";\nexport class WordlistOwlA extends WordlistOwl {\n constructor(locale, data, accent, checksum) {\n super(locale, data, checksum);\n _WordlistOwlA_accent.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwlA_accent, accent, \"f\");\n }\n get _accent() { return __classPrivateFieldGet(this, _WordlistOwlA_accent, \"f\"); }\n _decodeWords() {\n return decodeOwlA(this._data, this._accent);\n }\n}\n_WordlistOwlA_accent = new WeakMap();\n//# sourceMappingURL=wordlist-owla.js.map","import { decodeBits } from \"./bit-reader.js\";\nimport { decodeOwl } from \"./decode-owl.js\";\nexport function decodeOwlA(data, accents) {\n let words = decodeOwl(data).join(\",\");\n // Inject the accents\n accents.split(/,/g).forEach((accent) => {\n const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);\n if (!match) {\n throw new Error(\"internal error parsing accents\");\n }\n let posOffset = 0;\n const positions = decodeBits(parseInt(match[3]), match[4]);\n const charCode = parseInt(match[2]);\n const regex = new RegExp(`([${match[1]}])`, \"g\");\n words = words.replace(regex, (all, letter) => {\n const rem = --positions[posOffset];\n if (rem === 0) {\n letter = String.fromCharCode(letter.charCodeAt(0), charCode);\n posOffset++;\n }\n return letter;\n });\n });\n return words.split(\",\");\n}\n//# sourceMappingURL=decode-owla.js.map","const Base64 = \")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\";\nexport function decodeBits(width, data) {\n const maxValue = (1 << width) - 1;\n const result = [];\n let accum = 0, bits = 0, flood = 0;\n for (let i = 0; i < data.length; i++) {\n // Accumulate 6 bits of data\n accum = ((accum << 6) | Base64.indexOf(data[i]));\n bits += 6;\n // While we have enough for a word...\n while (bits >= width) {\n // ...read the word\n const value = (accum >> (bits - width));\n accum &= (1 << (bits - width)) - 1;\n bits -= width;\n // A value of 0 indicates we exceeded maxValue, it\n // floods over into the next value\n if (value === 0) {\n flood += maxValue;\n }\n else {\n result.push(value + flood);\n flood = 0;\n }\n }\n }\n return result;\n}\n//# sourceMappingURL=bit-reader.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { pbkdf2, sha256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from \"@ethersproject/strings\";\nimport { langEn } from \"@ethersproject/wordlists\";\nimport { logger } from \"./logger.js\";\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits) {\n return ((1 << bits) - 1) << (8 - bits) & 0xff;\n}\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits) {\n return ((1 << bits) - 1) & 0xff;\n}\nfunction mnemonicToEntropy(mnemonic, wordlist = langEn) {\n logger.assertNormalize(\"NFKD\");\n if (wordlist == null) {\n wordlist = langEn;\n }\n const words = wordlist.split(mnemonic);\n if ((words.length % 3) !== 0 || words.length < 12 || words.length > 24) {\n logger.throwArgumentError(\"invalid mnemonic length\", \"mnemonic\", \"[ REDACTED ]\");\n }\n const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));\n let offset = 0;\n for (let i = 0; i < words.length; i++) {\n let index = wordlist.getWordIndex(words[i].normalize(\"NFKD\"));\n if (index === -1) {\n logger.throwArgumentError(`invalid mnemonic word at index ${i}`, \"mnemonic\", \"[ REDACTED ]\");\n }\n for (let bit = 0; bit < 11; bit++) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n }\n offset++;\n }\n }\n const entropyBits = 32 * words.length / 3;\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n logger.throwArgumentError(\"invalid mnemonic checksum\", \"mnemonic\", \"[ REDACTED ]\");\n }\n return hexlify(entropy.slice(0, entropyBits / 8));\n}\nfunction entropyToMnemonic(entropy, wordlist = langEn) {\n if ((entropy.length % 4) || entropy.length < 16 || entropy.length > 32) {\n logger.throwArgumentError(\"invalid entropy size\", \"entropy\", \"[ REDACTED ]\");\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n const indices = [0];\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i++) {\n // Consume the whole byte (with still more to go)\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n }\n else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n remainingBits += 3;\n }\n }\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits);\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\n return wordlist.join(indices.map((index) => wordlist.getWord(index)));\n}\nconst _guard = {};\nexport class Mnemonic {\n constructor(guard, entropy, phrase, password, wordlist) {\n if (password == null) {\n password = \"\";\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n logger.assertPrivate(guard, _guard, \"Mnemonic\");\n defineProperties(this, { phrase, password, wordlist, entropy });\n }\n computeSeed() {\n const salt = toUtf8Bytes(\"mnemonic\" + this.password, UnicodeNormalizationForm.NFKD);\n return pbkdf2(toUtf8Bytes(this.phrase, UnicodeNormalizationForm.NFKD), salt, 2048, 64, \"sha512\");\n }\n static fromPhrase(phrase, password, wordlist) {\n // Normalize the case and space; throws if invalid\n const entropy = mnemonicToEntropy(phrase, wordlist);\n phrase = entropyToMnemonic(logger.getBytes(entropy), wordlist);\n return new Mnemonic(_guard, entropy, phrase, password, wordlist);\n }\n static fromEntropy(_entropy, password, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n const phrase = entropyToMnemonic(entropy, wordlist);\n return new Mnemonic(_guard, hexlify(entropy), phrase, password, wordlist);\n }\n static entropyToPhrase(_entropy, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n return entropyToMnemonic(entropy, wordlist);\n }\n static phraseToEntropy(phrase, wordlist) {\n return mnemonicToEntropy(phrase, wordlist);\n }\n static isValidMnemonic(phrase, wordlist) {\n try {\n mnemonicToEntropy(phrase, wordlist);\n return true;\n }\n catch (error) { }\n return false;\n }\n}\n//# sourceMappingURL=mnemonic.js.map","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 _BaseWallet_signingKey;\nimport { getAddress, resolveAddress } from \"@ethersproject/address\";\nimport { hashMessage, TypedDataEncoder } from \"@ethersproject/hash\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { AbstractSigner } from \"@ethersproject/providers\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport class BaseWallet extends AbstractSigner {\n constructor(privateKey, provider) {\n super(provider);\n _BaseWallet_signingKey.set(this, void 0);\n __classPrivateFieldSet(this, _BaseWallet_signingKey, privateKey, \"f\");\n const address = computeAddress(this.signingKey.publicKey);\n defineProperties(this, { address });\n }\n // Store these in getters to reduce visibility in console.log\n get signingKey() { return __classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"); }\n get privateKey() { return this.signingKey.privateKey; }\n async getAddress() { return this.address; }\n connect(provider) {\n return new BaseWallet(__classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"), provider);\n }\n async signTransaction(_tx) {\n // Replace any Addressable or ENS name with an address\n const tx = Object.assign({}, _tx, await resolveProperties({\n to: (_tx.to ? resolveAddress(_tx.to, this.provider) : undefined),\n from: (_tx.from ? resolveAddress(_tx.from, this.provider) : undefined)\n }));\n if (tx.from != null) {\n if (getAddress(tx.from) !== this.address) {\n logger.throwArgumentError(\"transaction from address mismatch\", \"tx.from\", _tx.from);\n }\n delete tx.from;\n }\n // Build the transaction\n const btx = Transaction.from(tx);\n btx.signature = this.signingKey.sign(btx.unsignedHash);\n return btx.serialized;\n }\n async signMessage(message) {\n return this.signingKey.sign(hashMessage(message)).serialized;\n }\n async signTypedData(domain, types, value) {\n // Populate any ENS names\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name) => {\n if (this.provider == null) {\n return logger.throwError(\"cannot resolve ENS names without a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n info: { name }\n });\n }\n const address = await this.provider.resolveName(name);\n if (address == null) {\n return logger.throwError(\"unconfigured ENS name\", \"UNCONFIGURED_NAME\", {\n value: name\n });\n }\n return address;\n });\n return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized;\n }\n}\n_BaseWallet_signingKey = new WeakMap();\n//# sourceMappingURL=base-wallet.js.map","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 __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 _a, _HDNodeWallet_fromSeed, _HDNodeWalletManager_root;\nimport { arrayify, concat, dataSlice, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac, randomBytes, ripemd160, sha256 } from \"@ethersproject/crypto\";\nimport { decodeBase58, encodeBase58, toBigInt, toHex } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { VoidSigner } from \"@ethersproject/providers\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { langEn } from \"@ethersproject/wordlists/lib/lang-en.js\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nexport const defaultPath = \"m/44'/60'/0'/0/0\";\n// \"Bitcoin seed\"\nconst MasterSecret = new Uint8Array([66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100]);\nconst HardenedBit = 0x80000000;\nconst N = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\nconst Nibbles = \"0123456789abcdef\";\nfunction zpad(value, length) {\n let result = \"\";\n while (value) {\n result = Nibbles[value % 16] + result;\n value = Math.trunc(value / 16);\n }\n while (result.length < length * 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction encodeBase58Check(_value) {\n const value = logger.getBytes(_value);\n const check = dataSlice(sha256(sha256(value)), 0, 4);\n const bytes = concat([value, check]);\n return encodeBase58(bytes);\n}\nconst _guard = {};\nfunction ser_I(index, chainCode, publicKey, privateKey) {\n const data = new Uint8Array(37);\n if (index & HardenedBit) {\n if (privateKey == null) {\n return logger.throwError(\"cannot derive child of neutered node\", \"UNSUPPORTED_OPERATION\", {\n operation: \"deriveChild\"\n });\n }\n // Data = 0x00 || ser_256(k_par)\n data.set(arrayify(privateKey), 1);\n }\n else {\n // Data = ser_p(point(k_par))\n data.set(arrayify(publicKey));\n }\n // Data += ser_32(i)\n for (let i = 24; i >= 0; i -= 8) {\n data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff);\n }\n const I = arrayify(computeHmac(\"sha512\", chainCode, data));\n return { IL: I.slice(0, 32), IR: I.slice(32) };\n}\nfunction derivePath(node, path) {\n const components = path.split(\"/\");\n if (components.length === 0 || (components[0] === \"m\" && node.depth !== 0)) {\n throw new Error(\"invalid path - \" + path);\n }\n if (components[0] === \"m\") {\n components.shift();\n }\n let result = node;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n if (component.match(/^[0-9]+'$/)) {\n const index = parseInt(component.substring(0, component.length - 1));\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(HardenedBit + index);\n }\n else if (component.match(/^[0-9]+$/)) {\n const index = parseInt(component);\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(index);\n }\n else {\n throw new Error(\"invalid path component - \" + component);\n }\n }\n return result;\n}\nexport class HDNodeWallet extends BaseWallet {\n constructor(guard, signingKey, parentFingerprint, chainCode, path, index, depth, mnemonic, provider) {\n super(signingKey, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeWallet\");\n defineProperties(this, { publicKey: signingKey.compressedPublicKey });\n const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n defineProperties(this, {\n parentFingerprint, fingerprint,\n chainCode, path, index, depth\n });\n defineProperties(this, { mnemonic });\n }\n connect(provider) {\n return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488ADE4\", zpad(this.depth, 1), this.parentFingerprint,\n zpad(this.index, 4), this.chainCode,\n concat([\"0x00\", this.privateKey])\n ]));\n }\n hasPath() { return (this.path != null); }\n neuter() {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.provider);\n }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey);\n const ki = new SigningKey(toHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32));\n return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.mnemonic, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n static fromSeed(seed) {\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, seed, null);\n }\n static fromPhrase(phrase, password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromMnemonic(mnemonic, path = defaultPath) {\n if (!path) {\n path = defaultPath;\n }\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromExtendedKey(extendedKey) {\n const bytes = arrayify(decodeBase58(extendedKey)); // @TODO: redact\n if (bytes.length !== 82 || encodeBase58Check(bytes.slice(0, 78)) !== extendedKey) {\n logger.throwArgumentError(\"invalid extended key\", \"extendedKey\", \"[ REDACTED ]\");\n }\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n switch (hexlify(bytes.slice(0, 4))) {\n // Public Key\n case \"0x0488b21e\":\n case \"0x043587cf\": {\n const publicKey = hexlify(key);\n return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey, parentFingerprint, chainCode, null, index, depth, null);\n }\n // Private Key\n case \"0x0488ade4\":\n case \"0x04358394 \":\n if (key[0] !== 0) {\n break;\n }\n return new HDNodeWallet(_guard, new SigningKey(key.slice(1)), parentFingerprint, chainCode, null, index, depth, null, null);\n }\n return logger.throwArgumentError(\"invalid extended key prefix\", \"extendedKey\", \"[ REDACTED ]\");\n }\n static createRandom(password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n}\n_a = HDNodeWallet, _HDNodeWallet_fromSeed = function _HDNodeWallet_fromSeed(_seed, mnemonic) {\n const seed = logger.getBytes(_seed, \"seed\");\n if (seed.length < 16 || seed.length > 64) {\n throw new Error(\"invalid seed\");\n }\n const I = arrayify(computeHmac(\"sha512\", MasterSecret, seed));\n const signingKey = new SigningKey(hexlify(I.slice(0, 32)));\n return new HDNodeWallet(_guard, signingKey, \"0x00000000\", hexlify(I.slice(32)), \"m\", 0, 0, mnemonic, null);\n};\nexport class HDNodeVoidWallet extends VoidSigner {\n constructor(guard, address, publicKey, parentFingerprint, chainCode, path, index, depth, provider) {\n super(address, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeVoidWallet\");\n defineProperties(this, { publicKey });\n const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4);\n defineProperties(this, {\n publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth\n });\n }\n connect(provider) {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488B21E\",\n zpad(this.depth, 1),\n this.parentFingerprint,\n zpad(this.index, 4),\n this.chainCode,\n this.publicKey,\n ]));\n }\n hasPath() { return (this.path != null); }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null);\n const Ki = SigningKey._addPoints(IL, this.publicKey, true);\n const address = computeAddress(Ki);\n return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n}\nexport class HDNodeWalletManager {\n constructor(phrase, password = \"\", path = \"m/44'/60'/0'/0\", locale = langEn) {\n _HDNodeWalletManager_root.set(this, void 0);\n __classPrivateFieldSet(this, _HDNodeWalletManager_root, HDNodeWallet.fromPhrase(phrase, password, path, locale), \"f\");\n }\n getSigner(index = 0) {\n return __classPrivateFieldGet(this, _HDNodeWalletManager_root, \"f\").deriveChild(index);\n }\n}\n_HDNodeWalletManager_root = new WeakMap();\nexport function getAccountPath(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index < 0 || index >= HardenedBit) {\n logger.throwArgumentError(\"invalid account index\", \"index\", index);\n }\n return `m/44'/60'/${index}'/0/0`;\n}\n//# sourceMappingURL=hdwallet.js.map","/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */\nvar __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 _AES_key, _AES_Kd, _AES_Ke;\n// Number of rounds by keysize\nconst numberOfRounds = { 16: 10, 24: 12, 32: 14 };\n// Round constant words\nconst rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n// S-box and Inverse S-box (S is for Substitution)\nconst S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\nconst Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n// Transformations for encryption\nconst T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\nconst T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\nconst T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\nconst T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n// Transformations for decryption\nconst T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\nconst T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\nconst T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\nconst T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n// Transformations for decryption key expansion\nconst U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\nconst U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\nconst U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\nconst U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\nfunction convertToInt32(bytes) {\n const result = [];\n for (let i = 0; i < bytes.length; i += 4) {\n result.push((bytes[i] << 24) | (bytes[i + 1] << 16) | (bytes[i + 2] << 8) | bytes[i + 3]);\n }\n return result;\n}\nexport class AES {\n constructor(key) {\n _AES_key.set(this, void 0);\n _AES_Kd.set(this, void 0);\n _AES_Ke.set(this, void 0);\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n __classPrivateFieldSet(this, _AES_key, new Uint8Array(key), \"f\");\n const rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new TypeError('invalid key size (must be 16, 24 or 32 bytes)');\n }\n // encryption round keys\n __classPrivateFieldSet(this, _AES_Ke, [], \"f\");\n // decryption round keys\n __classPrivateFieldSet(this, _AES_Kd, [], \"f\");\n for (let i = 0; i <= rounds; i++) {\n __classPrivateFieldGet(this, _AES_Ke, \"f\").push([0, 0, 0, 0]);\n __classPrivateFieldGet(this, _AES_Kd, \"f\").push([0, 0, 0, 0]);\n }\n const roundKeyCount = (rounds + 1) * 4;\n const KC = this.key.length / 4;\n // convert the key into ints\n const tk = convertToInt32(this.key);\n // copy values into round key arrays\n let index;\n for (let i = 0; i < KC; i++) {\n index = i >> 2;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[index][i % 4] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - index][i % 4] = tk[i];\n }\n // key expansion (fips-197 section 5.2)\n let rconpointer = 0;\n let t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (let i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n }\n else {\n for (let i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n tk[KC / 2] ^= (S[tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n for (let i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n // copy values into round key arrays\n let i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][c] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - r][c] = tk[i++];\n t++;\n }\n }\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (let r = 1; r < rounds; r++) {\n for (let c = 0; c < 4; c++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[tt & 0xFF]);\n }\n }\n }\n get key() { return __classPrivateFieldGet(this, _AES_key, \"f\").slice(); }\n encrypt(plaintext) {\n if (plaintext.length != 16) {\n throw new TypeError('invalid plaintext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Ke, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(plaintext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Ke, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T1[(t[i] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[t[(i + 3) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Ke, \"f\")[rounds][i];\n result[4 * i] = (S[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n decrypt(ciphertext) {\n if (ciphertext.length != 16) {\n throw new TypeError('invalid ciphertext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Kd, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(ciphertext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Kd, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T5[(t[i] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[t[(i + 1) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds][i];\n result[4 * i] = (Si[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n}\n_AES_key = new WeakMap(), _AES_Kd = new WeakMap(), _AES_Ke = new WeakMap();\n//# sourceMappingURL=aes.js.map","import { AES } from \"./aes.js\";\nexport class ModeOfOperation {\n constructor(name, key, cls) {\n if (cls && !(this instanceof cls)) {\n throw new Error(`${name} must be instantiated with \"new\"`);\n }\n Object.defineProperties(this, {\n aes: { enumerable: true, value: new AES(key) },\n name: { enumerable: true, value: name }\n });\n }\n}\n//# sourceMappingURL=mode.js.map","// Cipher Block Chaining\nvar __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 _CBC_iv, _CBC_lastBlock;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CBC extends ModeOfOperation {\n constructor(key, iv) {\n super(\"ECC\", key, CBC);\n _CBC_iv.set(this, void 0);\n _CBC_lastBlock.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CBC_iv, \"f\")); }\n encrypt(plaintext) {\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext.length);\n for (let i = 0; i < plaintext.length; i += 16) {\n for (let j = 0; j < 16; j++) {\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] ^= plaintext[i + j];\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.aes.encrypt(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\")), \"f\");\n ciphertext.set(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\"), i);\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n const plaintext = new Uint8Array(ciphertext.length);\n for (let i = 0; i < ciphertext.length; i += 16) {\n const block = this.aes.decrypt(ciphertext.subarray(i, i + 16));\n for (let j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j];\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] = ciphertext[i + j];\n }\n }\n return plaintext;\n }\n}\n_CBC_iv = new WeakMap(), _CBC_lastBlock = new WeakMap();\n//# sourceMappingURL=mode-cbc.js.map","// Cipher Feedback\nvar __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 _CFB_instances, _CFB_iv, _CFB_shiftRegister, _CFB_shift;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CFB extends ModeOfOperation {\n constructor(key, iv, segmentSize = 8) {\n super(\"CFB\", key, CFB);\n _CFB_instances.add(this);\n _CFB_iv.set(this, void 0);\n _CFB_shiftRegister.set(this, void 0);\n // This library currently only handles byte-aligned segmentSize\n if (!Number.isInteger(segmentSize) || (segmentSize % 8)) {\n throw new TypeError(\"invalid segmentSize\");\n }\n Object.defineProperties(this, {\n segmentSize: { enumerable: true, value: segmentSize }\n });\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CFB_shiftRegister, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CFB_iv, \"f\")); }\n encrypt(plaintext) {\n if (8 * plaintext.length % this.segmentSize) {\n throw new TypeError(\"invalid plaintext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n ciphertext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (8 * ciphertext.length % this.segmentSize) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const plaintext = new Uint8Array(ciphertext);\n for (let i = 0; i < plaintext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return plaintext;\n }\n}\n_CFB_iv = new WeakMap(), _CFB_shiftRegister = new WeakMap(), _CFB_instances = new WeakSet(), _CFB_shift = function _CFB_shift(data) {\n const segmentSize = this.segmentSize / 8;\n // Shift the register\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").subarray(segmentSize));\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(data.subarray(0, segmentSize), 16 - segmentSize);\n};\n//# sourceMappingURL=mode-cfb.js.map","// Counter Mode\nvar __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 _CTR_remaining, _CTR_remainingIndex, _CTR_counter;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CTR extends ModeOfOperation {\n constructor(key, initialValue) {\n super(\"CTR\", key, CTR);\n // Remaining bytes for the one-time pad\n _CTR_remaining.set(this, void 0);\n _CTR_remainingIndex.set(this, void 0);\n // The current counter\n _CTR_counter.set(this, void 0);\n __classPrivateFieldSet(this, _CTR_counter, new Uint8Array(16), \"f\");\n __classPrivateFieldGet(this, _CTR_counter, \"f\").fill(0);\n __classPrivateFieldSet(this, _CTR_remaining, __classPrivateFieldGet(this, _CTR_counter, \"f\"), \"f\"); // This will be discarded immediately\n __classPrivateFieldSet(this, _CTR_remainingIndex, 16, \"f\");\n if (initialValue == null) {\n initialValue = 1;\n }\n if (typeof (initialValue) === \"number\") {\n this.setCounterValue(initialValue);\n }\n else {\n this.setCounterBytes(initialValue);\n }\n }\n get counter() { return new Uint8Array(__classPrivateFieldGet(this, _CTR_counter, \"f\")); }\n setCounterValue(value) {\n if (!Number.isInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) {\n throw new TypeError(\"invalid counter initial integer value\");\n }\n for (let index = 15; index >= 0; --index) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[index] = value % 256;\n value = Math.floor(value / 256);\n }\n }\n setCounterBytes(value) {\n if (value.length !== 16) {\n throw new TypeError(\"invalid counter initial Uint8Array value length\");\n }\n __classPrivateFieldGet(this, _CTR_counter, \"f\").set(value);\n }\n increment() {\n for (let i = 15; i >= 0; i--) {\n if (__classPrivateFieldGet(this, _CTR_counter, \"f\")[i] === 255) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i] = 0;\n }\n else {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i]++;\n break;\n }\n }\n }\n encrypt(plaintext) {\n var _a, _b;\n const crypttext = new Uint8Array(plaintext);\n for (let i = 0; i < crypttext.length; i++) {\n if (__classPrivateFieldGet(this, _CTR_remainingIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _CTR_remaining, this.aes.encrypt(__classPrivateFieldGet(this, _CTR_counter, \"f\")), \"f\");\n __classPrivateFieldSet(this, _CTR_remainingIndex, 0, \"f\");\n this.increment();\n }\n crypttext[i] ^= __classPrivateFieldGet(this, _CTR_remaining, \"f\")[__classPrivateFieldSet(this, _CTR_remainingIndex, (_b = __classPrivateFieldGet(this, _CTR_remainingIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return crypttext;\n }\n decrypt(ciphertext) {\n return this.encrypt(ciphertext);\n }\n}\n_CTR_remaining = new WeakMap(), _CTR_remainingIndex = new WeakMap(), _CTR_counter = new WeakMap();\n//# sourceMappingURL=mode-ctr.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from '@ethersproject/strings';\nimport { logger } from \"./logger.js\";\nexport function looseArrayify(hexString) {\n if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\n hexString = '0x' + hexString;\n }\n return arrayify(hexString);\n}\nexport function zpad(value, length) {\n value = String(value);\n while (value.length < length) {\n value = '0' + value;\n }\n return value;\n}\nexport function getPassword(password) {\n if (typeof (password) === 'string') {\n return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC);\n }\n return arrayify(password);\n}\nexport function spelunk(object, _path) {\n const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i);\n if (match == null) {\n return logger.throwArgumentError(\"invalid path\", \"path\", _path);\n }\n const path = match[1];\n const type = match[3];\n const reqd = (match[4] === \"!\");\n let cur = object;\n for (const comp of path.toLowerCase().split('.')) {\n // Search for a child object with a case-insensitive matching key\n if (Array.isArray(cur)) {\n if (!comp.match(/^[0-9]+$/)) {\n break;\n }\n cur = cur[parseInt(comp)];\n }\n else if (typeof (cur) === \"object\") {\n let found = null;\n for (const key in cur) {\n if (key.toLowerCase() === comp) {\n found = cur[key];\n break;\n }\n }\n cur = found;\n }\n else {\n cur = null;\n }\n if (cur == null) {\n break;\n }\n }\n if (reqd && cur == null) {\n logger.throwArgumentError(\"missing required value\", \"path\", path);\n }\n if (type && cur != null) {\n if (type === \"int\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9]+$/)) {\n return parseInt(cur);\n }\n else if (Number.isSafeInteger(cur)) {\n return cur;\n }\n }\n if (type === \"number\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9.]*$/)) {\n return parseFloat(cur);\n }\n }\n if (type === \"data\") {\n if (typeof (cur) === \"string\") {\n return looseArrayify(cur);\n }\n }\n if (type === \"array\" && Array.isArray(cur)) {\n return cur;\n }\n if (type === typeof (cur)) {\n return cur;\n }\n logger.throwArgumentError(`wrong type found for ${type} `, \"path\", path);\n }\n return cur;\n}\n/*\nexport function follow(object: any, path: string): null | string {\n let currentChild = object;\n\n for (const comp of path.toLowerCase().split('/')) {\n\n // Search for a child object with a case-insensitive matching key\n let matchingChild = null;\n for (const key in currentChild) {\n if (key.toLowerCase() === comp) {\n matchingChild = currentChild[key];\n break;\n }\n }\n\n if (matchingChild === null) { return null; }\n\n currentChild = matchingChild;\n }\n\n return currentChild;\n}\n\n// \"path/to/something:type!\"\nexport function followRequired(data: any, path: string): string {\n const value = follow(data, path);\n if (value != null) { return value; }\n return logger.throwArgumentError(\"invalid value\", `data:${ path }`,\n JSON.stringify(data));\n}\n*/\n// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\nexport function uuidV4(randomBytes) {\n const bytes = logger.getBytes(randomBytes, \"randomBytes\");\n // Section: 4.1.3:\n // - time_hi_and_version[12:16] = 0b0100\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n // Section 4.4\n // - clock_seq_hi_and_reserved[6] = 0b0\n // - clock_seq_hi_and_reserved[7] = 0b1\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const value = hexlify(bytes);\n return [\n value.substring(2, 10),\n value.substring(10, 14),\n value.substring(14, 18),\n value.substring(18, 22),\n value.substring(22, 34),\n ].join(\"-\");\n}\n//# sourceMappingURL=utils.js.map","import { CBC, pkcs7Strip } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { pbkdf2 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, looseArrayify, spelunk } from \"./utils.js\";\nexport function isCrowdsaleJson(json) {\n try {\n const data = JSON.parse(json);\n if (data.encseed) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\n// See: https://github.com/ethereum/pyethsaletool\nexport function decryptCrowdsaleJson(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n // Ethereum Address\n const address = getAddress(spelunk(data, \"ethaddr:string!\"));\n // Encrypted Seed\n const encseed = looseArrayify(spelunk(data, \"encseed:string!\"));\n if (!encseed || (encseed.length % 16) !== 0) {\n logger.throwArgumentError(\"invalid encseed\", \"json\", json);\n }\n const key = arrayify(pbkdf2(password, password, 2000, 32, \"sha256\")).slice(0, 16);\n const iv = encseed.slice(0, 16);\n const encryptedSeed = encseed.slice(16);\n // Decrypt the seed\n const aesCbc = new CBC(key, iv);\n const seed = pkcs7Strip(arrayify(aesCbc.decrypt(encryptedSeed)));\n // This wallet format is weird... Convert the binary encoded hex to a string.\n let seedHex = \"\";\n for (let i = 0; i < seed.length; i++) {\n seedHex += String.fromCharCode(seed[i]);\n }\n return { address, privateKey: id(seedHex) };\n}\n//# sourceMappingURL=json-crowdsale.js.map","export function pkcs7Pad(data) {\n const padder = 16 - (data.length % 16);\n const result = new Uint8Array(data.length + padder);\n result.set(data);\n for (let i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n}\nexport function pkcs7Strip(data) {\n if (data.length < 16) {\n throw new TypeError('PKCS#7 invalid length');\n }\n const padder = data[data.length - 1];\n if (padder > 16) {\n throw new TypeError('PKCS#7 padding byte out of range');\n }\n const length = data.length - padder;\n for (let i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new TypeError('PKCS#7 invalid padding byte');\n }\n }\n return new Uint8Array(data.subarray(0, length));\n}\n//# sourceMappingURL=padding.js.map","// Output Feedback\nvar __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 _OFB_iv, _OFB_lastPrecipher, _OFB_lastPrecipherIndex;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class OFB extends ModeOfOperation {\n constructor(key, iv) {\n super(\"OFB\", key, OFB);\n _OFB_iv.set(this, void 0);\n _OFB_lastPrecipher.set(this, void 0);\n _OFB_lastPrecipherIndex.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.iv, \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 16, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _OFB_iv, \"f\")); }\n encrypt(plaintext) {\n var _a, _b;\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i++) {\n if (__classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.aes.encrypt(__classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")), \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 0, \"f\");\n }\n ciphertext[i] ^= __classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")[__classPrivateFieldSet(this, _OFB_lastPrecipherIndex, (_b = __classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n return this.encrypt(ciphertext);\n }\n}\n_OFB_iv = new WeakMap(), _OFB_lastPrecipher = new WeakMap(), _OFB_lastPrecipherIndex = new WeakMap();\n//# sourceMappingURL=mode-ofb.js.map","import { CTR } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256, pbkdf2, randomBytes, scrypt, scryptSync } from \"@ethersproject/crypto\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, spelunk, uuidV4, zpad } from \"./utils.js\";\nimport { version } from \"./_version.js\";\nconst defaultPath = \"m/44'/60'/0'/0/0\";\nexport function isKeystoreJson(json) {\n try {\n const data = JSON.parse(json);\n const version = ((data.version != null) ? parseInt(data.version) : 0);\n if (version === 3) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\nfunction decrypt(data, key, ciphertext) {\n const cipher = spelunk(data, \"crypto.cipher:string\");\n if (cipher === \"aes-128-ctr\") {\n const iv = spelunk(data, \"crypto.cipherparams.iv:data!\");\n const aesCtr = new CTR(key, iv);\n return hexlify(aesCtr.decrypt(ciphertext));\n }\n return logger.throwError(\"unsupported cipher\", \"UNSUPPORTED_OPERATION\", {\n operation: \"decrypt\"\n });\n}\nfunction getAccount(data, _key) {\n const key = logger.getBytes(_key);\n const ciphertext = spelunk(data, \"crypto.ciphertext:data!\");\n const computedMAC = hexlify(keccak256(concat([key.slice(16, 32), ciphertext]))).substring(2);\n if (computedMAC !== spelunk(data, \"crypto.mac:string!\").toLowerCase()) {\n return logger.throwArgumentError(\"incorrect password\", \"password\", \"[ REDACTED ]\");\n }\n const privateKey = decrypt(data, key.slice(0, 16), ciphertext);\n const address = computeAddress(privateKey);\n if (data.address) {\n let check = data.address.toLowerCase();\n if (check.substring(0, 2) !== \"0x\") {\n check = \"0x\" + check;\n }\n if (getAddress(check) !== address) {\n logger.throwArgumentError(\"keystore address/privateKey mismatch\", \"address\", data.address);\n }\n }\n const account = { address, privateKey };\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n const version = spelunk(data, \"x-ethers.version:string\");\n if (version === \"0.1\") {\n const mnemonicKey = key.slice(32, 64);\n const mnemonicCiphertext = spelunk(data, \"x-ethers.mnemonicCiphertext:data!\");\n const mnemonicIv = spelunk(data, \"x-ethers.mnemonicCounter:data!\");\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n account.mnemonic = {\n path: (spelunk(data, \"x-ethers.path:string\") || defaultPath),\n locale: (spelunk(data, \"x-ethers.locale:string\") || \"en\"),\n entropy: hexlify(arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext)))\n };\n }\n return account;\n}\nfunction getKdfParams(data) {\n const kdf = spelunk(data, \"crypto.kdf:string\");\n if (kdf && typeof (kdf) === \"string\") {\n const throwError = function (name, value) {\n return logger.throwArgumentError(\"invalid key-derivation function parameters\", name, value);\n };\n if (kdf.toLowerCase() === \"scrypt\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const N = spelunk(data, \"crypto.kdfparams.n:int!\");\n const r = spelunk(data, \"crypto.kdfparams.r:int!\");\n const p = spelunk(data, \"crypto.kdfparams.p:int!\");\n // Check for all required parameters\n if (!N || !r || !p) {\n return throwError(\"kdf\", kdf);\n }\n // Make sure N is a power of 2\n if ((N & (N - 1)) !== 0) {\n return throwError(\"N\", N);\n }\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n return throwError(\"dklen\", dkLen);\n }\n return { name: \"scrypt\", salt, N, r, p, dkLen: 64 };\n }\n else if (kdf.toLowerCase() === \"pbkdf2\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const prf = spelunk(data, \"crypto.kdfparams.prf:string!\");\n const algorithm = prf.split(\"-\").pop();\n if (algorithm !== \"sha256\" && algorithm !== \"sha512\") {\n return throwError(\"prf\", prf);\n }\n const count = spelunk(data, \"crypto.kdfparams.c:int!\");\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n throwError(\"dklen\", dkLen);\n }\n return { name: \"pbkdf2\", salt, count, dkLen, algorithm };\n }\n }\n return logger.throwArgumentError(\"unsupported key-derivation function\", \"kdf\", kdf);\n}\nexport function decryptKeystoreJsonSync(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = scryptSync(password, salt, N, r, p, dkLen);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport async function decryptKeystoreJson(json, _password, progress) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n if (progress) {\n progress(0);\n await stall(0);\n }\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n if (progress) {\n progress(1);\n await stall(0);\n }\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = await scrypt(password, salt, N, r, p, dkLen, progress);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nexport async function encryptKeystoreJson(account, password, options, progressCallback) {\n // Check the address matches the private key\n //if (getAddress(account.address) !== computeAddress(account.privateKey)) {\n // throw new Error(\"address/privateKey mismatch\");\n //}\n // Check the mnemonic (if any) matches the private key\n /*\n if (hasMnemonic(account)) {\n const mnemonic = account.mnemonic;\n const node = HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || defaultPath);\n\n if (node.privateKey != account.privateKey) {\n throw new Error(\"mnemonic mismatch\");\n }\n }\n */\n // The options are optional, so adjust the call as needed\n if (typeof (options) === \"function\" && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n if (!options) {\n options = {};\n }\n const privateKey = logger.getBytes(account.privateKey, \"privateKey\");\n const passwordBytes = getPassword(password);\n /*\n let mnemonic: null | Mnemonic = null;\n let entropy: Uint8Array = null\n let path: string = null;\n let locale: string = null;\n if (hasMnemonic(account)) {\n const srcMnemonic = account.mnemonic;\n entropy = arrayify(mnemonicToEntropy(srcMnemonic.phrase, srcMnemonic.locale || \"en\"));\n path = srcMnemonic.path || defaultPath;\n locale = srcMnemonic.locale || \"en\";\n mnemonic = Mnemonic.from(\n }\n */\n // Check/generate the salt\n const salt = (options.salt != null) ? logger.getBytes(options.salt, \"options.slat\") : randomBytes(32);\n // Override initialization vector\n const iv = (options.iv != null) ? logger.getBytes(options.iv, \"options.iv\") : randomBytes(16);\n if (iv.length !== 16) {\n logger.throwArgumentError(\"invalid options.iv\", \"options.iv\", options.iv);\n }\n // Override the uuid\n const uuidRandom = (options.uuid != null) ? logger.getBytes(options.uuid, \"options.uuid\") : randomBytes(16);\n if (uuidRandom.length !== 16) {\n logger.throwArgumentError(\"invalid options.uuid\", \"options.uuid\", options.iv);\n }\n if (uuidRandom.length !== 16) {\n throw new Error(\"invalid uuid\");\n }\n // Override the scrypt password-based key derivation function parameters\n let N = (1 << 17), r = 8, p = 1;\n if (options.scrypt) {\n if (options.scrypt.N) {\n N = options.scrypt.N;\n }\n if (options.scrypt.r) {\n r = options.scrypt.r;\n }\n if (options.scrypt.p) {\n p = options.scrypt.p;\n }\n }\n // We take 64 bytes:\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n const _key = await scrypt(passwordBytes, salt, N, r, p, 64, progressCallback);\n const key = arrayify(_key);\n // This will be used to encrypt the wallet (as per Web3 secret storage)\n const derivedKey = key.slice(0, 16);\n const macPrefix = key.slice(16, 32);\n // Encrypt the private key\n const aesCtr = new CTR(derivedKey, iv);\n const ciphertext = arrayify(aesCtr.encrypt(privateKey));\n // Compute the message authentication code, used to check the password\n const mac = keccak256(concat([macPrefix, ciphertext]));\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n const data = {\n address: account.address.substring(2).toLowerCase(),\n id: uuidV4(uuidRandom),\n version: 3,\n Crypto: {\n cipher: \"aes-128-ctr\",\n cipherparams: {\n iv: hexlify(iv).substring(2),\n },\n ciphertext: hexlify(ciphertext).substring(2),\n kdf: \"scrypt\",\n kdfparams: {\n salt: hexlify(salt).substring(2),\n n: N,\n dklen: 32,\n p: p,\n r: r\n },\n mac: mac.substring(2)\n }\n };\n // If we have a mnemonic, encrypt it into the JSON wallet\n if (account.mnemonic) {\n const client = (options.client != null) ? options.client : `ethers/${version}`;\n const path = account.mnemonic.path || defaultPath;\n const locale = account.mnemonic.locale || \"en\";\n const mnemonicKey = key.slice(32, 64);\n const entropy = logger.getBytes(account.mnemonic.entropy, \"account.mnemonic.entropy\");\n const mnemonicIv = randomBytes(16);\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n const mnemonicCiphertext = arrayify(mnemonicAesCtr.encrypt(entropy));\n const now = new Date();\n const timestamp = (now.getUTCFullYear() + \"-\" +\n zpad(now.getUTCMonth() + 1, 2) + \"-\" +\n zpad(now.getUTCDate(), 2) + \"T\" +\n zpad(now.getUTCHours(), 2) + \"-\" +\n zpad(now.getUTCMinutes(), 2) + \"-\" +\n zpad(now.getUTCSeconds(), 2) + \".0Z\");\n const gethFilename = (\"UTC--\" + timestamp + \"--\" + data.address);\n data[\"x-ethers\"] = {\n client, gethFilename, path, locale,\n mnemonicCounter: hexlify(mnemonicIv).substring(2),\n mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2),\n version: \"0.1\"\n };\n }\n return JSON.stringify(data);\n}\n//# sourceMappingURL=json-keystore.js.map","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 _Wallet_mnemonic;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { randomBytes } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { computeAddress } from \"./address.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nimport { HDNodeWallet } from \"./hdwallet.js\";\nimport { decryptCrowdsaleJson, isCrowdsaleJson } from \"./json-crowdsale.js\";\nimport { decryptKeystoreJson, decryptKeystoreJsonSync, isKeystoreJson } from \"./json-keystore.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nfunction tryWallet(value) {\n try {\n if (!value || !value.signingKey) {\n return null;\n }\n const key = trySigningKey(value.signingKey);\n if (key == null || computeAddress(key.publicKey) !== value.address) {\n return null;\n }\n if (value.mnemonic) {\n const wallet = HDNodeWallet.fromMnemonic(value.mnemonic);\n if (wallet.privateKey !== key.privateKey) {\n return null;\n }\n }\n return value;\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\n// Try using value as mnemonic to derive the defaultPath HDodeWallet\nfunction tryMnemonic(value) {\n try {\n if (value == null || typeof (value.phrase) !== \"string\" ||\n typeof (value.password) !== \"string\" ||\n value.wordlist == null) {\n return null;\n }\n return HDNodeWallet.fromPhrase(value.phrase, value.password, null, value.wordlist);\n }\n catch (error) {\n console.log(error);\n }\n return null;\n}\nfunction trySigningKey(value) {\n try {\n if (!value || !isHexString(value.privateKey, 32)) {\n return null;\n }\n const key = value.privateKey;\n if (SigningKey.computePublicKey(key) !== value.publicKey) {\n return null;\n }\n return new SigningKey(key);\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport class Wallet extends BaseWallet {\n constructor(key, provider) {\n let signingKey = null;\n let mnemonic = null;\n // A normal private key\n if (typeof (key) === \"string\") {\n signingKey = new SigningKey(key);\n }\n // Try Wallet\n if (signingKey == null) {\n const wallet = tryWallet(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // Try Mnemonic, with the defaultPath wallet\n if (signingKey == null) {\n const wallet = tryMnemonic(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // A signing key\n if (signingKey == null) {\n signingKey = trySigningKey(key);\n }\n if (signingKey == null) {\n logger.throwArgumentError(\"invalid key\", \"key\", \"[ REDACTED ]\");\n }\n super(signingKey, provider);\n _Wallet_mnemonic.set(this, void 0);\n __classPrivateFieldSet(this, _Wallet_mnemonic, mnemonic, \"f\");\n }\n // Store this in a getter to reduce visibility in console.log\n get mnemonic() { return __classPrivateFieldGet(this, _Wallet_mnemonic, \"f\"); }\n connect(provider) {\n return new Wallet(this, provider);\n }\n async encrypt(password, options, progressCallback) {\n throw new Error(\"TODO\");\n }\n encryptSync(password, options) {\n throw new Error(\"TODO\");\n }\n static async fromEncryptedJson(json, password, progress) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = await decryptKeystoreJson(json, password, progress);\n }\n else if (isCrowdsaleJson(json)) {\n if (progress) {\n progress(0);\n await stall(0);\n }\n account = decryptCrowdsaleJson(json, password);\n if (progress) {\n progress(1);\n await stall(0);\n }\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static fromEncryptedJsonSync(json, password) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = decryptKeystoreJsonSync(json, password);\n }\n else if (isCrowdsaleJson(json)) {\n account = decryptCrowdsaleJson(json, password);\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static createRandom(provider, password, wordlist) {\n return new Wallet(Mnemonic.fromEntropy(randomBytes(16), password, wordlist), provider);\n }\n static fromMnemonic(mnemonic, provider) {\n return new Wallet(mnemonic, provider);\n }\n static fromPhrase(phrase, provider, password = \"\", wordlist) {\n return new Wallet(Mnemonic.fromPhrase(phrase, password, wordlist), provider);\n }\n}\n_Wallet_mnemonic = new WeakMap();\n//# sourceMappingURL=wallet.js.map","export const version = \"ethers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map"],"names":["async","resolveProperties","value","keys","Object","Promise","all","map","k","resolve","reduce","accum","v","index","checkType","type","types","split","t","trim","i","length","Error","defineProperties","target","values","defaults","key","fallback","undefined","defineProperty","enumerable","writable","_EventPayload_listener","__classPrivateFieldSet","this","receiver","state","kind","f","TypeError","has","call","set","__classPrivateFieldGet","get","EventPayload","constructor","emitter","listener","filter","off","getStore","store","setStore","isFrozen","isError","error","code","isCallException","WeakMap","_Logger_instances","_Logger_assertIntRange","_Logger_getBytes","_Logger_log","LogLevel","LogLevels","debug","default","info","warning","_logLevel","_globalLogger","_normalizeForms","form","normalize","check","String","fromCharCode","push","defineReadOnly","object","name","maxValue","ErrorConstructors","INVALID_ARGUMENT","NUMERIC_FAULT","RangeError","BUFFER_OVERRUN","Logger","version","add","makeError","message","details","JSON","stringify","join","throwError","throwArgumentError","argument","assert","condition","assertArgument","assertIntegerArgument","lower","upper","Number","isInteger","assertSafeUint53","operation","fault","assertNormalize","indexOf","assertPrivate","givenGuard","guard","className","method","assertArgumentCount","count","expectedCount","assertInt53","assertUint53","assertInteger","min","max","getBytes","getBytesCopy","getNumber","BigInt","e","getBigInt","args","DEBUG","INFO","warn","WARNING","static","logLevel","level","toLowerCase","globalLogger","WeakSet","minValue","isNaN","Math","floor","copy","Uint8Array","match","result","offset","parseInt","substring","console","log","apply","logger","_TokenString_instances","_TokenString_offset","_TokenString_tokens","_TokenString_subTokenString","_ParamType_instances","_ParamType_walkAsync","FormatType","setify","items","Set","forEach","freeze","_kwVisib","KwVisib","_kwTypes","KwTypes","_kwModifiers","KwModifiers","Keywords","SimpleTokens","regexWhitespace","RegExp","regexNumber","regexIdentifier","regexType","TokenString","tokens","slice","clone","reset","popKeyword","allowed","top","peek","text","pop","popType","popParen","popParams","link","linkNext","peekKeyword","peekType","_a","toString","token","lex","brackets","commas","cur","depth","linkBack","suffix","allowSingle","included","consumeName","keyword","consumeKeywords","keywords","consumeParams","allowIndexed","ParamType","fromTokens","consumeGas","consumeEoi","from","to","assign","regexArrayType","verifyBasicType","size","_guard","internal","Symbol","for","ParamTypeInternal","baseType","indexed","components","arrayLength","arrayChildren","format","sighash","json","isTuple","c","parse","isArray","comp","full","isIndexable","walk","process","Array","promises","obj","isParamType","arrayMatch","comps","bracket","FragmentType","setValue","childType","param","then","Fragment","inputs","fromString","fromObject","ConstructorFragment","ErrorFragment","EventFragment","FunctionFragment","StructFragment","NamedFragment","super","joinParams","params","p","input","anonymous","event","payable","gas","stateMutability","outputs","function","constant","o","mutability","modifiers","consumeMutability","struct","nibbles","BN_0","toBigInt","_value","toNumber","toHex","_width","width","toArray","hex","BN_1","fromTwos","toTwos","mask","_bits","bits","_FixedNumber_instances","_FixedNumber_value","_FixedNumber_checkFormat","_constructorGuard","NegativeOne","throwFault","zeros","getMultiplier","decimals","formatFixed","_decimals","multiplier","multiplierStr","negative","fraction","parseFixed","whole","wei","FixedFormat","constructorGuard","signed","_multiplier","defaultValue","FixedNumber","_isFixedNumber","addUnsafe","other","a","b","fromValue","subUnsafe","mulUnsafe","divUnsafe","hasFraction","isNegative","ONE","toFormat","ceiling","round","factor","bump","BUMP","isZero","toHexString","toUnsafeFloat","parseFloat","fixedFormat","numeric","decimal","fromBytes","Alphabet","Lookup","getAlpha","letter","BN_58","encodeBase58","decodeBase58","isHexString","isBytesLike","BN_8","BN_255","arrayify","data","unshift","_noCopyArrayify","decodeBase64","textData","Buffer","encodeBase64","HexCharacters","hexlify","bytes","quantity","concat","datas","d","dataLength","dataSlice","start","end","buffer","stripZerosLeft","zeroPad","left","fill","zeroPadLeft","zeroPadRight","_Result_instances","_Result_indices","_Result_throwError","_Writer_instances","_Writer_data","_Writer_dataLength","_Writer_writeData","_Reader_instances","_Reader_data","_Reader_offset","_Reader_coerceFunc","_Reader_peekBytes","WordSize","Padding","passProperties","Result","Map","Proxy","prop","item","Reflect","getValue","wrapped","Coder","localName","dynamic","_throwError","Writer","appendWriter","writer","writeBytes","paddingOffset","writeValue","writeUpdatableValue","Reader","coerceFunc","allowLoose","coerce","consumed","subReader","readBytes","loose","readValue","readIndex","alignedLength","ceil","u32","arr","Uint32Array","byteOffset","byteLength","createView","DataView","rotr","word","shift","padStart","nextTick","nodeRequire","module","require","bind","setImmediate","setTimeout","asyncLoop","iters","tick","cb","ts","Date","now","diff","toBytes","str","TextEncoder","encode","utf8ToBytes","assertNumber","n","isSafeInteger","assertHash","hash","create","outputLen","blockLen","Hash","_cloneInto","checkOpts","def","_opts","prototype","wrapConstructor","hashConstructor","hashC","update","digest","tmp","HMAC","_key","finished","destroyed","iHash","pad","oHash","buf","digestInto","out","destroy","getPrototypeOf","hmac","pbkdf2","password","salt","opts","dkLen","DK","PRF","PRFSalt","_password","_salt","asyncTick","pbkdf2Init","prfW","view","u","ti","pos","Ti","subarray","setInt32","ui","pbkdf2Output","SHA2","padOffset","isLE","len","take","dataView","roundClean","setBigUint64","_32n","_u32_max","wh","wl","h","l","setUint32","oview","res","Chi","Maj","SHA256_K","IV","SHA256_W","SHA256","A","B","C","D","E","F","G","H","getUint32","W15","W2","s0","s1","T1","T2","sha256","U32_MASK64","fromBig","le","lst","Ah","Al","shrSH","s","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5L","El","add5H","Eh","SHA512_Kh","SHA512_Kl","u64.split","SHA512_W_H","SHA512_W_L","SHA512","Fh","Fl","Gh","Gl","Hh","Hl","W15h","W15l","s0h","u64.rotrSH","u64.shrSH","s0l","u64.rotrSL","u64.shrSL","W2h","W2l","s1h","u64.rotrBH","s1l","u64.rotrBL","SUMl","u64.add4L","SUMh","u64.add4H","sigma1h","sigma1l","CHIh","T1ll","u64.add5L","T1h","u64.add5H","T1l","sigma0h","sigma0l","MAJh","MAJl","u64.add","All","u64.add3L","u64.add3H","SHA512_256","SHA384","sha512","anyGlobal","self","window","global","getGlobal","crypto","msCrypto","createHash","algo","locked","_computeHmac","algorithm","_algo","createHmac","__computeHmac","computeHmac","_data","_","lock","register","func","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_0n","_1n","_2n","_7n","_256n","_0x71n","R","x","y","j","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","u64.rotlBH","u64.rotlSH","rotlL","u64.rotlBL","u64.rotlSL","Keccak","enableXOF","rounds","posOut","state32","keccak","idx1","idx0","B0","B1","Th","Tl","curH","curL","PI","keccakP","finish","writeInto","xofInto","xof","gen","keccak_256","genShake","hashCons","msg","wrapConstructorWithOpts","_keccak256","__keccak256","keccak256","Rho","Id","Pi","idxL","idxR","shifts","shiftsL","idx","shiftsR","Kl","Kr","rotl","group","z","BUF","RIPEMD160","h0","h1","h2","h3","h4","al","ar","bl","br","cl","cr","dl","dr","el","er","rGroup","hbl","hbr","rl","rr","sl","sr","tl","tr","ripemd160","_ripemd160","noble_ripemd160","__ripemd160","_pbkdf2","iterations","keylen","pbkdf2Sync","__pbkdf2","_randomBytes","getRandomValues","crypto_random","__randomBytes","randomBytes","XorAndSalsa","prev","pi","ii","oi","y00","y01","y02","y03","y04","y05","y06","y07","y08","y09","y10","y11","y12","y13","y14","y15","x00","x01","x02","x03","x04","x05","x06","x07","x08","x09","x10","x11","x12","x13","x14","x15","BlockMix","r","head","tail","scryptInit","maxmem","N","onProgress","blockSize","blockSize32","memUsed","B32","V","blockMixCb","totalBlockMix","callbackPer","blockMixCnt","scryptOutput","lockedSync","lockedAsync","_scryptAsync","passwd","_nobleAsync","_scryptSync","_nobleSync","__scryptAsync","__scryptSync","scrypt","_passwd","progress","scryptSync","_sha256","_sha512","__sha256","__sha512","locked256","locked512","BN_36","getChecksumAddress","address","chars","expanded","charCodeAt","hashed","toUpperCase","ibanLookup","ibanChecksum","block","checksum","Base36","getAddress","fromBase36","getIcapAddress","base36","arrayifyInteger","_encode","payload","child","encodeRlp","hexlifyByte","unarrayifyInteger","_decodeChildren","childOffset","decoded","_decode","checkOffset","lengthLength","decodeRlp","getCreateAddress","tx","nonceHex","nonce","getCreate2Address","_from","_initCodeHash","initCodeHash","isAddressable","isAddress","resolveAddress","resolver","resolveName","_Typed_options","_gaurd","Typed","_typedSymbol","gaurd","options","isBigInt","isData","isString","tupleName","isTyped","AddressCoder","dereference","decode","reader","AnonymousCoder","coder","pack","coders","arrayValues","unique","staticWriter","dynamicWriter","updateFuncs","dynamicOffset","updateFunc","baseOffset","unpack","baseReader","offsetReader","fromItems","ArrayCoder","defaultChild","BooleanCoder","DynamicBytesCoder","BytesCoder","FixedBytesCoder","Empty","NullCoder","BN_MAX_UINT256","NumberCoder","maxUintValue","bounds","UnicodeNormalizationForm","Utf8ErrorReason","ignoreFunc","reason","output","badCodepoint","BAD_PREFIX","UNEXPECTED_CONTINUE","OVERRUN","exports","Utf8ErrorFuncs","ignore","replace","OVERLONG","getUtf8CodePoints","_bytes","onError","extraLength","overlongMask","nextChar","MISSING_CONTINUE","OUT_OF_RANGE","UTF16_SURROGATE","toUtf8Bytes","current","c2","pair","escapeChar","_toEscapedUtf8String","codePoint","_toUtf8String","codePoints","toUtf8String","toUtf8CodePoints","formatBytes32String","parseBytes32String","createTable","_func","lo","createRangeTable","hi","matchMap","ranges","range","Table_A_1_ranges","Table_B_1_flags","Table_B_2_ranges","Table_B_2_lut_abs","Table_B_2_lut_rel","Table_B_2_complex","Table_C_ranges","nameprep","codes","codesTableB2","codepoint","_nameprepTableB2","NFKC","StringCoder","TupleCoder","uniqueNames","_AbiCoder_instances","_AbiCoder_getCoder","paramTypeBytes","paramTypeNumber","defaultAbiCoder","getDefaultValue","id","Zeros","Partition","isValidName","namehash","partition","dnsEncode","messagePrefix","hashMessage","_TypedDataEncoder_instances","_TypedDataEncoder_types","_TypedDataEncoder_fullTypes","_TypedDataEncoder_encoderCache","_TypedDataEncoder_getEncoder","padding","BN__1","hexTrue","hexFalse","domainFieldTypes","chainId","verifyingContract","domainFieldNames","checkString","domainChecks","getBaseEncoder","boundsUpper","boundsLower","hexPadRight","encodeType","fields","TypedDataEncoder","links","parents","subtypes","field","primaryTypes","primaryType","checkCircular","found","subtype","delete","st","sort","getEncoder","encoder","encodeData","hashStruct","_visit","callback","visit","domain","domainFields","EIP712Domain","hashDomain","ensCache","domainValues","domainTypes","typesWithDomain","subEncoder","encodedType","_Interface_instances","_Interface_errors","_Interface_events","_Interface_functions","_Interface_abiCoder","_Interface_getFunction","_Interface_getEvent","LogDescription","fragment","topic","signature","TransactionDescription","selector","ErrorDescription","Indexed","_isIndexed","PanicReasons","BuiltinErrors","Interface","fragments","abi","getAbiCoder","bucket","deploy","getFunctionName","getFunction","getEventName","getEvent","getError","getSelector","matching","getEventTopic","_decodeParams","_encodeParams","encodeDeploy","decodeErrorResult","encodeErrorResult","decodeFunctionData","encodeFunctionData","decodeFunctionResult","errorArgs","errorName","errorSignature","builtin","transaction","encodeFunctionResult","functionFragment","encodeFilterTopics","eventFragment","topics","encodeTopic","encodeEventLog","dataTypes","dataValues","decodeEventLog","eventTopic","nonIndexed","resultIndexed","resultNonIndexed","nonIndexedIndex","indexedIndex","parseTransaction","parseLog","parseError","hexData","forceUnique","lastValue","valueLength","allowOptions","splice","lastArg","matchStr","m","_FetchResponse_props","_FetchResponse_error","FetchResponse","statusCode","statusMessage","headers","body","request","bodyText","response","bodyJson","iterator","next","done","makeServerError","throwThrottleError","stall","throttle","getHeader","hasBody","ok","assertOk","getUrl","req","timeout","protocol","url","credentials","allowInsecureAuthentication","init","Headers","resp","fetch","arrayBuffer","status","statusText","_FetchRequest_props","FetchRequest","allowInsecure","gzip","bodyType","allowGzip","setHeader","clearHeaders","setCredentials","username","redirect","location","delay","duration","getTime","lockGateways","fetchData","connection","conn","attempts","throttleLimit","slotInterval","throttleSlotInterval","retryFunc","throttleRetry","preflightRequest","processResponse","t0","retryAfter","trunc","random","pow","setGateway","gateway","setIpfsGateway","setArGateway","_EnsResolver_supports2544","_EnsResolver_getResolver","HashZero","parseBytes","parseString","numPad","padded","bytesPad","encodeBytes","byteCount","getIpfsLink","MulticoinProviderPlugin","validate","proivder","supportsCoinType","coinType","matcherIpfs","matchers","EnsResolver","provider","catch","parameters","addrData","enableCcipRead","supportsWildcard","_fetch","getNetwork","formatter","callAddress","coinPlugin","plugin","plugins","encodeAddress","keyBytes","calldata","hexBytes","ipfs","scheme","swarm","_getAvatar","linkage","avatar","getText","owner","addr","tokenId","tokenOwner","balance","metadataUrl","metadata","imageUrl","image","currentName","network","ensPlugin","getPlugin","_Signature_props","BN_2","BN_27","BN_28","BN_35","BN_MASK_255","Zero","Signature","networkV","legacyChainId","getChainId","vs","yParity","serialized","toJSON","_type","bv","_v","sig","getNormalizedV","_3n","_8n","POW_2_256","CURVE","P","Gx","Gy","beta","weistrass","x2","mod","x3","USE_ENDOMORPHISM","JacobianPoint","Point","points","toInv","nums","scratch","inverted","invert","acc","num","reduceRight","invertBatch","toAffine","toAffineBatch","fromAffine","equals","X1","Y1","Z1","X2","Y2","Z2","Z1Z1","Z2Z2","U1","U2","S1","S2","negate","double","X3","Y3","Z3","ZERO","HH","HHH","subtract","multiplyUnsafe","scalar","normalizeScalar","P0","k1neg","k1","k2neg","k2","splitScalarEndo","k1p","k2p","precomputeWindow","W","windows","base","wNAF","affinePoint","BASE","_WINDOW_SIZE","precomputes","pointPrecomputes","normalizeZ","windowSize","maxNumber","shiftBy","wbits","pr","cached","abs","multiply","point","fake","f1p","f2p","invZ","iz1","iz2","iz3","ax","ay","_setWindowSize","isShort","bytesToNumber","isValidFieldElement","_6n","_11n","_22n","_23n","_44n","_88n","b2","b3","b6","pow2","b9","b11","b22","b44","b88","b176","b220","b223","t1","t2","sqrtMod","isYOdd","assertValidity","ensureBytes","header","fromCompressedHex","fromUncompressedHex","privateKey","normalizePrivateKey","msgHash","recovery","delta","truncateHash","fromDER","fromCompact","normalizeSignature","prefix","fromHex","numTo32bStr","rinv","u1","u2","Q","multiplyAndAddUnsafe","toRawBytes","isCompressed","hexToBytes","toHexX","toRawX","aP","bQ","sum","sliceDER","parseDERInt","bytesToHex","isUint8a","hexToNumber","sBytes","rBytesLeft","parseDERSignature","isWithinCurveOrder","hasHighS","HALF","normalizeS","toDERRawBytes","toDERHex","sHex","numberToHexUnpadded","rHex","rLen","sLen","toCompactRawBytes","toCompactHex","concatBytes","arrays","every","hexes","uint8a","array","hexByte","byte","power","number","modulo","divNearest","POW_2_128","a1","b1","a2","c1","HmacDrbg","counter","utils","hmacSha256","hmacSync","hmacSha256Sync","incr","seed","reseedSync","generateSync","kmdToSig","kBytes","q","isPub","getSharedSecret","privateA","publicB","publicKey","bits2int","bits2octets","z1","z2","int2octets","signSync","privKey","extraEntropy","seedArgs","initSigArgs","drbg","recSig","canonical","der","recovered","finalizeSig","node","web","isValidPrivateKey","hashToPrivateKey","numTo32b","bytesLength","randomPrivateKey","subtle","messages","ckey","importKey","sign","sha256Sync","precompute","_SigningKey_privateKey","SigningKey","computePublicKey","compressedPublicKey","sigDer","recid","secp256k1.signSync","secp256k1.Signature","computeShardSecret","pubKey","secp256k1.getSharedSecret","compressed","fromPrivateKey","secp256k1.getPublicKey","pub","secp256k1.Point","fromSignature","secp256k1.recoverPublicKey","p0","p1","pub0","pub1","accessSetify","storageKeys","storageKey","accessListify","localeCompare","_Transaction_props","formatNumber","formatAccessList","_serializeLegacy","gasPrice","gasLimit","legacy","getChainIdV","_serializeEip1559","maxPriorityFeePerGas","maxFeePerGas","accessList","_serializeEip2930","Transaction","typeName","unsignedHash","unsignedSerialized","fromPublicKey","isSigned","inferTypes","hasGasPrice","hasFee","hasAccessList","_parseEip1559","_Block_transactions","_TransactionReceipt_logs","toJson","FeeData","Block","dummyProvider","transactions","timestamp","parentHash","difficulty","gasUsed","miner","extraData","baseFeePerGas","date","getTransaction","isMined","isLondon","orphanedEvent","orphan","Log","transactionHash","blockHash","blockNumber","removed","transactionIndex","getBlock","getTransactionReceipt","removedEvent","TransactionReceipt","logs","contractAddress","logsBloom","cumulativeGasUsed","effectiveGasPrice","byzantium","root","fee","getBlockNumber","createRemovedTransactionFilter","reorderedEvent","createReorderedTransactionFilter","TransactionResponse","confirms","waitForTransaction","isLegacy","isBerlin","fail","blockTag","position","signedTx","blockHashOrBlockTag","_Formatter_format","_Formatter_baseBlock","Formatter","bigNumber","uint256","arrayOf","fromBlock","allowNull","toBlock","transactionRequest","transactionResponse","blockWithTransactions","fromTransaction","boolean","receipt","filterLog","allowFalsish","ifFalse","ifNull","_hexstring","dataOrLength","altNames","srcKey","altKey","nv","storageSlot","NetworkPlugin","GasCostPlugin","effectiveBlock","costs","props","nullish","EnsPlugin","targetNetwork","MaxPriorityFeePlugin","priorityFee","_Network_props","Networks","defaultFormatter","Network","_chainId","attachPlugin","getPlugins","basename","computeIntrinsicGas","txBase","txCreate","txDataZero","txDataNonzero","txAccessListAddress","txAccessListStorageKey","networkFunc","custom","ensAddress","ensNetwork","nameOrChainId","existing","_PollingBlockSubscriber_instances","_PollingBlockSubscriber_provider","_PollingBlockSubscriber_poller","_PollingBlockSubscriber_interval","_PollingBlockSubscriber_blockNumber","_PollingBlockSubscriber_poll","_OnBlockSubscriber_provider","_OnBlockSubscriber_poll","_PollingOrphanSubscriber_filter","_PollingTransactionSubscriber_hash","_PollingEventSubscriber_instances","_PollingEventSubscriber_provider","_PollingEventSubscriber_filter","_PollingEventSubscriber_poller","_PollingEventSubscriber_blockNumber","_PollingEventSubscriber_poll","PollingBlockSubscriber","pollingInterval","stop","clearTimeout","pause","dropWhilePaused","resume","emit","OnBlockSubscriber","_poll","on","PollingOrphanSubscriber","PollingTransactionSubscriber","PollingEventSubscriber","getLogs","_AbstractProvider_instances","_AbstractProvider_subs","_AbstractProvider_plugins","_AbstractProvider_pausedState","_AbstractProvider_networkPromise","_AbstractProvider_anyNetwork","_AbstractProvider_performCache","_AbstractProvider_nextTimer","_AbstractProvider_timers","_AbstractProvider_disableCcipRead","_AbstractProvider_perform","_AbstractProvider_call","_AbstractProvider_getBlock","_AbstractProvider_hasSub","_AbstractProvider_getSub","getTag","UnmanagedSubscriber","concisify","getSubscription","_event","tag","addresses","addAddress","AbstractProvider","_network","disableCcipRead","urls","sender","errorMessages","href","errorMessage","_wrapTransaction","_detectNetwork","detectNetwork","networkPromise","expected","actual","priorityFeePlugin","getPriorityFee","_request","_tx","_getTransaction","_getBlockTag","_address","_blockTag","_position","lookup","addBlockTag","_filter","_getFilter","_getProvider","fromName","getResolver","getAvatar","reject","timer","once","_clearTimeout","timerId","_setTimeout","_b","paused","time","_forEachSubscriber","sub","subscriber","_getSubscriber","_recoverSubscriber","oldSub","newSub","started","listeners","total","removeAllListeners","_parseString","_parseBytes","perform","_perform","attempt","txSender","ccipArgs","urlsOffset","urlsLength","urlsData","parseOffchainLookup","ccipResult","ccipReadFetch","includeTransactions","emitArgs","subscription","addressableMap","nameMap","empty","_AbstractSigner_instances","_AbstractSigner_checkProvider","_AbstractSigner_fromify","_VoidSigner_instances","_VoidSigner_throwUnsupported","_WrappedSigner_signer","AbstractSigner","getBalanceOf","getTransactionCountOf","estimateGas","getTransactionCount","txObj","populateTransaction","broadcastTransaction","signTransaction","actions","VoidSigner","connect","WrappedSigner","signer","sendTransaction","signMessage","signTypedData","shown","showThrottleMessage","service","_FilterIdSubscriber_instances","_FilterIdSubscriber_provider","_FilterIdSubscriber_filterIdPromise","_FilterIdSubscriber_poller","_FilterIdSubscriber_network","_FilterIdSubscriber_poll","_FilterIdSubscriber_teardown","_FilterIdEventSubscriber_event","FilterIdSubscriber","_subscribe","_emitResults","_recover","filterId","send","filterIdPromise","FilterIdEventSubscriber","results","FilterIdPendingSubscriber","_JsonRpcApiProvider_nextId","_JsonRpcApiProvider_options","_JsonRpcProvider_connect","_JsonRpcProvider_pollingInterval","Primitive","deepCopy","getLowerCase","defaultOptions","polling","batchMaxSize","batchStallTime","JsonRpcSigner","getFeeData","_to","hexTx","getRpcTransaction","sendUncheckedTransaction","checkTx","_message","populated","resolveNames","getPayload","JsonRpcApiProvider","_getOptions","_setOptions","prepareRequest","jsonrpc","accounts","account","dstKey","getRpcRequest","signedTransaction","getRpcError","spelunkData","_spelunkMessage","spelunkMessage","feeData","JsonRpcProvider","isPollable","StaticJsonRpcProvider","defaultApiKey","AnkrProvider","apiKey","getConnection","getHost","isCommunityResource","AlchemyProvider","CloudflareProvider","EtherscanPluginId","EtherscanPlugin","baseUrl","communityApiKey","EtherscanProvider","getBaseUrl","query","getPostUrl","getPostData","apikey","post","_getTransactionPostData","maxFeePerGs","_checkError","action","txhash","postData","ethusd","defaultProjectId","InfuraProvider","projectId","projectSecret","defaultAppIds","homestead","ropsten","rinkeby","goerli","normalizeApiKey","_appId","applicationSecretKey","loadBalancer","community","applicationId","PocketProvider","_secretKey","_loadBalancer","_FallbackProvider_instances","_FallbackProvider_configs","_FallbackProvider_initialSyncPromise","_FallbackProvider_getNextConfig","_FallbackProvider_addRunner","_FallbackProvider_initialSync","_FallbackProvider_checkQuorum","_FallbackProvider_waitForQuorum","defaultConfig","stallTimeout","priority","weight","defaultState","requests","lateResponses","errorResponses","outOfSync","unsupportedEvents","rollingDuration","score","_updateNumber","_totalTime","checkQuorum","quorum","tally","normal","bestResult","bestWeight","FallbackProvider","providers","eventQuorum","eventWorkers","running","runner","configs","allConfigs","shuffle","config","didBump","staller","dt","initialSync","waitForSync","mid","getMedian","interesting","newRunners","race","_WebSocket","WebSocket","_SocketSubscriber_provider","_SocketSubscriber_filter","_SocketSubscriber_filterId","_SocketSubscriber_paused","_SocketSubscriber_emitPromise","_SocketEventSubscriber_logFilter","_SocketEventSubscriber_formatter","_SocketProvider_callbacks","_SocketProvider_ready","_SocketProvider_subs","_SocketProvider_pending","SocketSubscriber","_register","_handleMessage","emitPromise","_emit","SocketBlockSubscriber","SocketPendingSubscriber","SocketEventSubscriber","logFilter","SocketProvider","pending","promise","_write","_WebSocketProvider_websocket","WebSocketProvider","websocket","onopen","_start","onmessage","_processMessage","registerEth","etherscan","injectCommonNetworks","_Network","IpcSocketProvider","_ContractTransactionReceipt_interface","_ContractTransactionResponse_interface","EventLog","iface","interface","eventName","eventSignature","ContractTransactionReceipt","ContractTransactionResponse","wait","ContractEventPayload","contract","_log","_PreparedTopicFilter_filter","canResolve","PreparedTopicFilter","getRunner","resolvedArgs","walkAsync","getTopicFilter","feature","copyOverrides","arg","overrides","bigIntKeys","numberKeys","enableCcipReadEnabled","customData","copyRequest","WrappedMethod","Function","_WrappedMethodBase","_contract","thisArg","getFragment","staticCall","_runner","resolveArgs","staticCallResult","WrappedEvent","_WrappedEventBase","internalValues","getInternal","getSubTag","hasSub","subs","getSub","runnerOff","lastEmit","resultPromise","passArgs","BaseContract","_deployTx","addrPromise","deployTx","filters","_prop","deploymentTransaction","Contract","_ContractBase","computeAddress","subsChrs","Word","unfold","words","sep","initial","decodeOwl","clumps","leftover","semi","Wordlist","locale","mnemonic","_WordlistOwl_instances","_WordlistOwl_data","_WordlistOwl_checksum","_WordlistOwl_words","_WordlistOwl_loadWords","WordlistOwl","_decodeWords","getWord","getWordIndex","langEn","wordlists","en","_WordlistOwlA_accent","WordlistOwlA","accent","_accent","accents","posOffset","positions","flood","decodeBits","charCode","regex","decodeOwlA","getUpperMask","mnemonicToEntropy","wordlist","entropy","bit","entropyBits","checksumMask","entropyToMnemonic","indices","remainingBits","checksumBits","Mnemonic","phrase","computeSeed","NFKD","_entropy","_BaseWallet_signingKey","BaseWallet","signingKey","btx","_HDNodeWallet_fromSeed","_HDNodeWalletManager_root","defaultPath","MasterSecret","HardenedBit","zpad","encodeBase58Check","ser_I","chainCode","I","IL","IR","derivePath","path","component","deriveChild","HDNodeWallet","parentFingerprint","fingerprint","extendedKey","hasPath","neuter","HDNodeVoidWallet","_index","ki","fromPhrase","fromEntropy","_seed","Ki","_addPoints","HDNodeWalletManager","getSigner","getAccountPath","_AES_key","_AES_Kd","_AES_Ke","numberOfRounds","rcon","S","Si","T3","T4","T5","T6","T7","T8","U3","U4","convertToInt32","AES","roundKeyCount","KC","tk","tt","rconpointer","encrypt","plaintext","decrypt","ciphertext","ModeOfOperation","cls","aes","_CBC_iv","_CBC_lastBlock","CBC","iv","_CTR_remaining","_CTR_remainingIndex","_CTR_counter","CTR","initialValue","setCounterValue","setCounterBytes","MAX_SAFE_INTEGER","increment","crypttext","looseArrayify","hexString","getPassword","spelunk","_path","reqd","isCrowdsaleJson","encseed","decryptCrowdsaleJson","encryptedSeed","padder","pkcs7Strip","seedHex","isKeystoreJson","getAccount","mnemonicKey","mnemonicCiphertext","mnemonicIv","mnemonicAesCtr","getKdfParams","kdf","prf","_Wallet_mnemonic","trySigningKey","Wallet","wallet","fromMnemonic","tryWallet","tryMnemonic","progressCallback","encryptSync","decryptKeystoreJson","decryptKeystoreJsonSync"],"mappings":"8OA0GOA,eAAeC,EAAkBC,GACpC,MAAMC,EAAOC,OAAOD,KAAKD,GAEzB,aADsBG,QAAQC,IAAIH,EAAKI,KAAKC,GAAMH,QAAQI,QAAQP,EAAMM,QACzDE,QAAO,CAACC,EAAOC,EAAGC,KAC7BF,EAAMR,EAAKU,IAAUD,EACdD,IACR,IAgEP,SAASG,EAAUZ,EAAOa,GACtB,MAAMC,EAAQD,EAAKE,MAAM,KAAKV,KAAIW,GAAKA,EAAEC,SACzC,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAMK,OAAQD,IAC9B,OAAQL,GACJ,IAAK,MACD,OACJ,IAAK,UACL,IAAK,SACL,IAAK,SACD,UAAY,IAAWA,EACnB,OAIhB,MAAM,IAAIO,MAAM,0BAEb,SAASC,EAAiBC,EAAQC,EAAQT,EAAOU,GACpD,IAAK,IAAIC,KAAOF,EAAQ,CACpB,IAAIvB,EAAQuB,EAAOE,GACnB,MAAMC,EAAYF,EAAWA,EAASC,QAAOE,EAC7C,QAAiBA,IAAbD,EACA1B,EAAQ0B,MAEP,CACD,MAAMb,EAAQC,EAAQA,EAAMW,GAAO,KAC/BZ,GACAD,EAAUZ,EAAOa,GAGzBX,OAAO0B,eAAeN,EAAQG,EAAK,CAAEI,YAAY,EAAM7B,MAAAA,EAAO8B,UAAU,KC7MhF,IAWIC,EAXAC,EAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,EAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAIjF,MAAMU,EACTC,YAAYC,EAASC,EAAUC,GAC3BjB,EAAuBU,IAAIR,UAAM,GACjCD,EAAuBC,KAAMF,EAAwBgB,EAAU,KAC/D1B,EAAiBY,KAAM,CAAEa,QAAAA,EAASE,OAAAA,IAEtClD,uBACqE,MAA7D4C,EAAuBT,KAAMF,EAAwB,YAGnDE,KAAKa,QAAQG,IAAIhB,KAAKe,OAAQN,EAAuBT,KAAMF,EAAwB,OCvB1F,SAASmB,EAASC,EAAO1B,GAC5B,OAAO0B,EAAM1B,GAEV,SAAS2B,EAASD,EAAO1B,EAAKzB,GACjC,GAAIE,OAAOmD,SAASF,GAChB,MAAM,IAAI/B,MAAM,2CAA6CK,GAEjE0B,EAAM1B,GAAOzB,ECIV,SAASsD,EAAQC,EAAOC,GAC3B,OAAQD,GAASA,EAAMC,OAASA,EAE7B,SAASC,EAAgBF,GAC5B,OAAOD,EAAQC,EAAO,kBFW1BxB,EAAyB,IAAI2B,QG1B7B,IAKIC,EAAmBC,EAAwBC,EAAkBC,EAEtDC,EAPPrB,EAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,KAKxF,SAAW6B,GACPA,EAAgB,MAAI,QACpBA,EAAe,KAAI,OACnBA,EAAkB,QAAI,UACtBA,EAAgB,MAAI,QACpBA,EAAc,IAAI,MALtB,CAMGA,IAAaA,EAAW,KAE3B,MAAMC,EAAY,CAAEC,MAAO,EAAGC,QAAW,EAAGC,KAAM,EAAGC,QAAS,EAAGb,MAAO,EAAGN,IAAK,GAChF,IAAIoB,EAAYL,EAAmB,QAC/BM,EAAgB,KACpB,MAAMC,EAAkB,CAAC,MAAO,MAAO,OAAQ,QAAQ/D,QAAO,CAACC,EAAO+D,KAClE,IAGI,GAA+B,SAA3B,OAAOC,UAAUD,GACjB,MAAM,IAAIpD,MAAM,OAIpB,GAAa,QAAToD,EAAgB,CAChB,MAAME,EAAQC,OAAOC,aAAa,KAAMH,UAAU,OAGlD,GAAIC,IAFaC,OAAOC,aAAa,IAAM,KAGvC,MAAM,IAAIxD,MAAM,UAIxBX,EAAMoE,KAAKL,GAEf,MAAOjB,IACP,OAAO9C,IACR,IACH,SAASqE,EAAeC,EAAQC,EAAMhF,GAClCE,OAAO0B,eAAemD,EAAQC,EAAM,CAChCnD,YAAY,EAAMC,UAAU,EAAO9B,MAAAA,IAY3C,MAAMiF,EAAW,iBAEXC,EAAoB,GAC1BA,EAAkBC,iBAAmB7C,UACrC4C,EAAkBE,cAAgBC,WAClCH,EAAkBI,eAAiBD,WAC5B,MAAME,EACT1C,YAAY2C,GACR7B,EAAkB8B,IAAIxD,MACtB6C,EAAe7C,KAAM,UAAWuD,GAAW,KAE/CE,UAAUC,EAASnC,EAAMW,GAKrB,CACI,MAAMyB,EAAU,GAChB,GAAIzB,EACA,IAAK,MAAM1C,KAAO0C,EAAM,CACpB,MAAMnE,EAASmE,EAAK1C,GACpB,IACImE,EAAQf,KAAKpD,EAAM,IAAMoE,KAAKC,UAAU9F,IAE5C,MAAOuD,GACHqC,EAAQf,KAAKpD,EAAM,kCAI/BmE,EAAQf,KAAK,QAAQrB,KACrBoC,EAAQf,KAAK,WAAW5C,KAAKuD,WACzBI,EAAQzE,SACRwE,GAAW,KAAOC,EAAQG,KAAK,MAAQ,KAG/C,MACMxC,EAAS,IADA2B,EAAkB1B,IAASpC,OAChBuE,GAE1B,GADAb,EAAevB,EAAO,OAAQC,GAC1BW,EACA,IAAK,MAAM1C,KAAO0C,EACdW,EAAevB,EAAO9B,EAAM0C,EAAK1C,IAGzC,OAAO8B,EAEXyC,WAAWL,EAASnC,EAAMW,GACtB,MAAMlC,KAAKyD,UAAUC,EAASnC,EAAMW,GAExC8B,mBAAmBN,EAASX,EAAMhF,GAC9B,OAAOiC,KAAK+D,WAAWL,EAAS,mBAAoB,CAChDO,SAAUlB,EACVhF,MAAOA,IAGfmG,OAAOC,EAAWT,EAASnC,EAAMW,GACvBiC,GAGNnE,KAAK+D,WAAWL,EAASnC,GAAQ,gBAAiBW,GAEtDkC,eAAeD,EAAWT,EAASX,EAAMhF,GACrC,OAAOiC,KAAKkE,OAAOC,EAAWT,EAAS,mBAAoB,CACvDO,SAAUlB,EACVhF,MAAAA,IAGRsG,sBAAsBtB,EAAMhF,EAAOuG,EAAOC,GACtC,IAAIb,EAAU,KACS,iBAAX,EACRA,EAAU,oBAEJc,OAAOC,UAAU1G,IAGR,MAATuG,GAAiBvG,EAAQuG,GAAoB,MAATC,GAAiBxG,EAAQwG,KACnEb,EAAU,yBAHVA,EAAU,kBAKVA,GACA1D,KAAKgE,mBAAmBN,EAASX,EAAMhF,GAG/C2G,iBAAiB3G,EAAO2F,GACpB1D,KAAKoE,eAAmC,iBAAnB,EAA8B,iBAAkB,QAASrG,GAC/D,MAAX2F,IACAA,EAAU,kBAEd,MAAMiB,EAAY,oBAClB3E,KAAKkE,OAAQnG,GAAS,GAAKA,EAAQ,iBAAmB2F,EAAS,gBAAiB,CAC5EiB,UAAAA,EAAWC,MAAO,oBAAqB7G,MAAAA,IAE3CiC,KAAKkE,OAAQnG,EAAQ,GAAO,EAAG2F,EAAS,gBAAiB,CACrDiB,UAAAA,EAAWC,MAAO,cAAe7G,MAAAA,IAGzC8G,gBAAgBtC,IAC2B,IAAnCD,EAAgBwC,QAAQvC,IACxBvC,KAAK+D,WAAW,8CAA+C,wBAAyB,CACpFY,UAAW,6BAA8BzC,KAAM,CAAEK,KAAAA,KAI7DwC,cAAcC,EAAYC,EAAOC,EAAY,IACzC,GAAIF,IAAeC,EAAO,CACtB,IAAIE,EAASD,EAAWP,EAAY,MAChCO,IACAC,GAAU,IACVR,GAAa,IAAMO,GAEvBlF,KAAK+D,WAAW,4BAA4BoB,iBAAuB,wBAAyB,CACxFR,UAAAA,KAIZS,oBAAoBC,EAAOC,EAAe5B,EAAU,IAC5CA,IACAA,EAAU,KAAOA,GAErB1D,KAAKkE,OAAQmB,GAASC,EAAgB,mBAAqB5B,EAAS,mBAAoB,CACpF2B,MAAOA,EACPC,cAAeA,IAEnBtF,KAAKkE,OAAQmB,GAASC,EAAgB,qBAAuB5B,EAAS,sBAAuB,CACzF2B,MAAOA,EACPC,cAAeA,IAGvBC,YAAYxH,EAAO4G,GACflE,EAAuBT,KAAM0B,EAAmB,IAAKC,GAAwBpB,KAAKP,KAAM,QAASjC,EAAO4G,GAAa,WAAY3B,GAErIwC,aAAazH,EAAO4G,GAChBlE,EAAuBT,KAAM0B,EAAmB,IAAKC,GAAwBpB,KAAKP,KAAM,QAASjC,EAAO4G,GAAa,UAAW,GAEpIc,cAAc1H,EAAO4G,EAAY,UAAWe,EAAM,EAAGC,EAAM3C,IAG3D4C,SAAS7H,EAAOgF,GACZ,OAAOtC,EAAuBT,KAAM0B,EAAmB,IAAKE,GAAkBrB,KAAKP,KAAMjC,EAAOgF,GAAM,GAE1G8C,aAAa9H,EAAOgF,GAChB,OAAOtC,EAAuBT,KAAM0B,EAAmB,IAAKE,GAAkBrB,KAAKP,KAAMjC,EAAOgF,GAAM,GAE1G+C,UAAU/H,EAAOgF,GACb,cAAgB,GACZ,IAAK,SAID,OAHIhF,GAASiF,GAAYjF,EAAQiF,IAC7BhD,KAAKgE,mBAAmB,WAAYjB,GAAQ,QAAShF,GAElDyG,OAAOzG,GAClB,IAAK,SAOD,OANKyG,OAAOC,UAAU1G,IAGbA,GAASiF,GAAYjF,EAAQiF,IAClChD,KAAKgE,mBAAmB,WAAYjB,GAAQ,QAAShF,GAHrDiC,KAAKgE,mBAAmB,YAAajB,GAAQ,QAAShF,GAKnDA,EACX,IAAK,SACD,IACI,OAAOiC,KAAK8F,UAAUC,OAAOhI,GAAQgF,GAEzC,MAAOiD,GACHhG,KAAKgE,mBAAmB,2BAA2BgC,EAAEtC,UAAWX,GAAQ,QAAShF,IAG7F,OAAOiC,KAAKgE,mBAAmB,wBAAyBjB,GAAQ,QAAShF,GAE7EkI,UAAUlI,EAAOgF,GACb,cAAgB,GACZ,IAAK,SAAU,OAAOhF,EACtB,IAAK,SAOD,OANKyG,OAAOC,UAAU1G,IAGbA,GAASiF,GAAYjF,EAAQiF,IAClChD,KAAKgE,mBAAmB,WAAYjB,GAAQ,QAAShF,GAHrDiC,KAAKgE,mBAAmB,YAAajB,GAAQ,QAAShF,GAKnDgI,OAAOhI,GAClB,IAAK,SACD,IACI,OAAOgI,OAAOhI,GAElB,MAAOiI,GACHhG,KAAKgE,mBAAmB,gCAAgCgC,EAAEtC,UAAWX,GAAQ,QAAShF,IAGlG,OAAOiC,KAAKgE,mBAAmB,6BAA8BjB,GAAQ,QAAShF,GAElFiE,SAASkE,GACLzF,EAAuBT,KAAM0B,EAAmB,IAAKG,GAAatB,KAAKP,KAAM8B,EAASqE,MAAOD,GAEjGhE,QAAQgE,GACJzF,EAAuBT,KAAM0B,EAAmB,IAAKG,GAAatB,KAAKP,KAAM8B,EAASsE,KAAMF,GAEhGG,QAAQH,GACJzF,EAAuBT,KAAM0B,EAAmB,IAAKG,GAAatB,KAAKP,KAAM8B,EAASwE,QAASJ,GAEnGK,sBAII,OAHKlE,IACDA,EAAgB,IAAIiB,EC9PT,uCDgQRjB,EAEXkE,mBAAmBC,GACf,MAAMC,EAAQ1E,EAAUyE,EAASE,eACpB,MAATD,EAIJrE,EAAYqE,EAHRnD,EAAOqD,eAAeN,KAAK,uBAAyBG,IAMhE9E,EAAoB,IAAIkF,QAAWjF,EAAyB,SAAgCoB,EAAMhF,EAAO4G,EAAWkC,IACzF,iBAAX,GAAuBC,MAAM/I,KACrCiC,KAAKgE,mBAAmB,WAAWjB,IAAQ,mBAAoB,CAC3DA,KAAM,QAAShF,MAAAA,IAGvB,IAAI2F,EAAU,WAAWX,UACrB6B,EAAQ,KACRkC,MAAM/I,GACN6G,EAAQ,eAEH7G,EAAQ8I,GAAY9I,EAAQiF,GACjCU,EAAU,UAAUX,UACpB6B,EAAQ,YAEHmC,KAAKC,MAAMjJ,KAAWA,IAC3B6G,EAAQ,aAERA,GACA5E,KAAK+D,WAAWL,EAAS,gBAAiB,CACtCiB,UAAAA,EAAWC,MAAAA,EAAO7G,MAAAA,KAG3B6D,EAAmB,SAA0B7D,EAAOgF,EAAMkE,GACzD,GAAIlJ,aAAiBmJ,WACjB,OAAID,EACO,IAAIC,WAAWnJ,GAEnBA,EAEX,GAAuB,iBAAnB,GAA+BA,EAAMoJ,MAAM,4BAA6B,CACxE,MAAMC,EAAS,IAAIF,YAAYnJ,EAAMmB,OAAS,GAAK,GACnD,IAAImI,EAAS,EACb,IAAK,IAAIpI,EAAI,EAAGA,EAAImI,EAAOlI,OAAQD,IAC/BmI,EAAOnI,GAAKqI,SAASvJ,EAAMwJ,UAAUF,EAAQA,EAAS,GAAI,IAC1DA,GAAU,EAEd,OAAOD,EAEX,OAAOpH,KAAKgE,mBAAmB,0BAA2BjB,GAAQ,QAAShF,IAC5E8D,EAAc,SAAqB2E,EAAUN,GAC5C,MAAMO,EAAQD,EAASE,cACC,MAApB3E,EAAU0E,IACVzG,KAAKgE,mBAAmB,yBAA0B,WAAYwC,GAE9DpE,EAAYL,EAAU0E,IAG1Be,QAAQC,IAAIC,MAAMF,QAAStB,IAG/B5C,EAAOvB,UAAYD,EE9TZ,MCEM6F,EAAS,IAAIrE,EDFH,mCEAvB,IAWIsE,EAAwBC,EAAqBC,EAAqBC,EAA6BC,EAAsBC,EAI9GC,EAfPnI,EAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,EAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAmBxF,SAASkI,EAAOC,GACZ,MAAMhB,EAAS,IAAIiB,IAEnB,OADAD,EAAME,SAASjK,GAAM+I,EAAO5D,IAAInF,KACzBJ,OAAOsK,OAAOnB,IAfzB,SAAWc,GAEPA,EAAoB,QAAI,UAExBA,EAAoB,QAAI,UAExBA,EAAiB,KAAI,OAErBA,EAAiB,KAAI,OARzB,CASGA,IAAeA,EAAa,KAS/B,MAAMM,EAAW,8DACXC,EAAUN,EAAOK,EAAS1J,MAAM,MAChC4J,EAAW,0CACXC,EAAUR,EAAOO,EAAS5J,MAAM,MAChC8J,EAAe,0CACfC,EAAcV,EAAOS,EAAa9J,MAAM,MAIxCgK,EAAWX,EADC,CAACO,EAAUE,EAFZ,gBAEoCJ,GAAU1E,KAAK,KAClChF,MAAM,MAElCiK,EAAe,CACjB,IAAK,aAAc,IAAK,cACxB,IAAK,eAAgB,IAAK,gBAC1B,IAAK,QAAS,IAAK,MAGjBC,EAAkB,IAAIC,OAAO,WAC7BC,EAAc,IAAID,OAAO,aACzBE,EAAkB,IAAIF,OAAO,+BAC7BG,EAAY,IAAIH,OAAO,oDACtB,MAAMI,EACTzI,YAAY0I,GACR1B,EAAuBpE,IAAIxD,MAC3B6H,EAAoBrH,IAAIR,UAAM,GAC9B8H,EAAoBtH,IAAIR,UAAM,GAC9BD,EAAuBC,KAAM6H,EAAqB,EAAG,KACrD9H,EAAuBC,KAAM8H,EAAqBwB,EAAOC,QAAS,KAElElC,aAAW,OAAO5G,EAAuBT,KAAM6H,EAAqB,KACpE3I,aAAW,OAAOuB,EAAuBT,KAAM8H,EAAqB,KAAK5I,OAASuB,EAAuBT,KAAM6H,EAAqB,KACxI2B,QAAU,OAAO,IAAIH,EAAY5I,EAAuBT,KAAM8H,EAAqB,MACnF2B,QAAU1J,EAAuBC,KAAM6H,EAAqB,EAAG,KAE/D6B,WAAWC,GACP,MAAMC,EAAM5J,KAAK6J,OACjB,GAAiB,YAAbD,EAAIhL,OAAuB+K,EAAQrJ,IAAIsJ,EAAIE,MAC3C,MAAM,IAAI3K,MAAM,oBAAoByK,EAAIE,QAE5C,OAAO9J,KAAK+J,MAAMD,KAGtBE,QAAQpL,GACJ,GAAIoB,KAAK6J,OAAOjL,OAASA,EACrB,MAAM,IAAIO,MAAM,YAAYP,UAAagF,KAAKC,UAAU7D,KAAK6J,WAEjE,OAAO7J,KAAK+J,MAAMD,KAGtBG,WACI,MAAML,EAAM5J,KAAK6J,OACjB,GAAiB,eAAbD,EAAIhL,KACJ,MAAM,IAAIO,MAAM,aAEpB,MAAMiI,EAAS3G,EAAuBT,KAAM4H,EAAwB,IAAKG,GAA6BxH,KAAKP,KAAMS,EAAuBT,KAAM6H,EAAqB,KAAO,EAAG+B,EAAIzC,MAAQ,GAEzL,OADApH,EAAuBC,KAAM6H,EAAqB+B,EAAIzC,MAAQ,EAAG,KAC1DC,EAGX8C,YACI,MAAMN,EAAM5J,KAAK6J,OACjB,GAAiB,eAAbD,EAAIhL,KACJ,MAAM,IAAIO,MAAM,aAEpB,MAAMiI,EAAS,GACf,KAAO3G,EAAuBT,KAAM6H,EAAqB,KAAO+B,EAAIzC,MAAQ,GAAG,CAC3E,MAAMgD,EAAOnK,KAAK6J,OAAOO,SACzBhD,EAAOxE,KAAKnC,EAAuBT,KAAM4H,EAAwB,IAAKG,GAA6BxH,KAAKP,KAAMS,EAAuBT,KAAM6H,EAAqB,KAAO,EAAGsC,IAC1KpK,EAAuBC,KAAM6H,EAAqBsC,EAAM,KAG5D,OADApK,EAAuBC,KAAM6H,EAAqB+B,EAAIzC,MAAQ,EAAG,KAC1DC,EAGXyC,OACI,GAAIpJ,EAAuBT,KAAM6H,EAAqB,MAAQpH,EAAuBT,KAAM8H,EAAqB,KAAK5I,OACjH,MAAM,IAAIC,MAAM,iBAEpB,OAAOsB,EAAuBT,KAAM8H,EAAqB,KAAKrH,EAAuBT,KAAM6H,EAAqB,MAGpHwC,YAAYV,GACR,MAAMC,EAAM5J,KAAKsK,SAAS,WAC1B,OAAe,MAAPV,GAAeD,EAAQrJ,IAAIsJ,GAAQA,EAAM,KAGrDU,SAAS1L,GACL,GAAoB,IAAhBoB,KAAKd,OACL,OAAO,KAEX,MAAM0K,EAAM5J,KAAK6J,OACjB,OAAQD,EAAIhL,OAASA,EAAQgL,EAAIE,KAAO,KAG5CC,MACI,IAAIQ,EACJ,MAAMnD,EAASpH,KAAK6J,OAEpB,OADA9J,EAAuBC,KAAM6H,GAAsB0C,EAAK9J,EAAuBT,KAAM6H,EAAqB,OAAM0C,GAAW,KACpHnD,EAEXoD,WACI,MAAMlB,EAAS,GACf,IAAK,IAAIrK,EAAIwB,EAAuBT,KAAM6H,EAAqB,KAAM5I,EAAIwB,EAAuBT,KAAM8H,EAAqB,KAAK5I,OAAQD,IAAK,CACzI,MAAMwL,EAAQhK,EAAuBT,KAAM8H,EAAqB,KAAK7I,GACrEqK,EAAO1G,KAAK,GAAG6H,EAAM7L,QAAQ6L,EAAMX,QAEvC,MAAO,gBAAgBR,EAAOxF,KAAK,SAapC,SAAS4G,EAAIZ,GAChB,MAAMR,EAAS,GACTvF,EAAcL,IAChB,MAAM+G,EAASpD,EAASyC,EAAK5K,OAAU0E,KAAKC,UAAUiG,EAAKzC,IAAW,OACtE,MAAM,IAAIlI,MAAM,iBAAiBsL,QAAYpD,MAAW3D,MAE5D,IAAIiH,EAAW,GACXC,EAAS,GACTvD,EAAS,EACb,KAAOA,EAASyC,EAAK5K,QAAQ,CAEzB,IAAI2L,EAAMf,EAAKvC,UAAUF,GACrBF,EAAQ0D,EAAI1D,MAAM6B,GAClB7B,IACAE,GAAUF,EAAM,GAAGjI,OACnB2L,EAAMf,EAAKvC,UAAUF,IAEzB,MAAMoD,EAAQ,CAAEK,MAAOH,EAASzL,OAAQ6L,UAAW,EAAGX,UAAW,EAAGjD,OAAQ,EAAGvI,KAAM,GAAIkL,KAAM,GAAIzC,OAAAA,EAAQtJ,OAAQ,GACnHuL,EAAO1G,KAAK6H,GACZ,IAAI7L,EAAQmK,EAAa8B,EAAI,KAAO,GACpC,GAAIjM,GAIA,GAHA6L,EAAM7L,KAAOA,EACb6L,EAAMX,KAAOe,EAAI,GACjBxD,IACa,eAATzI,EACA+L,EAAS/H,KAAK0G,EAAOpK,OAAS,GAC9B0L,EAAOhI,KAAK0G,EAAOpK,OAAS,QAE3B,GAAY,eAARN,EACmB,IAApB+L,EAASzL,QACT6E,EAAW,4BAEf0G,EAAMtD,MAAQwD,EAASZ,MACtBT,EAAOmB,EAAMtD,OAAQA,MAAQmC,EAAOpK,OAAS,EAC9CuL,EAAMK,QACNL,EAAMM,SAAWH,EAAOb,MACvBT,EAAOmB,EAAMM,UAAWX,SAAWd,EAAOpK,OAAS,OAEnD,GAAa,UAATN,EACL6L,EAAMM,SAAWH,EAAOb,MACvBT,EAAOmB,EAAMM,UAAWX,SAAWd,EAAOpK,OAAS,EACpD0L,EAAOhI,KAAK0G,EAAOpK,OAAS,QAE3B,GAAa,iBAATN,EACL6L,EAAM7L,KAAO,eAEZ,GAAa,kBAATA,EAA0B,CAE/B,IAAIoM,EAAS1B,EAAOS,MAAMD,KAC1B,GAAIR,EAAOpK,OAAS,GAAwC,WAAnCoK,EAAOA,EAAOpK,OAAS,GAAGN,KAAmB,CAClE,MAAMb,EAAQuL,EAAOS,MAAMD,KAC3BkB,EAASjN,EAAQiN,EAChB1B,EAAOA,EAAOpK,OAAS,GAAInB,MAAQ4J,EAAO7B,UAAU/H,GAEzD,GAAsB,IAAlBuL,EAAOpK,QAAmD,YAAnCoK,EAAOA,EAAOpK,OAAS,GAAGN,KACjD,MAAM,IAAIO,MAAM,2BAEnBmK,EAAOA,EAAOpK,OAAS,GAAI4K,MAAQkB,QAK5C,GADA7D,EAAQ0D,EAAI1D,MAAMgC,GACdhC,EAAJ,CAGI,GAFAsD,EAAMX,KAAO3C,EAAM,GACnBE,GAAUoD,EAAMX,KAAK5K,OACjB4J,EAASxI,IAAImK,EAAMX,MAAO,CAC1BW,EAAM7L,KAAO,UACb,SAEJ,GAAI6L,EAAMX,KAAK3C,MAAMiC,GAAY,CAC7BqB,EAAM7L,KAAO,OACb,SAEJ6L,EAAM7L,KAAO,SAXjB,CAeA,GADAuI,EAAQ0D,EAAI1D,MAAM+B,IACd/B,EAMJ,MAAM,IAAIhI,MAAM,oBAAoByE,KAAKC,UAAUgH,EAAI,mBAAmBxD,KALtEoD,EAAMX,KAAO3C,EAAM,GACnBsD,EAAM7L,KAAO,SACbyI,GAAUoD,EAAMX,KAAK5K,QAK7B,OAAO,IAAImK,EAAYC,EAAOlL,KAAKW,GAAMd,OAAOsK,OAAOxJ,MAG3D,SAASkM,EAAYzK,EAAKmJ,GACtB,IAAIuB,EAAW,GACf,IAAK,MAAM1L,KAAOmK,EAAQ3L,OAClBwC,EAAIF,IAAId,IACR0L,EAAStI,KAAKpD,GAGtB,GAAI0L,EAAShM,OAAS,EAClB,MAAM,IAAIC,MAAM,sBAAsB+L,EAASpH,KAAK,SAK5D,SAASqH,EAAYvM,EAAM0K,GACvB,GAAIA,EAAOe,YAAY1B,GAAU,CAC7B,MAAMyC,EAAU9B,EAAOS,MAAMD,KAC7B,GAAIsB,IAAYxM,EACZ,MAAM,IAAIO,MAAM,YAAYP,UAAawM,KAGjD,OAAO9B,EAAOU,QAAQ,MAG1B,SAASqB,EAAgB/B,EAAQK,GAC7B,MAAM2B,EAAW,IAAIjD,IACrB,OAAa,CACT,MAAM+C,EAAU9B,EAAOgB,SAAS,WAChC,GAAe,MAAXc,GAAoBzB,IAAYA,EAAQrJ,IAAI8K,GAC5C,MAGJ,GADA9B,EAAOS,MACHuB,EAAShL,IAAI8K,GACb,MAAM,IAAIjM,MAAM,uBAAuByE,KAAKC,UAAUuH,MAE1DE,EAAS9H,IAAI4H,GAEjB,OAAOnN,OAAOsK,OAAO+C,GA4BzB,SAASC,GAAcjC,EAAQkC,GAC3B,OAAOlC,EAAOY,YAAY9L,KAAKW,GAAM0M,GAAUC,WAAW3M,EAAGyM,KAGjE,SAASG,GAAWrC,GAChB,GAAIA,EAAOgB,SAAS,MAAO,CAEvB,GADAhB,EAAOS,MACHT,EAAOgB,SAAS,UAChB,OAAO3C,EAAO1B,UAAUqD,EAAOS,MAAMD,MAEzC,MAAM,IAAI3K,MAAM,eAEpB,OAAO,KAEX,SAASyM,GAAWtC,GAChB,GAAIA,EAAOpK,OACP,MAAM,IAAIC,MAAM,sBAAsBmK,EAAOkB,cAlLrD3C,EAAsB,IAAIpG,QAAWqG,EAAsB,IAAIrG,QAAWmG,EAAyB,IAAIhB,QAAWmB,EAA8B,SAAqC8D,EAAO,EAAGC,EAAK,GAChM,OAAO,IAAIzC,EAAY5I,EAAuBT,KAAM8H,EAAqB,KAAKyB,MAAMsC,EAAMC,GAAI1N,KAAKW,GACxFd,OAAOsK,OAAOtK,OAAO8N,OAAO,GAAIhN,EAAG,CACtCoI,MAAQpI,EAAEoI,MAAQ0E,EAClBd,SAAWhM,EAAEgM,SAAWc,EACxBzB,SAAWrL,EAAEqL,SAAWyB,SAgLpC,MAAMG,GAAiB,IAAI/C,OAAO,sBAClC,SAASgD,GAAgBrN,GACrB,MAAMuI,EAAQvI,EAAKuI,MAAMiC,GACzB,IAAKjC,EACD,OAAOQ,EAAO3D,mBAAmB,eAAgB,OAAQpF,GAE7D,GAAa,SAATA,EACA,MAAO,UAEX,GAAa,QAATA,EACA,MAAO,SAEX,GAAIuI,EAAM,GAAI,CAEV,MAAMjI,EAASoI,SAASH,EAAM,KACf,IAAXjI,GAAgBA,EAAS,KACzByI,EAAO3D,mBAAmB,uBAAwB,OAAQpF,QAG7D,GAAIuI,EAAM,GAAI,CAEf,MAAM+E,EAAO5E,SAASH,EAAM,KACf,IAAT+E,GAAcA,EAAO,KAAOA,EAAO,IACnCvE,EAAO3D,mBAAmB,wBAAyB,OAAQpF,GAGnE,OAAOA,EAGX,MAAMuN,GAAS,GACTC,GAAWC,OAAOC,IAAI,oBACtBC,GAAoB,qBACnB,MAAMd,GACT7K,YAAYqE,EAAOlC,EAAMnE,EAAM4N,EAAUC,EAASC,EAAYC,EAAaC,GAOvE,GANA5E,EAAqBxE,IAAIxD,MACzB2H,EAAO5C,cAAcE,EAAOkH,GAAQ,aACpClO,OAAO0B,eAAeK,KAAMoM,GAAU,CAAErO,MAAOwO,KAC3CG,IACAA,EAAazO,OAAOsK,OAAOmE,EAAWnD,UAEzB,UAAbiD,GACA,GAAmB,MAAfG,GAAwC,MAAjBC,EACvB,MAAM,IAAIzN,MAAM,SAGnB,GAAmB,MAAfwN,GAAwC,MAAjBC,EAC5B,MAAM,IAAIzN,MAAM,IAEpB,GAAiB,UAAbqN,GACA,GAAkB,MAAdE,EACA,MAAM,IAAIvN,MAAM,SAGnB,GAAkB,MAAduN,EACL,MAAM,IAAIvN,MAAM,IAEpBC,EAAiBY,KAAM,CACnB+C,KAAAA,EAAMnE,KAAAA,EAAM4N,SAAAA,EAAUC,QAAAA,EAASC,WAAAA,EAAYC,YAAAA,EAAaC,cAAAA,IAOhEC,OAAOA,EAAS3E,EAAW4E,SAIvB,GAHK5E,EAAW2E,IACZlF,EAAO3D,mBAAmB,sBAAuB,SAAU6I,GAE3DA,IAAW3E,EAAW6E,KAAM,CAC5B,IAAI3F,EAAS,CACTxI,KAA0B,UAAlBoB,KAAKwM,SAAwB,QAAUxM,KAAKpB,KACpDmE,KAAO/C,KAAK+C,WAAQrD,GAQxB,MAN8B,kBAAlBM,KAAY,UACpBoH,EAAOqF,QAAUzM,KAAKyM,SAEtBzM,KAAKgN,YACL5F,EAAOsF,WAAa1M,KAAK0M,WAAWtO,KAAK6O,GAAMrJ,KAAKsJ,MAAMD,EAAEJ,OAAOA,OAEhEjJ,KAAKC,UAAUuD,GAE1B,IAAIA,EAAS,GAyBb,OAvBIpH,KAAKmN,WACL/F,GAAUpH,KAAK4M,cAAcC,OAAOA,GACpCzF,GAAU,IAAKpH,KAAK2M,YAAc,EAAI,GAAKjK,OAAO1C,KAAK2M,iBAGnD3M,KAAKgN,WACDH,IAAW3E,EAAW4E,UACtB1F,GAAUpH,KAAKpB,MAEnBwI,GAAU,IAAMpH,KAAK0M,WAAWtO,KAAKgP,GAASA,EAAKP,OAAOA,KAAS/I,KAAM+I,IAAW3E,EAAWmF,KAAQ,KAAO,KAAO,KAGrHjG,GAAUpH,KAAKpB,KAGnBiO,IAAW3E,EAAW4E,WACD,IAAjB9M,KAAKyM,UACLrF,GAAU,YAEVyF,IAAW3E,EAAWmF,MAAQrN,KAAK+C,OACnCqE,GAAU,IAAMpH,KAAK+C,OAGtBqE,EAEXb,eAAexI,GACX,OAAOA,GAA6B,UAAnBA,EAAMyO,SAE3BW,UACI,MAA0B,UAAlBnN,KAAKwM,SAEjBQ,UACI,MAA0B,UAAlBhN,KAAKwM,SAEjBc,cACI,OAAwB,MAAhBtN,KAAKyM,QAEjBc,KAAKxP,EAAOyP,GACR,GAAIxN,KAAKmN,UAAW,CAChB,IAAKM,MAAMN,QAAQpP,GACf,MAAM,IAAIoB,MAAM,uBAEpB,IAA0B,IAAtBa,KAAK2M,aAAsB5O,EAAMmB,SAAWc,KAAK2M,YACjD,MAAM,IAAIxN,MAAM,yBAEpB,OAAOpB,EAAMK,KAAKK,GAAOuB,KAAK4M,cAAcW,KAAK9O,EAAG+O,KAExD,GAAIxN,KAAKgN,UAAW,CAChB,IAAKS,MAAMN,QAAQpP,GACf,MAAM,IAAIoB,MAAM,uBAEpB,GAAIpB,EAAMmB,SAAWc,KAAK0M,WAAWxN,OACjC,MAAM,IAAIC,MAAM,yBAEpB,OAAOpB,EAAMK,KAAI,CAACK,EAAGQ,IAAOe,KAAK0M,WAAWzN,GAAGsO,KAAK9O,EAAG+O,KAE3D,OAAOA,EAAQxN,KAAKpB,KAAMb,GAE9BF,gBAAgBE,EAAOyP,GACnB,MAAME,EAAW,GACXtG,EAAS,CAACrJ,GAOhB,OANA0C,EAAuBT,KAAMgI,EAAsB,IAAKC,GAAsB1H,KAAKP,KAAM0N,EAAU3P,EAAOyP,GAAUzP,IAChHqJ,EAAO,GAAKrJ,KAEZ2P,EAASxO,cACHhB,QAAQC,IAAIuP,GAEftG,EAAO,GAElBb,YAAYoH,EAAKnC,GACb,GAAIC,GAAUmC,YAAYD,GACtB,OAAOA,EAEX,GAAqB,iBAAT,EACR,OAAOlC,GAAUC,WAAWhB,EAAIiD,GAAMnC,GAE1C,GAAImC,aAAetE,EACf,OAAOoC,GAAUC,WAAWiC,EAAKnC,GAErC,MAAMzI,EAAO4K,EAAI5K,MACbA,GAA2B,iBAAV,GAAuBA,EAAKoE,MAAMgC,IACnDxB,EAAO3D,mBAAmB,eAAgB,WAAYjB,GAE1D,IAAI0J,EAAUkB,EAAIlB,QACH,MAAXA,IACKjB,GACD7D,EAAO3D,mBAAmB,8BAA+B,cAAe2J,EAAIlB,SAEhFA,IAAYA,GAEhB,IAAI7N,EAAO+O,EAAI/O,KACXiP,EAAajP,EAAKuI,MAAM6E,IAC5B,GAAI6B,EAAY,CACZ,MAAMlB,EAAckB,EAAW,GACzBjB,EAAgBnB,GAAUI,KAAK,CACjCjN,KAAMiP,EAAW,GACjBnB,WAAYiB,EAAIjB,aAEpB,OAAO,IAAIjB,GAAUU,GAAQpJ,EAAMnE,EAAM,QAAS6N,EAAS,KAAME,EAAaC,GAElF,GAA6B,WAAzBhO,EAAK2I,UAAU,EAAG,IAA+B,MAAZ3I,EAAK,GAAY,CACtD,MAAMkP,EAA2B,MAAlBH,EAAIjB,WAAsBiB,EAAIjB,WAAWtO,KAAK6O,GAAMxB,GAAUI,KAAKoB,KAAM,KAGxF,OAFc,IAAIxB,GAAUU,GAAQpJ,EAAMnE,EAAM,QAAS6N,EAASqB,EAAO,KAAM,MAKnF,OADAlP,EAAOqN,GAAgB0B,EAAI/O,MACpB,IAAI6M,GAAUU,GAAQpJ,EAAMnE,EAAMA,EAAM6N,EAAS,KAAM,KAAM,MAExElG,kBAAkBoH,EAAKnC,GACnB,MAAM,IAAIrM,MAAM,SAEpBoH,kBAAkB+C,EAAQkC,GACtB,IAAI5M,EAAO,GAAI4N,EAAW,GACtBsB,EAAQ,KACRzC,EAAgB/B,EAAQnB,EAAO,CAAC,WAAW7H,IAAI,UAAYgJ,EAAOgB,SAAS,eAE3EkC,EAAW,QACXsB,EAAQxE,EAAOY,YAAY9L,KAAKW,GAAM0M,GAAUI,KAAK9M,KACrDH,EAAO,SAASkP,EAAM1P,KAAK6O,GAAMA,EAAEJ,WAAU/I,KAAK,UAIlDlF,EAAOqN,GAAgB3C,EAAOU,QAAQ,SACtCwC,EAAW5N,GAGf,IAAIgO,EAAgB,KAChBD,EAAc,KAClB,KAAOrD,EAAOpK,QAAUoK,EAAOgB,SAAS,YAAY,CAChD,MAAMyD,EAAUzE,EAAOS,MACvB6C,EAAgB,IAAInB,GAAUU,GAAQ,GAAIvN,EAAM4N,EAAU,KAAMsB,EAAOnB,EAAaC,GACpFD,EAAcoB,EAAQhQ,MACtBa,GAAQmP,EAAQjE,KAChB0C,EAAW,QACXsB,EAAQ,KAEZ,IAAIrB,EAAU,KAEd,GADiBpB,EAAgB/B,EAAQT,GAC5BvI,IAAI,WAAY,CACzB,IAAKkL,EACD,MAAM,IAAIrM,MAAM,IAEpBsN,GAAU,EAEd,MAAM1J,EAAQuG,EAAOgB,SAAS,MAAQhB,EAAOS,MAAMD,KAAO,GAC1D,GAAIR,EAAOpK,OACP,MAAM,IAAIC,MAAM,mBAEpB,OAAO,IAAIsM,GAAUU,GAAQpJ,EAAMnE,EAAM4N,EAAUC,EAASqB,EAAOnB,EAAaC,GAEpFrG,mBAAmBxI,GACf,OAAQA,GAASA,EAAMqO,MAAcG,IA8DtC,IAAIyB,GA3DXhG,EAAuB,IAAIpB,QAAWqB,EAAuB,SAASA,EAAqByF,EAAU3P,EAAOyP,EAASS,GACjH,GAAIjO,KAAKmN,UAAW,CAChB,IAAKM,MAAMN,QAAQpP,GACf,MAAM,IAAIoB,MAAM,uBAEpB,IAA0B,IAAtBa,KAAK2M,aAAsB5O,EAAMmB,SAAWc,KAAK2M,YACjD,MAAM,IAAIxN,MAAM,yBAEpB,MAAM+O,EAAYlO,KAAK4M,cACjBxF,EAASrJ,EAAMwL,QAOrB,OANAnC,EAAOkB,SAAQ,CAACvK,EAAOW,KACnB+B,EAAuByN,EAAWlG,EAAsB,IAAKC,GAAsB1H,KAAK2N,EAAWR,EAAU3P,EAAOyP,GAAUzP,IAC1HqJ,EAAO1I,GAASX,aAGxBkQ,EAAS7G,GAGb,GAAIpH,KAAKgN,UAAW,CAChB,MAAMN,EAAa1M,KAAK0M,WAExB,IAAItF,EACJ,GAAIqG,MAAMN,QAAQpP,GACdqJ,EAASrJ,EAAMwL,YAEd,CACD,GAAa,MAATxL,GAAoC,mBACpC,MAAM,IAAIoB,MAAM,uBAEpBiI,EAASsF,EAAWtO,KAAK+P,IACrB,IAAKA,EAAMpL,KACP,MAAM,IAAI5D,MAAM,mDAEpB,KAAMgP,EAAMpL,QAAQhF,GAChB,MAAM,IAAIoB,MAAM,+BAA+BgP,EAAMpL,QAEzD,OAAOhF,EAAMoQ,EAAMpL,SAG3B,GAAIhF,EAAMmB,SAAWc,KAAK0M,WAAWxN,OACjC,MAAM,IAAIC,MAAM,yBASpB,OAPAiI,EAAOkB,SAAQ,CAACvK,EAAOW,KACnB,IAAI6L,EACJ9J,EAAwB8J,EAAKmC,EAAWhO,GAASsJ,EAAsB,IAAKC,GAAsB1H,KAAKgK,EAAImD,EAAU3P,EAAOyP,GAAUzP,IAClIqJ,EAAO1I,GAASX,aAGxBkQ,EAAS7G,GAGb,MAAMA,EAASoG,EAAQxN,KAAKpB,KAAMb,GAC9BqJ,EAAOgH,KACPV,EAAS9K,KAAK,iBAAqBqL,QAAe7G,GAApC,IAGd6G,EAAS7G,IAIjB,SAAW4G,GACPA,EAA0B,YAAI,cAC9BA,EAAoB,MAAI,QACxBA,EAAoB,MAAI,QACxBA,EAAuB,SAAI,WAC3BA,EAAqB,OAAI,SAL7B,CAMGA,KAAiBA,GAAe,KAE5B,MAAMK,GACTzN,YAAYqE,EAAOrG,EAAM0P,GACrB3G,EAAO5C,cAAcE,EAAOkH,GAAQ,YAEpC/M,EAAiBY,KAAM,CAAEpB,KAAAA,EAAM0P,OAD/BA,EAASrQ,OAAOsK,OAAO+F,EAAO/E,WAGlChD,YAAYoH,GACR,GAAqB,iBAAT,EACR,OAAO3N,KAAKuO,WAAWZ,GAE3B,GAAIA,aAAetE,EACf,OAAOrJ,KAAK0L,WAAWiC,GAE3B,GAAqB,iBAAT,EACR,OAAO3N,KAAKwO,WAAWb,GAE3B,MAAM,IAAIxO,MAAM,qBAAqBwO,KAEzCpH,kBAAkBoH,GACd,OAAQA,EAAI/O,MACR,IAAK,cAAe,OAAO6P,GAAoBD,WAAWb,GAC1D,IAAK,QAAS,OAAOe,GAAcF,WAAWb,GAC9C,IAAK,QAAS,OAAOgB,GAAcH,WAAWb,GAC9C,IAAK,WAAY,OAAOiB,GAAiBJ,WAAWb,GACpD,IAAK,SAAU,OAAOkB,GAAeL,WAAWb,GAEpD,MAAM,IAAIxO,MAAM,uBAEpBoH,kBAAkBuD,GACd,IACIuE,GAASxC,KAAKjI,KAAKsJ,MAAMpD,IAE7B,MAAO9D,IACP,OAAOqI,GAAS3C,WAAWhB,EAAIZ,IAEnCvD,kBAAkB+C,GACd,MAAM1K,EAAO0K,EAAOI,WAAWf,GAC/B,OAAQ/J,GACJ,IAAK,cAAe,OAAO6P,GAAoB/C,WAAWpC,GAC1D,IAAK,QAAS,OAAOoF,GAAchD,WAAWpC,GAC9C,IAAK,QAAS,OAAOqF,GAAcjD,WAAWpC,GAC9C,IAAK,WAAY,OAAOsF,GAAiBlD,WAAWpC,GACpD,IAAK,SAAU,OAAOuF,GAAenD,WAAWpC,GAEpD,MAAM,IAAInK,MAAM,qBAAqBP,KAoBzC2H,qBAAqBxI,GACjB,OAAQA,GAAwB,gBAAfA,EAAMa,KAE3B2H,eAAexI,GACX,OAAQA,GAAwB,UAAfA,EAAMa,KAE3B2H,eAAexI,GACX,OAAQA,GAAwB,UAAfA,EAAMa,KAE3B2H,kBAAkBxI,GACd,OAAQA,GAAwB,aAAfA,EAAMa,KAE3B2H,gBAAgBxI,GACZ,OAAQA,GAAwB,WAAfA,EAAMa,MAGxB,MAAMkQ,WAAsBT,GAC/BzN,YAAYqE,EAAOrG,EAAMmE,EAAMuL,GAC3BS,MAAM9J,EAAOrG,EAAM0P,GACnBA,EAASrQ,OAAOsK,OAAO+F,EAAO/E,SAC9BnK,EAAiBY,KAAM,CAAE+C,KAAAA,KAGjC,SAASiM,GAAWnC,EAAQoC,GACxB,MAAO,IAAMA,EAAO7Q,KAAK8Q,GAAMA,EAAErC,OAAOA,KAAS/I,KAAM+I,IAAW3E,EAAWmF,KAAQ,KAAO,KAAO,IAEhG,MAAMqB,WAAsBI,GAC/BlO,YAAYqE,EAAOlC,EAAMuL,GACrBS,MAAM9J,EAAO+I,GAAa1M,MAAOyB,EAAMuL,GAE3CzB,OAAOA,EAAS3E,EAAW4E,SAIvB,GAHK5E,EAAW2E,IACZlF,EAAO3D,mBAAmB,sBAAuB,SAAU6I,GAE3DA,IAAW3E,EAAW6E,KACtB,OAAOnJ,KAAKC,UAAU,CAClBjF,KAAM,QACNmE,KAAM/C,KAAK+C,KACXuL,OAAQtO,KAAKsO,OAAOlQ,KAAK+Q,GAAUvL,KAAKsJ,MAAMiC,EAAMtC,OAAOA,QAGnE,MAAMzF,EAAS,GAKf,OAJIyF,IAAW3E,EAAW4E,SACtB1F,EAAOxE,KAAK,SAEhBwE,EAAOxE,KAAK5C,KAAK+C,KAAOiM,GAAWnC,EAAQ7M,KAAKsO,SACzClH,EAAOtD,KAAK,KAEvByC,kBAAkBuD,GACd,OAAO4E,GAAchD,WAAWhB,EAAIZ,IAExCvD,kBAAkB+C,GACd,MAAMvG,EAAOoI,EAAY,QAAS7B,GAC5BgF,EAAS/C,GAAcjC,GAE7B,OADAsC,GAAWtC,GACJ,IAAIoF,GAAcvC,GAAQpJ,EAAMuL,IAGxC,MAAMK,WAAsBG,GAC/BlO,YAAYqE,EAAOlC,EAAMuL,EAAQc,GAC7BL,MAAM9J,EAAO+I,GAAaqB,MAAOtM,EAAMuL,GACvClP,EAAiBY,KAAM,CAAEoP,UAAAA,IAE7BvC,OAAOA,EAAS3E,EAAW4E,SAIvB,GAHK5E,EAAW2E,IACZlF,EAAO3D,mBAAmB,sBAAuB,SAAU6I,GAE3DA,IAAW3E,EAAW6E,KACtB,OAAOnJ,KAAKC,UAAU,CAClBjF,KAAM,QACNwQ,UAAWpP,KAAKoP,UAChBrM,KAAM/C,KAAK+C,KACXuL,OAAQtO,KAAKsO,OAAOlQ,KAAKa,GAAM2E,KAAKsJ,MAAMjO,EAAE4N,OAAOA,QAG3D,MAAMzF,EAAS,GAQf,OAPIyF,IAAW3E,EAAW4E,SACtB1F,EAAOxE,KAAK,SAEhBwE,EAAOxE,KAAK5C,KAAK+C,KAAOiM,GAAWnC,EAAQ7M,KAAKsO,SAC5CzB,IAAW3E,EAAW4E,SAAW9M,KAAKoP,WACtChI,EAAOxE,KAAK,aAETwE,EAAOtD,KAAK,KAEvByC,kBAAkBuD,GACd,OAAO6E,GAAcjD,WAAWhB,EAAIZ,IAExCvD,kBAAkB+C,GACd,MAAMvG,EAAOoI,EAAY,QAAS7B,GAC5BgF,EAAS/C,GAAcjC,GAAQ,GAC/B8F,IAAc/D,EAAgB/B,EAAQnB,EAAO,CAAC,eAAe7H,IAAI,aAEvE,OADAsL,GAAWtC,GACJ,IAAIqF,GAAcxC,GAAQpJ,EAAMuL,EAAQc,IAGhD,MAAMX,WAA4BJ,GACrCzN,YAAYqE,EAAOrG,EAAM0P,EAAQgB,EAASC,GACtCR,MAAM9J,EAAOrG,EAAM0P,GACnBlP,EAAiBY,KAAM,CAAEsP,QAAAA,EAASC,IAAAA,IAEtC1C,OAAOA,EAAS3E,EAAW4E,SASvB,GARK5E,EAAW2E,IACZlF,EAAO3D,mBAAmB,sBAAuB,SAAU6I,GAE3DA,IAAW3E,EAAW4E,SACtBnF,EAAO5D,WAAW,0CAA2C,wBAAyB,CAClFY,UAAW,oBAGfkI,IAAW3E,EAAW6E,KACtB,OAAOnJ,KAAKC,UAAU,CAClBjF,KAAM,cACN4Q,gBAAkBxP,KAAKsP,QAAU,UAAY,YAC7CA,QAAStP,KAAKsP,QACdC,IAAmB,MAAZvP,KAAKuP,IAAevP,KAAKuP,SAAM7P,EACtC4O,OAAQtO,KAAKsO,OAAOlQ,KAAKa,GAAM2E,KAAKsJ,MAAMjO,EAAE4N,OAAOA,QAG3D,MAAMzF,EAAS,CAAC,cAAc4H,GAAWnC,EAAQ7M,KAAKsO,WAKtD,OAJAlH,EAAOxE,KAAM5C,KAAY,QAAI,UAAY,cACzB,MAAZA,KAAKuP,KACLnI,EAAOxE,KAAK,IAAI5C,KAAKuP,IAAI/E,cAEtBpD,EAAOtD,KAAK,KAEvByC,kBAAkBuD,GACd,OAAO2E,GAAoB/C,WAAWhB,EAAIZ,IAE9CvD,kBAAkBoH,GACd,MAAM,IAAIxO,MAAM,QAEpBoH,kBAAkB+C,GACd+B,EAAgB/B,EAAQnB,EAAO,CAAC,iBAChC,MAAMmG,EAAS/C,GAAcjC,GACvBgG,IAAYjE,EAAgB/B,EAAQnB,EAAO,CAAC,aAAa7H,IAAI,WAC7DiP,EAAM5D,GAAWrC,GAEvB,OADAsC,GAAWtC,GACJ,IAAImF,GAAoBtC,GAAQ6B,GAAapN,YAAa0N,EAAQgB,EAASC,IAGnF,MAAMX,WAAyBE,GAClClO,YAAYqE,EAAOlC,EAAMyM,EAAiBlB,EAAQmB,EAASF,GACvDR,MAAM9J,EAAO+I,GAAa0B,SAAU3M,EAAMuL,GAI1ClP,EAAiBY,KAAM,CAAE2P,SAFa,SAApBH,GAAkD,SAApBA,EAEbD,IAAAA,EAAKE,QAHxCA,EAAUxR,OAAOsK,OAAOkH,EAAQlG,SAGiB+F,QADZ,YAApBE,EACyCA,gBAAAA,IAE9D3C,OAAOA,EAAS3E,EAAW4E,SAIvB,GAHK5E,EAAW2E,IACZlF,EAAO3D,mBAAmB,sBAAuB,SAAU6I,GAE3DA,IAAW3E,EAAW6E,KACtB,OAAOnJ,KAAKC,UAAU,CAClBjF,KAAM,WACNmE,KAAM/C,KAAK+C,KACX4M,SAAU3P,KAAK2P,SACfH,gBAA4C,eAAzBxP,KAAKwP,gBAAoCxP,KAAKwP,qBAAkB9P,EACnF4P,QAAStP,KAAKsP,QACdC,IAAmB,MAAZvP,KAAKuP,IAAevP,KAAKuP,SAAM7P,EACtC4O,OAAQtO,KAAKsO,OAAOlQ,KAAKa,GAAM2E,KAAKsJ,MAAMjO,EAAE4N,OAAOA,MACnD4C,QAASzP,KAAKyP,QAAQrR,KAAKwR,GAAMhM,KAAKsJ,MAAM0C,EAAE/C,OAAOA,QAG7D,MAAMzF,EAAS,GAiBf,OAhBIyF,IAAW3E,EAAW4E,SACtB1F,EAAOxE,KAAK,YAEhBwE,EAAOxE,KAAK5C,KAAK+C,KAAOiM,GAAWnC,EAAQ7M,KAAKsO,SAC5CzB,IAAW3E,EAAW4E,UACO,eAAzB9M,KAAKwP,iBACLpI,EAAOxE,KAAK5C,KAAKwP,iBAEjBxP,KAAKyP,SAAWzP,KAAKyP,QAAQvQ,SAC7BkI,EAAOxE,KAAK,WACZwE,EAAOxE,KAAKoM,GAAWnC,EAAQ7M,KAAKyP,WAExB,MAAZzP,KAAKuP,KACLnI,EAAOxE,KAAK,IAAI5C,KAAKuP,IAAI/E,eAG1BpD,EAAOtD,KAAK,KAEvByC,kBAAkBuD,GACd,OAAO8E,GAAiBlD,WAAWhB,EAAIZ,IAE3CvD,kBAAkB+C,GACd,MAAMvG,EAAOoI,EAAY,WAAY7B,GAC/BgF,EAAS/C,GAAcjC,GACvBuG,EA5lBd,SAA2BvG,GACvB,IAAIwG,EAAYzE,EAAgB/B,EAAQb,GAKxC,OAHAwC,EAAY6E,EAAW3H,EAAO,8BAA8BrJ,MAAM,OAClEmM,EAAY6E,EAAW3H,EAAO,+BAA+BrJ,MAAM,OAE/DgR,EAAUxP,IAAI,QACP,OAEPwP,EAAUxP,IAAI,QACP,OAEPwP,EAAUxP,IAAI,WACP,UAEPwP,EAAUxP,IAAI,cACP,aAGPwP,EAAUxP,IAAI,YACP,OAEJ,aAskBgByP,CAAkBzG,GACrC,IAAImG,EAAU,GACVpE,EAAgB/B,EAAQnB,EAAO,CAAC,aAAa7H,IAAI,aACjDmP,EAAUlE,GAAcjC,IAE5B,MAAMiG,EAAM5D,GAAWrC,GAEvB,OADAsC,GAAWtC,GACJ,IAAIsF,GAAiBzC,GAAQpJ,EAAM8M,EAAYvB,EAAQmB,EAASF,IAGxE,MAAMV,WAAuBC,GAChCjC,SACI,MAAM,IAAI1N,MAAM,SAEpBoH,kBAAkBuD,GACd,OAAO+E,GAAenD,WAAWhB,EAAIZ,IAEzCvD,kBAAkB+C,GACd,MAAMvG,EAAOoI,EAAY,SAAU7B,GAC7BgF,EAAS/C,GAAcjC,GAE7B,OADAsC,GAAWtC,GACJ,IAAIuF,GAAe1C,GAAQ6B,GAAagC,OAAQjN,EAAMuL,ICz4B9D,MCEM3G,GAAS,IAAIrE,EDFH,oCEEjBN,GAAW,iBACXiN,GAAU,mBACVC,GAAOnK,OAAO,GAEb,SAASoK,GAASC,GACrB,GAAIA,aAAkBlJ,WAAY,CAC9B,IAAIE,EAAS,MACb,IAAK,MAAM3I,KAAK2R,EACZhJ,GAAU6I,GAAQxR,GAAK,GACvB2I,GAAU6I,GAAY,GAAJxR,GAEtB,OAAOsH,OAAOqB,GAElB,OAAOO,GAAO1B,UAAUmK,EAAQ,SAE7B,SAASC,GAASD,GACrB,MAAMrS,EAAQoS,GAASC,GAIvB,OAHIrS,GAASiF,IAAYjF,EAAQiF,KAC7B2E,GAAO3D,mBAAmB,WAAY,QAASoM,GAE5C5L,OAAOzG,GAGX,SAASuS,GAAMF,EAAQG,GAC1B,MAAMxS,EAAQ4J,GAAO1B,UAAUmK,EAAQ,SACvC,GAAIrS,EAAQ,EACR,MAAM,IAAIoB,MAAM,wCAEpB,IAAIiI,EAASrJ,EAAMyM,SAAS,IAC5B,GAAc,MAAV+F,EAEInJ,EAAOlI,OAAS,IAChBkI,EAAS,IAAMA,OAGlB,CACD,MAAMoJ,EAAQ7I,GAAO7B,UAAUyK,EAAQ,SACvC,GAAY,EAARC,EAAYpJ,EAAOlI,OACnB,MAAM,IAAIC,MAAM,SAASpB,mBAAuByS,KAGpD,KAAOpJ,EAAOlI,OAAkB,EAARsR,GACpBpJ,EAAS,IAAMA,EAGvB,MAAO,KAAOA,EAEX,SAASqJ,GAAQL,GACpB,MAAMrS,EAAQ4J,GAAO1B,UAAUmK,EAAQ,SACvC,GAAIrS,EAAQ,EACR,MAAM,IAAIoB,MAAM,wCAEpB,GAAIpB,IAAUmS,GACV,OAAO,IAAIhJ,WAAW,IAE1B,IAAIwJ,EAAM3S,EAAMyM,SAAS,IACrBkG,EAAIxR,OAAS,IACbwR,EAAM,IAAMA,GAEhB,MAAMtJ,EAAS,IAAIF,WAAWwJ,EAAIxR,OAAS,GAC3C,IAAK,IAAID,EAAI,EAAGA,EAAImI,EAAOlI,OAAQD,IAAK,CACpC,MAAMoI,EAAa,EAAJpI,EACfmI,EAAOnI,GAAKqI,SAASoJ,EAAInJ,UAAUF,EAAQA,EAAS,GAAI,IAE5D,OAAOD,ECjEX,MAAM8I,GAAOnK,OAAO,GACd4K,GAAO5K,OAAO,GAEb,SAAS6K,GAASR,EAAQG,GAC7B,MAAMxS,EAAQ4J,GAAO1B,UAAUmK,EAAQ,SACjCI,EAAQzK,OAAO4B,GAAO7B,UAAUyK,EAAQ,UAE9C,GAAIxS,GAAUyS,EAAQG,GAAO,CAEzB,UAAY5S,GADE4S,IAAQH,GAASG,IACFA,IAEjC,OAAO5S,EAGJ,SAAS8S,GAAOT,EAAQG,GAC3B,MAAMxS,EAAQ4J,GAAO1B,UAAUmK,EAAQ,SACjCI,EAAQzK,OAAO4B,GAAO7B,UAAUyK,EAAQ,UAC9C,GAAIxS,EAAQmS,GAAM,CAEd,SAAYnS,GADE4S,IAAQH,GAASG,IACDA,GAElC,OAAO5S,EAEJ,SAAS+S,GAAKV,EAAQW,GACzB,MAAMhT,EAAQ4J,GAAO1B,UAAUmK,EAAQ,SACjCY,EAAOrJ,GAAO1B,UAAU8K,EAAO,QACrC,OAAOhT,GAAU4S,IAAQK,GAAQL,GC3BrC,IAWIM,GAAwBC,GAAoBC,GAX5CpR,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAMxF,MAAMmR,GAAoB,GAEpBC,GAActL,QAAQ,GAC5B,SAASuL,GAAW5N,EAASkB,EAAOD,EAAW5G,GAC3C,MAAMkR,EAAS,CAAErK,MAAOA,EAAOD,UAAWA,GAI1C,YAHcjF,IAAV3B,IACAkR,EAAOlR,MAAQA,GAEZ4J,GAAO5D,WAAWL,EAAS,gBAAiBuL,GAGvD,IAAIsC,GAAQ,IACZ,KAAOA,GAAMrS,OAAS,KAClBqS,IAASA,GAGb,SAASC,GAAcC,GAInB,OAH0B,iBAAd,GAA0BA,EAAW,GAAKA,EAAW,KAAOA,EAAW,IAC/E9J,GAAO3D,mBAAmB,yBAA0B,WAAYyN,GAE7D1L,OAAO,IAAMwL,GAAMhK,UAAU,EAAGkK,IAEpC,SAASC,GAAYtB,EAAQuB,EAAY,GAC5C,IAAI5T,EAAQ4J,GAAO1B,UAAUmK,EAAQ,SACrC,MACMwB,EAAaJ,GADF7J,GAAO7B,UAAU6L,EAAW,aAEvCE,EAAgBnP,OAAOkP,GACvBE,EAAY/T,EAAQ,EACtB+T,IACA/T,GAASsT,IAEb,IAAIU,EAAWrP,OAAO3E,EAAQ6T,GAE9B,KAAOG,EAAS7S,OAAS2S,EAAc3S,OAAS,GAC5C6S,EAAW,IAAMA,EAGrB,KAAOA,EAAS7S,OAAS,GAAiD,MAA5C6S,EAASxK,UAAUwK,EAAS7S,OAAS,IAC/D6S,EAAWA,EAASxK,UAAU,EAAGwK,EAAS7S,OAAS,GAEvD,IAAIkI,EAAS1E,OAAO3E,EAAQ6T,GAO5B,OAN6B,IAAzBC,EAAc3S,SACdkI,GAAU,IAAM2K,GAEhBD,IACA1K,EAAS,IAAMA,GAEZA,EAEJ,SAAS4K,GAAWjU,EAAO4T,EAAY,GAC1C,MACMC,EAAaJ,GADF7J,GAAO7B,UAAU6L,EAAW,aAEtB,iBAAnB,GAAgC5T,EAAMoJ,MAAM,gBAC5CQ,GAAO3D,mBAAmB,wBAAyB,QAASjG,GAGhE,MAAM+T,EAAsC,MAA1B/T,EAAMwJ,UAAU,EAAG,GACjCuK,IACA/T,EAAQA,EAAMwJ,UAAU,IAEd,MAAVxJ,GACA4J,GAAO3D,mBAAmB,gBAAiB,QAASjG,GAGxD,MAAM+P,EAAQ/P,EAAMe,MAAM,KACtBgP,EAAM5O,OAAS,GACfyI,GAAO3D,mBAAmB,0BAA2B,QAASjG,GAElE,IAAIkU,EAASnE,EAAM,IAAM,IAAMiE,EAAYjE,EAAM,IAAM,IAEvD,KAAyC,MAAlCiE,EAASA,EAAS7S,OAAS,IAC9B6S,EAAWA,EAASxK,UAAU,EAAGwK,EAAS7S,OAAS,GAWvD,IARI6S,EAAS7S,OAASwD,OAAOkP,GAAY1S,OAAS,GAC9CoS,GAAW,wCAAyC,YAAa,cAGpD,KAAbS,IACAA,EAAW,KAGRA,EAAS7S,OAASwD,OAAOkP,GAAY1S,OAAS,GACjD6S,GAAY,IAIhB,IAAIG,EAFenM,OAAOkM,GAEFL,EADF7L,OAAOgM,GAK7B,OAHID,IACAI,GAAOb,IAEJa,EAEJ,MAAMC,GACTvR,YAAYwR,EAAkBC,EAAQ7B,EAAOiB,GACrCW,IAAqBhB,IACrBzJ,GAAO5D,WAAW,2DAA4D,wBAAyB,CACnGY,UAAW,oBAGnB3E,KAAKqS,OAASA,EACdrS,KAAKwQ,MAAQA,EACbxQ,KAAKyR,SAAWA,EAChBzR,KAAK+C,MAAQsP,EAAS,GAAK,KAAO,QAAU3P,OAAO8N,GAAS,IAAM9N,OAAO+O,GACzEzR,KAAKsS,YAAcd,GAAcC,GACjCxT,OAAOsK,OAAOvI,MAElBuG,YAAYxI,GACR,GAAIA,aAAiBoU,GACjB,OAAOpU,EAEY,iBAAX,IACRA,EAAQ,YAAYA,KAExB,IAAIsU,GAAS,EACT7B,EAAQ,IACRiB,EAAW,GACf,GAAuB,iBAAX,EACR,GAAc,UAAV1T,QAGC,GAAc,WAAVA,EACLsU,GAAS,MAER,CACD,MAAMlL,EAAQpJ,EAAMoJ,MAAM,gCAC1B,IAAKA,EACD,OAAOQ,GAAO3D,mBAAmB,uBAAwB,SAAUjG,GAEvEsU,EAAuB,MAAblL,EAAM,GAChBqJ,EAAQlJ,SAASH,EAAM,IACvBsK,EAAWnK,SAASH,EAAM,SAG7B,GAAIpJ,EAAO,CACZ,MAAM0E,EAAQ,CAACjD,EAAKZ,EAAM2T,IACJ,MAAdxU,EAAMyB,GACC+S,UAECxU,EAAMyB,KAAUZ,GACxB+I,GAAO3D,mBAAmB,yBAA2BxE,EAAM,QAAUZ,EAAO,IAAK,UAAYY,EAAKzB,EAAMyB,IAErGzB,EAAMyB,IAEjB6S,EAAS5P,EAAM,SAAU,UAAW4P,GACpC7B,EAAQ/N,EAAM,QAAS,SAAU+N,GACjCiB,EAAWhP,EAAM,WAAY,SAAUgP,GAQ3C,OANIjB,EAAQ,GACR7I,GAAO3D,mBAAmB,gDAAiD,eAAgBwM,GAE3FiB,EAAW,IACX9J,GAAO3D,mBAAmB,4CAA6C,kBAAmByN,GAEvF,IAAIU,GAAYf,GAAmBiB,EAAQ7B,EAAOiB,IAG1D,MAAMe,GACT5R,YAAYwR,EAAkB1B,EAAK3S,EAAO8O,GACtCoE,GAAuBzN,IAAIxD,MAE3BkR,GAAmB1Q,IAAIR,UAAM,GACzBoS,IAAqBhB,IACrBzJ,GAAO5D,WAAW,2DAA4D,wBAAyB,CACnGY,UAAW,oBAGnB3E,KAAK6M,OAASsF,GAAYtG,KAAKgB,GAE/B9M,GAAuBC,KAAMkR,GAAoBnT,EAAO,KACxDiC,KAAKyS,gBAAiB,EACtBxU,OAAOsK,OAAOvI,MAElB0S,UAAUC,GACNlS,GAAuBT,KAAMiR,GAAwB,IAAKE,IAA0B5Q,KAAKP,KAAM2S,GAC/F,MAAMC,EAAIZ,GAAWvR,GAAuBT,KAAMkR,GAAoB,KAAMlR,KAAK6M,OAAO4E,UAClFoB,EAAIb,GAAWvR,GAAuBkS,EAAOzB,GAAoB,KAAMyB,EAAM9F,OAAO4E,UAC1F,OAAOe,GAAYM,UAAUF,EAAIC,EAAG7S,KAAK6M,OAAO4E,SAAUzR,KAAK6M,QAEnEkG,UAAUJ,GACNlS,GAAuBT,KAAMiR,GAAwB,IAAKE,IAA0B5Q,KAAKP,KAAM2S,GAC/F,MAAMC,EAAIZ,GAAWvR,GAAuBT,KAAMkR,GAAoB,KAAMlR,KAAK6M,OAAO4E,UAClFoB,EAAIb,GAAWvR,GAAuBkS,EAAOzB,GAAoB,KAAMyB,EAAM9F,OAAO4E,UAC1F,OAAOe,GAAYM,UAAUF,EAAIC,EAAG7S,KAAK6M,OAAO4E,SAAUzR,KAAK6M,QAEnEmG,UAAUL,GACNlS,GAAuBT,KAAMiR,GAAwB,IAAKE,IAA0B5Q,KAAKP,KAAM2S,GAC/F,MAAMC,EAAIZ,GAAWvR,GAAuBT,KAAMkR,GAAoB,KAAMlR,KAAK6M,OAAO4E,UAClFoB,EAAIb,GAAWvR,GAAuBkS,EAAOzB,GAAoB,KAAMyB,EAAM9F,OAAO4E,UAC1F,OAAOe,GAAYM,UAAWF,EAAIC,EAAK7S,KAAK6M,OAAOyF,YAAatS,KAAK6M,OAAO4E,SAAUzR,KAAK6M,QAE/FoG,UAAUN,GACNlS,GAAuBT,KAAMiR,GAAwB,IAAKE,IAA0B5Q,KAAKP,KAAM2S,GAC/F,MAAMC,EAAIZ,GAAWvR,GAAuBT,KAAMkR,GAAoB,KAAMlR,KAAK6M,OAAO4E,UAClFoB,EAAIb,GAAWvR,GAAuBkS,EAAOzB,GAAoB,KAAMyB,EAAM9F,OAAO4E,UAC1F,OAAOe,GAAYM,UAAWF,EAAI5S,KAAK6M,OAAOyF,YAAeO,EAAG7S,KAAK6M,OAAO4E,SAAUzR,KAAK6M,QAE/F7F,QACI,MAAM8G,EAAQ9N,KAAKwK,WAAW1L,MAAM,KACf,IAAjBgP,EAAM5O,QACN4O,EAAMlL,KAAK,KAEf,IAAIwE,EAASoL,GAAY3G,KAAKiC,EAAM,GAAI9N,KAAK6M,QAC7C,MAAMqG,GAAepF,EAAM,GAAG3G,MAAM,UAIpC,OAHInH,KAAKmT,cAAgBD,IACrB9L,EAASA,EAAO2L,UAAUK,GAAIC,SAASjM,EAAOyF,UAE3CzF,EAEXkM,UACI,MAAMxF,EAAQ9N,KAAKwK,WAAW1L,MAAM,KACf,IAAjBgP,EAAM5O,QACN4O,EAAMlL,KAAK,KAEf,IAAIwE,EAASoL,GAAY3G,KAAKiC,EAAM,GAAI9N,KAAK6M,QAC7C,MAAMqG,GAAepF,EAAM,GAAG3G,MAAM,UAIpC,OAHKnH,KAAKmT,cAAgBD,IACtB9L,EAASA,EAAOsL,UAAUU,GAAIC,SAASjM,EAAOyF,UAE3CzF,EAGXmM,MAAM9B,GACc,MAAZA,IACAA,EAAW,GAGf,MAAM3D,EAAQ9N,KAAKwK,WAAW1L,MAAM,KAOpC,GANqB,IAAjBgP,EAAM5O,QACN4O,EAAMlL,KAAK,MAEX6O,EAAW,GAAKA,EAAW,IAAOA,EAAW,IAC7C9J,GAAO3D,mBAAmB,wBAAyB,WAAYyN,GAE/D3D,EAAM,GAAG5O,QAAUuS,EACnB,OAAOzR,KAEX,MAAMwT,EAAShB,GAAY3G,KAAK,IAAM0F,GAAMhK,UAAU,EAAGkK,GAAWzR,KAAK6M,QACnE4G,EAAOC,GAAKL,SAASrT,KAAK6M,QAChC,OAAO7M,KAAKgT,UAAUQ,GAAQd,UAAUe,GAAMzM,QAAQiM,UAAUO,GAEpEG,SACI,MAAkE,QAA1DlT,GAAuBT,KAAMkR,GAAoB,MAA4E,MAA1DzQ,GAAuBT,KAAMkR,GAAoB,KAEhIiC,aACI,MAAqE,MAA7D1S,GAAuBT,KAAMkR,GAAoB,KAAK,GAElE1G,WAAa,OAAO/J,GAAuBT,KAAMkR,GAAoB,KACrE0C,YAAYrD,GACR,MAAM,IAAIpR,MAAM,QAYpB0U,gBAAkB,OAAOC,WAAW9T,KAAKwK,YACzC6I,SAASxG,GACL,OAAO2F,GAAYjE,WAAW9N,GAAuBT,KAAMkR,GAAoB,KAAMrE,GAEzFtG,iBAAiBxI,EAAO0T,EAAW,EAAG5E,EAAS,SAC3C,OAAO2F,GAAYjE,WAAWmD,GAAY3T,EAAO0T,GAAWU,GAAYtG,KAAKgB,IAEjFtG,kBAAkBxI,EAAO8O,EAAS,SAC9B,MAAMkH,EAAc5B,GAAYtG,KAAKgB,GAC/BmH,EAAUhC,GAAWjU,EAAOgW,EAAYtC,WACzCsC,EAAY1B,QAAU2B,EAAU,GACjC1C,GAAW,oCAAqC,WAAY,QAASvT,GAEzE,MAAM2S,EACEqD,EAAY1B,OACL/B,GAAMO,GAAOmD,EAASD,EAAYvD,QAEtCF,GAAM0D,EAASD,EAAYvD,MAAQ,GAExCyD,EAAUvC,GAAYsC,EAASD,EAAYtC,UACjD,OAAO,IAAIe,GAAYpB,GAAmBV,EAAKuD,EAASF,GAE5DxN,iBAAiB6J,EAAQvD,EAAS,SAC9B,MAAM9O,EAAQ4J,GAAO/B,SAASwK,EAAQ,SAChC2D,EAAc5B,GAAYtG,KAAKgB,GACrC,GAAI9O,EAAMmB,OAAS6U,EAAYvD,MAAQ,EACnC,MAAM,IAAIrR,MAAM,YAEpB,IAAI6U,EAAU7D,GAASpS,GACnBgW,EAAY1B,SACZ2B,EAAUpD,GAASoD,EAASD,EAAYvD,QAE5C,MAAME,EAAMJ,GAAMO,GAAOmD,GAAUD,EAAY1B,OAAS,EAAI,GAAK0B,EAAYvD,QACvEyD,EAAUvC,GAAYsC,EAASD,EAAYtC,UACjD,OAAO,IAAIe,GAAYpB,GAAmBV,EAAKuD,EAASF,GAE5DxN,YAAYxI,EAAO8O,GACf,GAAuB,iBAAX,EACR,OAAO2F,GAAYjE,WAAWxQ,EAAO8O,GAEzC,GAAI9O,aAAiBmJ,WACjB,OAAOsL,GAAY0B,UAAUnW,EAAO8O,GAExC,IACI,OAAO2F,GAAYM,UAAU/U,EAAO,EAAG8O,GAE3C,MAAOvL,GAEH,GAAmB,qBAAfA,EAAMC,KACN,MAAMD,EAGd,OAAOqG,GAAO3D,mBAAmB,4BAA6B,QAASjG,GAE3EwI,qBAAqBxI,GACjB,SAAUA,IAASA,EAAM0U,iBAGjCvB,GAAqB,IAAIzP,QAAWwP,GAAyB,IAAIrK,QAAWuK,GAA2B,SAAkCwB,GACjI3S,KAAK6M,OAAO9J,OAAS4P,EAAM9F,OAAO9J,MAClC4E,GAAO3D,mBAAmB,gDAAiD,QAAS2O,IAG5F,MAAMS,GAAMZ,GAAY3G,KAAK,GACvB6H,GAAOlB,GAAY3G,KAAK,OClVxBsI,GAAW,6DACjB,IAAIC,GAAS,KACb,SAASC,GAASC,GACd,GAAc,MAAVF,GAAgB,CAChBA,GAAS,GACT,IAAK,IAAInV,EAAI,EAAGA,EAAIkV,GAASjV,OAAQD,IACjCmV,GAAOD,GAASlV,IAAM8G,OAAO9G,GAGrC,MAAMmI,EAASgN,GAAOE,GAItB,OAHc,MAAVlN,GACAO,GAAO3D,mBAAmB,uBAAwB,SAAUsQ,GAEzDlN,EAEX,MAAM8I,GAAOnK,OAAO,GACdwO,GAAQxO,OAAO,IACd,SAASyO,GAAapE,GACzB,IAAIrS,EAAQoS,GAASxI,GAAO/B,SAASwK,IACjChJ,EAAS,GACb,KAAOrJ,GACHqJ,EAAS+M,GAAS3P,OAAOzG,EAAQwW,KAAUnN,EAC3CrJ,GAASwW,GAEb,OAAOnN,EAEJ,SAASqN,GAAa1W,GACzB,IAAIqJ,EAAS8I,GACb,IAAK,IAAIjR,EAAI,EAAGA,EAAIlB,EAAMmB,OAAQD,IAC9BmI,GAAUmN,GACVnN,GAAUiN,GAAStW,EAAMkB,IAE7B,OAAOqR,GAAMlJ,GClCV,SAASsN,GAAY3W,EAAOmB,GAC/B,QAAuB,iBAAnB,IAAgCnB,EAAMoJ,MAAM,wBAGxB,iBAAZ,GAAwBpJ,EAAMmB,SAAW,EAAI,EAAIA,MAG9C,IAAXA,GAAoBnB,EAAMmB,OAAS,GAAO,IAyB3C,SAASyV,GAAY5W,GACxB,OAAQ2W,GAAY3W,GAAO,IAAUA,aAAiBmJ,WCjCnD,MCEMS,GAAS,IAAIrE,EDFH,qCEEvB,IAAIsR,GAAO,KACPC,GAAS,KACb,IACID,GAAO7O,OAAO,KACd8O,GAAS9O,OAAO,OAEpB,MAAOzE,GACHkG,QAAQC,IAAI,qBAAsBnG,GAK/B,SAASwT,GAASC,GAIrB,GAHY,MAARA,GACApN,GAAO3D,mBAAmB,0BAA2B,OAAQ+Q,GAE3C,iBAAV,EAAoB,CAC5BpN,GAAOnC,aAAauP,GACpB,MAAM3N,EAAS,GACf,KAAO2N,GACH3N,EAAO4N,QAAe,IAAPD,GACfA,EAAOzN,SAAS5E,OAAOqS,EAAO,MAKlC,OAHsB,IAAlB3N,EAAOlI,QACPkI,EAAOxE,KAAK,GAET,IAAIsE,WAAWE,GAE1B,GAAIwN,IAA0B,iBAAlB,EAA4B,CACpC,MAAMxN,EAAS,GACf,KAAO2N,GACH3N,EAAO4N,QAAQxQ,OAAOuQ,EAAOF,KAC7BE,IAASH,GAKb,OAHsB,IAAlBxN,EAAOlI,QACPkI,EAAOxE,KAAK,GAET,IAAIsE,WAAWE,GAE1B,IA9BerJ,EA8BDgX,IA7BkC,mBAAvBhX,EAAiB,YA8BtC,OAAO+W,GAASC,EAAKnB,eA/B7B,IAAmB7V,EAiCf,GAAsB,iBAAV,EAAoB,CAC5B,IAAI2S,EAAMqE,EAIV,IAAKrE,EAAIvJ,MAAM,kBACX,MAAM,IAAI/D,WAAW,4BAA4BQ,KAAKC,UAAUkR,OAEpE,MAAM3N,EAAS,GACf,IAAK,IAAInI,EAAI,EAAGA,EAAIyR,EAAIxR,OAAQD,GAAK,EACjCmI,EAAOxE,KAAK0E,SAASoJ,EAAInJ,UAAUtI,EAAGA,EAAI,GAAI,KAElD,OAAO,IAAIiI,WAAWE,GAE1B,GAAI2N,aAAgB7N,WAChB,OAAO,IAAIA,WAAW6N,GAE1B,MAAM,IAAI1U,UAAU,mBAAmBuD,KAAKC,UAAUkR,MAEnD,SAASE,GAAgBF,GAI5B,OAHKJ,GAAYI,IACbpN,GAAO3D,mBAAmB,0BAA2B,OAAQ+Q,GAE7DA,aAAgB7N,WACT6N,EAEJD,GAASC,GCrEb,SAASG,GAAaC,GACzB,OAAO,IAAIjO,WAAWkO,OAAOvJ,KAAKsJ,EAAU,WAGzC,SAASE,GAAaN,GACzB,OAAOK,OAAOvJ,KAAKlE,GAAO/B,SAASmP,EAAM,SAASvK,SAAS,UCL/D,MAAM8K,GAAgB,mBACf,SAASC,GAAQR,GACpB,MAAMS,EAAQP,GAAgBF,GAC9B,IAAI3N,EAAS,KACb,IAAK,IAAInI,EAAI,EAAGA,EAAIuW,EAAMtW,OAAQD,IAAK,CACnC,MAAMR,EAAI+W,EAAMvW,GAChBmI,GAAUkO,IAAmB,IAAJ7W,IAAa,GAAK6W,GAAkB,GAAJ7W,GAE7D,OAAO2I,EAEJ,SAASqO,GAAS1X,GACrB,IAAIqJ,EAASmO,GAAQT,GAAS/W,IAAQwJ,UAAU,GAChD,KAAkC,MAA3BH,EAAOG,UAAU,EAAG,IACvBH,EAASA,EAAOG,UAAU,GAK9B,MAHe,KAAXH,IACAA,EAAS,KAEN,KAAOA,ECfX,SAASsO,GAAOC,GACnB,MAAO,KAAOA,EAAMvX,KAAKwX,GAAML,GAAQK,GAAGrO,UAAU,KAAIzD,KAAK,IAE1D,SAAS+R,GAAWd,GACvB,OAAIL,GAAYK,GAAM,IACVA,EAAK7V,OAAS,GAAK,EAExB+V,GAAgBF,GAAM7V,OAE1B,SAAS4W,GAAUf,EAAMgB,EAAOC,GACnC,MAAMR,EAAQP,GAAgBF,GAM9B,OALW,MAAPiB,GAAeA,EAAMR,EAAMtW,QAC3ByI,GAAO5D,WAAW,kCAAmC,iBAAkB,CACnEkS,OAAQT,EAAOtW,OAAQsW,EAAMtW,OAAQmI,OAAQ2O,IAG9CT,GAAQC,EAAMjM,MAAgB,MAATwM,EAAiB,EAAIA,EAAe,MAAPC,EAAeR,EAAMtW,OAAS8W,IAEpF,SAASE,GAAenB,GAC3B,IAAIS,EAAQD,GAAQR,GAAMxN,UAAU,GACpC,KAAgC,MAAzBiO,EAAMjO,UAAU,EAAG,IACtBiO,EAAQA,EAAMjO,UAAU,GAE5B,MAAO,KAAOiO,ECxBlB,SAASW,GAAQpB,EAAM7V,EAAQkX,GAC3B,MAAMZ,EAAQP,GAAgBF,GAC1B7V,EAASsW,EAAMtW,QACfyI,GAAO5D,WAAW,8BAA+B,iBAAkB,CAC/DkS,OAAQ,IAAI/O,WAAWsO,GACvBtW,OAAQA,EACRmI,OAAQnI,EAAS,IAGzB,MAAMkI,EAAS,IAAIF,WAAWhI,GAQ9B,OAPAkI,EAAOiP,KAAK,GACRD,EACAhP,EAAO5G,IAAIgV,EAAOtW,EAASsW,EAAMtW,QAGjCkI,EAAO5G,IAAIgV,EAAO,GAEfD,GAAQnO,GAEZ,SAASkP,GAAYvB,EAAM7V,GAC9B,OAAOiX,GAAQpB,EAAM7V,GAAQ,GAE1B,SAASqX,GAAaxB,EAAM7V,GAC/B,OAAOiX,GAAQpB,EAAM7V,GAAQ,GC1BjC,IAWIsX,GAAmBC,GAAiBC,GAAoBC,GAAmBC,GAAcC,GAAoBC,GAAmBC,GAAmBC,GAAcC,GAAgBC,GAAoBC,GAXrMpX,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAOjF,MAAMmX,GAAW,GAClBC,GAAU,IAAInQ,WAAWkQ,IAGzBE,GAAiB,CAAC,QAClBnL,GAAS,GACR,MAAMoL,WAAe9J,MACxB7M,YAAYqE,EAAOmD,EAAOpK,GAqBtB,OApBA2J,EAAO5C,cAAcE,EAAOkH,GAAQ,UACpC4C,SAAS3G,GACToO,GAAkBhT,IAAIxD,MACtByW,GAAgBjW,IAAIR,UAAM,GAE1BD,GAAuBC,KAAMyW,GAAiB,IAAIe,IAAO,KACrDxZ,GACAA,EAAKsK,SAAQ,CAAC9I,EAAKd,KACJ,MAAPc,IAGAiB,GAAuBT,KAAMyW,GAAiB,KAAKnW,IAAId,GACtDiB,GAAuBT,KAAMyW,GAAiB,KAAK/V,IAAIlB,GAAMoD,KAAKlE,GAGnE+B,GAAuBT,KAAMyW,GAAiB,KAAKjW,IAAIhB,EAAK,CAACd,QAIzET,OAAOsK,OAAOvI,MACP,IAAIyX,MAAMzX,KAAM,CACnBU,IAAK,CAACrB,EAAQqY,EAAMzX,KAChB,GAAsB,iBAAV,EAAoB,CAC5B,GAAIyX,EAAKvQ,MAAM,YAAa,CACxB,MAAMzI,EAAQiJ,EAAO7B,UAAU4R,EAAM,UACrC,GAAIhZ,EAAQ,GAAKA,GAASsB,KAAKd,OAC3B,MAAM,IAAIkE,WAAW,uBAEzB,MAAMuU,EAAOtY,EAAOX,GAIpB,OAHIiZ,aAAgBxY,OAChBsB,GAAuBT,KAAMwW,GAAmB,IAAKE,IAAoBnW,KAAKP,KAAM,SAAStB,IAASiZ,GAEnGA,EAGX,GAAID,KAAQrY,GAAUiY,GAAexS,QAAQ4S,IAAS,EAClD,OAAOE,QAAQlX,IAAIrB,EAAQqY,EAAMzX,GAGrC,KAAMyX,KAAQrY,GACV,OAAOA,EAAOwY,SAASH,GAG/B,OAAOE,QAAQlX,IAAIrB,EAAQqY,EAAMzX,MAI7CsJ,MAAMwM,EAAOC,GACI,MAATD,IACAA,EAAQ,GAED,MAAPC,IACAA,EAAMhW,KAAKd,QAEf,MAAMkI,EAAS,GACf,IAAK,IAAInI,EAAI8W,EAAO9W,EAAI+W,EAAK/W,IAAK,CAC9B,IAAIlB,EACJ,IACIA,EAAQiC,KAAKf,GAEjB,MAAOqC,GACHvD,EAAQuD,EAAMA,MAElB8F,EAAOxE,KAAK7E,GAEhB,OAAOqJ,EAEXyQ,SAAS9U,GACL,MAAMrE,EAAQ+B,GAAuBT,KAAMyW,GAAiB,KAAK/V,IAAIqC,GACrE,GAAa,MAATrE,GAAkC,IAAjBA,EAAMQ,OAAc,CACrC,MAAMyY,EAAO3X,KAAKtB,EAAM,IAIxB,OAHIiZ,aAAgBxY,OAChBsB,GAAuBT,KAAMwW,GAAmB,IAAKE,IAAoBnW,KAAKP,KAAM,YAAY4D,KAAKC,UAAUd,KAAS4U,GAErHA,EAEX,MAAM,IAAIxY,MAAM,uBAAuByE,KAAKC,UAAUd,MAE1DwD,iBAAiB6B,EAAOpK,GACpB,OAAO,IAAIuZ,GAAOpL,GAAQ/D,EAAOpK,IA6BzC,SAAS6Z,GAAS9Z,GACd,IAAIyX,EAAQ/E,GAAQ1S,GAWpB,OAVIyX,EAAMtW,OAASkY,IACfzP,EAAO5D,WAAW,sBAAuB,iBAAkB,CACvDkS,OAAQT,EACRtW,OAAQkY,GACR/P,OAAQmO,EAAMtW,SAGlBsW,EAAMtW,OAASkY,KACf5B,EAAQV,GAASY,GAAO,CAAC2B,GAAQ9N,MAAMiM,EAAMtW,OAASkY,IAAW5B,MAE9DA,EAtCXiB,GAAkB,IAAIhV,QAAW+U,GAAoB,IAAI5P,QAAW8P,GAAqB,SAA4B3T,EAAMzB,GACvH,MAAMwW,EAAU,IAAI3Y,MAAM,0DAA0D4D,KAEpF,MADA+U,EAAQxW,MAAQA,EACVwW,GAqCH,MAAMC,GACTnX,YAAYmC,EAAMnE,EAAMoZ,EAAWC,GAC/B7Y,EAAiBY,KAAM,CAAE+C,KAAAA,EAAMnE,KAAAA,EAAMoZ,UAAAA,EAAWC,QAAAA,GAAW,CACvDlV,KAAM,SAAUnE,KAAM,SAAUoZ,UAAW,SAAUC,QAAS,YAGtEC,YAAYxU,EAAS3F,GACjB,OAAO4J,EAAO3D,mBAAmBN,EAAS1D,KAAKgY,UAAWja,IAG3D,MAAMoa,GACTvX,cACI+V,GAAkBnT,IAAIxD,MAEtB4W,GAAapW,IAAIR,UAAM,GACvB6W,GAAmBrW,IAAIR,UAAM,GAC7BD,GAAuBC,KAAM4W,GAAc,GAAI,KAC/C7W,GAAuBC,KAAM6W,GAAoB,EAAG,KAEpD9B,WACA,OAAOW,GAAOjV,GAAuBT,KAAM4W,GAAc,MAEzD1X,aAAW,OAAOuB,GAAuBT,KAAM6W,GAAoB,KACvEuB,aAAaC,GACT,OAAO5X,GAAuBT,KAAM2W,GAAmB,IAAKG,IAAmBvW,KAAKP,KAAM8U,GAASuD,EAAOtD,OAG9GuD,WAAWva,GACP,IAAIyX,EAAQV,GAAS/W,GACrB,MAAMwa,EAAgB/C,EAAMtW,OAASkY,GAIrC,OAHImB,IACA/C,EAAQV,GAASY,GAAO,CAACF,EAAO6B,GAAQ9N,MAAMgP,OAE3C9X,GAAuBT,KAAM2W,GAAmB,IAAKG,IAAmBvW,KAAKP,KAAMwV,GAG9FgD,WAAWza,GACP,OAAO0C,GAAuBT,KAAM2W,GAAmB,IAAKG,IAAmBvW,KAAKP,KAAM6X,GAAS9Z,IAIvG0a,sBACI,MAAMpR,EAAS5G,GAAuBT,KAAM4W,GAAc,KAAK1X,OAG/D,OAFAuB,GAAuBT,KAAM4W,GAAc,KAAKhU,KAAKyU,IACrDtX,GAAuBC,KAAM6W,GAAoBpW,GAAuBT,KAAM6W,GAAoB,KAAOO,GAAU,KAC3GrZ,IACJ0C,GAAuBT,KAAM4W,GAAc,KAAKvP,GAAUwQ,GAAS9Z,KAI/E6Y,GAAe,IAAInV,QAAWoV,GAAqB,IAAIpV,QAAWkV,GAAoB,IAAI/P,QAAWkQ,GAAoB,SAA2B/B,GAGhJ,OAFAtU,GAAuBT,KAAM4W,GAAc,KAAKhU,KAAKmS,GACrDhV,GAAuBC,KAAM6W,GAAoBpW,GAAuBT,KAAM6W,GAAoB,KAAO9B,EAAK7V,OAAQ,KAC/G6V,EAAK7V,QAET,MAAMwZ,GACT9X,YAAYmU,EAAM4D,EAAYC,GAC1B7B,GAAkBvT,IAAIxD,MACtBgX,GAAaxW,IAAIR,UAAM,GACvBiX,GAAezW,IAAIR,UAAM,GACzBkX,GAAmB1W,IAAIR,UAAM,GAC7BZ,EAAiBY,KAAM,CAAE4Y,aAAcA,IACvC7Y,GAAuBC,KAAMgX,GAAclC,GAASC,GAAO,KAC3DhV,GAAuBC,KAAMkX,GAAoByB,GAAcD,GAAOG,OAAQ,KAC9E9Y,GAAuBC,KAAMiX,GAAgB,EAAG,KAEhDlC,WAAS,OAAOQ,GAAQ9U,GAAuBT,KAAMgX,GAAc,MACnEnB,iBAAe,OAAOpV,GAAuBT,KAAMgX,GAAc,KAAK9X,OACtE4Z,eAAa,OAAOrY,GAAuBT,KAAMiX,GAAgB,KACjEzB,YAAU,OAAO,IAAItO,WAAWzG,GAAuBT,KAAMgX,GAAc,MAE/EzQ,cAAc3H,EAAMb,GAChB,IAAIoJ,EAAQvI,EAAKuI,MAAM,mBAIvB,OAHIA,GAASG,SAASH,EAAM,KAAO,KAC/BpJ,EAAQA,EAAMsS,YAEXtS,EAEX8a,OAAOja,EAAMb,GACT,OAAO0C,GAAuBT,KAAMkX,GAAoB,KAAK3W,KAAKP,KAAMpB,EAAMb,GAGlFgb,UAAU1R,GACN,OAAO,IAAIqR,GAAOjY,GAAuBT,KAAMgX,GAAc,KAAKzN,MAAM9I,GAAuBT,KAAMiX,GAAgB,KAAO5P,GAAS5G,GAAuBT,KAAMkX,GAAoB,KAAMlX,KAAK4Y,YAGrMI,UAAU9Z,EAAQ+Z,GACd,IAAIzD,EAAQ/U,GAAuBT,KAAM+W,GAAmB,IAAKI,IAAmB5W,KAAKP,KAAM,EAAGd,IAAU+Z,GAG5G,OAFAlZ,GAAuBC,KAAMiX,GAAgBxW,GAAuBT,KAAMiX,GAAgB,KAAOzB,EAAMtW,OAAQ,KAExGsW,EAAMjM,MAAM,EAAGrK,GAG1Bga,YACI,OAAO/I,GAASnQ,KAAKgZ,UAAU5B,KAEnC+B,YACI,OAAO9I,GAASrQ,KAAKgZ,UAAU5B,MAGvCJ,GAAe,IAAIvV,QAAWwV,GAAiB,IAAIxV,QAAWyV,GAAqB,IAAIzV,QAAWsV,GAAoB,IAAInQ,QAAWuQ,GAAoB,SAA2B9P,EAAQnI,EAAQ+Z,GAChM,IAAIG,EAAgBrS,KAAKsS,KAAKna,EAASkY,IAAYA,GAanD,OAZI3W,GAAuBT,KAAMiX,GAAgB,KAAOmC,EAAgB3Y,GAAuBT,KAAMgX,GAAc,KAAK9X,SAChHc,KAAK4Y,YAAcK,GAASxY,GAAuBT,KAAMiX,GAAgB,KAAO/X,GAAUuB,GAAuBT,KAAMgX,GAAc,KAAK9X,OAC1Ika,EAAgBla,EAGhByI,EAAO5D,WAAW,qBAAsB,iBAAkB,CACtDkS,OAAQnB,GAASrU,GAAuBT,KAAMgX,GAAc,MAC5D9X,OAAQuB,GAAuBT,KAAMgX,GAAc,KAAK9X,OACxDmI,OAAQ5G,GAAuBT,KAAMiX,GAAgB,KAAOmC,KAIjE3Y,GAAuBT,KAAMgX,GAAc,KAAKzN,MAAM9I,GAAuBT,KAAMiX,GAAgB,KAAMxW,GAAuBT,KAAMiX,GAAgB,KAAOmC;;AC9PjK,MAAME,GAAOC,GAAQ,IAAIC,YAAYD,EAAItD,OAAQsD,EAAIE,WAAY1S,KAAKC,MAAMuS,EAAIG,WAAa,IAEvFC,GAAcJ,GAAQ,IAAIK,SAASL,EAAItD,OAAQsD,EAAIE,WAAYF,EAAIG,YAEnEG,GAAO,CAACC,EAAMC,IAAWD,GAAS,GAAKC,EAAWD,IAASC,EAIxE,KAHgF,KAA5D,IAAI7S,WAAW,IAAIsS,YAAY,CAAC,YAAavD,QAAQ,IAIrE,MAAM,IAAI9W,MAAM,+CACNsO,MAAM5B,KAAK,CAAE3M,OAAQ,MAAO,CAACT,EAAGQ,IAAMA,EAAEuL,SAAS,IAAIwP,SAAS,EAAG,OAkCxE,MAAMC,GAAW,MACpB,MAAMC,EAAgC,oBAAXC,QACG,mBAAnBA,OAAOC,SACdD,OAAOC,QAAQC,KAAKF,QACxB,IACI,GAAID,EAAa,CACb,MAAMI,aAAEA,GAAiBJ,EAAY,UACrC,MAAO,IAAM,IAAIhc,SAASI,GAAYgc,EAAahc,MAG3D,MAAO0H,IACP,MAAO,IAAM,IAAI9H,SAASI,GAAYic,WAAWjc,EAAS,MAXtC,GAcjBT,eAAe2c,GAAUC,EAAOC,EAAMC,GACzC,IAAIC,EAAKC,KAAKC,MACd,IAAK,IAAI7b,EAAI,EAAGA,EAAIwb,EAAOxb,IAAK,CAC5B0b,EAAG1b,GAEH,MAAM8b,EAAOF,KAAKC,MAAQF,EACtBG,GAAQ,GAAKA,EAAOL,UAElBT,KACNW,GAAMG,IASP,SAASC,GAAQjG,GAGpB,GAFoB,iBAATA,IACPA,EARD,SAAqBkG,GACxB,GAAmB,iBAARA,EACP,MAAM,IAAI5a,UAAU,2CAA2C4a,GAEnE,OAAO,IAAIC,aAAcC,OAAOF,GAIrBG,CAAYrG,MACjBA,aAAgB7N,YAClB,MAAM,IAAI7G,UAAU,iDAAiD0U,MACzE,OAAOA,EAoBJ,SAASsG,GAAaC,GACzB,IAAK9W,OAAO+W,cAAcD,IAAMA,EAAI,EAChC,MAAM,IAAInc,MAAM,2BAA2Bmc,KAa5C,SAASE,GAAWC,GACvB,GAAoB,mBAATA,GAA8C,mBAAhBA,EAAKC,OAC1C,MAAM,IAAIvc,MAAM,mDACpBkc,GAAaI,EAAKE,WAClBN,GAAaI,EAAKG,UAGf,MAAMC,GAETrS,QACI,OAAOxJ,KAAK8b,cAKb,SAASC,GAAUC,EAAKC,GAC3B,QAAcvc,IAAVuc,IAAyC,iBAAVA,IAFhBtO,EAEqDsO,EAFL,oBAAxChe,OAAOie,UAAU1R,SAASjK,KAAKoN,IAA8BA,EAAI/M,cAAgB3C,SAGxG,MAAM,IAAIoC,UAAU,yCAHN,IAACsN,EAKnB,OADa1P,OAAO8N,OAAOiQ,EAAKC,GAG7B,SAASE,GAAgBC,GAC5B,MAAMC,EAAS3Y,GAAY0Y,IAAkBE,OAAOtB,GAAQtX,IAAU6Y,SAChEC,EAAMJ,IAIZ,OAHAC,EAAMV,UAAYa,EAAIb,UACtBU,EAAMT,SAAWY,EAAIZ,SACrBS,EAAMX,OAAS,IAAMU,IACdC,ECnJX,MAAMI,WAAaZ,GACfjb,YAAY6a,EAAMiB,GACd3N,QACA/O,KAAK2c,UAAW,EAChB3c,KAAK4c,WAAY,EACjBpB,GAAWC,GACX,MAAMjc,EAAMwb,GAAQ0B,GAEpB,GADA1c,KAAK6c,MAAQpB,EAAKC,WACZ1b,KAAK6c,iBAAiBhB,IACxB,MAAM,IAAIxb,UAAU,uDACxB,MAAMub,EAAY5b,KAAK4b,SAAW5b,KAAK6c,MAAMjB,SAC7C5b,KAAK2b,UAAY3b,KAAK6c,MAAMlB,UAC5B,MAAMmB,EAAM,IAAI5V,WAAW0U,GAE3BkB,EAAItc,IAAIhB,EAAIN,OAASc,KAAK6c,MAAMjB,SAAWH,EAAKC,SAASY,OAAO9c,GAAK+c,SAAW/c,GAChF,IAAK,IAAIP,EAAI,EAAGA,EAAI6d,EAAI5d,OAAQD,IAC5B6d,EAAI7d,IAAM,GACde,KAAK6c,MAAMP,OAAOQ,GAElB9c,KAAK+c,MAAQtB,EAAKC,SAElB,IAAK,IAAIzc,EAAI,EAAGA,EAAI6d,EAAI5d,OAAQD,IAC5B6d,EAAI7d,IAAM,IACde,KAAK+c,MAAMT,OAAOQ,GAClBA,EAAIzG,KAAK,GAEbiG,OAAOU,GACH,GAAIhd,KAAK4c,UACL,MAAM,IAAIzd,MAAM,yBAEpB,OADAa,KAAK6c,MAAMP,OAAOU,GACXhd,KAEXid,WAAWC,GACP,GAAIld,KAAK4c,UACL,MAAM,IAAIzd,MAAM,yBACpB,KAAM+d,aAAehW,aAAegW,EAAIhe,SAAWc,KAAK2b,UACpD,MAAM,IAAIxc,MAAM,+BACpB,GAAIa,KAAK2c,SACL,MAAM,IAAIxd,MAAM,+BACpBa,KAAK2c,UAAW,EAChB3c,KAAK6c,MAAMI,WAAWC,GACtBld,KAAK+c,MAAMT,OAAOY,GAClBld,KAAK+c,MAAME,WAAWC,GACtBld,KAAKmd,UAETZ,SACI,MAAMW,EAAM,IAAIhW,WAAWlH,KAAK+c,MAAMpB,WAEtC,OADA3b,KAAKid,WAAWC,GACTA,EAEXpB,WAAWhQ,GAEPA,IAAOA,EAAK7N,OAAOyd,OAAOzd,OAAOmf,eAAepd,MAAO,KACvD,MAAM+c,MAAEA,EAAKF,MAAEA,EAAKF,SAAEA,EAAQC,UAAEA,EAAShB,SAAEA,EAAQD,UAAEA,GAAc3b,KAQnE,OAPA8L,EAAKA,GACF6Q,SAAWA,EACd7Q,EAAG8Q,UAAYA,EACf9Q,EAAG8P,SAAWA,EACd9P,EAAG6P,UAAYA,EACf7P,EAAGiR,MAAQA,EAAMjB,WAAWhQ,EAAGiR,OAC/BjR,EAAG+Q,MAAQA,EAAMf,WAAWhQ,EAAG+Q,OACxB/Q,EAEXqR,UACInd,KAAK4c,WAAY,EACjB5c,KAAK+c,MAAMI,UACXnd,KAAK6c,MAAMM,WASZ,MAAME,GAAO,CAAC5B,EAAMjc,EAAKkE,IAAY,IAAI+Y,GAAKhB,EAAMjc,GAAK8c,OAAO5Y,GAAS6Y,SCxCzE,SAASe,GAAO7B,EAAM8B,EAAUC,EAAMC,GACzC,MAAMxQ,EAAEA,EAACyQ,MAAEA,EAAKC,GAAEA,EAAEC,IAAEA,EAAGC,QAAEA,GAlC/B,SAAoBpC,EAAMqC,EAAWC,EAAO9B,GACxCT,GAAWC,GACX,MAAMgC,EAAO1B,GAAU,CAAE2B,MAAO,GAAIM,UAAW,IAAM/B,IAC/ChP,EAAEA,EAACyQ,MAAEA,EAAKM,UAAEA,GAAcP,EAIhC,GAHApC,GAAapO,GACboO,GAAaqC,GACbrC,GAAa2C,GACT/Q,EAAI,EACJ,MAAM,IAAI9N,MAAM,yCACpB,MAAMoe,EAAWvC,GAAQ8C,GACnBN,EAAOxC,GAAQ+C,GAEfJ,EAAK,IAAIzW,WAAWwW,GAEpBE,EAAMP,GAAK3B,OAAOD,EAAM8B,GACxBM,EAAUD,EAAI9B,aAAaQ,OAAOkB,GACxC,MAAO,CAAEvQ,EAAAA,EAAGyQ,MAAAA,EAAOM,UAAAA,EAAWL,GAAAA,EAAIC,IAAAA,EAAKC,QAAAA,GAkBAI,CAAWxC,EAAM8B,EAAUC,EAAMC,GACxE,IAAIS,EACJ,MAAM3E,EAAM,IAAIrS,WAAW,GACrBiX,EAAOxE,GAAWJ,GAClB6E,EAAI,IAAIlX,WAAW0W,EAAIjC,WAE7B,IAAK,IAAI0C,EAAK,EAAGC,EAAM,EAAGA,EAAMZ,EAAOW,IAAMC,GAAOV,EAAIjC,UAAW,CAE/D,MAAM4C,EAAKZ,EAAGa,SAASF,EAAKA,EAAMV,EAAIjC,WACtCwC,EAAKM,SAAS,EAAGJ,GAAI,IAGpBH,EAAOL,EAAQ/B,WAAWoC,IAAO5B,OAAO/C,GAAK0D,WAAWmB,GACzDG,EAAG/d,IAAI4d,EAAEI,SAAS,EAAGD,EAAGrf,SACxB,IAAK,IAAIwf,EAAK,EAAGA,EAAKzR,EAAGyR,IAAM,CAE3Bd,EAAI9B,WAAWoC,GAAM5B,OAAO8B,GAAGnB,WAAWmB,GAC1C,IAAK,IAAInf,EAAI,EAAGA,EAAIsf,EAAGrf,OAAQD,IAC3Bsf,EAAGtf,IAAMmf,EAAEnf,IAGvB,OArCJ,SAAsB2e,EAAKC,EAASF,EAAIO,EAAME,GAM1C,OALAR,EAAIT,UACJU,EAAQV,UACJe,GACAA,EAAKf,UACTiB,EAAE/H,KAAK,GACAsH,EA+BAgB,CAAaf,EAAKC,EAASF,EAAIO,EAAME,GDmBhDf,GAAK3B,OAAS,CAACD,EAAMjc,IAAQ,IAAIid,GAAKhB,EAAMjc,GE/DrC,MAAMof,WAAa/C,GACtBjb,YAAYgb,EAAUD,EAAWkD,EAAWC,GACxC/P,QACA/O,KAAK4b,SAAWA,EAChB5b,KAAK2b,UAAYA,EACjB3b,KAAK6e,UAAYA,EACjB7e,KAAK8e,KAAOA,EACZ9e,KAAK2c,UAAW,EAChB3c,KAAKd,OAAS,EACdc,KAAKse,IAAM,EACXte,KAAK4c,WAAY,EACjB5c,KAAKiW,OAAS,IAAI/O,WAAW0U,GAC7B5b,KAAKme,KAAOxE,GAAW3Z,KAAKiW,QAEhCqG,OAAOvH,GACH,GAAI/U,KAAK4c,UACL,MAAM,IAAIzd,MAAM,yBACpB,MAAMgf,KAAEA,EAAIlI,OAAEA,EAAM2F,SAAEA,EAAQe,SAAEA,GAAa3c,KAC7C,GAAI2c,EACA,MAAM,IAAIxd,MAAM,+BAEpB,MAAM4f,GADNhK,EAAOiG,GAAQjG,IACE7V,OACjB,IAAK,IAAIof,EAAM,EAAGA,EAAMS,GAAM,CAC1B,MAAMC,EAAOjY,KAAKrB,IAAIkW,EAAW5b,KAAKse,IAAKS,EAAMT,GAEjD,GAAIU,IAASpD,EAMb3F,EAAOzV,IAAIuU,EAAKyJ,SAASF,EAAKA,EAAMU,GAAOhf,KAAKse,KAChDte,KAAKse,KAAOU,EACZV,GAAOU,EACHhf,KAAKse,MAAQ1C,IACb5b,KAAKwN,QAAQ2Q,EAAM,GACnBne,KAAKse,IAAM,OAXf,CACI,MAAMW,EAAWtF,GAAW5E,GAC5B,KAAO6G,GAAYmD,EAAMT,EAAKA,GAAO1C,EACjC5b,KAAKwN,QAAQyR,EAAUX,IAanC,OAFAte,KAAKd,QAAU6V,EAAK7V,OACpBc,KAAKkf,aACElf,KAEXid,WAAWC,GACP,GAAIld,KAAK4c,UACL,MAAM,IAAIzd,MAAM,yBACpB,KAAM+d,aAAehW,aAAegW,EAAIhe,OAASc,KAAK2b,UAClD,MAAM,IAAIxc,MAAM,gCACpB,GAAIa,KAAK2c,SACL,MAAM,IAAIxd,MAAM,+BACpBa,KAAK2c,UAAW,EAIhB,MAAM1G,OAAEA,EAAMkI,KAAEA,EAAIvC,SAAEA,EAAQkD,KAAEA,GAAS9e,KACzC,IAAIse,IAAEA,GAAQte,KAEdiW,EAAOqI,KAAS,IAChBte,KAAKiW,OAAOuI,SAASF,GAAKjI,KAAK,GAE3BrW,KAAK6e,UAAYjD,EAAW0C,IAC5Bte,KAAKwN,QAAQ2Q,EAAM,GACnBG,EAAM,GAGV,IAAK,IAAIrf,EAAIqf,EAAKrf,EAAI2c,EAAU3c,IAC5BgX,EAAOhX,GAAK,GA/ExB,SAAsBkf,EAAM1E,EAAY1b,EAAO+gB,GAC3C,GAAiC,mBAAtBX,EAAKgB,aACZ,OAAOhB,EAAKgB,aAAa1F,EAAY1b,EAAO+gB,GAChD,MAAMM,EAAOrZ,OAAO,IACdsZ,EAAWtZ,OAAO,YAClBuZ,EAAK9a,OAAQzG,GAASqhB,EAAQC,GAC9BE,EAAK/a,OAAOzG,EAAQshB,GACpBG,EAAIV,EAAO,EAAI,EACfW,EAAIX,EAAO,EAAI,EACrBX,EAAKuB,UAAUjG,EAAa+F,EAAGF,EAAIR,GACnCX,EAAKuB,UAAUjG,EAAagG,EAAGF,EAAIT,GAyE/BK,CAAahB,EAAMvC,EAAW,EAAG7V,OAAqB,EAAd/F,KAAKd,QAAa4f,GAC1D9e,KAAKwN,QAAQ2Q,EAAM,GACnB,MAAMwB,EAAQhG,GAAWuD,GACzBld,KAAKU,MAAM4H,SAAQ,CAAC7J,EAAGQ,IAAM0gB,EAAMD,UAAU,EAAIzgB,EAAGR,EAAGqgB,KAE3DvC,SACI,MAAMtG,OAAEA,EAAM0F,UAAEA,GAAc3b,KAC9BA,KAAKid,WAAWhH,GAChB,MAAM2J,EAAM3J,EAAO1M,MAAM,EAAGoS,GAE5B,OADA3b,KAAKmd,UACEyC,EAEX9D,WAAWhQ,GACPA,IAAOA,EAAK,IAAI9L,KAAKY,aACrBkL,EAAGtL,OAAOR,KAAKU,OACf,MAAMkb,SAAEA,EAAQ3F,OAAEA,EAAM/W,OAAEA,EAAMyd,SAAEA,EAAQC,UAAEA,EAAS0B,IAAEA,GAAQte,KAO/D,OANA8L,EAAG5M,OAASA,EACZ4M,EAAGwS,IAAMA,EACTxS,EAAG6Q,SAAWA,EACd7Q,EAAG8Q,UAAYA,EACX1d,EAAS0c,GACT9P,EAAGmK,OAAOzV,IAAIyV,GACXnK,GCxGf,MAAM+T,GAAM,CAACjN,EAAGC,EAAG5F,IAAO2F,EAAIC,GAAOD,EAAI3F,EAEnC6S,GAAM,CAAClN,EAAGC,EAAG5F,IAAO2F,EAAIC,EAAMD,EAAI3F,EAAM4F,EAAI5F,EAI5C8S,GAAW,IAAIvG,YAAY,CAC7B,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,aAIlFwG,GAAK,IAAIxG,YAAY,CACvB,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,aAIlFyG,GAAW,IAAIzG,YAAY,IACjC,MAAM0G,WAAetB,GACjBhe,cACImO,MAAM,GAAI,GAAI,GAAG,GAGjB/O,KAAKmgB,EAAY,EAARH,GAAG,GACZhgB,KAAKogB,EAAY,EAARJ,GAAG,GACZhgB,KAAKqgB,EAAY,EAARL,GAAG,GACZhgB,KAAKsgB,EAAY,EAARN,GAAG,GACZhgB,KAAKugB,EAAY,EAARP,GAAG,GACZhgB,KAAKwgB,EAAY,EAARR,GAAG,GACZhgB,KAAKygB,EAAY,EAART,GAAG,GACZhgB,KAAK0gB,EAAY,EAARV,GAAG,GAEhBtf,MACI,MAAMyf,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAM1gB,KACnC,MAAO,CAACmgB,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GAGjClgB,IAAI2f,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GACrB1gB,KAAKmgB,EAAQ,EAAJA,EACTngB,KAAKogB,EAAQ,EAAJA,EACTpgB,KAAKqgB,EAAQ,EAAJA,EACTrgB,KAAKsgB,EAAQ,EAAJA,EACTtgB,KAAKugB,EAAQ,EAAJA,EACTvgB,KAAKwgB,EAAQ,EAAJA,EACTxgB,KAAKygB,EAAQ,EAAJA,EACTzgB,KAAK0gB,EAAQ,EAAJA,EAEblT,QAAQ2Q,EAAM9W,GAEV,IAAK,IAAIpI,EAAI,EAAGA,EAAI,GAAIA,IAAKoI,GAAU,EACnC4Y,GAAShhB,GAAKkf,EAAKwC,UAAUtZ,GAAQ,GACzC,IAAK,IAAIpI,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAC1B,MAAM2hB,EAAMX,GAAShhB,EAAI,IACnB4hB,EAAKZ,GAAShhB,EAAI,GAClB6hB,EAAKjH,GAAK+G,EAAK,GAAK/G,GAAK+G,EAAK,IAAOA,IAAQ,EAC7CG,EAAKlH,GAAKgH,EAAI,IAAMhH,GAAKgH,EAAI,IAAOA,IAAO,GACjDZ,GAAShhB,GAAM8hB,EAAKd,GAAShhB,EAAI,GAAK6hB,EAAKb,GAAShhB,EAAI,IAAO,EAGnE,IAAIkhB,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAM1gB,KACjC,IAAK,IAAIf,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MACM+hB,EAAMN,GADG7G,GAAK0G,EAAG,GAAK1G,GAAK0G,EAAG,IAAM1G,GAAK0G,EAAG,KACzBV,GAAIU,EAAGC,EAAGC,GAAKV,GAAS9gB,GAAKghB,GAAShhB,GAAM,EAE/DgiB,GADSpH,GAAKsG,EAAG,GAAKtG,GAAKsG,EAAG,IAAMtG,GAAKsG,EAAG,KAC7BL,GAAIK,EAAGC,EAAGC,GAAM,EACrCK,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKD,EAAIU,EAAM,EACfV,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKa,EAAKC,EAAM,EAGpBd,EAAKA,EAAIngB,KAAKmgB,EAAK,EACnBC,EAAKA,EAAIpgB,KAAKogB,EAAK,EACnBC,EAAKA,EAAIrgB,KAAKqgB,EAAK,EACnBC,EAAKA,EAAItgB,KAAKsgB,EAAK,EACnBC,EAAKA,EAAIvgB,KAAKugB,EAAK,EACnBC,EAAKA,EAAIxgB,KAAKwgB,EAAK,EACnBC,EAAKA,EAAIzgB,KAAKygB,EAAK,EACnBC,EAAKA,EAAI1gB,KAAK0gB,EAAK,EACnB1gB,KAAKQ,IAAI2f,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GAElCxB,aACIe,GAAS5J,KAAK,GAElB8G,UACInd,KAAKQ,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9BR,KAAKiW,OAAOI,KAAK,IAOlB,MAAM6K,GAAS/E,IAAgB,IAAM,IAAI+D,KC1G1CiB,GAAapb,OAAO,GAAK,GAAK,GAC9BqZ,GAAOrZ,OAAO,IACb,SAASqb,GAAQ9F,EAAG+F,GAAK,GAC5B,OAAIA,EACO,CAAE7B,EAAGhb,OAAO8W,EAAI6F,IAAa1B,EAAGjb,OAAQ8W,GAAK8D,GAAQ+B,KACzD,CAAE3B,EAAsC,EAAnChb,OAAQ8W,GAAK8D,GAAQ+B,IAAiB1B,EAA4B,EAAzBjb,OAAO8W,EAAI6F,KAE7D,SAASriB,GAAMwiB,EAAKD,GAAK,GAC5B,IAAIE,EAAK,IAAI/H,YAAY8H,EAAIpiB,QACzBsiB,EAAK,IAAIhI,YAAY8H,EAAIpiB,QAC7B,IAAK,IAAID,EAAI,EAAGA,EAAIqiB,EAAIpiB,OAAQD,IAAK,CACjC,MAAMugB,EAAEA,EAACC,EAAEA,GAAM2B,GAAQE,EAAIriB,GAAIoiB,IAChCE,EAAGtiB,GAAIuiB,EAAGviB,IAAM,CAACugB,EAAGC,GAEzB,MAAO,CAAC8B,EAAIC,GAIT,MAAMC,GAAQ,CAACjC,EAAGC,EAAGiC,IAAMlC,IAAMkC,EAC3BC,GAAQ,CAACnC,EAAGC,EAAGiC,IAAOlC,GAAM,GAAKkC,EAAOjC,IAAMiC,EAE9CE,GAAS,CAACpC,EAAGC,EAAGiC,IAAOlC,IAAMkC,EAAMjC,GAAM,GAAKiC,EAC9CG,GAAS,CAACrC,EAAGC,EAAGiC,IAAOlC,GAAM,GAAKkC,EAAOjC,IAAMiC,EAE/CI,GAAS,CAACtC,EAAGC,EAAGiC,IAAOlC,GAAM,GAAKkC,EAAOjC,IAAOiC,EAAI,GACpDK,GAAS,CAACvC,EAAGC,EAAGiC,IAAOlC,IAAOkC,EAAI,GAAQjC,GAAM,GAAKiC,EAY3D,SAASle,GAAI+d,EAAIC,EAAIQ,EAAIC,GAC5B,MAAMxC,GAAK+B,IAAO,IAAMS,IAAO,GAC/B,MAAO,CAAEzC,EAAI+B,EAAKS,GAAOvC,EAAI,GAAK,GAAM,GAAM,EAAGA,EAAO,EAAJA,GAGjD,MAAMyC,GAAQ,CAACV,EAAIS,EAAIE,KAAQX,IAAO,IAAMS,IAAO,IAAME,IAAO,GAC1DC,GAAQ,CAACC,EAAKd,EAAIS,EAAIM,IAAQf,EAAKS,EAAKM,GAAOD,EAAM,GAAK,GAAM,GAAM,EACtEE,GAAQ,CAACf,EAAIS,EAAIE,EAAIK,KAAQhB,IAAO,IAAMS,IAAO,IAAME,IAAO,IAAMK,IAAO,GAC3EC,GAAQ,CAACJ,EAAKd,EAAIS,EAAIM,EAAII,IAAQnB,EAAKS,EAAKM,EAAKI,GAAOL,EAAM,GAAK,GAAM,GAAM,EAC/EM,GAAQ,CAACnB,EAAIS,EAAIE,EAAIK,EAAII,KAAQpB,IAAO,IAAMS,IAAO,IAAME,IAAO,IAAMK,IAAO,IAAMI,IAAO,GAC5FC,GAAQ,CAACR,EAAKd,EAAIS,EAAIM,EAAII,EAAII,IAAQvB,EAAKS,EAAKM,EAAKI,EAAKI,GAAOT,EAAM,GAAK,GAAM,GAAM,GC1C9FU,GAAWC,IAAaC,GAAU,CACrC,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,sBACpE7kB,KAAIkd,GAAKvV,OAAOuV,MAEZ4H,GAAa,IAAI1J,YAAY,IAC7B2J,GAAa,IAAI3J,YAAY,IAC5B,MAAM4J,WAAexE,GACxBhe,cACImO,MAAM,IAAK,GAAI,IAAI,GAKnB/O,KAAKuhB,GAAK,WACVvhB,KAAKwhB,IAAK,UACVxhB,KAAKgiB,IAAK,WACVhiB,KAAKiiB,IAAK,WACVjiB,KAAKsiB,GAAK,WACVtiB,KAAKmiB,IAAK,SACVniB,KAAK0iB,IAAK,WACV1iB,KAAKwiB,GAAK,WACVxiB,KAAK8iB,GAAK,WACV9iB,KAAK4iB,IAAK,WACV5iB,KAAKqjB,IAAK,WACVrjB,KAAKsjB,GAAK,UACVtjB,KAAKujB,GAAK,UACVvjB,KAAKwjB,IAAK,SACVxjB,KAAKyjB,GAAK,WACVzjB,KAAK0jB,GAAK,UAGdhjB,MACI,MAAM6gB,GAAEA,EAAEC,GAAEA,EAAEQ,GAAEA,EAAEC,GAAEA,EAAEK,GAAEA,EAAEH,GAAEA,EAAEO,GAAEA,EAAEF,GAAEA,EAAEM,GAAEA,EAAEF,GAAEA,EAAES,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,GAAO1jB,KAC3E,MAAO,CAACuhB,EAAIC,EAAIQ,EAAIC,EAAIK,EAAIH,EAAIO,EAAIF,EAAIM,EAAIF,EAAIS,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAGxEljB,IAAI+gB,EAAIC,EAAIQ,EAAIC,EAAIK,EAAIH,EAAIO,EAAIF,EAAIM,EAAIF,EAAIS,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAC5D1jB,KAAKuhB,GAAU,EAALA,EACVvhB,KAAKwhB,GAAU,EAALA,EACVxhB,KAAKgiB,GAAU,EAALA,EACVhiB,KAAKiiB,GAAU,EAALA,EACVjiB,KAAKsiB,GAAU,EAALA,EACVtiB,KAAKmiB,GAAU,EAALA,EACVniB,KAAK0iB,GAAU,EAALA,EACV1iB,KAAKwiB,GAAU,EAALA,EACVxiB,KAAK8iB,GAAU,EAALA,EACV9iB,KAAK4iB,GAAU,EAALA,EACV5iB,KAAKqjB,GAAU,EAALA,EACVrjB,KAAKsjB,GAAU,EAALA,EACVtjB,KAAKujB,GAAU,EAALA,EACVvjB,KAAKwjB,GAAU,EAALA,EACVxjB,KAAKyjB,GAAU,EAALA,EACVzjB,KAAK0jB,GAAU,EAALA,EAEdlW,QAAQ2Q,EAAM9W,GAEV,IAAK,IAAIpI,EAAI,EAAGA,EAAI,GAAIA,IAAKoI,GAAU,EACnC6b,GAAWjkB,GAAKkf,EAAKwC,UAAUtZ,GAC/B8b,GAAWlkB,GAAKkf,EAAKwC,UAAWtZ,GAAU,GAE9C,IAAK,IAAIpI,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAE1B,MAAM0kB,EAA4B,EAArBT,GAAWjkB,EAAI,IACtB2kB,EAA4B,EAArBT,GAAWlkB,EAAI,IACtB4kB,EAAMC,GAAWH,EAAMC,EAAM,GAAKE,GAAWH,EAAMC,EAAM,GAAKG,GAAUJ,EAAMC,EAAM,GACpFI,EAAMC,GAAWN,EAAMC,EAAM,GAAKK,GAAWN,EAAMC,EAAM,GAAKM,GAAUP,EAAMC,EAAM,GAEpFO,EAA0B,EAApBjB,GAAWjkB,EAAI,GACrBmlB,EAA0B,EAApBjB,GAAWlkB,EAAI,GACrBolB,EAAMP,GAAWK,EAAKC,EAAK,IAAME,GAAWH,EAAKC,EAAK,IAAML,GAAUI,EAAKC,EAAK,GAChFG,EAAMN,GAAWE,EAAKC,EAAK,IAAMI,GAAWL,EAAKC,EAAK,IAAMF,GAAUC,EAAKC,EAAK,GAEhFK,EAAOC,GAAUV,EAAKO,EAAKpB,GAAWlkB,EAAI,GAAIkkB,GAAWlkB,EAAI,KAC7D0lB,EAAOC,GAAUH,EAAMZ,EAAKQ,EAAKnB,GAAWjkB,EAAI,GAAIikB,GAAWjkB,EAAI,KACzEikB,GAAWjkB,GAAY,EAAP0lB,EAChBxB,GAAWlkB,GAAY,EAAPwlB,EAEpB,IAAIlD,GAAEA,EAAEC,GAAEA,EAAEQ,GAAEA,EAAEC,GAAEA,EAAEK,GAAEA,EAAEH,GAAEA,EAAEO,GAAEA,EAAEF,GAAEA,EAAEM,GAAEA,EAAEF,GAAEA,EAAES,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,GAAO1jB,KAEzE,IAAK,IAAIf,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAEzB,MAAM4lB,EAAUf,GAAWhB,EAAIF,EAAI,IAAMkB,GAAWhB,EAAIF,EAAI,IAAM0B,GAAWxB,EAAIF,EAAI,IAC/EkC,EAAUb,GAAWnB,EAAIF,EAAI,IAAMqB,GAAWnB,EAAIF,EAAI,IAAM4B,GAAW1B,EAAIF,EAAI,IAE/EmC,EAAQjC,EAAKO,GAAQP,EAAKS,EAI1ByB,EAAOC,GAAUvB,EAAIoB,EAHblC,EAAKU,GAAQV,EAAKY,EAGUR,GAAU/jB,GAAIkkB,GAAWlkB,IAC7DimB,EAAMC,GAAUH,EAAMvB,EAAIoB,EAASE,EAAMhC,GAAU9jB,GAAIikB,GAAWjkB,IAClEmmB,EAAa,EAAPJ,EAENK,EAAUvB,GAAWvC,EAAIC,EAAI,IAAM8C,GAAW/C,EAAIC,EAAI,IAAM8C,GAAW/C,EAAIC,EAAI,IAC/E8D,EAAUrB,GAAW1C,EAAIC,EAAI,IAAMgD,GAAWjD,EAAIC,EAAI,IAAMgD,GAAWjD,EAAIC,EAAI,IAC/E+D,EAAQhE,EAAKS,EAAOT,EAAKe,EAAON,EAAKM,EACrCkD,EAAQhE,EAAKS,EAAOT,EAAKW,EAAOF,EAAKE,EAC3CsB,EAAU,EAALF,EACLG,EAAU,EAALF,EACLD,EAAU,EAALF,EACLG,EAAU,EAALF,EACLD,EAAU,EAALP,EACLQ,EAAU,EAALV,IACFpD,EAAGsD,EAAIrD,EAAGmD,GAAO6C,GAAa,EAAL/C,EAAa,EAALF,EAAc,EAAN0C,EAAe,EAANE,IACrD1C,EAAU,EAALJ,EACLE,EAAU,EAALL,EACLG,EAAU,EAALN,EACLG,EAAU,EAALF,EACLD,EAAU,EAALT,EACLU,EAAU,EAALT,EACL,MAAMkE,EAAMC,GAAUP,EAAKE,EAASE,GACpCjE,EAAKqE,GAAUF,EAAKR,EAAKG,EAASE,GAClC/D,EAAW,EAANkE,IAGNlG,EAAG+B,EAAI9B,EAAG+B,GAAOiE,GAAkB,EAAVzlB,KAAKuhB,GAAkB,EAAVvhB,KAAKwhB,GAAa,EAALD,EAAa,EAALC,MAC3DhC,EAAGwC,EAAIvC,EAAGwC,GAAOwD,GAAkB,EAAVzlB,KAAKgiB,GAAkB,EAAVhiB,KAAKiiB,GAAa,EAALD,EAAa,EAALC,MAC3DzC,EAAG8C,EAAI7C,EAAG0C,GAAOsD,GAAkB,EAAVzlB,KAAKsiB,GAAkB,EAAVtiB,KAAKmiB,GAAa,EAALG,EAAa,EAALH,MAC3D3C,EAAGkD,EAAIjD,EAAG+C,GAAOiD,GAAkB,EAAVzlB,KAAK0iB,GAAkB,EAAV1iB,KAAKwiB,GAAa,EAALE,EAAa,EAALF,MAC3DhD,EAAGsD,EAAIrD,EAAGmD,GAAO6C,GAAkB,EAAVzlB,KAAK8iB,GAAkB,EAAV9iB,KAAK4iB,GAAa,EAALE,EAAa,EAALF,MAC3DpD,EAAG6D,EAAI5D,EAAG6D,GAAOmC,GAAkB,EAAVzlB,KAAKqjB,GAAkB,EAAVrjB,KAAKsjB,GAAa,EAALD,EAAa,EAALC,MAC3D9D,EAAG+D,EAAI9D,EAAG+D,GAAOiC,GAAkB,EAAVzlB,KAAKujB,GAAkB,EAAVvjB,KAAKwjB,GAAa,EAALD,EAAa,EAALC,MAC3DhE,EAAGiE,EAAIhE,EAAGiE,GAAO+B,GAAkB,EAAVzlB,KAAKyjB,GAAkB,EAAVzjB,KAAK0jB,GAAa,EAALD,EAAa,EAALC,IAC9D1jB,KAAKQ,IAAI+gB,EAAIC,EAAIQ,EAAIC,EAAIK,EAAIH,EAAIO,EAAIF,EAAIM,EAAIF,EAAIS,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAEzExE,aACIgE,GAAW7M,KAAK,GAChB8M,GAAW9M,KAAK,GAEpB8G,UACInd,KAAKiW,OAAOI,KAAK,GACjBrW,KAAKQ,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAG9D,MAAMqlB,WAAmBzC,GACrBxiB,cACImO,QAEA/O,KAAKuhB,GAAK,UACVvhB,KAAKwhB,IAAK,SACVxhB,KAAKgiB,IAAK,WACVhiB,KAAKiiB,IAAK,UACVjiB,KAAKsiB,GAAK,UACVtiB,KAAKmiB,GAAK,WACVniB,KAAK0iB,IAAK,WACV1iB,KAAKwiB,GAAK,WACVxiB,KAAK8iB,IAAK,WACV9iB,KAAK4iB,IAAK,WACV5iB,KAAKqjB,IAAK,WACVrjB,KAAKsjB,GAAK,WACVtjB,KAAKujB,GAAK,UACVvjB,KAAKwjB,GAAK,UACVxjB,KAAKyjB,GAAK,UACVzjB,KAAK0jB,IAAK,WACV1jB,KAAK2b,UAAY,IAGzB,MAAMmK,WAAe1C,GACjBxiB,cACImO,QAEA/O,KAAKuhB,IAAK,UACVvhB,KAAKwhB,IAAK,WACVxhB,KAAKgiB,GAAK,WACVhiB,KAAKiiB,GAAK,UACVjiB,KAAKsiB,IAAK,WACVtiB,KAAKmiB,GAAK,UACVniB,KAAK0iB,GAAK,UACV1iB,KAAKwiB,IAAK,UACVxiB,KAAK8iB,GAAK,WACV9iB,KAAK4iB,IAAK,QACV5iB,KAAKqjB,IAAK,WACVrjB,KAAKsjB,GAAK,WACVtjB,KAAKujB,IAAK,UACVvjB,KAAKwjB,GAAK,WACVxjB,KAAKyjB,GAAK,WACVzjB,KAAK0jB,IAAK,WACV1jB,KAAK2b,UAAY,IAGlB,MAAMoK,GAAS5J,IAAgB,IAAM,IAAIiH,KACtBjH,IAAgB,IAAM,IAAI0J,KAC9B1J,IAAgB,IAAM,IAAI2J,KC7MzC,MCEMne,GAAS,IAAIrE,EDFH,sCEmBvB,MAAM0iB,GAbN,WACI,GAAoB,oBAATC,KACP,OAAOA,KAEX,GAAsB,oBAAXC,OACP,OAAOA,OAEX,GAAsB,oBAAXC,OACP,OAAOA,OAEX,MAAM,IAAIhnB,MAAM,kCAGFinB,GAClB,IAAIC,GAASL,GAAUK,QAAUL,GAAUM,SACpC,SAASC,GAAWC,GACvB,OAAQA,GACJ,IAAK,SAAU,OAAOtF,GAAOxF,SAC7B,IAAK,SAAU,OAAOqK,GAAOrK,SAEjC,OAAO/T,GAAO3D,mBAAmB,iCAAkC,YAAawiB,GCvBpF,IAAIC,IAAS,EACb,MAAMC,GAAe,SAAUC,EAAWnnB,EAAKuV,GAC3C,MAAO,KDuBJ,SAAoB6R,EAAOpnB,GAC9B,MAAMgnB,EAAQ,CAAAtF,OAAEA,GAAM6E,OAAEA,IAASa,GACjC,OAAY,MAARJ,EACO7e,GAAO3D,mBAAmB,yBAA0B,YAAa4iB,GAErEvJ,GAAK3B,OAAO8K,EAAMhnB,GC5BXqnB,CAAWF,EAAWnnB,GAAK8c,OAAOvH,GAAMwH,OAAO,QAEjE,IAAIuK,GAAgBJ,GACb,SAASK,GAAYJ,EAAWjK,EAAMsK,GACzC,MAAMxnB,EAAMmI,GAAO/B,SAAS8W,EAAM,OAC5B3H,EAAOpN,GAAO/B,SAASohB,EAAO,QACpC,OAAOzR,GAAQuR,GAAcH,EAAWnnB,EAAKuV,IAEjDgS,GAAYE,EAAIP,GAChBK,GAAYG,KAAO,WAAcT,IAAS,GAC1CM,GAAYI,SAAW,SAAUC,GAC7B,GAAIX,GACA,MAAM,IAAItnB,MAAM,yBAEpB2nB,GAAgBM,GAEpBnpB,OAAOsK,OAAOwe,IClBd,MAAOM,GAASC,GAAWC,IAAc,CAAC,GAAI,GAAI,IAC5CC,GAAMzhB,OAAO,GACb0hB,GAAM1hB,OAAO,GACb2hB,GAAM3hB,OAAO,GACb4hB,GAAM5hB,OAAO,GACb6hB,GAAQ7hB,OAAO,KACf8hB,GAAS9hB,OAAO,KACtB,IAAK,IAAIwN,EAAQ,EAAGuU,EAAIL,GAAKM,EAAI,EAAGC,EAAI,EAAGzU,EAAQ,GAAIA,IAAS,EAE3DwU,EAAGC,GAAK,CAACA,GAAI,EAAID,EAAI,EAAIC,GAAK,GAC/BX,GAAQzkB,KAAK,GAAK,EAAIolB,EAAID,IAE1BT,GAAU1kB,MAAQ2Q,EAAQ,IAAMA,EAAQ,GAAM,EAAK,IAEnD,IAAIxU,EAAIyoB,GACR,IAAK,IAAIS,EAAI,EAAGA,EAAI,EAAGA,IACnBH,GAAMA,GAAKL,IAASK,GAAKH,IAAOE,IAAWD,GACvCE,EAAIJ,KACJ3oB,GAAK0oB,KAASA,IAAO1hB,OAAOkiB,IAAMR,IAE1CF,GAAW3kB,KAAK7D,GAEpB,MAAOmpB,GAAaC,IAAelF,GAAUsE,IAAY,GAEnDa,GAAQ,CAAC5I,EAAGC,EAAGiC,IAAMA,EAAI,GNMT,EAAClC,EAAGC,EAAGiC,IAAOjC,GAAMiC,EAAI,GAAQlC,IAAO,GAAKkC,EMN9B2G,CAAW7I,EAAGC,EAAGiC,GNG/B,EAAClC,EAAGC,EAAGiC,IAAOlC,GAAKkC,EAAMjC,IAAO,GAAKiC,EMHD4G,CAAW9I,EAAGC,EAAGiC,GACrE6G,GAAQ,CAAC/I,EAAGC,EAAGiC,IAAMA,EAAI,GNMT,EAAClC,EAAGC,EAAGiC,IAAOlC,GAAMkC,EAAI,GAAQjC,IAAO,GAAKiC,EMN9B8G,CAAWhJ,EAAGC,EAAGiC,GNG/B,EAAClC,EAAGC,EAAGiC,IAAOjC,GAAKiC,EAAMlC,IAAO,GAAKkC,EMHD+G,CAAWjJ,EAAGC,EAAGiC,GA+CpE,MAAMgH,WAAe7M,GAExBjb,YAAYgb,EAAU5Q,EAAQ2Q,EAAWgN,GAAY,EAAOC,EAAS,IAcjE,GAbA7Z,QACA/O,KAAK4b,SAAWA,EAChB5b,KAAKgL,OAASA,EACdhL,KAAK2b,UAAYA,EACjB3b,KAAK2oB,UAAYA,EACjB3oB,KAAK4oB,OAASA,EACd5oB,KAAKse,IAAM,EACXte,KAAK6oB,OAAS,EACd7oB,KAAK2c,UAAW,EAChB3c,KAAK4c,WAAY,EAEjBvB,GAAaM,GAET,GAAK3b,KAAK4b,UAAY5b,KAAK4b,UAAY,IACvC,MAAM,IAAIzc,MAAM,4CACpBa,KAAKE,MAAQ,IAAIgH,WAAW,KAC5BlH,KAAK8oB,QAAUxP,GAAItZ,KAAKE,OAE5B6oB,UAlEG,SAAiBrH,EAAGkH,EAAS,IAChC,MAAMxI,EAAI,IAAI5G,YAAY,IAE1B,IAAK,IAAIjG,EAAQ,GAAKqV,EAAQrV,EAAQ,GAAIA,IAAS,CAE/C,IAAK,IAAIwU,EAAI,EAAGA,EAAI,GAAIA,IACpB3H,EAAE2H,GAAKrG,EAAEqG,GAAKrG,EAAEqG,EAAI,IAAMrG,EAAEqG,EAAI,IAAMrG,EAAEqG,EAAI,IAAMrG,EAAEqG,EAAI,IAC5D,IAAK,IAAIA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC5B,MAAMiB,GAAQjB,EAAI,GAAK,GACjBkB,GAAQlB,EAAI,GAAK,GACjBmB,EAAK9I,EAAE6I,GACPE,EAAK/I,EAAE6I,EAAO,GACdG,EAAKhB,GAAMc,EAAIC,EAAI,GAAK/I,EAAE4I,GAC1BK,EAAKd,GAAMW,EAAIC,EAAI,GAAK/I,EAAE4I,EAAO,GACvC,IAAK,IAAIhB,EAAI,EAAGA,EAAI,GAAIA,GAAK,GACzBtG,EAAEqG,EAAIC,IAAMoB,EACZ1H,EAAEqG,EAAIC,EAAI,IAAMqB,EAIxB,IAAIC,EAAO5H,EAAE,GACT6H,EAAO7H,EAAE,GACb,IAAK,IAAI3iB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MAAMgb,EAAQuN,GAAUvoB,GAClBqqB,EAAKhB,GAAMkB,EAAMC,EAAMxP,GACvBsP,EAAKd,GAAMe,EAAMC,EAAMxP,GACvByP,EAAKnC,GAAQtoB,GACnBuqB,EAAO5H,EAAE8H,GACTD,EAAO7H,EAAE8H,EAAK,GACd9H,EAAE8H,GAAMJ,EACR1H,EAAE8H,EAAK,GAAKH,EAGhB,IAAK,IAAIrB,EAAI,EAAGA,EAAI,GAAIA,GAAK,GAAI,CAC7B,IAAK,IAAID,EAAI,EAAGA,EAAI,GAAIA,IACpB3H,EAAE2H,GAAKrG,EAAEsG,EAAID,GACjB,IAAK,IAAIA,EAAI,EAAGA,EAAI,GAAIA,IACpBrG,EAAEsG,EAAID,KAAO3H,GAAG2H,EAAI,GAAK,IAAM3H,GAAG2H,EAAI,GAAK,IAGnDrG,EAAE,IAAMwG,GAAY3U,GACpBmO,EAAE,IAAMyG,GAAY5U,GAExB6M,EAAE/J,KAAK,GAwBHoT,CAAQzpB,KAAK8oB,QAAS9oB,KAAK4oB,QAC3B5oB,KAAK6oB,OAAS,EACd7oB,KAAKse,IAAM,EAEfhC,OAAOvH,GACH,GAAI/U,KAAK4c,UACL,MAAM,IAAIzd,MAAM,yBACpB,GAAIa,KAAK2c,SACL,MAAM,IAAIxd,MAAM,+BACpB,MAAMyc,SAAEA,EAAQ1b,MAAEA,GAAUF,KAEtB+e,GADNhK,EAAOiG,GAAQjG,IACE7V,OACjB,IAAK,IAAIof,EAAM,EAAGA,EAAMS,GAAM,CAC1B,MAAMC,EAAOjY,KAAKrB,IAAIkW,EAAW5b,KAAKse,IAAKS,EAAMT,GACjD,IAAK,IAAIrf,EAAI,EAAGA,EAAI+f,EAAM/f,IACtBiB,EAAMF,KAAKse,QAAUvJ,EAAKuJ,KAC1Bte,KAAKse,MAAQ1C,GACb5b,KAAK+oB,SAEb,OAAO/oB,KAEX0pB,SACI,GAAI1pB,KAAK2c,SACL,OACJ3c,KAAK2c,UAAW,EAChB,MAAMzc,MAAEA,EAAK8K,OAAEA,EAAMsT,IAAEA,EAAG1C,SAAEA,GAAa5b,KAEzCE,EAAMoe,IAAQtT,EACU,IAAV,IAATA,IAAwBsT,IAAQ1C,EAAW,GAC5C5b,KAAK+oB,SACT7oB,EAAM0b,EAAW,IAAM,IACvB5b,KAAK+oB,SAETY,UAAUzM,GACN,GAAIld,KAAK4c,UACL,MAAM,IAAIzd,MAAM,yBACpB,KAAM+d,aAAehW,YACjB,MAAM,IAAI/H,MAAM,iCACpBa,KAAK0pB,SACL,IAAK,IAAIpL,EAAM,EAAGS,EAAM7B,EAAIhe,OAAQof,EAAMS,GAAM,CACxC/e,KAAK6oB,QAAU7oB,KAAK4b,UACpB5b,KAAK+oB,SACT,MAAM/J,EAAOjY,KAAKrB,IAAI1F,KAAK4b,SAAW5b,KAAK6oB,OAAQ9J,EAAMT,GACzDpB,EAAI1c,IAAIR,KAAKE,MAAMse,SAASxe,KAAK6oB,OAAQ7oB,KAAK6oB,OAAS7J,GAAOV,GAC9Dte,KAAK6oB,QAAU7J,EACfV,GAAOU,EAEX,OAAO9B,EAEX0M,QAAQ1M,GAEJ,IAAKld,KAAK2oB,UACN,MAAM,IAAIxpB,MAAM,yCACpB,OAAOa,KAAK2pB,UAAUzM,GAE1B2M,IAAIrU,GAEA,OADA6F,GAAa7F,GACNxV,KAAK4pB,QAAQ,IAAI1iB,WAAWsO,IAEvCyH,WAAWC,GACP,GAAIA,EAAIhe,OAASc,KAAK2b,UAClB,MAAM,IAAIxc,MAAM,iCACpB,GAAIa,KAAK2c,SACL,MAAM,IAAIxd,MAAM,+BAIpB,OAHAa,KAAK0pB,SACL1pB,KAAK2pB,UAAUzM,GACfld,KAAKmd,UACED,EAEXX,SACI,OAAOvc,KAAKid,WAAW,IAAI/V,WAAWlH,KAAK2b,YAE/CwB,UACInd,KAAK4c,WAAY,EACjB5c,KAAKE,MAAMmW,KAAK,GAEpByF,WAAWhQ,GACP,MAAM8P,SAAEA,EAAQ5Q,OAAEA,EAAM2Q,UAAEA,EAASiN,OAAEA,EAAMD,UAAEA,GAAc3oB,KAY3D,OAXA8L,IAAOA,EAAK,IAAI4c,GAAO9M,EAAU5Q,EAAQ2Q,EAAWgN,EAAWC,IAC/D9c,EAAGgd,QAAQtoB,IAAIR,KAAK8oB,SACpBhd,EAAGwS,IAAMte,KAAKse,IACdxS,EAAG+c,OAAS7oB,KAAK6oB,OACjB/c,EAAG6Q,SAAW3c,KAAK2c,SACnB7Q,EAAG8c,OAASA,EAEZ9c,EAAGd,OAASA,EACZc,EAAG6P,UAAYA,EACf7P,EAAG6c,UAAYA,EACf7c,EAAG8Q,UAAY5c,KAAK4c,UACb9Q,GAGf,MAAMge,GAAM,CAAC9e,EAAQ4Q,EAAUD,IAAcQ,IAAgB,IAAM,IAAIuM,GAAO9M,EAAU5Q,EAAQ2Q,KACxEmO,GAAI,EAAM,IAAK,IAKfA,GAAI,EAAM,IAAK,IACfA,GAAI,EAAM,IAAK,IACfA,GAAI,EAAM,GAAI,IACZA,GAAI,EAAM,IAAK,IAKlC,MAAMC,GAAaD,GAAI,EAAM,IAAK,IACfA,GAAI,EAAM,IAAK,IACfA,GAAI,EAAM,GAAI,IACxC,MAAME,GAAW,CAAChf,EAAQ4Q,EAAUD,IXvD7B,SAAiCsO,GACpC,MAAM5N,EAAQ,CAAC6N,EAAKzM,IAASwM,EAASxM,GAAMnB,OAAOtB,GAAQkP,IAAM3N,SAC3DC,EAAMyN,EAAS,IAIrB,OAHA5N,EAAMV,UAAYa,EAAIb,UACtBU,EAAMT,SAAWY,EAAIZ,SACrBS,EAAMX,OAAU+B,GAASwM,EAASxM,GAC3BpB,EWiDuC8N,EAAwB,CAAC1M,EAAO,KAAO,IAAIiL,GAAO9M,EAAU5Q,OAAuBtL,IAAf+d,EAAKC,MAAsBD,EAAKC,MAAQ/B,GAAW,KACjJqO,GAAS,GAAM,IAAK,IACpBA,GAAS,GAAM,IAAK,IC7M5C,IAAIvD,IAAS,EACb,MAAM2D,GAAa,SAAUrV,GACzB,OAAOgV,GAAWhV,IAEtB,IAAIsV,GAAcD,GACX,SAASE,GAAUtD,GACtB,MAAMjS,EAAOpN,GAAO/B,SAASohB,EAAO,QACpC,OAAOzR,GAAQ8U,GAAYtV,IAE/BuV,GAAUrD,EAAImD,GACdE,GAAUpD,KAAO,WAAcT,IAAS,GACxC6D,GAAUnD,SAAW,SAAUC,GAC3B,GAAIX,GACA,MAAM,IAAIpmB,UAAU,uBAExBgqB,GAAcjD,GAElBnpB,OAAOsK,OAAO+hB,IChBd,MAAMC,GAAM,IAAIrjB,WAAW,CAAC,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IACzEsjB,GAAKtjB,WAAW2E,KAAK,CAAE3M,OAAQ,KAAM,CAAC+nB,EAAGhoB,IAAMA,IAC/CwrB,GAAKD,GAAGpsB,KAAKa,IAAO,EAAIA,EAAI,GAAK,KACvC,IAAIyrB,GAAO,CAACF,IACRG,GAAO,CAACF,IACZ,IAAK,IAAIxrB,EAAI,EAAGA,EAAI,EAAGA,IACnB,IAAK,IAAIgpB,IAAK,CAACyC,GAAMC,IACjB1C,EAAErlB,KAAKqlB,EAAEhpB,GAAGb,KAAKC,GAAMksB,GAAIlsB,MACnC,MAAMusB,GAAS,CACX,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GACtD,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GACtD,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GACtD,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GACtD,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IACxDxsB,KAAKa,GAAM,IAAIiI,WAAWjI,KACtB4rB,GAAUH,GAAKtsB,KAAI,CAAC0sB,EAAK7rB,IAAM6rB,EAAI1sB,KAAK6pB,GAAM2C,GAAO3rB,GAAGgpB,OACxD8C,GAAUJ,GAAKvsB,KAAI,CAAC0sB,EAAK7rB,IAAM6rB,EAAI1sB,KAAK6pB,GAAM2C,GAAO3rB,GAAGgpB,OACxD+C,GAAK,IAAIxR,YAAY,CAAC,EAAY,WAAY,WAAY,WAAY,aACtEyR,GAAK,IAAIzR,YAAY,CAAC,WAAY,WAAY,WAAY,WAAY,IAEtE0R,GAAO,CAACpR,EAAMC,IAAWD,GAAQC,EAAUD,IAAU,GAAKC,EAEhE,SAAS3Z,GAAE+qB,EAAOpD,EAAGC,EAAGoD,GACpB,OAAc,IAAVD,EACOpD,EAAIC,EAAIoD,EACA,IAAVD,EACGpD,EAAIC,GAAOD,EAAIqD,EACR,IAAVD,GACGpD,GAAKC,GAAKoD,EACH,IAAVD,EACGpD,EAAIqD,EAAMpD,GAAKoD,EAEhBrD,GAAKC,GAAKoD,GAGzB,MAAMC,GAAM,IAAI7R,YAAY,IACrB,MAAM8R,WAAkB1M,GAC3Bhe,cACImO,MAAM,GAAI,GAAI,GAAG,GACjB/O,KAAKurB,GAAK,WACVvrB,KAAKwrB,IAAK,UACVxrB,KAAKyrB,IAAK,WACVzrB,KAAK0rB,GAAK,UACV1rB,KAAK2rB,IAAK,WAEdjrB,MACI,MAAM6qB,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,GAAO3rB,KAC/B,MAAO,CAACurB,EAAIC,EAAIC,EAAIC,EAAIC,GAE5BnrB,IAAI+qB,EAAIC,EAAIC,EAAIC,EAAIC,GAChB3rB,KAAKurB,GAAU,EAALA,EACVvrB,KAAKwrB,GAAU,EAALA,EACVxrB,KAAKyrB,GAAU,EAALA,EACVzrB,KAAK0rB,GAAU,EAALA,EACV1rB,KAAK2rB,GAAU,EAALA,EAEdne,QAAQ2Q,EAAM9W,GACV,IAAK,IAAIpI,EAAI,EAAGA,EAAI,GAAIA,IAAKoI,GAAU,EACnCgkB,GAAIpsB,GAAKkf,EAAKwC,UAAUtZ,GAAQ,GAEpC,IAAIukB,EAAe,EAAV5rB,KAAKurB,GAAQM,EAAKD,EAAIE,EAAe,EAAV9rB,KAAKwrB,GAAQO,EAAKD,EAAIE,EAAe,EAAVhsB,KAAKyrB,GAAQQ,EAAKD,EAAIE,EAAe,EAAVlsB,KAAK0rB,GAAQS,EAAKD,EAAIE,EAAe,EAAVpsB,KAAK2rB,GAAQU,EAAKD,EAGvI,IAAK,IAAIjB,EAAQ,EAAGA,EAAQ,EAAGA,IAAS,CACpC,MAAMmB,EAAS,EAAInB,EACboB,EAAMvB,GAAGG,GAAQqB,EAAMvB,GAAGE,GAC1BsB,EAAK/B,GAAKS,GAAQuB,EAAK/B,GAAKQ,GAC5BwB,EAAK9B,GAAQM,GAAQyB,EAAK7B,GAAQI,GACxC,IAAK,IAAIlsB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MAAM4tB,EAAM3B,GAAKU,EAAKxrB,GAAE+qB,EAAOW,EAAIE,EAAIE,GAAMb,GAAIoB,EAAGxtB,IAAMstB,EAAKI,EAAG1tB,IAAMmtB,EAAM,EAC9ER,EAAKQ,EAAIA,EAAKF,EAAIA,EAAoB,EAAfhB,GAAKc,EAAI,IAASA,EAAKF,EAAIA,EAAKe,EAG3D,IAAK,IAAI5tB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MAAM6tB,EAAM5B,GAAKW,EAAKzrB,GAAEksB,EAAQP,EAAIE,EAAIE,GAAMd,GAAIqB,EAAGztB,IAAMutB,EAAKI,EAAG3tB,IAAMotB,EAAM,EAC/ER,EAAKQ,EAAIA,EAAKF,EAAIA,EAAoB,EAAfjB,GAAKe,EAAI,IAASA,EAAKF,EAAIA,EAAKe,GAI/D9sB,KAAKQ,IAAKR,KAAKwrB,GAAKQ,EAAKG,EAAM,EAAInsB,KAAKyrB,GAAKS,EAAKG,EAAM,EAAIrsB,KAAK0rB,GAAKU,EAAKP,EAAM,EAAI7rB,KAAK2rB,GAAKC,EAAKG,EAAM,EAAI/rB,KAAKurB,GAAKO,EAAKG,EAAM,GAEvI/M,aACImM,GAAIhV,KAAK,GAEb8G,UACInd,KAAK4c,WAAY,EACjB5c,KAAKiW,OAAOI,KAAK,GACjBrW,KAAKQ,IAAI,EAAG,EAAG,EAAG,EAAG,IAOtB,MAAMusB,GAAY5Q,IAAgB,IAAM,IAAImP,KC/FnD,IAAI7E,IAAS,EACb,MAAMuG,GAAa,SAAUjY,GACzB,OAAOkY,GAAgBlY,IAE3B,IAAImY,GAAcF,GACX,SAASD,GAAU/F,GACtB,MAAMjS,EAAOpN,GAAO/B,SAASohB,EAAO,QACpC,OAAOzR,GAAQ2X,GAAYnY,IAE/BgY,GAAU9F,EAAI+F,GACdD,GAAU7F,KAAO,WAAcT,IAAS,GACxCsG,GAAU5F,SAAW,SAAUC,GAC3B,GAAIX,GACA,MAAM,IAAIpmB,UAAU,uBAExB6sB,GAAc9F,GAElBnpB,OAAOsK,OAAOwkB,ICjBd,IAAItG,IAAS,EACb,MAAM0G,GAAU,SAAU5P,EAAUC,EAAM4P,EAAYC,EAAQ7G,GAC1D,ON8BG,SAAoBjJ,EAAUC,EAAM4P,EAAYC,EAAQzG,GAC3D,MAAMJ,EAAQ,CAAAtF,OAAEA,GAAM6E,OAAEA,IAASa,GACjC,OAAY,MAARJ,EACO7e,GAAO3D,mBAAmB,2BAA4B,YAAa4iB,GAEvEtJ,GAAOkJ,EAAMjJ,EAAUC,EAAM,CAAEvQ,EAAGmgB,EAAY1P,MAAO2P,IMnCrDC,CAAW/P,EAAUC,EAAM4P,EAAYC,EAAQ7G,IAE1D,IAAI+G,GAAWJ,GACR,SAAS7P,GAAOQ,EAAWC,EAAOqP,EAAYC,EAAQ7G,GACzD,MAAMjJ,EAAW5V,GAAO/B,SAASkY,EAAW,YACtCN,EAAO7V,GAAO/B,SAASmY,EAAO,QACpC,OAAOxI,GAAQgY,GAAShQ,EAAUC,EAAM4P,EAAYC,EAAQ7G,IAEhElJ,GAAO2J,EAAIkG,GACX7P,GAAO4J,KAAO,WAAcT,IAAS,GACrCnJ,GAAO6J,SAAW,SAAUC,GACxB,GAAIX,GACA,MAAM,IAAItnB,MAAM,oBAEpBouB,GAAWnG,GAEfnpB,OAAOsK,OAAO+U,ICpBd,IAAImJ,IAAS,EACb,MAAM+G,GAAe,SAAUtuB,GAC3B,OAAO,IAAIgI,WPuCR,SAAqBhI,GACxB,GAAc,MAAVmnB,GACA,OAAO1e,GAAO5D,WAAW,kDAAmD,wBAAyB,CACjGY,UAAW,iBAGfzF,GAAU,GAAKA,EAAS,MAASA,EAAS,GAAMA,GAAUA,IAC1DyI,GAAO3D,mBAAmB,iBAAkB,SAAU9E,GAE1D,MAAMkI,EAAS,IAAIF,WAAWhI,GAE9B,OADAmnB,GAAOoH,gBAAgBrmB,GAChBA,EOlDesmB,CAAcxuB,KAExC,IAAIyuB,GAAgBH,GACb,SAASI,GAAY1uB,GACxB,OAAOyuB,GAAczuB,GAEzB0uB,GAAY3G,EAAIuG,GAChBI,GAAY1G,KAAO,WAAcT,IAAS,GAC1CmH,GAAYzG,SAAW,SAAUC,GAC7B,GAAIX,GACA,MAAM,IAAItnB,MAAM,oBAEpBwuB,GAAgBvG,GAEpBnpB,OAAOsK,OAAOqlB,ICZd,MAAM1C,GAAO,CAACtY,EAAGC,IAAOD,GAAKC,EAAMD,IAAO,GAAKC,EAI/C,SAASgb,GAAYC,EAAMC,EAAI5e,EAAO6e,EAAI9Q,EAAK+Q,GAG3C,IAAIC,EAAMJ,EAAKC,KAAQ5e,EAAM6e,KAAOG,EAAML,EAAKC,KAAQ5e,EAAM6e,KACzDI,EAAMN,EAAKC,KAAQ5e,EAAM6e,KAAOK,EAAMP,EAAKC,KAAQ5e,EAAM6e,KACzDM,EAAMR,EAAKC,KAAQ5e,EAAM6e,KAAOO,EAAMT,EAAKC,KAAQ5e,EAAM6e,KACzDQ,EAAMV,EAAKC,KAAQ5e,EAAM6e,KAAOS,EAAMX,EAAKC,KAAQ5e,EAAM6e,KACzDU,EAAMZ,EAAKC,KAAQ5e,EAAM6e,KAAOW,EAAMb,EAAKC,KAAQ5e,EAAM6e,KACzDY,EAAMd,EAAKC,KAAQ5e,EAAM6e,KAAOa,EAAMf,EAAKC,KAAQ5e,EAAM6e,KACzDc,EAAMhB,EAAKC,KAAQ5e,EAAM6e,KAAOe,EAAMjB,EAAKC,KAAQ5e,EAAM6e,KACzDgB,EAAMlB,EAAKC,KAAQ5e,EAAM6e,KAAOiB,EAAMnB,EAAKC,KAAQ5e,EAAM6e,KAEzDkB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAE/K,IAAK,IAAIhwB,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACxBqwB,GAAOpE,GAAKgE,EAAMY,EAAM,EAAG,GAC3BJ,GAAOxE,GAAKoE,EAAMJ,EAAM,EAAG,GAC3BY,GAAO5E,GAAKwE,EAAMJ,EAAM,EAAG,IAC3BJ,GAAOhE,GAAK4E,EAAMJ,EAAM,EAAG,IAC3BC,GAAOzE,GAAKqE,EAAMJ,EAAM,EAAG,GAC3BY,GAAO7E,GAAKyE,EAAMJ,EAAM,EAAG,GAC3BJ,GAAOjE,GAAK6E,EAAMJ,EAAM,EAAG,IAC3BJ,GAAOrE,GAAKiE,EAAMY,EAAM,EAAG,IAC3BC,GAAO9E,GAAK0E,EAAMJ,EAAM,EAAG,GAC3BJ,GAAOlE,GAAK8E,EAAMJ,EAAM,EAAG,GAC3BJ,GAAOtE,GAAKkE,EAAMY,EAAM,EAAG,IAC3BJ,GAAO1E,GAAKsE,EAAMJ,EAAM,EAAG,IAC3BC,GAAOnE,GAAK+E,EAAMJ,EAAM,EAAG,GAC3BJ,GAAOvE,GAAKmE,EAAMY,EAAM,EAAG,GAC3BJ,GAAO3E,GAAKuE,EAAMJ,EAAM,EAAG,IAC3BY,GAAO/E,GAAK2E,EAAMJ,EAAM,EAAG,IAC3BN,GAAOjE,GAAKgE,EAAMG,EAAM,EAAG,GAC3BD,GAAOlE,GAAKiE,EAAMD,EAAM,EAAG,GAC3BG,GAAOnE,GAAKkE,EAAMD,EAAM,EAAG,IAC3BD,GAAOhE,GAAKmE,EAAMD,EAAM,EAAG,IAC3BI,GAAOtE,GAAKqE,EAAMD,EAAM,EAAG,GAC3BG,GAAOvE,GAAKsE,EAAMD,EAAM,EAAG,GAC3BD,GAAOpE,GAAKuE,EAAMD,EAAM,EAAG,IAC3BD,GAAOrE,GAAKoE,EAAMG,EAAM,EAAG,IAC3BI,GAAO3E,GAAK0E,EAAMD,EAAM,EAAG,GAC3BD,GAAOxE,GAAK2E,EAAMD,EAAM,EAAG,GAC3BD,GAAOzE,GAAKwE,EAAMG,EAAM,EAAG,IAC3BD,GAAO1E,GAAKyE,EAAMD,EAAM,EAAG,IAC3BI,GAAO5E,GAAK+E,EAAMD,EAAM,EAAG,GAC3BD,GAAO7E,GAAK4E,EAAMG,EAAM,EAAG,GAC3BD,GAAO9E,GAAK6E,EAAMD,EAAM,EAAG,IAC3BG,GAAO/E,GAAK8E,EAAMD,EAAM,EAAG,IAG/B7S,EAAI+Q,KAASC,EAAMgB,EAAO,EAC1BhS,EAAI+Q,KAASE,EAAMgB,EAAO,EAC1BjS,EAAI+Q,KAASG,EAAMgB,EAAO,EAC1BlS,EAAI+Q,KAASI,EAAMgB,EAAO,EAC1BnS,EAAI+Q,KAASK,EAAMgB,EAAO,EAC1BpS,EAAI+Q,KAASM,EAAMgB,EAAO,EAC1BrS,EAAI+Q,KAASO,EAAMgB,EAAO,EAC1BtS,EAAI+Q,KAASQ,EAAMgB,EAAO,EAC1BvS,EAAI+Q,KAASS,EAAMgB,EAAO,EAC1BxS,EAAI+Q,KAASU,EAAMgB,EAAO,EAC1BzS,EAAI+Q,KAASW,EAAMgB,EAAO,EAC1B1S,EAAI+Q,KAASY,EAAMgB,EAAO,EAC1B3S,EAAI+Q,KAASa,EAAMgB,EAAO,EAC1B5S,EAAI+Q,KAASc,EAAMgB,EAAO,EAC1B7S,EAAI+Q,KAASe,EAAMgB,EAAO,EAC1B9S,EAAI+Q,KAASgB,EAAMgB,EAAO,EAE9B,SAASC,GAAS/gB,EAAO6e,EAAI9Q,EAAK+Q,EAAIkC,GAElC,IAAIC,EAAOnC,EAAK,EACZoC,EAAOpC,EAAK,GAAKkC,EACrB,IAAK,IAAIlxB,EAAI,EAAGA,EAAI,GAAIA,IACpBie,EAAImT,EAAOpxB,GAAKkQ,EAAM6e,EAAmB,IAAb,EAAImC,EAAI,GAAUlxB,GAClD,IAAK,IAAIA,EAAI,EAAGA,EAAIkxB,EAAGlxB,IAAKmxB,GAAQ,GAAIpC,GAAM,GAE1CH,GAAY3Q,EAAKmT,EAAMlhB,EAAO6e,EAAI9Q,EAAKkT,GACnCnxB,EAAI,IACJoxB,GAAQ,IACZxC,GAAY3Q,EAAKkT,EAAMjhB,EAAQ6e,GAAM,GAAK9Q,EAAKmT,GAIvD,SAASC,GAAW/S,EAAUC,EAAMvB,GAEhC,MAAMwB,EAAO1B,GAAU,CACnB2B,MAAO,GACPM,UAAW,GACXuS,OAAQ,YACTtU,IACGuU,EAAEA,EAACL,EAAEA,EAACjhB,EAAEA,EAACwO,MAAEA,EAAKM,UAAEA,EAASuS,OAAEA,EAAME,WAAEA,GAAehT,EAO1D,GANApC,GAAamV,GACbnV,GAAa8U,GACb9U,GAAanM,GACbmM,GAAaqC,GACbrC,GAAa2C,GACb3C,GAAakV,QACM7wB,IAAf+wB,GAAkD,mBAAfA,EACnC,MAAM,IAAItxB,MAAM,iCACpB,MAAMuxB,EAAY,IAAMP,EAClBQ,EAAcD,EAAY,EAChC,GAAIF,GAAK,GAAuB,IAAjBA,EAAKA,EAAI,IAAaA,GAAK,IAAME,EAAY,IAAMF,EAAI,GAAK,GAGvE,MAAM,IAAIrxB,MAAM,+FAEpB,GAAI+P,EAAI,GAAKA,EAAI,aAAuBwhB,EACpC,MAAM,IAAIvxB,MAAM,4FAEpB,GAAIue,EAAQ,GAAKA,EAAQ,aACrB,MAAM,IAAIve,MAAM,kFAEpB,MAAMyxB,EAAUF,GAAaF,EAAIthB,GACjC,GAAI0hB,EAAUL,EACV,MAAM,IAAIpxB,MAAM,iCAAiCyxB,2BAAiCL,cAItF,MAAMnQ,EAAI9C,GAAO4D,GAAQ3D,EAAUC,EAAM,CAAEvQ,EAAG,EAAGyQ,MAAOgT,EAAYxhB,IAC9D2hB,EAAMvX,GAAI8G,GAEV0Q,EAAIxX,GAAI,IAAIpS,WAAWwpB,EAAYF,IACnChU,EAAMlD,GAAI,IAAIpS,WAAWwpB,IAC/B,IAAIK,EAAa,OACjB,GAAIN,EAAY,CACZ,MAAMO,EAAgB,EAAIR,EAAIthB,EAGxB+hB,EAAclqB,KAAKpB,IAAIoB,KAAKC,MAAMgqB,EAAgB,KAAQ,GAChE,IAAIE,EAAc,EAClBH,EAAa,KACTG,KACIT,GAAiBS,EAAcD,GAAgBC,IAAgBF,GAC/DP,EAAWS,EAAcF,IAGrC,MAAO,CAAER,EAAAA,EAAGL,EAAAA,EAAGjhB,EAAAA,EAAGwO,MAAAA,EAAOiT,YAAAA,EAAaG,EAAAA,EAAGD,IAAAA,EAAKzQ,EAAAA,EAAG5D,IAAAA,EAAKuU,WAAAA,EAAY/S,UAAAA,GAEtE,SAASmT,GAAa5T,EAAUG,EAAO0C,EAAG0Q,EAAGtU,GACzC,MAAMoD,EAAMtC,GAAO4D,GAAQ3D,EAAU6C,EAAG,CAAEnT,EAAG,EAAGyQ,MAAAA,IAIhD,OAHA0C,EAAE/J,KAAK,GACPya,EAAEza,KAAK,GACPmG,EAAInG,KAAK,GACFuJ,ECnJX,IAAIwR,IAAa,EAAOC,IAAc,EACtC,MAAMC,GAAezzB,eAAgB0zB,EAAQ/T,EAAMgT,EAAGL,EAAGjhB,EAAGwO,EAAO+S,GAC/D,aD2LG5yB,eAA2B0f,EAAUC,EAAMC,GAC9C,MAAM+S,EAAEA,EAACL,EAAEA,EAACjhB,EAAEA,EAACwO,MAAEA,EAAKiT,YAAEA,EAAWG,EAAEA,EAACD,IAAEA,EAAGzQ,EAAEA,EAAC5D,IAAEA,EAAGuU,WAAEA,EAAU/S,UAAEA,GAAcsS,GAAW/S,EAAUC,EAAMC,GAC1G,IAAK,IAAIsQ,EAAK,EAAGA,EAAK7e,EAAG6e,IAAM,CAC3B,MAAMtD,EAAKkG,EAAc5C,EACzB,IAAK,IAAI9uB,EAAI,EAAGA,EAAI0xB,EAAa1xB,IAC7B6xB,EAAE7xB,GAAK4xB,EAAIpG,EAAKxrB,GACpB,IAAIqf,EAAM,QACJ9D,GAAUgW,EAAI,EAAGxS,GAAY/e,IAC/BixB,GAASY,EAAGxS,EAAKwS,EAAIxS,GAAOqS,EAAcR,GAC1CY,OAEJb,GAASY,GAAIN,EAAI,GAAKG,EAAaE,EAAKpG,EAAI0F,GAC5CY,UACMvW,GAAUgW,EAAGxS,GAAY/e,IAE3B,MAAMgpB,EAAI4I,EAAIpG,EAAKkG,EAAc,IAAMH,EACvC,IAAK,IAAInyB,EAAI,EAAGA,EAAIsyB,EAAatyB,IAC7Bme,EAAIne,GAAKwyB,EAAIpG,EAAKpsB,GAAKyyB,EAAE7I,EAAI0I,EAActyB,GAC/C6xB,GAAS1T,EAAK,EAAGqU,EAAKpG,EAAI0F,GAC1BY,OAGR,OAAOI,GAAa5T,EAAUG,EAAO0C,EAAG0Q,EAAGtU,GCjN9BgV,CAAYD,EAAQ/T,EAAM,CAAEgT,EAAAA,EAAGL,EAAAA,EAAGjhB,EAAAA,EAAGwO,MAAAA,EAAO+S,WAAAA,KAEvDgB,GAAc,SAAUF,EAAQ/T,EAAMgT,EAAGL,EAAGjhB,EAAGwO,GACjD,OD8JG,SAAgBH,EAAUC,EAAMC,GACnC,MAAM+S,EAAEA,EAACL,EAAEA,EAACjhB,EAAEA,EAACwO,MAAEA,EAAKiT,YAAEA,EAAWG,EAAEA,EAACD,IAAEA,EAAGzQ,EAAEA,EAAC5D,IAAEA,EAAGuU,WAAEA,GAAeT,GAAW/S,EAAUC,EAAMC,GAC/F,IAAK,IAAIsQ,EAAK,EAAGA,EAAK7e,EAAG6e,IAAM,CAC3B,MAAMtD,EAAKkG,EAAc5C,EACzB,IAAK,IAAI9uB,EAAI,EAAGA,EAAI0xB,EAAa1xB,IAC7B6xB,EAAE7xB,GAAK4xB,EAAIpG,EAAKxrB,GACpB,IAAK,IAAIA,EAAI,EAAGqf,EAAM,EAAGrf,EAAIuxB,EAAI,EAAGvxB,IAChCixB,GAASY,EAAGxS,EAAKwS,EAAIxS,GAAOqS,EAAcR,GAC1CY,IAEJb,GAASY,GAAIN,EAAI,GAAKG,EAAaE,EAAKpG,EAAI0F,GAC5CY,IACA,IAAK,IAAI9xB,EAAI,EAAGA,EAAIuxB,EAAGvxB,IAAK,CAExB,MAAMgpB,EAAI4I,EAAIpG,EAAKkG,EAAc,IAAMH,EACvC,IAAK,IAAInyB,EAAI,EAAGA,EAAIsyB,EAAatyB,IAC7Bme,EAAIne,GAAKwyB,EAAIpG,EAAKpsB,GAAKyyB,EAAE7I,EAAI0I,EAActyB,GAC/C6xB,GAAS1T,EAAK,EAAGqU,EAAKpG,EAAI0F,GAC1BY,KAGR,OAAOI,GAAa5T,EAAUG,EAAO0C,EAAG0Q,EAAGtU,GCnLpCkV,CAAWH,EAAQ/T,EAAM,CAAEgT,EAAAA,EAAGL,EAAAA,EAAGjhB,EAAAA,EAAGwO,MAAAA,KAE/C,IAAIiU,GAAgBL,GAChBM,GAAeH,GACZ5zB,eAAeg0B,GAAOC,EAAS/T,EAAOyS,EAAGL,EAAGjhB,EAAGwO,EAAOqU,GACzD,MAAMR,EAAS5pB,GAAO/B,SAASksB,EAAS,UAClCtU,EAAO7V,GAAO/B,SAASmY,EAAO,QACpC,OAAO2C,SAAQiR,GAAcJ,EAAQ/T,EAAMgT,EAAGL,EAAGjhB,EAAGwO,EAAOqU,IAWxD,SAASC,GAAWF,EAAS/T,EAAOyS,EAAGL,EAAGjhB,EAAGwO,GAChD,MAAM6T,EAAS5pB,GAAO/B,SAASksB,EAAS,UAClCtU,EAAO7V,GAAO/B,SAASmY,EAAO,QACpC,OAAO2C,GAAEkR,GAAaL,EAAQ/T,EAAMgT,EAAGL,EAAGjhB,EAAGwO,IAZjDmU,GAAO5K,EAAIqK,GACXO,GAAO3K,KAAO,WAAcmK,IAAc,GAC1CQ,GAAO1K,SAAW,SAAUC,GACxB,GAAIiK,GACA,MAAM,IAAIlyB,MAAM,oBAEpBwyB,GAAgBvK,GAEpBnpB,OAAOsK,OAAOspB,IAMdG,GAAW/K,EAAIwK,GACfO,GAAW9K,KAAO,WAAckK,IAAa,GAC7CY,GAAW7K,SAAW,SAAUC,GAC5B,GAAIgK,GACA,MAAM,IAAIjyB,MAAM,wBAEpByyB,GAAexK,GAEnBnpB,OAAOsK,OAAOypB,ICpCd,MAAMC,GAAU,SAAUld,GACtB,OAAOwR,GAAW,UAAUjK,OAAOvH,GAAMwH,UAEvC2V,GAAU,SAAUnd,GACtB,OAAOwR,GAAW,UAAUjK,OAAOvH,GAAMwH,UAE7C,IAAI4V,GAAWF,GACXG,GAAWF,GACXG,IAAY,EAAOC,IAAY,EAC5B,SAASpR,GAAO8F,GACnB,MAAMjS,EAAOpN,GAAO/B,SAASohB,EAAO,QACpC,OAAOzR,GAAQ4c,GAASpd,IAWrB,SAASgR,GAAOiB,GACnB,MAAMjS,EAAOpN,GAAO/B,SAASohB,EAAO,QACpC,OAAOzR,GAAQ6c,GAASrd,IClBrB,SAASmS,KACZH,GAAYG,OACZoD,GAAUpD,OACV5J,GAAO4J,OACP0G,GAAY1G,OACZ6F,GAAU7F,OACV2K,GAAO3K,OACP8K,GAAW9K,OACXhG,GAAOgG,OACPnB,GAAOmB,ODFXhG,GAAO+F,EAAIgL,GACX/Q,GAAOgG,KAAO,WAAcmL,IAAY,GACxCnR,GAAOiG,SAAW,SAAUC,GACxB,GAAIiL,GACA,MAAM,IAAIlzB,MAAM,oBAEpBgzB,GAAW/K,GAEfnpB,OAAOsK,OAAO2Y,IAKd6E,GAAOkB,EAAIiL,GACXnM,GAAOmB,KAAO,WAAcoL,IAAY,GACxCvM,GAAOoB,SAAW,SAAUC,GACxB,GAAIkL,GACA,MAAM,IAAInzB,MAAM,oBAEpBizB,GAAWhL,GAEfnpB,OAAOsK,OAAO2Y,IErCP,MCEMvZ,GAAS,IAAIrE,EDFH,uCEGjB4M,GAAOnK,OAAO,GACdwsB,GAAQxsB,OAAO,IACrB,SAASysB,GAAmBC,GAKxB,MAAMC,GADND,EAAUA,EAAQ/rB,eACIa,UAAU,GAAGzI,MAAM,IACnC6zB,EAAW,IAAIzrB,WAAW,IAChC,IAAK,IAAIjI,EAAI,EAAGA,EAAI,GAAIA,IACpB0zB,EAAS1zB,GAAKyzB,EAAMzzB,GAAG2zB,WAAW,GAEtC,MAAMC,EAAS/d,GAASwV,GAAUqI,IAClC,IAAK,IAAI1zB,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACpB4zB,EAAO5zB,GAAK,IAAM,GAAM,IACzByzB,EAAMzzB,GAAKyzB,EAAMzzB,GAAG6zB,gBAEF,GAAjBD,EAAO5zB,GAAK,KAAc,IAC3ByzB,EAAMzzB,EAAI,GAAKyzB,EAAMzzB,EAAI,GAAG6zB,eAGpC,MAAO,KAAOJ,EAAM5uB,KAAK,IAI7B,MAAMivB,GAAa,GACnB,IAAK,IAAI9zB,EAAI,EAAGA,EAAI,GAAIA,IACpB8zB,GAAWrwB,OAAOzD,IAAMyD,OAAOzD,GAEnC,IAAK,IAAIA,EAAI,EAAGA,EAAI,GAAIA,IACpB8zB,GAAWrwB,OAAOC,aAAa,GAAK1D,IAAMyD,OAAO,GAAKzD,GAK1D,SAAS+zB,GAAaP,GAGlB,IAAIE,GADJF,GADAA,EAAUA,EAAQK,eACAvrB,UAAU,GAAKkrB,EAAQlrB,UAAU,EAAG,GAAK,MACpCzI,MAAM,IAAIV,KAAK6O,GAAe8lB,GAAW9lB,KAAOnJ,KAAK,IAE5E,KAAO6uB,EAASzzB,QAND,IAMuB,CAClC,IAAI+zB,EAAQN,EAASprB,UAAU,EAPpB,IAQXorB,EAAWrrB,SAAS2rB,EAAO,IAAM,GAAKN,EAASprB,UAAU0rB,EAAM/zB,QAEnE,IAAIg0B,EAAWxwB,OAAO,GAAM4E,SAASqrB,EAAU,IAAM,IACrD,KAAOO,EAASh0B,OAAS,GACrBg0B,EAAW,IAAMA,EAErB,OAAOA,EAGX,MAAMC,GAAS,WAEX,MAAM/rB,EAAS,GACf,IAAK,IAAInI,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAEzBmI,EADY,uCAAuCnI,IACrC8G,OAAO9G,GAEzB,OAAOmI,EAPI,GAiBR,SAASgsB,GAAWX,GAIvB,GAHyB,iBAAb,GACR9qB,GAAO3D,mBAAmB,kBAAmB,UAAWyuB,GAExDA,EAAQtrB,MAAM,0BAA2B,CAET,OAA5BsrB,EAAQlrB,UAAU,EAAG,KACrBkrB,EAAU,KAAOA,GAErB,MAAMrrB,EAASorB,GAAmBC,GAKlC,OAHIA,EAAQtrB,MAAM,kCAAoCC,IAAWqrB,GAC7D9qB,GAAO3D,mBAAmB,uBAAwB,UAAWyuB,GAE1DrrB,EAGX,GAAIqrB,EAAQtrB,MAAM,kCAAmC,CAE7CsrB,EAAQlrB,UAAU,EAAG,KAAOyrB,GAAaP,IACzC9qB,GAAO3D,mBAAmB,oBAAqB,UAAWyuB,GAE9D,IAAIrrB,EA9BZ,SAAoBrJ,GAChBA,EAAQA,EAAM2I,cACd,IAAIU,EAAS8I,GACb,IAAK,IAAIjR,EAAI,EAAGA,EAAIlB,EAAMmB,OAAQD,IAC9BmI,EAASA,EAASmrB,GAAQY,GAAOp1B,EAAMkB,IAE3C,OAAOmI,EAwBUisB,CAAWZ,EAAQlrB,UAAU,IAAIiD,SAAS,IACvD,KAAOpD,EAAOlI,OAAS,IACnBkI,EAAS,IAAMA,EAEnB,OAAOorB,GAAmB,KAAOprB,GAErC,OAAOO,GAAO3D,mBAAmB,kBAAmB,UAAWyuB,GAE5D,SAASa,GAAeb,GAE3B,IAAIc,EAASxtB,OAAOqtB,GAAWX,IAAUjoB,SAAS,IAAIsoB,cACtD,KAAOS,EAAOr0B,OAAS,IACnBq0B,EAAS,IAAMA,EAEnB,MAAO,KAAOP,GAAa,OAASO,GAAUA,EC3G3C,MCEM5rB,GAAS,IAAIrE,EDFH,mCEEvB,SAASkwB,GAAgBz1B,GACrB,MAAMqJ,EAAS,GACf,KAAOrJ,GACHqJ,EAAO4N,QAAgB,IAARjX,GACfA,IAAU,EAEd,OAAOqJ,EAEX,SAASqsB,GAAQ3wB,GACb,GAAI2K,MAAMN,QAAQrK,GAAS,CACvB,IAAI4wB,EAAU,GAId,GAHA5wB,EAAOwF,SAAQ,SAAUqrB,GACrBD,EAAUA,EAAQhe,OAAO+d,GAAQE,OAEjCD,EAAQx0B,QAAU,GAElB,OADAw0B,EAAQ1e,QAAQ,IAAO0e,EAAQx0B,QACxBw0B,EAEX,MAAMx0B,EAASs0B,GAAgBE,EAAQx0B,QAEvC,OADAA,EAAO8V,QAAQ,IAAO9V,EAAOA,QACtBA,EAAOwW,OAAOge,GAEzB,MAAM3e,EAAOtH,MAAMyO,UAAU3S,MAAMhJ,KAAKoH,GAAO/B,SAAS9C,EAAQ,WAChE,GAAoB,IAAhBiS,EAAK7V,QAAgB6V,EAAK,IAAM,IAChC,OAAOA,EAEN,GAAIA,EAAK7V,QAAU,GAEpB,OADA6V,EAAKC,QAAQ,IAAOD,EAAK7V,QAClB6V,EAEX,MAAM7V,EAASs0B,GAAgBze,EAAK7V,QAEpC,OADAA,EAAO8V,QAAQ,IAAO9V,EAAOA,QACtBA,EAAOwW,OAAOX,GAEzB,MAAM9E,GAAU,mBACT,SAAS2jB,GAAU9wB,GACtB,IAAIsE,EAAS,KACb,IAAK,MAAM3I,KAAKg1B,GAAQ3wB,GACpBsE,GAAU6I,GAAQxR,GAAK,GACvB2I,GAAU6I,GAAY,GAAJxR,GAEtB,OAAO2I,ECxCX,SAASysB,GAAY91B,GACjB,IAAIqJ,EAASrJ,EAAMyM,SAAS,IAC5B,KAAOpD,EAAOlI,OAAS,GACnBkI,EAAS,IAAMA,EAEnB,MAAO,KAAOA,EAElB,SAAS0sB,GAAkB/e,EAAM1N,EAAQnI,GACrC,IAAIkI,EAAS,EACb,IAAK,IAAInI,EAAI,EAAGA,EAAIC,EAAQD,IACxBmI,EAAmB,IAATA,EAAgB2N,EAAK1N,EAASpI,GAE5C,OAAOmI,EAEX,SAAS2sB,GAAgBhf,EAAM1N,EAAQ2sB,EAAa90B,GAChD,MAAMkI,EAAS,GACf,KAAO4sB,EAAc3sB,EAAS,EAAInI,GAAQ,CACtC,MAAM+0B,EAAUC,GAAQnf,EAAMif,GAC9B5sB,EAAOxE,KAAKqxB,EAAQ7sB,SACpB4sB,GAAeC,EAAQnb,UACLzR,EAAS,EAAInI,GAC3ByI,GAAO5D,WAAW,uBAAwB,iBAAkB,CACxDkS,OAAQlB,EAAM7V,OAAAA,EAAQmI,OAAAA,IAIlC,MAAO,CAAEyR,SAAW,EAAI5Z,EAASkI,OAAQA,GAG7C,SAAS8sB,GAAQnf,EAAM1N,GACC,IAAhB0N,EAAK7V,QACLyI,GAAO5D,WAAW,iBAAkB,iBAAkB,CAClDkS,OAAQlB,EAAM7V,OAAQ,EAAGmI,OAAQ,IAGzC,MAAM8sB,EAAe9sB,IACbA,EAAS0N,EAAK7V,QACdyI,GAAO5D,WAAW,+BAAgC,iBAAkB,CAChEkS,OAAQlB,EAAM7V,OAAQ6V,EAAK7V,OAAQmI,OAAAA,KAK/C,GAAI0N,EAAK1N,IAAW,IAAM,CACtB,MAAM+sB,EAAerf,EAAK1N,GAAU,IACpC8sB,EAAY9sB,EAAS,EAAI+sB,GACzB,MAAMl1B,EAAS40B,GAAkB/e,EAAM1N,EAAS,EAAG+sB,GAEnD,OADAD,EAAY9sB,EAAS,EAAI+sB,EAAel1B,GACjC60B,GAAgBhf,EAAM1N,EAAQA,EAAS,EAAI+sB,EAAcA,EAAel1B,GAE9E,GAAI6V,EAAK1N,IAAW,IAAM,CAC3B,MAAMnI,EAAS6V,EAAK1N,GAAU,IAE9B,OADA8sB,EAAY9sB,EAAS,EAAInI,GAClB60B,GAAgBhf,EAAM1N,EAAQA,EAAS,EAAGnI,GAEhD,GAAI6V,EAAK1N,IAAW,IAAM,CAC3B,MAAM+sB,EAAerf,EAAK1N,GAAU,IACpC8sB,EAAY9sB,EAAS,EAAI+sB,GACzB,MAAMl1B,EAAS40B,GAAkB/e,EAAM1N,EAAS,EAAG+sB,GACnDD,EAAY9sB,EAAS,EAAI+sB,EAAel1B,GAExC,MAAO,CAAE4Z,SAAW,EAAIsb,EAAel1B,EAASkI,OADjCmO,GAAQR,EAAKxL,MAAMlC,EAAS,EAAI+sB,EAAc/sB,EAAS,EAAI+sB,EAAel1B,KAGxF,GAAI6V,EAAK1N,IAAW,IAAM,CAC3B,MAAMnI,EAAS6V,EAAK1N,GAAU,IAC9B8sB,EAAY9sB,EAAS,EAAInI,GAEzB,MAAO,CAAE4Z,SAAW,EAAI5Z,EAASkI,OADlBmO,GAAQR,EAAKxL,MAAMlC,EAAS,EAAGA,EAAS,EAAInI,KAG/D,MAAO,CAAE4Z,SAAU,EAAG1R,OAAQysB,GAAY9e,EAAK1N,KAE5C,SAASgtB,GAAUrN,GACtB,MAAMjS,EAAOpN,GAAO/B,SAASohB,EAAO,QAC9BiN,EAAUC,GAAQnf,EAAM,GAI9B,OAHIkf,EAAQnb,WAAa/D,EAAK7V,QAC1ByI,GAAO3D,mBAAmB,oCAAqC,OAAQgjB,GAEpEiN,EAAQ7sB,OC1EZ,SAASktB,GAAiBC,GAC7B,MAAM1oB,EAAOunB,GAAWmB,EAAG1oB,MAE3B,IAAI2oB,EADU7sB,GAAO1B,UAAUsuB,EAAGE,MAAO,YACpBjqB,SAAS,IAU9B,OARIgqB,EADa,MAAbA,EACW,KAENA,EAASt1B,OAAS,EACZ,MAAQs1B,EAGR,KAAOA,EAEfpB,GAAWtd,GAAUwU,GAAUsJ,GAAU,CAAC/nB,EAAM2oB,KAAa,KAEjE,SAASE,GAAkBC,EAAO5W,EAAO6W,GAC5C,MAAM/oB,EAAOunB,GAAWuB,GAClBnX,EAAO7V,GAAO/B,SAASmY,EAAO,QAC9B8W,EAAeltB,GAAO/B,SAASgvB,EAAe,gBAOpD,OANoB,KAAhBpX,EAAKte,QACLyI,GAAO3D,mBAAmB,wBAAyB,OAAQ+Z,GAEnC,KAAxB8W,EAAa31B,QACbyI,GAAO3D,mBAAmB,gCAAiC,eAAgB4wB,GAExExB,GAAWtd,GAAUwU,GAAU5U,GAAO,CAAC,OAAQ7J,EAAM2R,EAAMqX,KAAiB,KC7BhF,SAASC,GAAc/2B,GAC1B,OAAQA,GAAuC,mBAAtBA,EAAgB,WAEtC,SAASg3B,GAAUh3B,GACtB,IAEI,OADAq1B,GAAWr1B,IACJ,EAEX,MAAOuD,IACP,OAAO,EAOJzD,eAAem3B,GAAe31B,EAAQ41B,GAEzC,GAAwB,iBAAZ,EAAsB,CAC9B,GAAI51B,EAAO8H,MAAM,qBACb,OAAOisB,GAAW/zB,GAEtB,GAAgB,MAAZ41B,EACA,OAAOttB,GAAO5D,WAAW,qCAAsC,wBAAyB,CACpFY,UAAW,gBAGnB,MAAMyC,QAAe6tB,EAASC,YAAY71B,GAC1C,OAAc,MAAV+H,GAA6B,+CAAXA,EACXO,GAAO5D,WAAW,oBAAqB,oBAAqB,CAAEhG,MAAOsB,IAEzE+zB,GAAWhsB,GAEjB,GAAI0tB,GAAcz1B,GAAS,CAC5B,MAAM+H,QAAe/H,EAAO+zB,aAI5B,OAHc,MAAVhsB,GACAO,GAAO3D,mBAAmB,+BAAgC,SAAU3E,GAEjE+zB,GAAWhsB,GAEtB,OAAOO,GAAO3D,mBAAmB,gCAAiC,SAAU3E,GC1ChF,IAWI81B,GAXAp1B,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAIxF,MAAMm1B,GAAS,GACf,SAAS9Z,GAAEvd,EAAOyS,GACd,IAAI6B,GAAS,EAMb,OALI7B,EAAQ,IACR6B,GAAS,EACT7B,IAAU,GAGP,IAAI6kB,GAAMD,GAAQ,GAAG/iB,EAAS,GAAK,SAAS7B,IAASzS,EAAO,CAAEsU,OAAAA,EAAQ7B,MAAAA,IAEjF,SAASqC,GAAE9U,EAAOmO,GAEd,OAAO,IAAImpB,GAAMD,GAAQ,QAAQ,GAAgB,KAAMr3B,EAAO,CAAEmO,KAAAA,IAEpE,MAAMopB,GAAejpB,OAAOC,IAAI,iBACzB,MAAM+oB,GACTz0B,YAAY20B,EAAO32B,EAAMb,EAAOy3B,EAAU,MAEtC,GADAL,GAAe30B,IAAIR,UAAM,GACrBu1B,IAAUH,GACV,MAAM,IAAIj2B,MAAM,uBAEpBC,EAAiBY,KAAM,CAAEs1B,aAAAA,GAAc12B,KAAAA,EAAMb,MAAAA,IAC7CgC,GAAuBC,KAAMm1B,GAAgBK,EAAS,KAEtDx1B,KAAK6M,SAETA,SACI,GAAkB,UAAd7M,KAAKpB,KACL,MAAM,IAAIO,MAAM,IAEf,GAAkB,iBAAda,KAAKpB,KACV,MAAM,IAAIO,MAAM,IAEf,MAAkB,UAAda,KAAKpB,KACH,SAASoB,KAAKjC,MAAMK,KAAKK,GAAMA,EAAEoO,WAAU/I,KAAK,QAEpD9D,KAAKpB,KAEhB2T,eACI,OAAO,EAEX1L,WACI,OAAO,EAEX7D,WACI,OAAO,EAEXyyB,WACI,QAAUz1B,KAAKpB,KAAKuI,MAAM,iBAE9BuuB,SACI,MAAsC,UAA9B11B,KAAKpB,KAAK2I,UAAU,EAAG,GAEnCouB,WACI,MAAsB,WAAd31B,KAAKpB,KAEbg3B,gBACA,GAAkB,UAAd51B,KAAKpB,KACL,MAAMyB,UAAU,eAEpB,OAAOI,GAAuBT,KAAMm1B,GAAgB,KAMpDxoB,kBACA,GAAkB,UAAd3M,KAAKpB,KACL,MAAMyB,UAAU,gBAEpB,OAA0D,IAAtDI,GAAuBT,KAAMm1B,GAAgB,MACrC,GAE8C,IAAtD10B,GAAuBT,KAAMm1B,GAAgB,KACrCn1B,KAAU,MAAEd,OAEjB,KAEXqH,YAAY3H,EAAMb,GACd,OAAO,IAAIs3B,GAAMD,GAAQx2B,EAAMb,GAEnCwI,aAAa9H,GAAK,OAAO6c,GAAE7c,EAAG,GAC9B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,EAAG,IAC/B8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,eAAe9H,GAAK,OAAO6c,GAAE7c,EAAG,KAChC8H,YAAY9H,GAAK,OAAO6c,GAAE7c,EAAG,KAC7B8H,YAAY9H,GAAK,OAAO6c,GAAE7c,GAAI,GAC9B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,aAAa9H,GAAK,OAAO6c,GAAE7c,GAAI,IAC/B8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,cAAc9H,GAAK,OAAO6c,GAAE7c,GAAI,KAChC8H,WAAW9H,GAAK,OAAO6c,GAAE7c,GAAI,KAC7B8H,aAAa9H,GAAK,OAAOoU,GAAEpU,GAC3B8H,cAAc9H,GAAK,OAAOoU,GAAEpU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOoU,GAAEpU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOoU,GAAEpU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOoU,GAAEpU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOoU,GAAEpU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOoU,GAAEpU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOoU,GAAEpU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOoU,GAAEpU,EAAG,GAC/B8H,cAAc9H,GAAK,OAAOoU,GAAEpU,EAAG,GAC/B8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAOoU,GAAEpU,EAAG,IAChC8H,eAAe9H,GAAK,OAAO,IAAI42B,GAAMD,GAAQ,UAAW32B,GACxD8H,YAAY9H,GAAK,OAAO,IAAI42B,GAAMD,GAAQ,SAAU32B,GACpD8H,cAAc9H,GAAK,OAAO,IAAI42B,GAAMD,GAAQ,SAAU32B,GACtD8H,aAAa9H,EAAGwZ,GACZ,MAAM,IAAI9Y,MAAM,uBAGpBoH,aAAa9H,EAAGsE,GACZ,MAAM,IAAI5D,MAAM,uBAGpBoH,iBAAiB9H,GACb,OAAO,IAAI42B,GAAMD,GAAQ,YAAan3B,OAAO8N,OAAO,GAAItN,IAE5D8H,eAAexI,GACX,OAAQA,GAASA,EAAMu3B,eAAiBA,GAE5C/uB,mBAAmBxI,EAAOa,GACtB,GAAIy2B,GAAMQ,QAAQ93B,GAAQ,CACtB,GAAIA,EAAMa,OAASA,EACf,MAAM,IAAIO,MAAM,0BAA0BP,UAAab,EAAMa,QAEjE,OAAOb,EAAMA,MAEjB,OAAOA,GAGfo3B,GAAiB,IAAI1zB,QCxNd,MAAMq0B,WAAqB/d,GAC9BnX,YAAYoX,GACRjJ,MAAM,UAAW,UAAWiJ,GAAW,GAE3CzF,eACI,MAAO,6CAEX4I,OAAO9C,EAAQjI,GACX,IAAIrS,EAAQs3B,GAAMU,YAAY3lB,EAAQ,UACtC,IACIrS,EAAQq1B,GAAWr1B,GAEvB,MAAOuD,GACH,OAAOtB,KAAKkY,YAAY5W,EAAMoC,QAAS0M,GAE3C,OAAOiI,EAAOG,WAAWza,GAE7Bi4B,OAAOC,GACH,OAAO7C,GAAW9iB,GAAM2lB,EAAO/c,YAAa,MCpB7C,MAAMgd,WAAuBne,GAChCnX,YAAYu1B,GACRpnB,MAAMonB,EAAMpzB,KAAMozB,EAAMv3B,KAAM,IAAKu3B,EAAMle,SACzCjY,KAAKm2B,MAAQA,EAEjB5jB,eACI,OAAOvS,KAAKm2B,MAAM5jB,eAEtB4I,OAAO9C,EAAQta,GACX,OAAOiC,KAAKm2B,MAAMhb,OAAO9C,EAAQta,GAErCi4B,OAAOC,GACH,OAAOj2B,KAAKm2B,MAAMH,OAAOC,ICR1B,SAASG,GAAK/d,EAAQge,EAAQ/2B,GACjC,IAAIg3B,EAAc,GAClB,GAAI7oB,MAAMN,QAAQ7N,GACdg3B,EAAch3B,OAEb,GAAIA,GAA8B,iBAApB,EAA8B,CAC7C,IAAIi3B,EAAS,GACbD,EAAcD,EAAOj4B,KAAK+3B,IACtB,MAAMpzB,EAAOozB,EAAMne,UAgBnB,OAfKjV,GACD4E,EAAO5D,WAAW,wDAAyD,mBAAoB,CAC3FE,SAAU,SACV/B,KAAM,CAAEi0B,MAAAA,GACRp4B,MAAOuB,IAGXi3B,EAAOxzB,IACP4E,EAAO5D,WAAW,0DAA2D,mBAAoB,CAC7FE,SAAU,SACV/B,KAAM,CAAEi0B,MAAAA,GACRp4B,MAAOuB,IAGfi3B,EAAOxzB,IAAQ,EACRzD,EAAOyD,WAIlB4E,EAAO3D,mBAAmB,sBAAuB,QAAS1E,GAE1D+2B,EAAOn3B,SAAWo3B,EAAYp3B,QAC9ByI,EAAO3D,mBAAmB,8BAA+B,QAAS1E,GAEtE,IAAIk3B,EAAe,IAAIre,GACnBse,EAAgB,IAAIte,GACpBue,EAAc,GAClBL,EAAO/tB,SAAQ,CAAC6tB,EAAOz3B,KACnB,IAAIX,EAAQu4B,EAAY53B,GACxB,GAAIy3B,EAAMle,QAAS,CAEf,IAAI0e,EAAgBF,EAAcv3B,OAElCi3B,EAAMhb,OAAOsb,EAAe14B,GAE5B,IAAI64B,EAAaJ,EAAa/d,sBAC9Bie,EAAY9zB,MAAMi0B,IACdD,EAAWC,EAAaF,WAI5BR,EAAMhb,OAAOqb,EAAcz4B,MAInC24B,EAAYpuB,SAAS8e,IAAWA,EAAKoP,EAAat3B,WAClD,IAAIA,EAASmZ,EAAOD,aAAaoe,GAEjC,OADAt3B,GAAUmZ,EAAOD,aAAaqe,GACvBv3B,EAEJ,SAAS43B,GAAOb,EAAQI,GAC3B,IAAI/2B,EAAS,GACTtB,EAAO,GAEP+4B,EAAad,EAAOld,UAAU,GAyClC,OAxCAsd,EAAO/tB,SAAS6tB,IACZ,IAAIp4B,EAAQ,KACZ,GAAIo4B,EAAMle,QAAS,CACf,IAAI5Q,EAAS4uB,EAAO9c,YAChB6d,EAAeD,EAAWhe,UAAU1R,GACxC,IACItJ,EAAQo4B,EAAMH,OAAOgB,GAEzB,MAAO11B,GAEH,GAAID,EAAQC,EAAO,kBACf,MAAMA,EAEVvD,EAAQuD,EACRvD,EAAMyO,SAAW2pB,EAAMpzB,KACvBhF,EAAMgF,KAAOozB,EAAMne,UACnBja,EAAMa,KAAOu3B,EAAMv3B,WAIvB,IACIb,EAAQo4B,EAAMH,OAAOC,GAEzB,MAAO30B,GAEH,GAAID,EAAQC,EAAO,kBACf,MAAMA,EAEVvD,EAAQuD,EACRvD,EAAMyO,SAAW2pB,EAAMpzB,KACvBhF,EAAMgF,KAAOozB,EAAMne,UACnBja,EAAMa,KAAOu3B,EAAMv3B,KAG3B,GAAac,MAAT3B,EACA,MAAM,IAAIoB,MAAM,eAEpBG,EAAOsD,KAAK7E,GACZC,EAAK4E,KAAKuzB,EAAMne,WAAa,SAE1BT,GAAO0f,UAAU33B,EAAQtB,GAE7B,MAAMk5B,WAAmBnf,GAC5BnX,YAAYu1B,EAAOj3B,EAAQ8Y,GAGvBjJ,MAAM,QAFQonB,EAAMv3B,KAAO,KAAOM,GAAU,EAAIA,EAAS,IAAM,IAE1C8Y,GADQ,IAAZ9Y,GAAiBi3B,EAAMle,SAExC7Y,EAAiBY,KAAM,CAAEm2B,MAAAA,EAAOj3B,OAAAA,IAEpCqT,eAEI,MAAM4kB,EAAen3B,KAAKm2B,MAAM5jB,eAC1BnL,EAAS,GACf,IAAK,IAAInI,EAAI,EAAGA,EAAIe,KAAKd,OAAQD,IAC7BmI,EAAOxE,KAAKu0B,GAEhB,OAAO/vB,EAEX+T,OAAO9C,EAAQjI,GACX,MAAMrS,EAAQs3B,GAAMU,YAAY3lB,EAAQ,SACnC3C,MAAMN,QAAQpP,IACfiC,KAAKkY,YAAY,uBAAwBna,GAE7C,IAAIsH,EAAQrF,KAAKd,QACF,IAAXmG,IACAA,EAAQtH,EAAMmB,OACdmZ,EAAOG,WAAWza,EAAMmB,SAE5ByI,EAAOvC,oBAAoBrH,EAAMmB,OAAQmG,EAAO,eAAiBrF,KAAKgY,UAAa,IAAMhY,KAAKgY,UAAa,KAC3G,IAAIqe,EAAS,GACb,IAAK,IAAIp3B,EAAI,EAAGA,EAAIlB,EAAMmB,OAAQD,IAC9Bo3B,EAAOzzB,KAAK5C,KAAKm2B,OAErB,OAAOC,GAAK/d,EAAQge,EAAQt4B,GAEhCi4B,OAAOC,GACH,IAAI5wB,EAAQrF,KAAKd,QACF,IAAXmG,IACAA,EAAQ4wB,EAAO9c,YAMX9T,EAAQ+R,GAAW6e,EAAOpgB,YAC1BlO,EAAO5D,WAAW,2BAA4B,iBAAkB,CAC5DkS,OAAQggB,EAAOzgB,MACfnO,OAAQhC,EAAQ+R,GAChBlY,OAAQ+2B,EAAOpgB,cAI3B,IAAIwgB,EAAS,GACb,IAAK,IAAIp3B,EAAI,EAAGA,EAAIoG,EAAOpG,IACvBo3B,EAAOzzB,KAAK,IAAIszB,GAAel2B,KAAKm2B,QAExC,OAAOF,EAAOpd,OAAO7Y,KAAK+C,KAAM+zB,GAAOb,EAAQI,KCpKhD,MAAMe,WAAqBrf,GAC9BnX,YAAYoX,GACRjJ,MAAM,OAAQ,OAAQiJ,GAAW,GAErCzF,eACI,OAAO,EAEX4I,OAAO9C,EAAQjI,GACX,MAAMrS,EAAQs3B,GAAMU,YAAY3lB,EAAQ,QACxC,OAAOiI,EAAOG,WAAWza,EAAQ,EAAI,GAEzCi4B,OAAOC,GACH,OAAOA,EAAOpd,OAAO7Y,KAAKpB,MAAOq3B,EAAO/c,cCZzC,MAAMme,WAA0Btf,GACnCnX,YAAYhC,EAAMoZ,GACdjJ,MAAMnQ,EAAMA,EAAMoZ,GAAW,GAEjCzF,eACI,MAAO,KAEX4I,OAAO9C,EAAQta,GACXA,EAAQ+W,GAAS/W,GACjB,IAAImB,EAASmZ,EAAOG,WAAWza,EAAMmB,QAErC,OADAA,GAAUmZ,EAAOC,WAAWva,GACrBmB,EAEX82B,OAAOC,GACH,OAAOA,EAAOjd,UAAUid,EAAO9c,aAAa,IAG7C,MAAMme,WAAmBD,GAC5Bz2B,YAAYoX,GACRjJ,MAAM,QAASiJ,GAEnBge,OAAOC,GACH,OAAOA,EAAOpd,OAAO7Y,KAAK+C,KAAMwS,GAAQxG,MAAMinB,OAAOC,MCpBtD,MAAMsB,WAAwBxf,GACjCnX,YAAYsL,EAAM8L,GACd,IAAIjV,EAAO,QAAUL,OAAOwJ,GAC5B6C,MAAMhM,EAAMA,EAAMiV,GAAW,GAC7B5Y,EAAiBY,KAAM,CAAEkM,KAAAA,GAAQ,CAAEA,KAAM,WAE7CqG,eACI,MAAO,qEAAuEhL,UAAU,EAAG,EAAgB,EAAZvH,KAAKkM,MAExGiP,OAAO9C,EAAQjI,GACX,IAAI2E,EAAOD,GAASugB,GAAMU,YAAY3lB,EAAQpQ,KAAKpB,OAInD,OAHImW,EAAK7V,SAAWc,KAAKkM,MACrBlM,KAAKkY,YAAY,wBAAyB9H,GAEvCiI,EAAOC,WAAWvD,GAE7BihB,OAAOC,GACH,OAAOA,EAAOpd,OAAO7Y,KAAK+C,KAAMwS,GAAQ0gB,EAAOjd,UAAUhZ,KAAKkM,SCpBtE,MAAMsrB,GAAQ,IAAItwB,WAAW,IACtB,MAAMuwB,WAAkB1f,GAC3BnX,YAAYoX,GACRjJ,MAAM,OAAQ,GAAIiJ,GAAW,GAEjCzF,eACI,OAAO,KAEX4I,OAAO9C,EAAQta,GAIX,OAHa,MAATA,GACAiC,KAAKkY,YAAY,WAAYna,GAE1Bsa,EAAOC,WAAWkf,IAE7BxB,OAAOC,GAEH,OADAA,EAAOjd,UAAU,GACVid,EAAOpd,OAAO7Y,KAAK+C,KAAM,OCZxC,MAAMmN,GAAOnK,OAAO,GACd4K,GAAO5K,OAAO,GACd2xB,GAAiB3xB,OAAO,sEACvB,MAAM4xB,WAAoB5f,GAC7BnX,YAAYsL,EAAMmG,EAAQ2F,GACtB,MAAMjV,GAASsP,EAAS,MAAQ,QAAkB,EAAPnG,EAC3C6C,MAAMhM,EAAMA,EAAMiV,GAAW,GAC7B5Y,EAAiBY,KAAM,CAAEkM,KAAAA,EAAMmG,OAAAA,GAAU,CAAEnG,KAAM,SAAUmG,OAAQ,YAEvEE,eACI,OAAO,EAEX4I,OAAO9C,EAAQjI,GACX,IAAIrS,EAAQ4J,EAAO1B,UAAUovB,GAAMU,YAAY3lB,EAAQpQ,KAAKpB,OAExDg5B,EAAe9mB,GAAK4mB,GAAgBtgB,KACxC,GAAIpX,KAAKqS,OAAQ,CACb,IAAIwlB,EAAS/mB,GAAK8mB,EAA2B,EAAZ53B,KAAKkM,KAAY,IAC9CnO,EAAQ85B,GAAU95B,IAAU85B,EAASlnB,MACrC3Q,KAAKkY,YAAY,sBAAuB9H,QAGvCrS,EAAQmS,IAAQnS,EAAQ+S,GAAK8mB,EAA0B,EAAZ53B,KAAKkM,QACrDlM,KAAKkY,YAAY,sBAAuB9H,GAM5C,OAJArS,EAAQ+S,GAAKD,GAAO9S,EAAmB,EAAZiC,KAAKkM,MAAuB,EAAZlM,KAAKkM,MAC5ClM,KAAKqS,SACLtU,EAAQ8S,GAAOD,GAAS7S,EAAmB,EAAZiC,KAAKkM,MAAW,MAE5CmM,EAAOG,WAAWza,GAE7Bi4B,OAAOC,GACH,IAAIl4B,EAAQ+S,GAAKmlB,EAAO/c,YAAyB,EAAZlZ,KAAKkM,MAI1C,OAHIlM,KAAKqS,SACLtU,EAAQ6S,GAAS7S,EAAmB,EAAZiC,KAAKkM,OAE1B+pB,EAAOpd,OAAO7Y,KAAK+C,KAAMhF,ICzCjC,MCEM4J,GAAS,IAAIrE,EDFH,uCEGvB,IAAWw0B,GASAC,GA8BX,SAASC,GAAWC,EAAQ5wB,EAAQmO,EAAO0iB,EAAQC,GAE/C,GAAIF,IAAWF,EAAAA,gBAAgBK,YAAcH,IAAWF,EAAAA,gBAAgBM,oBAAqB,CACzF,IAAIp5B,EAAI,EACR,IAAK,IAAI2Q,EAAIvI,EAAS,EAAGuI,EAAI4F,EAAMtW,QAC3BsW,EAAM5F,IAAM,GAAM,EADiBA,IAIvC3Q,IAEJ,OAAOA,EAIX,OAAIg5B,IAAWF,EAAeA,gBAACO,QACpB9iB,EAAMtW,OAASmI,EAAS,EAG5B,EA1DyBkxB,EAAAT,8BAAA,GACzBA,GAMRA,6BAA6BA,EAAAA,yBAA2B,KALrB,QAAI,GACtCA,GAA8B,IAAI,MAClCA,GAA8B,IAAI,MAClCA,GAA+B,KAAI,OACnCA,GAA+B,KAAI,OAGZS,EAAAR,qBAAA,GAChBA,GAyBRA,oBAAoBA,EAAAA,gBAAkB,KAtBA,oBAAI,+BAGzCA,GAA4B,WAAI,uBAGhCA,GAAyB,QAAI,iBAG7BA,GAAkC,iBAAI,4BAItCA,GAA8B,aAAI,qBAIlCA,GAAiC,gBAAI,mBAIrCA,GAA0B,SAAI,0BAsCtB,MAACS,GAAiBv6B,OAAOsK,OAAO,CACxCjH,MApCJ,SAAmB22B,EAAQ5wB,EAAQmO,EAAO0iB,EAAQC,GAC9C,OAAOxwB,GAAO3D,mBAAmB,+BAA+BqD,MAAW4wB,IAAU,QAASziB,IAoC9FijB,OAAQT,GACRU,QAfJ,SAAqBT,EAAQ5wB,EAAQmO,EAAO0iB,EAAQC,GAEhD,OAAIF,IAAWF,EAAeA,gBAACY,UAC3BT,EAAOt1B,KAAsB,MAAhBu1B,EAAwBA,GAAgB,GAC9C,IAGXD,EAAOt1B,KAAK,OAELo1B,GAAWC,EAAQ5wB,EAAQmO,OAStC,SAASojB,GAAkBC,EAAQC,GAChB,MAAXA,IACAA,EAAUN,GAAel3B,OAE7B,MAAMkU,EAAQ7N,GAAO/B,SAASizB,EAAQ,SAChCzxB,EAAS,GACf,IAAInI,EAAI,EAER,KAAOA,EAAIuW,EAAMtW,QAAQ,CACrB,MAAM+N,EAAIuI,EAAMvW,KAEhB,GAAIgO,GAAK,GAAM,EAAG,CACd7F,EAAOxE,KAAKqK,GACZ,SAGJ,IAAI8rB,EAAc,KACdC,EAAe,KAEnB,GAAmB,MAAV,IAAJ/rB,GACD8rB,EAAc,EACdC,EAAe,SAGd,GAAmB,MAAV,IAAJ/rB,GACN8rB,EAAc,EACdC,EAAe,SAGd,CAAA,GAAmB,MAAV,IAAJ/rB,GAIL,CAEGhO,GAAK65B,EADU,MAAV,IAAJ7rB,GACY8qB,EAAAA,gBAAgBM,oBAGhBN,EAAAA,gBAAgBK,WAHqBn5B,EAAI,EAAGuW,EAAOpO,GAKpE,SAVA2xB,EAAc,EACdC,EAAe,MAYnB,GAAI/5B,EAAI,EAAI85B,GAAevjB,EAAMtW,OAAQ,CACrCD,GAAK65B,EAAQf,EAAAA,gBAAgBO,QAASr5B,EAAI,EAAGuW,EAAOpO,GACpD,SAGJ,IAAIwY,EAAM3S,GAAM,GAAM,EAAI8rB,EAAc,GAAM,EAC9C,IAAK,IAAI9Q,EAAI,EAAGA,EAAI8Q,EAAa9Q,IAAK,CAClC,IAAIgR,EAAWzjB,EAAMvW,GAErB,GAAyB,MAAT,IAAXg6B,GAA0B,CAC3Bh6B,GAAK65B,EAAQf,kBAAgBmB,iBAAkBj6B,EAAGuW,EAAOpO,GACzDwY,EAAM,KACN,MAGJA,EAAOA,GAAO,EAAiB,GAAXqZ,EACpBh6B,IAGQ,OAAR2gB,IAIAA,EAAM,QACN3gB,GAAK65B,EAAQf,kBAAgBoB,aAAcl6B,EAAI,EAAI85B,EAAavjB,EAAOpO,EAAQwY,GAI/EA,GAAO,OAAUA,GAAO,MACxB3gB,GAAK65B,EAAQf,kBAAgBqB,gBAAiBn6B,EAAI,EAAI85B,EAAavjB,EAAOpO,EAAQwY,GAIlFA,GAAOoZ,EACP/5B,GAAK65B,EAAQf,kBAAgBY,SAAU15B,EAAI,EAAI85B,EAAavjB,EAAOpO,EAAQwY,GAG/ExY,EAAOxE,KAAKgd,IAEhB,OAAOxY,EAGJ,SAASiyB,GAAYpe,EAAK1Y,EAAOu1B,EAAAA,yBAAyBwB,SACzD/2B,GAAQu1B,EAAwBA,yBAACwB,UACjC3xB,GAAO9C,gBAAgBtC,GACvB0Y,EAAMA,EAAIzY,UAAUD,IAExB,IAAI6E,EAAS,GACb,IAAK,IAAInI,EAAI,EAAGA,EAAIgc,EAAI/b,OAAQD,IAAK,CACjC,MAAMgO,EAAIgO,EAAI2X,WAAW3zB,GACzB,GAAIgO,EAAI,IACJ7F,EAAOxE,KAAKqK,QAEX,GAAIA,EAAI,KACT7F,EAAOxE,KAAMqK,GAAK,EAAK,KACvB7F,EAAOxE,KAAU,GAAJqK,EAAY,UAExB,GAAoB,QAAX,MAAJA,GAAuB,CAC7BhO,IACA,MAAMs6B,EAAKte,EAAI2X,WAAW3zB,GAC1B,GAAIA,GAAKgc,EAAI/b,QAA4B,QAAZ,MAALq6B,GACpB,MAAM,IAAIp6B,MAAM,wBAGpB,MAAMq6B,EAAO,QAAgB,KAAJvsB,IAAe,KAAY,KAALssB,GAC/CnyB,EAAOxE,KAAM42B,GAAQ,GAAM,KAC3BpyB,EAAOxE,KAAO42B,GAAQ,GAAM,GAAQ,KACpCpyB,EAAOxE,KAAO42B,GAAQ,EAAK,GAAQ,KACnCpyB,EAAOxE,KAAa,GAAP42B,EAAe,UAG5BpyB,EAAOxE,KAAMqK,GAAK,GAAM,KACxB7F,EAAOxE,KAAOqK,GAAK,EAAK,GAAQ,KAChC7F,EAAOxE,KAAU,GAAJqK,EAAY,KAGjC,OAAO,IAAI/F,WAAWE,GAG1B,SAASqyB,GAAW17B,GAChB,MAAM2S,EAAO,OAAS3S,EAAMyM,SAAS,IACrC,MAAO,MAAQkG,EAAInJ,UAAUmJ,EAAIxR,OAAS,GAEvC,SAASw6B,GAAqBlkB,EAAOsjB,GACxC,MAAO,IAAMF,GAAkBpjB,EAAOsjB,GAAS16B,KAAKu7B,IAChD,GAAIA,EAAY,IAAK,CACjB,OAAQA,GACJ,KAAK,EAAG,MAAO,MACf,KAAK,EAAG,MAAO,MACf,KAAK,GAAI,MAAO,MAChB,KAAK,GAAI,MAAO,MAChB,KAAK,GAAI,MAAO,MAChB,KAAK,GAAI,MAAO,OAEpB,GAAIA,GAAa,IAAMA,EAAY,IAC/B,OAAOj3B,OAAOC,aAAag3B,GAGnC,OAAIA,GAAa,MACNF,GAAWE,GAGfF,GAAyC,QADhDE,GAAa,QACoB,GAAM,OAAmBF,GAAiC,OAAT,KAAZE,OACvE71B,KAAK,IAAM,IAEX,SAAS81B,GAAcC,GAC1B,OAAOA,EAAWz7B,KAAKu7B,GACfA,GAAa,MACNj3B,OAAOC,aAAag3B,IAE/BA,GAAa,MACNj3B,OAAOC,aAA4C,OAA5Bg3B,GAAa,GAAM,MAAyC,OAAT,KAAZA,OACtE71B,KAAK,IAEL,SAASg2B,GAAatkB,EAAOsjB,GAChC,OAAOc,GAAchB,GAAkBpjB,EAAOsjB,IAE3C,SAASiB,GAAiB9e,EAAK1Y,EAAOu1B,EAAAA,yBAAyBwB,SAClE,OAAOV,GAAkBS,GAAYpe,EAAK1Y,IC9OvC,SAASy3B,GAAoBlwB,GAEhC,MAAM0L,EAAQ6jB,GAAYvvB,GAE1B,GAAI0L,EAAMtW,OAAS,GACf,MAAM,IAAIC,MAAM,6CAGpB,OAAOoX,GAAaf,EAAO,IAExB,SAASykB,GAAmBpB,GAC/B,MAAM9jB,EAAOpN,GAAO/B,SAASizB,EAAQ,SAErC,GAAoB,KAAhB9jB,EAAK7V,OACL,MAAM,IAAIC,MAAM,uCAEpB,GAAiB,IAAb4V,EAAK,IACL,MAAM,IAAI5V,MAAM,+CAGpB,IAAID,EAAS,GACb,KAA4B,IAArB6V,EAAK7V,EAAS,IACjBA,IAGJ,OAAO46B,GAAa/kB,EAAKxL,MAAM,EAAGrK,IChBtC,SAASg7B,GAAYnlB,EAAMolB,GACvB,MAAM/S,EAAO+S,GAAS,SAAUp8B,GAAS,MAAO,CAACuJ,SAASvJ,EAAO,MACjE,IAAIq8B,EAAK,EACLhzB,EAAS,GAMb,OALA2N,EAAKjW,MAAM,KAAKwJ,SAASkxB,IACrB,IAAI1rB,EAAQ0rB,EAAK16B,MAAM,KACvBs7B,GAAM9yB,SAASwG,EAAM,GAAI,IACzB1G,EAAOgzB,GAAMhT,EAAKtZ,EAAM,OAErB1G,EAEX,SAASizB,GAAiBtlB,GACtB,IAAIulB,EAAK,EACT,OAAOvlB,EAAKjW,MAAM,KAAKV,KAAKK,IACxB,IAAIqP,EAAQrP,EAAEK,MAAM,KACC,IAAjBgP,EAAM5O,OACN4O,EAAM,GAAK,IAEO,KAAbA,EAAM,KACXA,EAAM,GAAK,KAEf,IAAIssB,EAAKE,EAAKhzB,SAASwG,EAAM,GAAI,IAEjC,OADAwsB,EAAKhzB,SAASwG,EAAM,GAAI,IACjB,CAAE2R,EAAG2a,EAAI5a,EAAG8a,MAG3B,SAASC,GAASx8B,EAAOy8B,GACrB,IAAIJ,EAAK,EACT,IAAK,IAAIn7B,EAAI,EAAGA,EAAIu7B,EAAOt7B,OAAQD,IAAK,CACpC,IAAIw7B,EAAQD,EAAOv7B,GAEnB,GADAm7B,GAAMK,EAAMhb,EACR1hB,GAASq8B,GAAMr8B,GAASq8B,EAAKK,EAAMjb,IAAOzhB,EAAQq8B,IAAOK,EAAM7kB,GAAK,IAAQ,EAAG,CAC/E,GAAI6kB,EAAMz0B,IAAsC,IAAjCy0B,EAAMz0B,EAAElB,QAAQ/G,EAAQq8B,GACnC,SAEJ,OAAOK,GAGf,OAAO,KAEX,MAAMC,GAAmBL,GAAiB,g8CAEpCM,GAAkB,sDAAsD77B,MAAM,KAAKV,KAAKK,GAAM6I,SAAS7I,EAAG,MAC1Gm8B,GAAmB,CACrB,CAAEpb,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,IACnB,CAAED,EAAG,GAAIkC,EAAG,GAAI1b,EAAG,CAAC,IAAKyZ,EAAG,KAC5B,CAAED,EAAG,GAAIkC,EAAG,EAAG1b,EAAG,CAAC,IAAKyZ,EAAG,GAAI7J,EAAG,GAClC,CAAE4J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI7J,EAAG,GACzB,CAAE4J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI7J,EAAG,GACzB,CAAE4J,EAAG,GAAIkC,EAAG,EAAG1b,EAAG,CAAC,EAAG,EAAG,GAAIyZ,EAAG,GAAI7J,EAAG,GACvC,CAAE4J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI7J,EAAG,GACzB,CAAE4J,EAAG,GAAIkC,EAAG,EAAG1b,EAAG,CAAC,GAAI,GAAI,IAAKyZ,EAAG,GAAI7J,EAAG,GAC1C,CAAE4J,EAAG,GAAIkC,EAAG,GAAI1b,EAAG,CAAC,IAAKyZ,EAAG,KAC5B,CAAED,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI7J,EAAG,GACzB,CAAE4J,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,IACnB,CAAED,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,IACnB,CAAED,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI7J,EAAG,GACzB,CAAE4J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI7J,EAAG,GACzB,CAAE4J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI7J,EAAG,GACzB,CAAE4J,EAAG,GAAIkC,EAAG,EAAG1b,EAAG,CAAC,IAAKyZ,EAAG,GAAI7J,EAAG,GAClC,CAAE4J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,GAAI7J,EAAG,GACzB,CAAE4J,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,IACnB,CAAED,EAAG,IAAKkC,EAAG,EAAGjC,EAAG,KAAM7J,EAAG,GAC5B,CAAE4J,EAAG,GAAIkC,EAAG,EAAGjC,EAAG,IAAK7J,EAAG,GAC1B,CAAE4J,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,KACnB,CAAED,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,KACnB,CAAED,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,OACnB,CAAED,EAAG,GAAIkC,EAAG,GAAIjC,EAAG,MACnB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,OACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQ1b,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAAKyZ,EAAG,IACxD,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQ1b,EAAG,CAAC,EAAG,EAAG,EAAG,IAAKyZ,EAAG,IAC1C,CAAED,EAAG,GAAIkC,GAAI,OAAQ1b,EAAG,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,IAAKyZ,EAAG,IACnD,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQjC,EAAG,IACxB,CAAED,EAAG,GAAIkC,GAAI,OAAQ1b,EAAG,CAAC,IAAKyZ,EAAG,IACjC,CAAED,EAAG,GAAIkC,GAAI,OAAQ1b,EAAG,CAAC,IAAKyZ,EAAG,IACjC,CAAED,EAAG,GAAIkC,GAAI,OAAQ1b,EAAG,CAAC,IAAKyZ,EAAG,IACjC,CAAED,EAAG,GAAIkC,GAAI,OAAQ1b,EAAG,CAAC,IAAKyZ,EAAG,IACjC,CAAED,EAAG,GAAIkC,GAAI,OAAQ1b,EAAG,CAAC,IAAKyZ,EAAG,KAE/Bob,GAAoBX,GAAY,yfAChCY,GAAoBZ,GAAY,0dAChCa,GAAoBb,GAAY,03DAnGtC,SAAgBnlB,GACZ,GAAKA,EAAK7V,OAAS,GAAO,EACtB,MAAM,IAAIC,MAAM,+BAEpB,IAAIiI,EAAS,GACb,IAAK,IAAInI,EAAI,EAAGA,EAAI8V,EAAK7V,OAAQD,GAAK,EAClCmI,EAAOxE,KAAK0E,SAASyN,EAAKxN,UAAUtI,EAAGA,EAAI,GAAI,KAEnD,OAAOmI,KA4FL4zB,GAAiBX,GAAiB,2LAmCjC,SAASY,GAASl9B,GAIrB,GAAIA,EAAMoJ,MAAM,kBAAoBpJ,EAAMmB,QAAU,GAChD,OAAOnB,EAAM2I,cAGjB,IAAIw0B,EAAQnB,GAAiBh8B,GA1CjC,IAAiBuB,EAAAA,EA2CG47B,EAAM98B,KAAKmD,IAEvB,GAAIo5B,GAAgB71B,QAAQvD,IAAS,EACjC,MAAO,GAEX,GAAIA,GAAQ,OAAUA,GAAQ,MAC1B,MAAO,GAGX,IAAI45B,EA3CL,SAA0BC,GAC7B,MAAMX,EAAQF,GAASa,EAAWR,IAClC,GAAIH,EAAO,CACP,GAAe,MAAXA,EAAM/Y,EACN,MAAM,IAAIviB,MAAM,gCAEpB,MAAO,CAACi8B,EAAYX,EAAM/Y,GAE9B,MAAMwZ,EAAQL,GAAkBO,GAChC,GAAIF,EACA,OAAOA,EAEX,MAAMnhB,EAAQ+gB,GAAkBM,GAChC,OAAIrhB,EACO,CAACqhB,EAAYrhB,EAAM,IAEdghB,GAAkBK,IAI3B,KAuBgBC,CAAiB95B,GACpC,OAAI45B,GAIG,CAAC55B,MAdZ25B,EA1CO57B,EAAOf,QAAO,CAACC,EAAOT,KACzBA,EAAMuK,SAASvK,IAAYS,EAAMoE,KAAK7E,MAC/BS,IACR,IAwDH08B,EAAQnB,GAAiBH,GAAcsB,GAAQpD,EAAAA,yBAAyBwD,MAExEJ,EAAM5yB,SAAS/G,IA9BNg5B,GA+Beh5B,EA/BKy5B,KAgCrBrzB,GAAO3D,mBAAmB,iCAAkC,QAASjG,MAI7Em9B,EAAM5yB,SAAS/G,IA7DNg5B,GA8DgBh5B,EA9DIm5B,KA+DrB/yB,GAAO3D,mBAAmB,iCAAkC,QAASjG,MAI7E,IAAIgF,EAAO62B,GAAcsB,GASzB,MAP6B,MAAzBn4B,EAAKwE,UAAU,EAAG,IAAuC,OAAzBxE,EAAKwE,UAAU,EAAG,IAAmD,MAApCxE,EAAKwE,UAAUxE,EAAK7D,OAAS,IAC9FyI,GAAO3D,mBAAmB,iBAAkB,QAASjG,GAGrDgF,EAAK7D,OAAS,IACdyI,GAAO3D,mBAAmB,WAAY,QAASjG,GAE5CgF,ECvLJ,MAAMw4B,WAAoBlE,GAC7Bz2B,YAAYoX,GACRjJ,MAAM,SAAUiJ,GAEpBzF,eACI,MAAO,GAEX4I,OAAO9C,EAAQjI,GACX,OAAOrB,MAAMoM,OAAO9C,EAAQghB,GAAYhE,GAAMU,YAAY3lB,EAAQ,YAEtE4lB,OAAOC,GACH,OAAO6D,GAAa/qB,MAAMinB,OAAOC,KCVlC,MAAMuF,WAAmBzjB,GAC5BnX,YAAYy1B,EAAQre,GAChB,IAAIC,GAAU,EACd,MAAMpZ,EAAQ,GACdw3B,EAAO/tB,SAAS6tB,IACRA,EAAMle,UACNA,GAAU,GAEdpZ,EAAM+D,KAAKuzB,EAAMv3B,SAGrBmQ,MAAM,QADQ,SAAWlQ,EAAMiF,KAAK,KAAO,IACtBkU,EAAWC,GAChC7Y,EAAiBY,KAAM,CAAEq2B,OAAQp4B,OAAOsK,OAAO8tB,EAAO9sB,WAE1DgJ,eACI,MAAMjT,EAAS,GACfU,KAAKq2B,OAAO/tB,SAAS6tB,IACjB72B,EAAOsD,KAAKuzB,EAAM5jB,mBAGtB,MAAMkpB,EAAcz7B,KAAKq2B,OAAO93B,QAAO,CAACC,EAAO23B,KAC3C,MAAMpzB,EAAOozB,EAAMne,UAOnB,OANIjV,IACKvE,EAAMuE,KACPvE,EAAMuE,GAAQ,GAElBvE,EAAMuE,MAEHvE,IACR,IAeH,OAbAwB,KAAKq2B,OAAO/tB,SAAQ,CAAC6tB,EAAOz3B,KACxB,IAAIqE,EAAOozB,EAAMne,UACZjV,GAA8B,IAAtB04B,EAAY14B,KAGZ,WAATA,IACAA,EAAO,WAES,MAAhBzD,EAAOyD,KAGXzD,EAAOyD,GAAQzD,EAAOZ,QAEnBT,OAAOsK,OAAOjJ,GAEzB6b,OAAO9C,EAAQjI,GACX,MAAMrS,EAAQs3B,GAAMU,YAAY3lB,EAAQ,SACxC,OAAOgmB,GAAK/d,EAAQrY,KAAKq2B,OAAQt4B,GAErCi4B,OAAOC,GACH,OAAOA,EAAOpd,OAAO7Y,KAAK+C,KAAM+zB,GAAOb,EAAQj2B,KAAKq2B,UCvD5D,IAKIqF,GAAqBC,GALrBl7B,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAkBxF,MAAM27B,GAAiB,IAAI3yB,OAAO,mBAC5B4yB,GAAkB,IAAI5yB,OAAO,qBAyBnCyyB,GAAsB,IAAI90B,QAAW+0B,GAAqB,SAASA,EAAmBxtB,GAClF,GAAIA,EAAMhB,UACN,OAAO,IAAI+pB,GAAWz2B,GAAuBT,KAAM07B,GAAqB,IAAKC,GAAoBp7B,KAAKP,KAAMmO,EAAMvB,eAAgBuB,EAAMxB,YAAawB,EAAMpL,MAE/J,GAAIoL,EAAMnB,UACN,OAAO,IAAIwuB,GAAWrtB,EAAMzB,WAAWtO,KAAK6O,GAAMxM,GAAuBT,KAAM07B,GAAqB,IAAKC,GAAoBp7B,KAAKP,KAAMiN,KAAKkB,EAAMpL,MAEvJ,OAAQoL,EAAM3B,UACV,IAAK,UACD,OAAO,IAAIspB,GAAa3nB,EAAMpL,MAClC,IAAK,OACD,OAAO,IAAIq0B,GAAajpB,EAAMpL,MAClC,IAAK,SACD,OAAO,IAAIw4B,GAAYptB,EAAMpL,MACjC,IAAK,QACD,OAAO,IAAIu0B,GAAWnpB,EAAMpL,MAChC,IAAK,GACD,OAAO,IAAI00B,GAAUtpB,EAAMpL,MAGnC,IAAIoE,EAAQgH,EAAMvP,KAAKuI,MAAM00B,IAC7B,GAAI10B,EAAO,CACP,IAAI+E,EAAO5E,SAASH,EAAM,IAAM,OAIhC,OAHa,IAAT+E,GAAcA,EAAO,KAAQA,EAAO,GAAO,IAC3CvE,EAAO3D,mBAAmB,WAAamD,EAAM,GAAK,cAAe,QAASgH,GAEvE,IAAIwpB,GAAYzrB,EAAO,EAAiB,QAAb/E,EAAM,GAAegH,EAAMpL,MAIjE,GADAoE,EAAQgH,EAAMvP,KAAKuI,MAAMy0B,IACrBz0B,EAAO,CACP,IAAI+E,EAAO5E,SAASH,EAAM,IAI1B,OAHa,IAAT+E,GAAcA,EAAO,KACrBvE,EAAO3D,mBAAmB,uBAAwB,QAASmK,GAExD,IAAIopB,GAAgBrrB,EAAMiC,EAAMpL,MAE3C,OAAO4E,EAAO3D,mBAAmB,eAAgB,OAAQmK,EAAMvP,OAE5D,MAAMk9B,GAAkB,IA/DxB,MACHl7B,YAAY+X,GACR+iB,GAAoBl4B,IAAIxD,MACxBZ,EAAiBY,KAAM,CAAE2Y,WAAAA,GAAc,GAAI,CAAEA,WAAY,OAE7DojB,gBAAgBl9B,GACZ,MAAMw3B,EAASx3B,EAAMT,KAAKQ,GAAS6B,GAAuBT,KAAM07B,GAAqB,IAAKC,IAAoBp7B,KAAKP,KAAMyL,GAAUI,KAAKjN,MAExI,OADc,IAAI48B,GAAWnF,EAAQ,KACxB9jB,eAEjB4I,OAAOtc,EAAOS,GACVqI,EAAOvC,oBAAoB9F,EAAOJ,OAAQL,EAAMK,OAAQ,gCACxD,MAAMm3B,EAASx3B,EAAMT,KAAKQ,GAAS6B,GAAuBT,KAAM07B,GAAqB,IAAKC,IAAoBp7B,KAAKP,KAAMyL,GAAUI,KAAKjN,MAClIu3B,EAAK,IAAQqF,GAAWnF,EAAQ,KAChChe,EAAS,IAAIF,GAEnB,OADAge,EAAMhb,OAAO9C,EAAQ/Y,GACd+Y,EAAOtD,KAElBihB,OAAOn3B,EAAOkW,EAAMkE,GAChB,MAAMod,EAASx3B,EAAMT,KAAKQ,GAAS6B,GAAuBT,KAAM07B,GAAqB,IAAKC,IAAoBp7B,KAAKP,KAAMyL,GAAUI,KAAKjN,MAExI,OADc,IAAI48B,GAAWnF,EAAQ,KACxBL,OAAO,IAAItd,GAAO3D,EAAM/U,KAAK2Y,WAAYM,MC1CvD,SAAS+iB,GAAGj+B,GACf,OAAOusB,GAAU+O,GAAYt7B,ICH1B,MCEM4J,GAAS,IAAIrE,EDFH,oCEIjB24B,GAAQ,IAAI/0B,WAAW,IAC7B+0B,GAAM5lB,KAAK,GACX,MAAM6lB,GAAY,IAAIjzB,OAAO,uBACtB,SAASkzB,GAAYp5B,GACxB,IACI,MAAM+K,EAAQ/K,EAAKjE,MAAM,KACzB,IAAK,IAAIG,EAAI,EAAGA,EAAI6O,EAAM5O,OAAQD,IAC9B,GAAkC,IAA9Bg8B,GAASntB,EAAM7O,IAAIC,OACnB,MAAM,IAAIC,MAAM,SAGxB,OAAO,EAEX,MAAOmC,IACP,OAAO,EAEJ,SAAS86B,GAASr5B,GACC,iBAAV,GACR4E,GAAO3D,mBAAmB,iCAAkC,OAAQjB,GAExE,IAAIu2B,EAAUv2B,EACVqE,EAAS60B,GACb,KAAO3C,EAAQp6B,QAAQ,CACnB,MAAMm9B,EAAY/C,EAAQnyB,MAAM+0B,IAChC,GAAiB,MAAbG,GAAsC,KAAjBA,EAAU,GAC/B,OAAO10B,GAAO3D,mBAAmB,sCAAuC,OAAQjB,GAGpFqE,EAASkjB,GAAU5U,GAAO,CAACtO,EAAQkjB,GADrB+O,GAAY4B,GAASoB,EAAU,SAE7C/C,EAAU+C,EAAU,IAAM,GAE9B,OAAO9mB,GAAQnO,GAEZ,SAASk1B,GAAUv5B,GAItB,MAHsB,iBAAV,GACR4E,GAAO3D,mBAAmB,iCAAkC,OAAQjB,GAE3D,KAATA,EACO,OAGJ2S,GAAO3S,EAAKjE,MAAM,KAAKV,KAAKgP,IAClB,KAATA,GACAzF,GAAO3D,mBAAmB,sCAAuC,OAAQjB,GAI7E,MAAMyS,EAAQ6jB,GAAY,IAAM4B,GAAS7tB,IAEzC,OADAoI,EAAM,GAAKA,EAAMtW,OAAS,EACnBsW,MACL,KCnDG,MAAA+mB,GAAgB,8BACtB,SAASC,GAAY94B,GAIxB,MAHyB,iBAAb,IACRA,EAAU21B,GAAY31B,IAEnB4mB,GAAU5U,GAAO,CACpB2jB,GAAYkD,IACZlD,GAAY32B,OAAOgB,EAAQxE,SAC3BwE,KCXR,IAWI+4B,GAA6BC,GAAyBC,GAA6BC,GAAgCC,GAXnH98B,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAWxF,MAAM68B,GAAU,IAAI51B,WAAW,IAC/B41B,GAAQzmB,KAAK,GACb,MAAM0mB,GAAQh3B,QAAQ,GAChBmK,GAAOnK,OAAO,GACd4K,GAAO5K,OAAO,GACd2xB,GAAiB3xB,OAAO,sEAW9B,MAAMi3B,GAAU1sB,GAAMK,GAAM,IACtBssB,GAAW3sB,GAAMJ,GAAM,IACvBgtB,GAAmB,CACrBn6B,KAAM,SACNQ,QAAS,SACT45B,QAAS,UACTC,kBAAmB,UACnB5f,KAAM,WAEJ6f,GAAmB,CACrB,OAAQ,UAAW,UAAW,oBAAqB,QAEvD,SAASC,GAAY99B,GACjB,OAAO,SAAUzB,GAIb,MAHuB,iBAAX,GACR4J,GAAO3D,mBAAmB,4BAA4BJ,KAAKC,UAAUrE,KAAQ,UAAUA,IAAOzB,GAE3FA,GAGf,MAAMw/B,GAAe,CACjBx6B,KAAMu6B,GAAY,QAClB/5B,QAAS+5B,GAAY,WACrBH,QAAS,SAAUp/B,GACf,OAAO4J,GAAO1B,UAAUlI,EAAO,mBAEnCq/B,kBAAmB,SAAUr/B,GACzB,IACI,OAAOq1B,GAAWr1B,GAAO2I,cAE7B,MAAOpF,IACP,OAAOqG,GAAO3D,mBAAmB,2CAA4C,2BAA4BjG,IAE7Gyf,KAAM,SAAUzf,GACZ,MAAMyX,EAAQ7N,GAAO/B,SAAS7H,EAAO,eAIrC,OAHqB,KAAjByX,EAAMtW,QACNyI,GAAO3D,mBAAmB,8BAA+B,cAAejG,GAErEwX,GAAQC,KAGvB,SAASgoB,GAAe5+B,GAEpB,CACI,MAAMuI,EAAQvI,EAAKuI,MAAM,kBACzB,GAAIA,EAAO,CACP,MAAMkL,EAAuB,KAAblL,EAAM,GAChBqJ,EAAQlJ,SAASH,EAAM,IAAM,QAC/BqJ,EAAQ,GAAM,GAAKA,EAAQ,KAAQrJ,EAAM,IAAMA,EAAM,KAAOzE,OAAO8N,KACnE7I,GAAO3D,mBAAmB,wBAAyB,OAAQpF,GAE/D,MAAM6+B,EAAc3sB,GAAK4mB,GAAgBrlB,EAAU7B,EAAQ,EAAKA,GAC1DktB,EAAcrrB,GAAWorB,EAAc9sB,IAAQosB,GAAS7sB,GAC9D,OAAO,SAAUE,GACb,MAAMrS,EAAQ4J,GAAO1B,UAAUmK,EAAQ,SAIvC,OAHIrS,EAAQ2/B,GAAe3/B,EAAQ0/B,IAC/B91B,GAAO3D,mBAAmB,2BAA2BpF,IAAQ,QAASb,GAEnEuS,GAAMO,GAAO9S,EAAO,KAAM,MAK7C,CACI,MAAMoJ,EAAQvI,EAAKuI,MAAM,gBACzB,GAAIA,EAAO,CACP,MAAMqJ,EAAQlJ,SAASH,EAAM,IAI7B,OAHc,IAAVqJ,GAAeA,EAAQ,IAAMrJ,EAAM,KAAOzE,OAAO8N,KACjD7I,GAAO3D,mBAAmB,sBAAuB,OAAQpF,GAEtD,SAAUb,GAKb,OAJc+W,GAAS/W,GACbmB,SAAWsR,GACjB7I,GAAO3D,mBAAmB,sBAAsBpF,IAAQ,QAASb,GAjFrF,SAAqBA,GACjB,MAAMyX,EAAQV,GAAS/W,GACjB8gB,EAAYrJ,EAAMtW,OAAS,GACjC,OAAI2f,EACOnJ,GAAO,CAACF,EAAOsnB,GAAQvzB,MAAMsV,KAEjCtJ,GAAQC,GA6EImoB,CAAY5/B,KAI/B,OAAQa,GACJ,IAAK,UAAW,OAAO,SAAUb,GAC7B,OAAOuY,GAAY8c,GAAWr1B,GAAQ,KAE1C,IAAK,OAAQ,OAAO,SAAUA,GAC1B,OAAUA,EAAoBi/B,GAAXC,IAEvB,IAAK,QAAS,OAAO,SAAUl/B,GAC3B,OAAOusB,GAAUvsB,IAErB,IAAK,SAAU,OAAO,SAAUA,GAC5B,OAAOi+B,GAAGj+B,IAGlB,OAAO,KAEX,SAAS6/B,GAAW76B,EAAM86B,GACtB,MAAO,GAAG96B,KAAQ86B,EAAOz/B,KAAI,EAAG2E,KAAAA,EAAMnE,KAAAA,KAAYA,EAAO,IAAMmE,IAAOe,KAAK,QAExE,MAAMg6B,GACTl9B,YAAY/B,GACR49B,GAA4Bj5B,IAAIxD,MAChC08B,GAAwBl8B,IAAIR,UAAM,GAClC28B,GAA4Bn8B,IAAIR,UAAM,GACtC48B,GAA+Bp8B,IAAIR,UAAM,GACzCD,GAAuBC,KAAM08B,GAAyB94B,KAAKC,UAAUhF,GAAQ,KAC7EkB,GAAuBC,KAAM28B,GAA6B,IAAInlB,IAAO,KACrEzX,GAAuBC,KAAM48B,GAAgC,IAAIplB,IAAO,KAExE,MAAMumB,EAAQ,IAAIvmB,IAEZwmB,EAAU,IAAIxmB,IAEdymB,EAAW,IAAIzmB,IACrBvZ,OAAOD,KAAKa,GAAOyJ,SAAS1J,IACxBm/B,EAAMv9B,IAAI5B,EAAM,IAAIyJ,KACpB21B,EAAQx9B,IAAI5B,EAAM,IAClBq/B,EAASz9B,IAAI5B,EAAM,IAAIyJ,QAE3B,IAAK,MAAMtF,KAAQlE,EAAO,CACtB,MAAM48B,EAAc,IAAIpzB,IACxB,IAAK,MAAM61B,KAASr/B,EAAMkE,GAAO,CAEzB04B,EAAYn7B,IAAI49B,EAAMn7B,OACtB4E,GAAO3D,mBAAmB,2BAA2BJ,KAAKC,UAAUq6B,EAAMn7B,YAAYa,KAAKC,UAAUd,KAAS,QAASlE,GAE3H48B,EAAYj4B,IAAI06B,EAAMn7B,MAEtB,MAAMyJ,EAAY0xB,EAAMt/B,KAAKuI,MAAM,uBAAwB,IAAM,KAC7DqF,IAAazJ,GACb4E,GAAO3D,mBAAmB,8BAA8BJ,KAAKC,UAAU2I,KAAa,QAAS3N,GAGjF2+B,GAAehxB,KAI1BwxB,EAAQ19B,IAAIkM,IACb7E,GAAO3D,mBAAmB,gBAAgBJ,KAAKC,UAAU2I,KAAa,QAAS3N,GAGnFm/B,EAAQt9B,IAAI8L,GAAU5J,KAAKG,GAC3Bg7B,EAAMr9B,IAAIqC,GAAMS,IAAIgJ,KAI5B,MAAM2xB,EAAe1wB,MAAM5B,KAAKmyB,EAAQhgC,QAAQ+C,QAAQua,GAAiC,IAA1B0iB,EAAQt9B,IAAI4a,GAAGpc,SAClD,IAAxBi/B,EAAaj/B,OACbyI,GAAO3D,mBAAmB,uBAAwB,QAASnF,GAEtDs/B,EAAaj/B,OAAS,GAC3ByI,GAAO3D,mBAAmB,4CAA4Cm6B,EAAa//B,KAAKW,GAAO6E,KAAKC,UAAU9E,KAAK+E,KAAK,QAAS,QAASjF,GAE9IO,EAAiBY,KAAM,CAAEo+B,YAAaD,EAAa,KAEnD,SAASE,EAAcz/B,EAAM0/B,GACrBA,EAAMh+B,IAAI1B,IACV+I,GAAO3D,mBAAmB,8BAA8BJ,KAAKC,UAAUjF,KAAS,QAASC,GAE7Fy/B,EAAM96B,IAAI5E,GACV,IAAK,MAAM+0B,KAASoK,EAAMr9B,IAAI9B,GAC1B,GAAKo/B,EAAQ19B,IAAIqzB,GAAjB,CAIA0K,EAAc1K,EAAO2K,GAErB,IAAK,MAAMC,KAAWD,EAClBL,EAASv9B,IAAI69B,GAAS/6B,IAAImwB,GAGlC2K,EAAME,OAAO5/B,GAEjBy/B,CAAcr+B,KAAKo+B,YAAa,IAAI/1B,KAEpC,IAAK,MAAOtF,EAAMvC,KAAQy9B,EAAU,CAChC,MAAMQ,EAAKhxB,MAAM5B,KAAKrL,GACtBi+B,EAAGC,OACHj+B,GAAuBT,KAAM28B,GAA6B,KAAKn8B,IAAIuC,EAAM66B,GAAW76B,EAAMlE,EAAMkE,IAAS07B,EAAGrgC,KAAKW,GAAM6+B,GAAW7+B,EAAGF,EAAME,MAAK+E,KAAK,MAGzJjF,YACA,OAAO+E,KAAKsJ,MAAMzM,GAAuBT,KAAM08B,GAAyB,MAE5EiC,WAAW//B,GACP,IAAIggC,EAAUn+B,GAAuBT,KAAM48B,GAAgC,KAAKl8B,IAAI9B,GAKpF,OAJKggC,IACDA,EAAUn+B,GAAuBT,KAAMy8B,GAA6B,IAAKI,IAA8Bt8B,KAAKP,KAAMpB,GAClH6B,GAAuBT,KAAM48B,GAAgC,KAAKp8B,IAAI5B,EAAMggC,IAEzEA,EAEXhB,WAAW76B,GACP,MAAMqE,EAAS3G,GAAuBT,KAAM28B,GAA6B,KAAKj8B,IAAIqC,GAClF,OAAKqE,GACMO,GAAO3D,mBAAmB,iBAAiBJ,KAAKC,UAAUd,KAAS,OAAQA,GAI1F87B,WAAWjgC,EAAMb,GACb,OAAOiC,KAAK2+B,WAAW//B,EAAhBoB,CAAsBjC,GAEjC+gC,WAAW/7B,EAAMhF,GACb,OAAOusB,GAAUtqB,KAAK6+B,WAAW97B,EAAMhF,IAE3Cod,OAAOpd,GACH,OAAOiC,KAAK6+B,WAAW7+B,KAAKo+B,YAAargC,GAE7C0d,KAAK1d,GACD,OAAOiC,KAAK8+B,WAAW9+B,KAAKo+B,YAAargC,GAE7CghC,OAAOngC,EAAMb,EAAOihC,GAIZ,GADgBxB,GAAe5+B,GAE3B,OAAOogC,EAASpgC,EAAMb,GAI9B,MAAMoJ,EAAQvI,EAAKuI,MAAM,yBACzB,GAAIA,EAAO,CACP,MAAMo3B,EAAUp3B,EAAM,GAChBjI,EAASoI,SAASH,EAAM,IAI9B,OAHIjI,GAAU,GAAKnB,EAAMmB,SAAWA,GAChCyI,GAAO3D,mBAAmB,0DAA2D,QAASjG,GAE3FA,EAAMK,KAAKK,GAAMuB,KAAK++B,OAAOR,EAAS9/B,EAAGugC,KAGpD,MAAMnB,EAAS79B,KAAKnB,MAAMD,GAC1B,OAAIi/B,EACOA,EAAOt/B,QAAO,CAACC,GAASuE,KAAAA,EAAMnE,KAAAA,MACjCJ,EAAMuE,GAAQ/C,KAAK++B,OAAOngC,EAAMb,EAAMgF,GAAOi8B,GACtCxgC,IACR,IAEAmJ,GAAO3D,mBAAmB,iBAAiBpF,IAAQ,OAAQA,GAEtEqgC,MAAMlhC,EAAOihC,GACT,OAAOh/B,KAAK++B,OAAO/+B,KAAKo+B,YAAargC,EAAOihC,GAEhDz4B,YAAY1H,GACR,OAAO,IAAIi/B,GAAiBj/B,GAEhC0H,sBAAsB1H,GAClB,OAAOi/B,GAAiBjyB,KAAKhN,GAAOu/B,YAExC73B,kBAAkBxD,EAAMlE,EAAOd,GAC3B,OAAO+/B,GAAiBjyB,KAAKhN,GAAOigC,WAAW/7B,EAAMhF,GAEzDwI,kBAAkB24B,GACd,MAAMC,EAAe,GACrB,IAAK,MAAMp8B,KAAQm8B,EAAQ,CACvB,MAAMtgC,EAAOs+B,GAAiBn6B,GACzBnE,GACD+I,GAAO3D,mBAAmB,kCAAkCJ,KAAKC,UAAUd,KAAS,SAAUm8B,GAElGC,EAAav8B,KAAK,CAAEG,KAAAA,EAAMnE,KAAAA,IAK9B,OAHAugC,EAAaT,MAAK,CAAC9rB,EAAGC,IACXwqB,GAAiBv4B,QAAQ8N,EAAE7P,MAAQs6B,GAAiBv4B,QAAQ+N,EAAE9P,QAElE+6B,GAAiBgB,WAAW,eAAgB,CAAEM,aAAcD,GAAgBD,GAEvF34B,cAAc24B,EAAQrgC,EAAOd,GACzB,OAAO2X,GAAO,CACV,SACAooB,GAAiBuB,WAAWH,GAC5BpB,GAAiBjyB,KAAKhN,GAAO4c,KAAK1d,KAG1CwI,YAAY24B,EAAQrgC,EAAOd,GACvB,OAAOusB,GAAUwT,GAAiB3iB,OAAO+jB,EAAQrgC,EAAOd,IAG5DwI,0BAA0B24B,EAAQrgC,EAAOd,EAAOm3B,GAE5CgK,EAASjhC,OAAO8N,OAAO,GAAImzB,GAE3B,MAAMI,EAAW,GAEbJ,EAAO9B,oBAAsB1oB,GAAYwqB,EAAO9B,kBAAmB,MACnEkC,EAASJ,EAAO9B,mBAAqB,MAGzC,MAAMwB,EAAUd,GAAiBjyB,KAAKhN,GAEtC+/B,EAAQK,MAAMlhC,GAAO,CAACa,EAAMb,KACX,YAATa,GAAuB8V,GAAY3W,EAAO,MAC1CuhC,EAASvhC,GAAS,MAEfA,KAGX,IAAK,MAAMgF,KAAQu8B,EACfA,EAASv8B,SAAcmyB,EAAYnyB,GAavC,OAVIm8B,EAAO9B,mBAAqBkC,EAASJ,EAAO9B,qBAC5C8B,EAAO9B,kBAAoBkC,EAASJ,EAAO9B,oBASxC,CAAE8B,OAAAA,EAAQnhC,MANjBA,EAAQ6gC,EAAQK,MAAMlhC,GAAO,CAACa,EAAMb,IACnB,YAATa,GAAsB0gC,EAASvhC,GACxBuhC,EAASvhC,GAEbA,KAIfwI,kBAAkB24B,EAAQrgC,EAAOd,GAE7B+/B,GAAiBuB,WAAWH,GAE5B,MAAMK,EAAe,GACfC,EAAc,GACpBnC,GAAiB/0B,SAASvF,IACtB,MAAMhF,EAAQmhC,EAAOn8B,GACR,MAAThF,IAGJwhC,EAAax8B,GAAQw6B,GAAax6B,GAAMhF,GACxCyhC,EAAY58B,KAAK,CAAEG,KAAAA,EAAMnE,KAAMs+B,GAAiBn6B,SAEpD,MAAM67B,EAAUd,GAAiBjyB,KAAKhN,GAChC4gC,EAAkBxhC,OAAO8N,OAAO,GAAIlN,GAS1C,OARI4gC,EAAgBL,aAChBz3B,GAAO3D,mBAAmB,2CAA4C,qBAAsBnF,GAG5F4gC,EAAgBL,aAAeI,EAGnCZ,EAAQzjB,OAAOpd,GACR,CACHc,MAAO4gC,EACPP,OAAQK,EACRnB,YAAaQ,EAAQR,YACrB16B,QAASk7B,EAAQK,MAAMlhC,GAAO,CAACa,EAAMb,KAEjC,GAAIa,EAAKuI,MAAM,eACX,OAAOoO,GAAQ5N,GAAO/B,SAAS7H,IAGnC,GAAIa,EAAKuI,MAAM,UACX,OAAOQ,GAAO1B,UAAUlI,GAAOyM,WAEnC,OAAQ5L,GACJ,IAAK,UACD,OAAOb,EAAM2I,cACjB,IAAK,OACD,QAAS3I,EACb,IAAK,SAID,MAHuB,iBAAX,GACR4J,GAAO3D,mBAAmB,iBAAkB,QAASjG,GAElDA,EAEf,OAAO4J,GAAO3D,mBAAmB,mBAAoB,OAAQpF,QAK7E89B,GAA0B,IAAIj7B,QAAWk7B,GAA8B,IAAIl7B,QAAWm7B,GAAiC,IAAIn7B,QAAWg7B,GAA8B,IAAI71B,QAAWi2B,GAA+B,SAAsCj+B,GAEpP,CACI,MAAMggC,EAAUpB,GAAe5+B,GAC/B,GAAIggC,EACA,OAAOA,EAIf,MAAMz3B,EAAQvI,EAAKuI,MAAM,yBACzB,GAAIA,EAAO,CACP,MAAMo3B,EAAUp3B,EAAM,GAChBu4B,EAAa1/B,KAAK2+B,WAAWJ,GAC7Br/B,EAASoI,SAASH,EAAM,IAC9B,OAAQpJ,IACAmB,GAAU,GAAKnB,EAAMmB,SAAWA,GAChCyI,GAAO3D,mBAAmB,0DAA2D,QAASjG,GAElG,IAAIqJ,EAASrJ,EAAMK,IAAIshC,GAIvB,OAHIj/B,GAAuBT,KAAM28B,GAA6B,KAAKr8B,IAAIi+B,KACnEn3B,EAASA,EAAOhJ,IAAIksB,KAEjBA,GAAU5U,GAAOtO,KAIhC,MAAMy2B,EAAS79B,KAAKnB,MAAMD,GAC1B,GAAIi/B,EAAQ,CACR,MAAM8B,EAAc3D,GAAGv7B,GAAuBT,KAAM28B,GAA6B,KAAKj8B,IAAI9B,IAC1F,OAAQb,IACJ,MAAMuB,EAASu+B,EAAOz/B,KAAI,EAAG2E,KAAAA,EAAMnE,KAAAA,MAC/B,MAAMwI,EAASpH,KAAK2+B,WAAW//B,EAAhBoB,CAAsBjC,EAAMgF,IAC3C,OAAItC,GAAuBT,KAAM28B,GAA6B,KAAKr8B,IAAI1B,GAC5D0rB,GAAUljB,GAEdA,KAGX,OADA9H,EAAO0V,QAAQ2qB,GACRjqB,GAAOpW,IAGtB,OAAOqI,GAAO3D,mBAAmB,iBAAiBpF,IAAQ,OAAQA,ICxbtE,IAWIghC,GAAsBC,GAAmBC,GAAmBC,GAAsBC,GAAqBC,GAAwBC,GAX/HngC,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAajF,MAAMkgC,GACTv/B,YAAYw/B,EAAUC,EAAOn6B,GACzB,MAAMnD,EAAOq9B,EAASr9B,KAAMu9B,EAAYF,EAASvzB,SACjDzN,EAAiBY,KAAM,CACnBogC,SAAAA,EAAUr9B,KAAAA,EAAMu9B,UAAAA,EAAWD,MAAAA,EAAOn6B,KAAAA,KAIvC,MAAMq6B,GACT3/B,YAAYw/B,EAAUI,EAAUt6B,EAAMnI,GAClC,MAAMgF,EAAOq9B,EAASr9B,KAAMu9B,EAAYF,EAASvzB,SACjDzN,EAAiBY,KAAM,CACnBogC,SAAAA,EAAUr9B,KAAAA,EAAMmD,KAAAA,EAAMo6B,UAAAA,EAAWE,SAAAA,EAAUziC,MAAAA,KAIhD,MAAM0iC,GACT7/B,YAAYw/B,EAAUI,EAAUt6B,GAC5B,MAAMnD,EAAOq9B,EAASr9B,KAAMu9B,EAAYF,EAASvzB,SACjDzN,EAAiBY,KAAM,CACnBogC,SAAAA,EAAUr9B,KAAAA,EAAMmD,KAAAA,EAAMo6B,UAAAA,EAAWE,SAAAA,KAItC,MAAME,GACT9/B,YAAY6a,GACRrc,EAAiBY,KAAM,CAAEyb,KAAAA,EAAMklB,YAAY,IAE/Cp6B,iBAAiBxI,GACb,SAAUA,IAASA,EAAM4iC,aAIjC,MAAMC,GAAe,CACjB,EAAK,gBACL,EAAK,gBACL,GAAM,sBACN,GAAM,6BACN,GAAM,gBACN,GAAM,8CACN,GAAM,wDACN,GAAM,6CACN,GAAM,gBACN,GAAM,0BAEJC,GAAgB,CAClB,aAAc,CACVP,UAAW,gBACXv9B,KAAM,QACNuL,OAAQ,CAAC,UACT2pB,OAASv0B,GACE,+BAA+BE,KAAKC,UAAUH,MAG7D,aAAc,CACV48B,UAAW,iBACXv9B,KAAM,QACNuL,OAAQ,CAAC,WACT2pB,OAAS12B,IACL,IAAI02B,EAAS,qBAIb,OAHI12B,GAAQ,GAAKA,GAAQ,KAAQq/B,GAAar/B,EAAKiJ,cAC/CytB,EAAS2I,GAAar/B,EAAKiJ,aAExB,8BAA8BjJ,EAAKiJ,SAAS,QAAQytB,QAIhE,MAAM6I,GACTlgC,YAAYmgC,GACRnB,GAAqBp8B,IAAIxD,MACzB6/B,GAAkBr/B,IAAIR,UAAM,GAC5B8/B,GAAkBt/B,IAAIR,UAAM,GAC5B+/B,GAAqBv/B,IAAIR,UAAM,GAE/BggC,GAAoBx/B,IAAIR,UAAM,GAC9B,IAAIghC,EAAM,GAENA,EADuB,iBAAf,EACFp9B,KAAKsJ,MAAM6zB,GAGXA,EAEVhhC,GAAuBC,KAAM+/B,GAAsB,IAAIvoB,IAAO,KAC9DzX,GAAuBC,KAAM6/B,GAAmB,IAAIroB,IAAO,KAC3DzX,GAAuBC,KAAM8/B,GAAmB,IAAItoB,IAAO,KAE3DpY,EAAiBY,KAAM,CACnB+gC,UAAW9iC,OAAOsK,OAAOy4B,EAAI5iC,KAAKgC,GAAMiO,GAASxC,KAAKzL,KAAIW,QAAQX,GAAY,MAALA,OAE7EL,GAAuBC,KAAMggC,GAAqBhgC,KAAKihC,cAAe,KAEtEjhC,KAAK+gC,UAAUz4B,SAAS83B,IACpB,IAAIc,EACJ,OAAQd,EAASxhC,MACb,IAAK,cACD,OAAIoB,KAAKmhC,YACLx5B,EAAOtB,KAAK,2CAIhBjH,EAAiBY,KAAM,CAAEmhC,OAAQf,IAErC,IAAK,WAGDc,EAASzgC,GAAuBT,KAAM+/B,GAAsB,KAC5D,MACJ,IAAK,QAEDmB,EAASzgC,GAAuBT,KAAM8/B,GAAmB,KACzD,MACJ,IAAK,QACDoB,EAASzgC,GAAuBT,KAAM6/B,GAAmB,KACzD,MACJ,QACI,OAER,MAAMS,EAAYF,EAASvzB,SACvBq0B,EAAO5gC,IAAIggC,GACX34B,EAAOtB,KAAK,0BAA4Bi6B,GAG5CY,EAAO1gC,IAAI8/B,EAAWF,MAGrBpgC,KAAKmhC,QACN/hC,EAAiBY,KAAM,CACnBmhC,OAAQ1yB,GAAoBF,WAAW,mBAKnD1B,OAAOA,GACEA,IACDA,EAAS3E,EAAWmF,MAEpBR,IAAW3E,EAAW4E,SACtBnF,EAAO3D,mBAAmB,gDAAiD,SAAU6I,GAEzF,MAAMm0B,EAAMhhC,KAAK+gC,UAAU3iC,KAAKgC,GAAMA,EAAEyM,OAAOA,KAE/C,OAAIA,IAAW3E,EAAW6E,KACfnJ,KAAKC,UAAUm9B,EAAI5iC,KAAK6pB,GAAMrkB,KAAKsJ,MAAM+a,MAE7C+Y,EAEXC,cACI,OAAOnF,GAEXsF,gBAAgB5hC,GACZ,OAAQiB,GAAuBT,KAAM4/B,GAAsB,IAAKK,IAAwB1/B,KAAKP,KAAMR,EAAK,MAAM,GAAQuD,KAE1Hs+B,YAAY7hC,EAAKF,GACb,OAAOmB,GAAuBT,KAAM4/B,GAAsB,IAAKK,IAAwB1/B,KAAKP,KAAMR,EAAKF,GAAU,MAAM,GAE3HgiC,aAAa9hC,GACT,OAAQiB,GAAuBT,KAAM4/B,GAAsB,IAAKM,IAAqB3/B,KAAKP,KAAMR,EAAK,MAAM,GAAQuD,KAEvHw+B,SAAS/hC,EAAKF,GACV,OAAOmB,GAAuBT,KAAM4/B,GAAsB,IAAKM,IAAqB3/B,KAAKP,KAAMR,EAAKF,GAAU,MAAM,GAGxHkiC,SAAShiC,EAAKF,GACV,GAAIoV,GAAYlV,GAAM,CAClB,MAAMghC,EAAWhhC,EAAIkH,cACrB,IAAK,MAAM05B,KAAY3/B,GAAuBT,KAAM6/B,GAAmB,KAAKvgC,SACxE,GAAIkhC,IAAaxgC,KAAKyhC,YAAYrB,GAC9B,OAAOA,EAGfz4B,EAAO3D,mBAAmB,oBAAqB,WAAYxE,GAG/D,IAA0B,IAAtBA,EAAIsF,QAAQ,KAAa,CACzB,MAAM48B,EAAW,GACjB,IAAK,MAAO3+B,EAAMq9B,KAAa3/B,GAAuBT,KAAM6/B,GAAmB,KACvE98B,EAAKjE,MAAM,KAAiB,KAAOU,GACnCkiC,EAAS9+B,KAAKw9B,GAUtB,OAPwB,IAApBsB,EAASxiC,OACTyI,EAAO3D,mBAAmB,oBAAqB,OAAQxE,GAElDkiC,EAASxiC,OAAS,GAEvByI,EAAO3D,mBAAmB,2BAA4B,OAAQxE,GAE3DkiC,EAAS,GAGpB,MAAMt6B,EAAS3G,GAAuBT,KAAM6/B,GAAmB,KAAKn/B,IAAIgO,GAAcH,WAAW/O,GAAKqN,UACtG,OAAIzF,GAGGO,EAAO3D,mBAAmB,oBAAqB,YAAaxE,GAGvEiiC,YAAYrB,GAiBR,OAAOtqB,GAAUkmB,GAAGoE,EAASvzB,UAAW,EAAG,GAG/C80B,cAAcvB,GAEV,OAAOpE,GAAGoE,EAASvzB,UAEvB+0B,cAAc3yB,EAAQ8F,GAClB,OAAOtU,GAAuBT,KAAMggC,GAAqB,KAAKhK,OAAO/mB,EAAQ8F,GAEjF8sB,cAAc5yB,EAAQ3P,GAClB,OAAOmB,GAAuBT,KAAMggC,GAAqB,KAAK7kB,OAAOlM,EAAQ3P,GAEjFwiC,aAAaxiC,GACT,OAAOU,KAAK6hC,cAAc7hC,KAAKmhC,OAAO7yB,OAAQhP,GAAU,IAE5DyiC,kBAAkB3B,EAAUrrB,GAOxB,MAN0B,iBAAd,IACRqrB,EAAWpgC,KAAKwhC,SAASpB,IAEzBtqB,GAAUf,EAAM,EAAG,KAAO/U,KAAKyhC,YAAYrB,IAC3Cz4B,EAAO3D,mBAAmB,uCAAuCo8B,EAASr9B,QAAS,OAAQgS,GAExF/U,KAAK4hC,cAAcxB,EAAS9xB,OAAQwH,GAAUf,EAAM,IAE/DitB,kBAAkB5B,EAAU9gC,GAIxB,MAH0B,iBAAd,IACR8gC,EAAWpgC,KAAKwhC,SAASpB,IAEtB1qB,GAAO,CACV1V,KAAKyhC,YAAYrB,GACjBpgC,KAAK6hC,cAAczB,EAAS9xB,OAAQhP,GAAU,MAItD2iC,mBAAmB7B,EAAUrrB,GAOzB,MAN0B,iBAAd,IACRqrB,EAAWpgC,KAAKqhC,YAAYjB,IAE5BtqB,GAAUf,EAAM,EAAG,KAAO/U,KAAKyhC,YAAYrB,IAC3Cz4B,EAAO3D,mBAAmB,0CAA0Co8B,EAASr9B,QAAS,OAAQgS,GAE3F/U,KAAK4hC,cAAcxB,EAAS9xB,OAAQwH,GAAUf,EAAM,IAG/DmtB,mBAAmB9B,EAAU9gC,GAIzB,MAH0B,iBAAd,IACR8gC,EAAWpgC,KAAKqhC,YAAYjB,IAEzB1qB,GAAO,CACV1V,KAAKyhC,YAAYrB,GACjBpgC,KAAK6hC,cAAczB,EAAS9xB,OAAQhP,GAAU,MAItD6iC,qBAAqB/B,EAAUrrB,GACD,iBAAd,IACRqrB,EAAWpgC,KAAKqhC,YAAYjB,IAEhC,IAAI18B,EAAU,iCACd,MAAM8R,EAAQV,GAASC,GACvB,GAAKS,EAAMtW,OAAS,IAAQ,EACxB,IACI,OAAOuB,GAAuBT,KAAMggC,GAAqB,KAAKhK,OAAOoK,EAAS3wB,QAAS+F,GAE3F,MAAOlU,GACHoC,EAAU,+BAIlB,OAAOiE,EAAO5D,WAAWL,EAAS,WAAY,CAC1C3F,MAAOwX,GAAQC,GACftT,KAAM,CAAEiD,OAAQi7B,EAASr9B,KAAMu9B,UAAWF,EAASvzB,YAG3DpJ,UAAU28B,EAAUpZ,EAAOuN,GACG,iBAAd,IACR6L,EAAWpgC,KAAKqhC,YAAYjB,IAEhC,MAAMrrB,EAAOpN,EAAO/B,SAASohB,GAC7B,IAAI9gB,EASAk8B,EACAC,EACAC,EAVJ,GAAI/N,EACA,IACIruB,EAAOzF,GAAuBT,KAAMggC,GAAqB,KAAKhK,OAAOoK,EAAS9xB,OAAQimB,EAAGxf,MAAQ,MAErG,MAAOzT,GACHkG,QAAQC,IAAInG,GAMpB,IAAI22B,EAAS,iBACb,GAAoB,IAAhBljB,EAAK7V,OACL+4B,EAAS,4BAER,GAAKljB,EAAK7V,OAAS,IAAQ,EAAG,CAC/B,MAAMshC,EAAWjrB,GAAQR,EAAKxL,MAAM,EAAG,IACjCg5B,EAAU1B,GAAcL,GAC9B,GAAI+B,EACA,IACIF,EAAYE,EAAQx/B,KACpBu/B,EAAiBC,EAAQjC,UACzB8B,EAAY3hC,GAAuBT,KAAMggC,GAAqB,KAAKhK,OAAOuM,EAAQj0B,OAAQyG,EAAKxL,MAAM,IACrG0uB,EAASsK,EAAQtK,UAAUmK,GAE/B,MAAO9gC,GACHkG,QAAQC,IAAInG,OAGf,CACD22B,EAAS,uBACT,IACI,MAAM32B,EAAQtB,KAAKwhC,SAAShB,GAC5B6B,EAAY/gC,EAAMyB,KAClBu/B,EAAiBhhC,EAAMuL,SACvBorB,EAAS,iBAAiBqK,IAC1B,IACIF,EAAY3hC,GAAuBT,KAAMggC,GAAqB,KAAKhK,OAAO10B,EAAMgN,OAAQyG,EAAKxL,MAAM,IAEvG,MAAOjI,GACH22B,EAAS,iBAAiBqK,mCAGlC,MAAOhhC,GACHkG,QAAQC,IAAInG,KAIxB,OAAOqG,EAAOlE,UAAU,wBAAyB,iBAAkB,CAC/DsR,KAAMQ,GAAQR,GAAOytB,YAAa,KAClCr9B,OAAQi7B,EAASr9B,KAAMu9B,UAAWF,EAASvzB,SAAU3G,KAAAA,EACrDk8B,UAAAA,EAAWC,UAAAA,EAAWC,eAAAA,EAAgBrK,OAAAA,IAI9CwK,qBAAqBC,EAAkBpjC,GAInC,MAHkC,iBAAtB,IACRojC,EAAmB1iC,KAAKqhC,YAAYqB,IAEjCntB,GAAQ9U,GAAuBT,KAAMggC,GAAqB,KAAK7kB,OAAOunB,EAAiBjzB,QAASnQ,GAAU,KAiCrHqjC,mBAAmBC,EAAetjC,GACC,iBAAnB,IACRsjC,EAAgB5iC,KAAKuhC,SAASqB,IAE9BtjC,EAAOJ,OAAS0jC,EAAct0B,OAAOpP,QACrCyI,EAAO5D,WAAW,0BAA4B6+B,EAAc/1B,SAAU,sBAAuB,CACzFxH,MAAO/F,EAAOJ,OACdoG,cAAes9B,EAAct0B,OAAOpP,SAG5C,MAAM2jC,EAAS,GACVD,EAAcxzB,WACfyzB,EAAOjgC,KAAK5C,KAAK2hC,cAAciB,IAEnC,MAAME,EAAc,CAAC30B,EAAOpQ,IACL,WAAfoQ,EAAMvP,KACCo9B,GAAGj+B,GAEU,UAAfoQ,EAAMvP,KACJ0rB,GAAU/U,GAAQxX,KAGV,YAAfoQ,EAAMvP,MACN6B,GAAuBT,KAAMggC,GAAqB,KAAK7kB,OAAO,CAAC,WAAY,CAACpd,IAEzEuY,GAAYf,GAAQxX,GAAQ,KAyBvC,IAtBAuB,EAAOgJ,SAAQ,CAACvK,EAAOW,KACnB,MAAMyP,EAAQy0B,EAAct0B,OAAO5P,GAC9ByP,EAAM1B,QAME,MAAT1O,EACA8kC,EAAOjgC,KAAK,MAEY,UAAnBuL,EAAM3B,UAA2C,UAAnB2B,EAAM3B,SACzC7E,EAAO3D,mBAAmB,gDAAkD,YAAcmK,EAAMpL,KAAOhF,GAElG0P,MAAMN,QAAQpP,GACnB8kC,EAAOjgC,KAAK7E,EAAMK,KAAKL,GAAU+kC,EAAY30B,EAAOpQ,MAGpD8kC,EAAOjgC,KAAKkgC,EAAY30B,EAAOpQ,IAflB,MAATA,GACA4J,EAAO3D,mBAAmB,qDAAuD,YAAcmK,EAAMpL,KAAOhF,MAkBjH8kC,EAAO3jC,QAAwC,OAA9B2jC,EAAOA,EAAO3jC,OAAS,IAC3C2jC,EAAO94B,MAEX,OAAO84B,EAEXE,eAAeH,EAAetjC,GACK,iBAAnB,IACRsjC,EAAgB5iC,KAAKuhC,SAASqB,IAElC,MAAMC,EAAS,GACTG,EAAY,GACZC,EAAa,GA6BnB,OA5BKL,EAAcxzB,WACfyzB,EAAOjgC,KAAK5C,KAAK2hC,cAAciB,IAE/BtjC,EAAOJ,SAAW0jC,EAAct0B,OAAOpP,QACvCyI,EAAO3D,mBAAmB,kCAAmC,SAAU1E,GAE3EsjC,EAAct0B,OAAOhG,SAAQ,CAAC6F,EAAOzP,KACjC,MAAMX,EAAQuB,EAAOZ,GACrB,GAAIyP,EAAM1B,QACN,GAAmB,WAAf0B,EAAMvP,KACNikC,EAAOjgC,KAAKo5B,GAAGj+B,SAEd,GAAmB,UAAfoQ,EAAMvP,KACXikC,EAAOjgC,KAAK0nB,GAAUvsB,QAErB,CAAA,GAAuB,UAAnBoQ,EAAM3B,UAA2C,UAAnB2B,EAAM3B,SAEzC,MAAM,IAAIrN,MAAM,mBAGhB0jC,EAAOjgC,KAAKnC,GAAuBT,KAAMggC,GAAqB,KAAK7kB,OAAO,CAAChN,EAAMvP,MAAO,CAACb,UAI7FilC,EAAUpgC,KAAKuL,GACf80B,EAAWrgC,KAAK7E,MAGjB,CACHgX,KAAMtU,GAAuBT,KAAMggC,GAAqB,KAAK7kB,OAAO6nB,EAAWC,GAC/EJ,OAAQA,GAIhBK,eAAeN,EAAe7tB,EAAM8tB,GAIhC,GAH+B,iBAAnB,IACRD,EAAgB5iC,KAAKuhC,SAASqB,IAEpB,MAAVC,IAAmBD,EAAcxzB,UAAW,CAC5C,MAAM+zB,EAAanjC,KAAK2hC,cAAciB,GACjCluB,GAAYmuB,EAAO,GAAI,KAAOA,EAAO,GAAGn8B,gBAAkBy8B,GAC3Dx7B,EAAO3D,mBAAmB,0BAA2B,YAAa6+B,EAAO,IAE7EA,EAASA,EAAOt5B,MAAM,GAE1B,MAAMkD,EAAU,GACV22B,EAAa,GACbnrB,EAAU,GAChB2qB,EAAct0B,OAAOhG,SAAQ,CAAC6F,EAAOzP,KAC7ByP,EAAM1B,QACa,WAAf0B,EAAMvP,MAAoC,UAAfuP,EAAMvP,MAAuC,UAAnBuP,EAAM3B,UAA2C,UAAnB2B,EAAM3B,UACzFC,EAAQ7J,KAAK6I,GAAU+C,WAAW,CAAE5P,KAAM,UAAWmE,KAAMoL,EAAMpL,QACjEkV,EAAQrV,MAAK,KAGb6J,EAAQ7J,KAAKuL,GACb8J,EAAQrV,MAAK,KAIjBwgC,EAAWxgC,KAAKuL,GAChB8J,EAAQrV,MAAK,OAGrB,MAAMygC,EAA2B,MAAVR,EAAkBpiC,GAAuBT,KAAMggC,GAAqB,KAAKhK,OAAOvpB,EAASiJ,GAAOmtB,IAAW,KAC5HS,EAAmB7iC,GAAuBT,KAAMggC,GAAqB,KAAKhK,OAAOoN,EAAYruB,GAAM,GAEnGzV,EAAS,GACTtB,EAAO,GACb,IAAIulC,EAAkB,EAAGC,EAAe,EA8BxC,OA7BAZ,EAAct0B,OAAOhG,SAAQ,CAAC6F,EAAOzP,KACjC,IAAIX,EAAQ,KACZ,GAAIoQ,EAAM1B,QACN,GAAqB,MAAjB42B,EACAtlC,EAAQ,IAAI2iC,GAAQ,WAEnB,GAAIzoB,EAAQvZ,GACbX,EAAQ,IAAI2iC,GAAQ2C,EAAcG,WAGlC,IACIzlC,EAAQslC,EAAcG,KAE1B,MAAOliC,GACHvD,EAAQuD,OAKhB,IACIvD,EAAQulC,EAAiBC,KAE7B,MAAOjiC,GACHvD,EAAQuD,EAGhBhC,EAAOsD,KAAK7E,GACZC,EAAK4E,KAAKuL,EAAMpL,MAAQ,SAErBwU,GAAO0f,UAAU33B,EAAQtB,GAIpCylC,iBAAiBlP,GACb,MAAMxf,EAAOpN,EAAO/B,SAAS2uB,EAAGxf,KAAM,WAChChX,EAAQ4J,EAAO1B,UAAuB,MAAZsuB,EAAGx2B,MAAiBw2B,EAAGx2B,MAAQ,EAAG,YAC5DqiC,EAAWpgC,KAAKqhC,YAAY9rB,GAAQR,EAAKxL,MAAM,EAAG,KACxD,IAAK62B,EACD,OAAO,KAEX,MAAMl6B,EAAOzF,GAAuBT,KAAMggC,GAAqB,KAAKhK,OAAOoK,EAAS9xB,OAAQyG,EAAKxL,MAAM,IACvG,OAAO,IAAIg3B,GAAuBH,EAAUpgC,KAAKyhC,YAAYrB,GAAWl6B,EAAMnI,GAMlF2lC,SAASj8B,GACL,MAAM24B,EAAWpgC,KAAKuhC,SAAS95B,EAAIo7B,OAAO,IAC1C,OAAKzC,GAAYA,EAAShxB,UACf,KAKJ,IAAI+wB,GAAeC,EAAUpgC,KAAK2hC,cAAcvB,GAAWpgC,KAAKkjC,eAAe9C,EAAU34B,EAAIsN,KAAMtN,EAAIo7B,SAElHc,WAAW5uB,GACP,MAAM6uB,EAAUruB,GAAQR,GAClBqrB,EAAWpgC,KAAKwhC,SAAS1rB,GAAU8tB,EAAS,EAAG,IACrD,IAAKxD,EACD,OAAO,KAEX,MAAMl6B,EAAOzF,GAAuBT,KAAMggC,GAAqB,KAAKhK,OAAOoK,EAAS9xB,OAAQwH,GAAU8tB,EAAS,IAC/G,OAAO,IAAInD,GAAiBL,EAAUpgC,KAAKyhC,YAAYrB,GAAWl6B,GAEtEK,YAAYxI,GAER,OAAIA,aAAiB+iC,GACV/iC,EAGY,iBAAX,EACD,IAAI+iC,GAAUl9B,KAAKsJ,MAAMnP,IAGN,mBAAlBA,EAAY,OACb,IAAI+iC,GAAU/iC,EAAM8O,OAAO3E,EAAW6E,OAG1C,IAAI+zB,GAAU/iC,IAG7B8hC,GAAoB,IAAIp+B,QAAWq+B,GAAoB,IAAIr+B,QAAWs+B,GAAuB,IAAIt+B,QAAWu+B,GAAsB,IAAIv+B,QAAWm+B,GAAuB,IAAIh5B,QAAWq5B,GAAyB,SAAgCzgC,EAAKF,EAAQukC,GAEzP,GAAInvB,GAAYlV,GAAM,CAClB,MAAMghC,EAAWhhC,EAAIkH,cACrB,IAAK,MAAM05B,KAAY3/B,GAAuBT,KAAM+/B,GAAsB,KAAKzgC,SAC3E,GAAIkhC,IAAaxgC,KAAKyhC,YAAYrB,GAC9B,OAAOA,EAGfz4B,EAAO3D,mBAAmB,uBAAwB,WAAYxE,GAGlE,IAA0B,IAAtBA,EAAIsF,QAAQ,KAAa,CACzB,MAAM48B,EAAW,GACjB,IAAK,MAAO3+B,EAAMq9B,KAAa3/B,GAAuBT,KAAM+/B,GAAsB,KAC1Eh9B,EAAKjE,MAAM,KAAiB,KAAOU,GACnCkiC,EAAS9+B,KAAKw9B,GAGtB,GAAI9gC,EAAQ,CACR,MAAMwkC,EAAaxkC,EAAOJ,OAAS,EAAKI,EAAOA,EAAOJ,OAAS,GAAK,KACpE,IAAI6kC,EAAczkC,EAAOJ,OACrB8kC,GAAe,EACf3O,GAAMQ,QAAQiO,IAAiC,cAAnBA,EAAUllC,OACtColC,GAAe,EACfD,KAIJ,IAAK,IAAI9kC,EAAIyiC,EAASxiC,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC3C,MAAMqP,EAASozB,EAASziC,GAAGqP,OAAOpP,OAC9BoP,IAAWy1B,GAAiBC,GAAgB11B,IAAWy1B,EAAc,GACrErC,EAASuC,OAAOhlC,EAAG,GAI3B,IAAK,IAAIA,EAAIyiC,EAASxiC,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC3C,MAAMqP,EAASozB,EAASziC,GAAGqP,OAC3B,IAAK,IAAI2Z,EAAI,EAAGA,EAAI3oB,EAAOJ,OAAQ+oB,IAE/B,GAAKoN,GAAMQ,QAAQv2B,EAAO2oB,IAA1B,CAIA,GAAIA,GAAK3Z,EAAOpP,OAAQ,CACpB,GAAuB,cAAnBI,EAAO2oB,GAAGrpB,KACV,SAEJ8iC,EAASuC,OAAOhlC,EAAG,GACnB,MAGJ,GAAIK,EAAO2oB,GAAGrpB,OAAS0P,EAAO2Z,GAAGzb,SAAU,CACvCk1B,EAASuC,OAAOhlC,EAAG,GACnB,SAOhB,GAAwB,IAApByiC,EAASxiC,QAAgBI,GAAUA,EAAOJ,SAAWwiC,EAAS,GAAGpzB,OAAOpP,OAAQ,CAChF,MAAMglC,EAAU5kC,EAAOA,EAAOJ,OAAS,IACxB,MAAXglC,GAAmBz2B,MAAMN,QAAQ+2B,IAAiC,iBAArB,IAC7CxC,EAASuC,OAAO,EAAG,GAG3B,GAAwB,IAApBvC,EAASxiC,OACTyI,EAAO3D,mBAAmB,uBAAwB,OAAQxE,QAEzD,GAAIkiC,EAASxiC,OAAS,GAAK2kC,EAAa,CACzC,MAAMM,EAAWzC,EAAStjC,KAAKgmC,GAAMxgC,KAAKC,UAAUugC,EAAEv3B,YAAW/I,KAAK,MACtE6D,EAAO3D,mBAAmB,qCAAqCmgC,KAAa,OAAQ3kC,GAExF,OAAOkiC,EAAS,GAGpB,MAAMt6B,EAAS3G,GAAuBT,KAAM+/B,GAAsB,KAAKr/B,IAAIkO,GAAiBL,WAAW/O,GAAKqN,UAC5G,OAAIzF,GAGGO,EAAO3D,mBAAmB,uBAAwB,YAAaxE,IACvE0gC,GAAsB,SAA6B1gC,EAAKF,EAAQukC,GAE/D,GAAInvB,GAAYlV,GAAM,CAClB,MAAM2jC,EAAa3jC,EAAIkH,cACvB,IAAK,MAAM05B,KAAY3/B,GAAuBT,KAAM8/B,GAAmB,KAAKxgC,SACxE,GAAI6jC,IAAenjC,KAAK2hC,cAAcvB,GAClC,OAAOA,EAGfz4B,EAAO3D,mBAAmB,oBAAqB,aAAcxE,GAGjE,IAA0B,IAAtBA,EAAIsF,QAAQ,KAAa,CACzB,MAAM48B,EAAW,GACjB,IAAK,MAAO3+B,EAAMq9B,KAAa3/B,GAAuBT,KAAM8/B,GAAmB,KACvE/8B,EAAKjE,MAAM,KAAiB,KAAOU,GACnCkiC,EAAS9+B,KAAKw9B,GAGtB,GAAI9gC,EAAQ,CAER,IAAK,IAAIL,EAAIyiC,EAASxiC,OAAS,EAAGD,GAAK,EAAGA,IAClCyiC,EAASziC,GAAGqP,OAAOpP,OAASI,EAAOJ,QACnCwiC,EAASuC,OAAOhlC,EAAG,GAI3B,IAAK,IAAIA,EAAIyiC,EAASxiC,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC3C,MAAMqP,EAASozB,EAASziC,GAAGqP,OAC3B,IAAK,IAAI2Z,EAAI,EAAGA,EAAI3oB,EAAOJ,OAAQ+oB,IAE/B,GAAKoN,GAAMQ,QAAQv2B,EAAO2oB,KAItB3oB,EAAO2oB,GAAGrpB,OAAS0P,EAAO2Z,GAAGzb,SAAU,CACvCk1B,EAASuC,OAAOhlC,EAAG,GACnB,QAYhB,OAPwB,IAApByiC,EAASxiC,OACTyI,EAAO3D,mBAAmB,oBAAqB,OAAQxE,GAElDkiC,EAASxiC,OAAS,GAAK2kC,GAE5Bl8B,EAAO3D,mBAAmB,2BAA4B,OAAQxE,GAE3DkiC,EAAS,GAGpB,MAAMt6B,EAAS3G,GAAuBT,KAAM8/B,GAAmB,KAAKp/B,IAAIiO,GAAcJ,WAAW/O,GAAKqN,UACtG,OAAIzF,GAGGO,EAAO3D,mBAAmB,oBAAqB,YAAaxE,IC1vBhE,MCEMmI,GAAS,IAAIrE,EDFH,mCEAvB,IAWI+gC,GAAsBC,GAXtBvkC,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAQjF,MAAMskC,GACT3jC,YAAY4jC,EAAYC,EAAeC,EAASC,EAAMC,GAClDP,GAAqB7jC,IAAIR,UAAM,GAC/BskC,GAAqB9jC,IAAIR,UAAM,GAC/BD,GAAuBC,KAAMqkC,GAAsB,CAC/CG,WAAAA,EACAC,cAAAA,EACAC,QAASzmC,OAAOsK,OAAOtK,OAAO8N,OAAO,GAAI9N,OAAOD,KAAK0mC,GAASnmC,QAAO,CAACC,EAAOH,KACzEG,EAAMH,EAAEqI,eAAiBg+B,EAAQrmC,GAC1BG,IACR,MACHmmC,KAAgB,MAARA,EAAgB,KAAO,IAAIz9B,WAAWy9B,GAC9CC,QAAUA,GAAW,MACtB,KACH7kC,GAAuBC,KAAMskC,GAAsB,CAAE5gC,QAAS,IAAM,KAExE8G,WACI,MAAMm6B,EAAO1jC,EAASR,GAAuBT,KAAMqkC,GAAsB,KAAM,QAC/E,MAAO,oBAAoBrkC,KAAKwkC,mBAAmBG,EAAOpvB,GAAQovB,GAAQ,UAE1EH,iBAAe,OAAOvjC,EAASR,GAAuBT,KAAMqkC,GAAsB,KAAM,cACxFI,oBAAkB,OAAOxjC,EAASR,GAAuBT,KAAMqkC,GAAsB,KAAM,iBAC3FK,cAAY,OAAOzjC,EAASR,GAAuBT,KAAMqkC,GAAsB,KAAM,WACrFM,WACA,MAAMA,EAAO1jC,EAASR,GAAuBT,KAAMqkC,GAAsB,KAAM,QAC/E,OAAgB,MAARM,EAAgB,KAAO,IAAIz9B,WAAWy9B,GAE9CE,eACA,IACI,MAAMF,EAAO1jC,EAASR,GAAuBT,KAAMqkC,GAAsB,KAAM,QAC/E,OAAgB,MAARM,EAAgB,GAAK7K,GAAa6K,GAE9C,MAAOrjC,GACH,OAAOqG,GAAO5D,WAAW,wCAAyC,wBAAyB,CACvFY,UAAW,WAAYzC,KAAM,CAAE4iC,SAAU9kC,SAIjD+kC,eACA,IACI,OAAOnhC,KAAKsJ,MAAMlN,KAAK6kC,UAE3B,MAAOvjC,GACH,OAAOqG,GAAO5D,WAAW,kCAAmC,wBAAyB,CACjFY,UAAW,WAAYzC,KAAM,CAAE4iC,SAAU9kC,SAIrD,EAAEqkC,GAAuB,IAAI5iC,QAAW6iC,GAAuB,IAAI7iC,QAAW4K,OAAO24B,aACjF,MAAMN,EAAU1kC,KAAK0kC,QACf1mC,EAAOC,OAAOD,KAAK0mC,GACzB,IAAIhmC,EAAQ,EACZ,MAAO,CACHumC,KAAM,KACF,GAAIvmC,EAAQV,EAAKkB,OAAQ,CACrB,MAAMM,EAAMxB,EAAKU,KACjB,MAAO,CACHX,MAAO,CAACyB,EAAKklC,EAAQllC,IAAO0lC,MAAM,GAG1C,MAAO,CAAEnnC,WAAO2B,EAAWwlC,MAAM,KAI7CC,gBAAgBzhC,EAASpC,GACrB,IAAImjC,EAMAA,EALC/gC,EAKe,kCAAkC1D,KAAKwkC,cAAcxkC,KAAKykC,kBAAkB/gC,KAH5E,kCADhBA,EAAU,GAAG1D,KAAKwkC,cAAcxkC,KAAKykC,mBAMzC,MAAMK,EAAW,IAAIP,GAAc,IAAKE,EAAezkC,KAAK0kC,QAAS1kC,KAAK2kC,KAAM1jC,EAASR,GAAuBT,KAAMqkC,GAAsB,KAAM,iBAAc3kC,GAEhK,OADAK,GAAuB+kC,EAAUR,GAAsB,CAAE5gC,QAAAA,EAASpC,MAAAA,GAAS,KACpEwjC,EAEXM,mBAAmB1hC,EAAS2hC,GACX,MAATA,IACAA,EAAQ,MAEW,iBAAX,IAAwB7gC,OAAOC,UAAU4gC,IAAUA,EAAQ,IACnE19B,GAAO3D,mBAAmB,wBAAyB,QAASqhC,GAEhE,MAAM/jC,EAAQ,IAAInC,MAAMuE,GAAW,uBAEnC,MADAtE,EAAiBkC,EAAO,CAAE+jC,MAAAA,EAAOC,UAAU,IACrChkC,EAEVikC,UAAU/lC,GACN,OAAOQ,KAAK0kC,QAAQllC,EAAIkH,eAE5B8+B,UAEI,OAAgB,MADHvkC,EAASR,GAAuBT,KAAMqkC,GAAsB,KAAM,QAG/EO,cAAY,OAAO3jC,EAASR,GAAuBT,KAAMqkC,GAAsB,KAAM,WACzFoB,KACI,MAA4E,KAApEhlC,GAAuBT,KAAMskC,GAAsB,KAAK5gC,SAAkB1D,KAAKwkC,YAAc,KAAOxkC,KAAKwkC,WAAa,IAElIkB,WACI,GAAI1lC,KAAKylC,KACL,OAEJ,IAAI/hC,QAAEA,EAAOpC,MAAEA,GAAUb,GAAuBT,KAAMskC,GAAsB,KAC5D,KAAZ5gC,IACAA,EAAU,mBAAmB1D,KAAKwkC,cAAcxkC,KAAKykC,iBAEzD98B,GAAO5D,WAAWL,EAAS,eAAgB,CACvCkhC,QAAU5kC,KAAK4kC,SAAW,kBAAoBE,SAAU9kC,KAAMsB,MAAAA,KC3HnEzD,eAAe8nC,GAAOC,EAAKC,GAC9B,MAAMC,EAAWF,EAAIG,IAAIjnC,MAAM,KAAK,GAAG4H,cACtB,SAAbo/B,GAAoC,UAAbA,GACvBn+B,GAAO5D,WAAW,wBAAwB+hC,IAAY,wBAAyB,CAC3E5jC,KAAM,CAAE4jC,SAAAA,GACRnhC,UAAW,YAGfihC,EAAII,cAAgBJ,EAAIK,6BACxBt+B,GAAO5D,WAAW,8CAA+C,wBAAyB,CACtFY,UAAW,YAGnB,MAAMuhC,EAAO,CACT/gC,OAAQygC,EAAIzgC,OACZu/B,QAAS,IAAIyB,QAAQ14B,MAAM5B,KAAK+5B,IAChCjB,KAAMiB,EAAIjB,WAAQjlC,GAEhB0mC,QAAaC,MAAMT,EAAIG,IAAKG,GAC5BxB,EAAU,GAChB0B,EAAK1B,QAAQp8B,SAAQ,CAACvK,EAAOyB,KACzBklC,EAAQllC,EAAIkH,eAAiB3I,KAEjC,MAAM4mC,EAAO,IAAIz9B,iBAAiBk/B,EAAKE,eACvC,OAAO,IAAI/B,GAAc6B,EAAKG,OAAQH,EAAKI,WAAY9B,EAASC,EAAMiB,GC1B1E,IAWIa,GAXA1mC,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAMxF,SAASwC,GAAM1E,EAAOa,EAAMmE,GACxB,UAAY,IAAWnE,EACnB,MAAM,IAAIO,MAAM,WAAW4D,KAE/B,OAAOhF,EAEJ,MAAM2oC,GACT9lC,YAAYmlC,GACRU,GAAoBjmC,IAAIR,UAAM,GAC9BD,GAAuBC,KAAMymC,GAAqB,CAC9CE,eAAe,EACfC,MAAM,EACNlC,QAAS,GACTv/B,OAAQ,GACR0gC,QAAS,IACTE,IAAKtjC,GAAMsjC,EAAK,SAAU,QAC3B,KAGHA,UAAQ,OAAO9kC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,OAChFV,QAAIA,GACJ5kC,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,MAAOhkC,GAAMsjC,EAAK,SAAU,QAG7FpB,WACA,MAAMA,EAAO1jC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,QAC9E,OAAY,MAAR9B,EACO,KAEP3kC,KAAKoB,WACE,IAAI8F,WAAWy9B,GAEnBA,EAEPA,SAAKA,GACL,GAAY,MAARA,EACAxjC,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,YAAQ/mC,GACzEyB,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,gBAAY/mC,QAE5E,GAAsB,iBAAV,EAEbyB,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,OAAQpN,GAAYsL,IACrFxjC,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,WAAY,mBAE5E,GAAI9B,aAAgBz9B,WACrB/F,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,OAAQ9B,GACzExjC,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,WAAY,gCAE5E,CAAA,GAAsB,iBAAV,EAKb,MAAM,IAAItnC,MAAM,gBAJhBgC,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,OAAQpN,GAAYz1B,KAAKC,UAAU8gC,KACpGxjC,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,WAAY,qBAMrFjB,UACI,OAAoF,MAA5EvkC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,QAGzEthC,aACA,MAAMA,EAASlE,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,UAChF,OAAIthC,EACOA,EAAO2tB,cAEd9yB,KAAK2kC,KACE,OAEJ,MAEPx/B,WAAOA,GACO,MAAVA,IACAA,EAAS,IAEbhE,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,SAAUhkC,GAAM0C,EAAQ,SAAU,WAGnGu/B,cACA,MAAMA,EAAUzmC,OAAO8N,OAAO,GAAI9K,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,YAC7FI,EAAW5lC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,YAYlF,OAXIzmC,KAAKgmC,YAELhmC,KAAK8mC,YACLpC,EAAQ,mBAAqB,QAEF,MAA3BA,EAAQ,iBAA2BmC,IACnCnC,EAAQ,gBAAkBmC,GAE1B7mC,KAAK2kC,OACLD,EAAQ,kBAAoBhiC,OAAO1C,KAAK2kC,KAAKzlC,SAE1CjB,OAAOsK,OAAOm8B,GAEzBa,UAAU/lC,GACN,OAAOQ,KAAK0kC,QAAQllC,EAAIkH,eAE5BqgC,UAAUvnC,EAAKzB,GACX,MAAM2mC,EAAUzjC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,WACjFtlC,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,UAAW/B,GAC5EA,EAAQjiC,GAAMjD,EAAK,SAAU,OAAOkH,eAAiBhE,OAAO3E,GAEhEipC,eACI7lC,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,UAAW,IAEhF,EAAEA,GAAsB,IAAIhlC,QAAW4K,OAAO24B,aAC1C,MAAMN,EAAU1kC,KAAK0kC,QACf1mC,EAAOC,OAAOD,KAAK0mC,GACzB,IAAIhmC,EAAQ,EACZ,MAAO,CACHumC,KAAM,KACF,GAAIvmC,EAAQV,EAAKkB,OAAQ,CACrB,MAAMM,EAAMxB,EAAKU,KACjB,MAAO,CACHX,MAAO,CAACyB,EAAKklC,EAAQllC,IAAO0lC,MAAM,GAG1C,MAAO,CAAEnnC,WAAO2B,EAAWwlC,MAAM,KAKzCc,kBACA,OAAO/kC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,UAAY,KAExFQ,eAAeC,EAAU3pB,GACjB2pB,EAAS//B,MAAM,MACfQ,GAAO3D,mBAAmB,wCAAyC,WAAY,cAEnF7C,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,QAAS,GAAGS,KAAY3pB,KAOzFupB,gBACA,OAAO7lC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,QAExEK,cAAU/oC,GACVoD,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,SAAU1oC,GAG3EkoC,kCACA,QAAShlC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,iBAE1ER,gCAA4BloC,GAC5BoD,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,gBAAiBhkC,GAAM1E,EAAO,UAAW,gCAG1G8nC,cAAY,OAAO5kC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,WACpFZ,YAAQA,GAER,IADAA,EAAUpjC,GAAMojC,EAAS,SAAU,aACpB,EACX,MAAM,IAAI1mC,MAAM,oBAEpBgC,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,UAAWZ,GAEhFsB,SAASC,GAEL,MAAM9N,EAAUt5B,KAAK+lC,IAAIjnC,MAAM,KAAK,GAAG4H,cACjCrH,EAAS+nC,EAAStoC,MAAM,KAAK,GAAG4H,cACtC,GAAoB,QAAhB1G,KAAKmF,QAAiC,UAAZm0B,GAAkC,SAAXj6B,IAChD+nC,EAASjgC,MAAM,aAChB,OAAOQ,GAAO5D,WAAW,uBAAwB,wBAAyB,CACtEY,UAAW,YAAY3E,KAAKmF,UAAUvB,KAAKC,UAAU7D,KAAK+lC,WAAWniC,KAAKC,UAAUujC,QAI5F,MAAMxB,EAAM,IAAIc,GAAaU,GAW7B,OAVAxB,EAAIzgC,OAAS,MACbygC,EAAIkB,UAAY9mC,KAAK8mC,UACrBlB,EAAIC,QAAU7lC,KAAK6lC,QACnB1kC,EAASV,GAAuBmlC,EAAKa,GAAqB,KAAM,OAAQxlC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,SACzItlC,EAASV,GAAuBmlC,EAAKa,GAAqB,KAAM,UAAWxoC,OAAO8N,OAAO,GAAI9K,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,aAC9JtlC,EAASV,GAAuBmlC,EAAKa,GAAqB,KAAM,WAAYxlC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,aAKtIb,EAEXp8B,QACI,MAAMA,EAAQ,IAAIk9B,GAAa1mC,KAAK+lC,KAEpC5kC,EAASV,GAAuB+I,EAAOi9B,GAAqB,KAAM,SAAUxlC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,WAE7I,MAAM9B,EAAO1jC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,QAc9E,OAbAtlC,EAASV,GAAuB+I,EAAOi9B,GAAqB,KAAM,OAAiB,MAAR9B,OAAgBjlC,EAAY,IAAIwH,WAAWy9B,IACtHxjC,EAASV,GAAuB+I,EAAOi9B,GAAqB,KAAM,WAAYxlC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,aAE/ItlC,EAASV,GAAuB+I,EAAOi9B,GAAqB,KAAM,UAAWxoC,OAAO8N,OAAO,GAAI9K,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,aAEhKtlC,EAASV,GAAuB+I,EAAOi9B,GAAqB,KAAM,QAASxlC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,UACxIzmC,KAAK8mC,YACLt9B,EAAMs9B,WAAY,GAEtBt9B,EAAMq8B,QAAU7lC,KAAK6lC,QACjB7lC,KAAKimC,8BACLz8B,EAAMy8B,6BAA8B,GAEjCz8B,EAEXjB,SAEI,MAAMo8B,EAAO1jC,EAASR,GAAuBT,KAAMymC,GAAqB,KAAM,QAM9E,OALY,MAAR9B,GACAxjC,EAASV,GAAuBT,KAAMymC,GAAqB,KAAM,OAAQ,IAAIv/B,WAAWy9B,IAE5F1mC,OAAOsK,OAAO9H,GAAuBT,KAAMymC,GAAqB,KAAK/B,SACrEzmC,OAAOsK,OAAO9H,GAAuBT,KAAMymC,GAAqB,MACzDzmC,KAEXoB,WACI,OAAOnD,OAAOmD,SAASX,GAAuBT,KAAMymC,GAAqB,OC9NjF5oC,eAAewpC,GAAMC,GACjB,OAAO,IAAIppC,SAASI,IAAcic,WAAWjc,EAASgpC,MAG1D,SAASC,KAAY,OAAO,IAAK1sB,MAAQ0sB,UAOzC,IAAIC,IAAe,EAGZ3pC,eAAe4pC,GAAUC,GAC5B,MAAMC,EAAgC,mBAAY,CAC9C/C,QAAS,IAAI8B,GAAagB,IACzBA,aAAsBhB,GAAgB,CACvC9B,QAAS8C,GACTzpC,OAAO8N,OAAO,GAAI27B,GACtB,GAAoB,MAAhBC,EAAK/C,QACL,OAAOj9B,GAAO3D,mBAAmB,kBAAmB,aAAc0jC,GAEtE,IAAI9B,EAAM+B,EAAK/C,QAAQp7B,QAAQjB,SAC/B,OAAQo/B,EAAK/C,QAAQmB,IAAIjnC,MAAM,KAAK,IAChC,IAAK,OAAQ,CACT,MAAMqI,EAAQy+B,EAAIG,IAAI5+B,MAAM,oCAC5B,GAAIA,EACA,IACI,MAAMu9B,EAAU,CACZ,eAAiBv9B,EAAM,GAAKA,EAAM,GAAK,cAErCw9B,EAAQx9B,EAAM,GAAK+N,GAAa/N,EAAM,IAvBrDkyB,GAuBqElyB,EAAM,GA1BpEuxB,QAAQ,yBAAyB,CAACv6B,EAAKoD,IAC1CmB,OAAOC,aAAa2E,SAAS/F,EAAM,QA0B9B,OAAO,IAAIgjC,GAAc,IAAK,KAAMG,EAASC,EAAMiB,EAAIp8B,SAE3D,MAAOlI,GACH,OAAO,IAAIijC,GAAc,IAAK,4CAA6C,GAAI,KAAMqB,EAAIp8B,SAGjG,OAAO,IAAI+6B,GAAc,IAAK,+CAAgD,GAAI,KAAMqB,EAAIp8B,SAEhG,IAAK,OACL,IAAK,OACL,IAAK,KACD,MAAM,IAAIrK,MAAM,uBAEpB,IAAK,OACL,IAAK,QACD,MACJ,QACI,MAAM,IAAIA,MAAM,sBAExB,MAAMyoC,EAAkC,MAAtBD,EAAKE,cAAyBF,EAAKE,cAAgB,GACrE,IAAKrjC,OAAOC,UAAUmjC,IAAaA,EAAW,EAC1C,OAAOjgC,GAAO3D,mBAAmB,wBAAyB,aAAc0jC,GAE5E,MAAMI,EAA6C,MAA7BH,EAAKI,qBAAgCJ,EAAKI,qBAAuB,IAEvF,IAAKvjC,OAAOC,UAAUqjC,IAAiBF,EAAW,EAC9C,OAAOjgC,GAAO3D,mBAAmB,+BAAgC,aAAc0jC,GAEnF,MAAMM,EAAmC,MAAtBL,EAAKM,cAAyBN,EAAKM,cAAgB,KACtE,GAAID,GAAoC,mBAAvB,EACb,OAAOrgC,GAAO3D,mBAAmB,iCAAkC,aAAc0jC,GAErF,MAAMQ,EAAmBP,EAAKO,kBAAoB,KAClD,GAAIA,GAAkD,mBAA9B,EACpB,OAAOvgC,GAAO3D,mBAAmB,oCAAqC,aAAc0jC,GAExF,MAAMS,EAAkBR,EAAKQ,iBAAmB,KAChD,GAAIA,GAAgD,mBAA7B,EACnB,OAAOxgC,GAAO3D,mBAAmB,mCAAoC,aAAc0jC,GAGvF,MAAMU,EAAKb,KACX,IAAIzC,EAAW,KACf,IAAK,IAAIlyB,EAAI,EAAGA,EAAIg1B,EAAUh1B,IAAK,CAC/B,IAAIgyB,EAAUgB,EAAIp8B,QACd0+B,IACAtD,SAAiBsD,EAAiBtD,EAAQr8B,WAAWiB,SAGzD,GADsB+9B,KAAYa,EACd,EAChB,OAAOzgC,GAAO5D,WAAW,UAAW,UAAW,CAAEY,UAAW,UAAWigC,QAAAA,IAI3E,GAFAE,QAAiBa,GAAOf,GAEpBhyB,EAAIg1B,EAAU,CACd,GAA4B,MAAxB9C,EAASN,YAA8C,MAAxBM,EAASN,WAAoB,CAG5D,IACIoB,EAAMhB,EAAQuC,SAASrC,EAASJ,QAAQ0C,UAAY,IACpD,SAEJ,MAAO9lC,IAGP,OAAOwjC,EAEN,GAA4B,MAAxBA,EAASN,aACG,MAAbwD,SAA4BA,EAAUpD,EAAQr8B,SAAUu8B,EAAUlyB,IAAK,CACvE,MAAMy1B,EAAavD,EAASJ,QAAQ,eACR,iBAAxB,GAAoC2D,EAAWlhC,MAAM,uBAC/CkgC,GAAM//B,SAAS+gC,UAGfhB,GAAMS,EAAe/gC,KAAKuhC,MAAMvhC,KAAKwhC,SAAWxhC,KAAKyhC,IAAI,EAAG51B,KAEtE,UAOZ,GAAIu1B,EACA,IACI,aAAaA,EAAgBvD,EAASE,GAE1C,MAAOxjC,GAEH,GAAIA,EAAMgkC,UAAqC,iBAAjBhkC,EAAW,MAAgB,CACrD,GAAIsR,EAAIg1B,EAAU,OACRP,GAAM/lC,EAAM+jC,OAClB,SAGJ,OAAOP,EAASK,gBAAgB,+BAAgC7jC,GAGpEwjC,EAASK,gBAAgB,oCAAqC7jC,GAAOokC,WAG7E,OAAOZ,EAGX,OAAOA,EAASK,gBAAgB,gCAEpCsC,GAAUvgB,KAAO,WACbsgB,IAAe,GAGnBC,GAAUgB,WAAa,SAAUC,KAEjCjB,GAAUkB,eAAiB,SAAUD,GAC7BlB,IACA7/B,GAAO5D,WAAW,sBAAuB,wBAAyB,CAC9DY,UAAW,oBAKvB8iC,GAAUmB,aAAe,SAAUF,GAC3BlB,IACA7/B,GAAO5D,WAAW,sBAAuB,wBAAyB,CAC9DY,UAAW,kBClKhB,MCEMgD,GAAS,IAAIrE,EDFH,yCEAvB,IAWIiH,GAAIs+B,GAA2BC,GAX/B/oC,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAUxF,MAAM0Q,GAAO5K,OAAO,GACdyxB,GAAQ,IAAItwB,WAAW,IACvB6hC,GAAW,qEACjB,SAASC,GAAW5hC,EAAQ2O,GACxB,GAAe,OAAX3O,EACA,OAAO,KAEX,MAAMC,EAASgJ,GAASyF,GAAU1O,EAAQ2O,EAAOA,EAAQ,KACnD7W,EAASmR,GAASyF,GAAU1O,EAAQC,EAAQA,EAAS,KAC3D,OAAOyO,GAAU1O,EAAQC,EAAS,GAAIA,EAAS,GAAKnI,GAExD,SAAS+pC,GAAY7hC,EAAQ2O,GACzB,IACI,MAAMP,EAAQwzB,GAAW5hC,EAAQ2O,GACjC,GAAa,MAATP,EACA,OAAOskB,GAAatkB,GAG5B,MAAOlU,IACP,OAAO,KAEX,SAAS4nC,GAAOnrC,GACZ,MAAMqJ,EAASqJ,GAAQ1S,GACvB,GAAIqJ,EAAOlI,OAAS,GAChB,MAAM,IAAIC,MAAM,+BAEpB,MAAMgqC,EAAS,IAAIjiC,WAAW,IAE9B,OADAiiC,EAAO3oC,IAAI4G,EAAQ,GAAKA,EAAOlI,QACxBiqC,EAEX,SAASC,GAASrrC,GACd,GAAKA,EAAMmB,OAAS,IAAQ,EACxB,OAAOnB,EAEX,MAAMqJ,EAAS,IAAIF,WAA0C,GAA/BH,KAAKsS,KAAKtb,EAAMmB,OAAS,KAEvD,OADAkI,EAAO5G,IAAIzC,GACJqJ,EAGX,SAASiiC,GAAY1zB,GACjB,MAAMvO,EAAS,GACf,IAAIkiC,EAAY,EAEhB,IAAK,IAAIrqC,EAAI,EAAGA,EAAI0W,EAAMzW,OAAQD,IAC9BmI,EAAOxE,KAAK40B,IACZ8R,GAAa,GAEjB,IAAK,IAAIrqC,EAAI,EAAGA,EAAI0W,EAAMzW,OAAQD,IAAK,CACnC,MAAM8V,EAAOpN,GAAO/B,SAAS+P,EAAM1W,IAEnCmI,EAAOnI,GAAKiqC,GAAOI,GAEnBliC,EAAOxE,KAAKsmC,GAAOn0B,EAAK7V,SACxBkI,EAAOxE,KAAKwmC,GAASr0B,IACrBu0B,GAAa,GAAmC,GAA9BviC,KAAKsS,KAAKtE,EAAK7V,OAAS,IAE9C,OAAOwW,GAAOtO,GAIlB,SAASmiC,GAAYp/B,GAUjB,OATIA,EAAKhD,MAAM,qBACXgD,EAAOA,EAAK5C,UAAU,IAEjB4C,EAAKhD,MAAM,eAChBgD,EAAOA,EAAK5C,UAAU,GAGtBI,GAAO3D,mBAAmB,0BAA2B,OAAQmG,GAE1D,gCAAiCA,IAIrC,MAAMq/B,GACT5oC,YAAYmC,GACR3D,EAAiBY,KAAM,CAAE+C,KAAAA,IAE7B0mC,SAASC,GACL,OAAO1pC,KAEX2pC,iBAAiBC,GACb,OAAO,EAEX/rC,oBAAoB+rC,EAAUnX,GAC1B,MAAM,IAAItzB,MAAM,oBAEpBtB,oBAAoB+rC,EAAU70B,GAC1B,MAAM,IAAI5V,MAAM,qBASxB,MAAM0qC,GAAc,IAAI5gC,OAAO,kBAAoB,KAC7C6gC,GAAW,CACb,IAAI7gC,OAAO,mBAAqB,KAChC,IAAIA,OAAO,gBAAiB,KAC5B4gC,GACA,IAAI5gC,OAAO,mCAAoC,MAE5C,MAAM8gC,GACTnpC,YAAYopC,EAAUvX,EAAS1vB,GAE3B8lC,GAA0BroC,IAAIR,UAAM,GACpCZ,EAAiBY,KAAM,CAAEgqC,SAAAA,EAAUvX,QAAAA,EAAS1vB,KAAAA,IAC5ChD,GAAuBC,KAAM6oC,GAA2B,KAAM,KAElEhrC,yBAiBI,OAhBK4C,GAAuBT,KAAM6oC,GAA2B,MAEzD9oC,GAAuBC,KAAM6oC,GAA2B7oC,KAAKgqC,SAASzpC,KAAK,CACvEuL,GAAI9L,KAAKyyB,QACT1d,KAAM,+EACP3G,MAAMhH,GACGO,GAAO1B,UAAUmB,KAAYuJ,KACtCs5B,OAAO3oC,IACN,GAAmB,mBAAfA,EAAMC,KACN,OAAO,EAIX,MADAxB,GAAuBC,KAAM6oC,GAA2B,KAAM,KACxDvnC,KACN,WAEKb,GAAuBT,KAAM6oC,GAA2B,KAEzEhrC,aAAa2iC,EAAU0J,EAAa,MAEhC,MAAMC,EAAWz0B,GAAO,CAAC8qB,EAAUpE,GAASp8B,KAAK+C,MAAOmnC,IAClD3V,EAAK,CACPzoB,GAAI9L,KAAKyyB,QACT2X,gBAAgB,EAChBr1B,KAAMo1B,GAGV,IAAIryB,GAAU,QACJ9X,KAAKqqC,qBACXvyB,GAAU,EAEVyc,EAAGxf,KAAOW,GAAO,CAAC,aAAc2zB,GAAY,CAAC/M,GAAUt8B,KAAK+C,MAAOonC,OAEvE,IACI,IAAIp1B,QAAa/U,KAAKgqC,SAASzpC,KAAKg0B,GACpC,OAAK5sB,GAAO/B,SAASmP,GAAM7V,OAAS,IAAQ,EACjCyI,GAAO5D,WAAW,uBAAwB,iBAAkB,CAC/Dy+B,YAAajO,EAAIxf,KAAAA,IAGrB+C,EACOkxB,GAAWj0B,EAAM,GAErBA,EAEX,MAAOzT,GACH,GAAmB,mBAAfA,EAAMC,KACN,MAAMD,EAGd,OAAO,KAEXzD,iBAAiB+rC,EAAW,IACxB,GAAiB,KAAbA,EACA,IAEI,MAAMxiC,QAAepH,KAAKsqC,OAAO,cAEjC,GAAe,OAAXljC,GAAmBA,IAAW2hC,GAC9B,OAAO,KAGX,aADsB/oC,KAAKgqC,SAASO,cACrBC,UAAUC,YAAYrjC,GAEzC,MAAO9F,GACH,GAAmB,mBAAfA,EAAMC,KACN,OAAO,KAEX,MAAMD,EAGd,IAAIopC,EAAa,KACjB,IAAK,MAAMC,KAAU3qC,KAAKgqC,SAASY,QAC/B,GAAMD,aAAkBnB,IAGpBmB,EAAOhB,iBAAiBC,GAAW,CACnCc,EAAaC,EACb,MAGR,GAAkB,MAAdD,EACA,OAAO,KAGX,MAAM31B,EAAOi0B,SAAkBhpC,KAAKsqC,OAAO,aAAcpB,GAAOU,KAAe,KAAM,GAErF,GAAY,MAAR70B,GAAyB,OAATA,EAChB,OAAO,KAGX,MAAM0d,QAAgBiY,EAAWG,cAAcjB,EAAU70B,GACzD,OAAe,MAAX0d,EACOA,EAEJ9qB,GAAO5D,WAAW,oBAAqB,wBAAyB,CACnEY,UAAW,cAAcilC,KACzB1nC,KAAM,CAAE0nC,SAAAA,EAAU70B,KAAAA,KAG1BlX,cAAc2B,GAEV,IAAIsrC,EAAWzR,GAAY75B,GAG3B,MAAMurC,EAAWpjC,GAAO/B,SAAS8P,GAAO,CAACwzB,GAAO,IAAKA,GAAO4B,EAAS5rC,QAAS4rC,KACxEE,EAAWhC,SAAkBhpC,KAAKsqC,OAAO,aAAclB,GAAS2B,KAAe,KAAM,GAC3F,OAAgB,MAAZC,GAAiC,OAAbA,EACb,KAEJlR,GAAakR,GAExBntC,uBAEI,MAAMmtC,EAAWhC,SAAkBhpC,KAAKsqC,OAAO,eAAkB,KAAM,GAEvE,GAAgB,MAAZU,GAAiC,OAAbA,EACpB,OAAO,KAGX,MAAMC,EAAOD,EAAS7jC,MAAM,4EAC5B,GAAI8jC,EAAM,CACN,MAAMC,EAAsB,aAAZD,EAAK,GAAqB,OAAS,OAC7C/rC,EAASoI,SAAS2jC,EAAK,GAAI,IACjC,GAAIA,EAAK,GAAG/rC,SAAoB,EAATA,EACnB,MAAO,GAAGgsC,OAAa12B,GAAa,KAAOy2B,EAAK,MAIxD,MAAME,EAAQH,EAAS7jC,MAAM,iCAC7B,OAAIgkC,GAA6B,KAApBA,EAAM,GAAGjsC,OACX,SAAUisC,EAAM,KAEpBxjC,GAAO5D,WAAW,2CAA4C,wBAAyB,CAC1FY,UAAW,mBACXzC,KAAM,CAAE6S,KAAMi2B,KAGtBntC,kBACI,aAAcmC,KAAKorC,cAAcrF,IAErCloC,mBACI,MAAMwtC,EAAU,CAAC,CAAEzsC,KAAM,OAAQb,MAAOiC,KAAK+C,OAC7C,IAGI,MAAMuoC,QAAetrC,KAAKurC,QAAQ,UAClC,GAAc,MAAVD,EAEA,MADAD,EAAQzoC,KAAK,CAAEhE,KAAM,UAAWb,MAAO,KACjC,IAAIoB,MAAM,WAEpBksC,EAAQzoC,KAAK,CAAEhE,KAAM,SAAUb,MAAOutC,IACtC,IAAK,IAAIrsC,EAAI,EAAGA,EAAI6qC,GAAS5qC,OAAQD,IAAK,CACtC,MAAMkI,EAAQmkC,EAAOnkC,MAAM2iC,GAAS7qC,IACpC,GAAa,MAATkI,EACA,SAEJ,MAAM+jC,EAAS/jC,EAAM,GAAGT,cACxB,OAAQwkC,GACJ,IAAK,QACL,IAAK,OAED,OADAG,EAAQzoC,KAAK,CAAEhE,KAAM,MAAOb,MAAOutC,IAC5B,CAAED,QAAAA,EAAStF,IAAKuF,GAC3B,IAAK,OAAQ,CACT,MAAMvF,EAAMwD,GAAY+B,GAGxB,OAFAD,EAAQzoC,KAAK,CAAEhE,KAAM,OAAQb,MAAOutC,IACpCD,EAAQzoC,KAAK,CAAEhE,KAAM,MAAOb,MAAOgoC,IAC5B,CAAEsF,QAAAA,EAAStF,IAAAA,GAEtB,IAAK,SACL,IAAK,UAAW,CAEZ,MAAMvF,EAAuB,WAAX0K,EAAuB,aAAe,aACxDG,EAAQzoC,KAAK,CAAEhE,KAAMssC,EAAQntC,MAAOutC,IAEpC,MAAME,QAAcxrC,KAAKozB,aACzB,GAAa,MAAToY,EAEA,MADAH,EAAQzoC,KAAK,CAAEhE,KAAM,SAAUb,MAAO,KAChC,IAAIoB,MAAM,UAEpB,MAAM2O,GAAS3G,EAAM,IAAM,IAAIrI,MAAM,KACrC,GAAqB,IAAjBgP,EAAM5O,OAEN,MADAmsC,EAAQzoC,KAAK,CAAEhE,KAAM,IAAIssC,QAAcntC,MAAQoJ,EAAM,IAAM,KACrD,IAAIhI,MAAM,SAEpB,MAAMqrC,SAAmBxqC,KAAKgqC,SAASO,cAAcC,UAC/CiB,EAAOjB,EAAU/X,QAAQ3kB,EAAM,IAC/B49B,EAAUxC,GAAOp7B,EAAM,IAE7B,GAAe,WAAXo9B,EAAqB,CAErB,MAAMS,EAAanB,EAAUC,kBAAkBzqC,KAAKgqC,SAASzpC,KAAK,CAC9DuL,GAAI2/B,EAAM12B,KAAMW,GAAO,CAAC,aAAcg2B,OAE1C,GAAIF,IAAUG,EAEV,MADAN,EAAQzoC,KAAK,CAAEhE,KAAM,SAAUb,MAAO4tC,IAChC,IAAIxsC,MAAM,UAEpBksC,EAAQzoC,KAAK,CAAEhE,KAAM,QAASb,MAAO4tC,SAEpC,GAAe,YAAXT,EAAsB,CAE3B,MAAMU,EAAUjkC,GAAO1B,gBAAgBjG,KAAKgqC,SAASzpC,KAAK,CACtDuL,GAAI2/B,EAAM12B,KAAMW,GAAO,CAAC,aAAcY,GAAYk1B,EAAO,IAAKE,OAElE,IAAKE,EAED,MADAP,EAAQzoC,KAAK,CAAEhE,KAAM,WAAYb,MAAO,MAClC,IAAIoB,MAAM,YAEpBksC,EAAQzoC,KAAK,CAAEhE,KAAM,UAAWb,MAAO6tC,EAAQphC,aAGnD,MAAM+pB,EAAK,CACPzoB,GAAIgC,EAAM,GACViH,KAAMW,GAAO,CAAC8qB,EAAUkL,KAE5B,IAAIG,EAAc5C,SAAkBjpC,KAAKgqC,SAASzpC,KAAKg0B,GAAK,GAC5D,GAAmB,MAAfsX,EAEA,MADAR,EAAQzoC,KAAK,CAAEhE,KAAM,gBAAiBb,MAAO,KACvC,IAAIoB,MAAM,iBAEpBksC,EAAQzoC,KAAK,CAAEhE,KAAM,oBAAqBb,MAAO8tC,IAElC,YAAXX,IACAW,EAAcA,EAAYnT,QAAQ,OAAQnjB,GAAQm2B,GAASnkC,UAAU,IACrE8jC,EAAQzoC,KAAK,CAAEhE,KAAM,wBAAyBb,MAAO8tC,KAGrDA,EAAY1kC,MAAM,aAClB0kC,EAActC,GAAYsC,IAE9BR,EAAQzoC,KAAK,CAAEhE,KAAM,eAAgBb,MAAO8tC,IAE5C,IAAIC,EAAW,GACf,MAAMhH,QAAiB2C,GAAUoE,GACjC,IACIC,EAAWhH,EAASC,SAExB,MAAOzjC,GACH,IACI+pC,EAAQzoC,KAAK,CAAEhE,KAAM,YAAab,MAAO+mC,EAASD,WAEtD,MAAOvjC,GACH,MAAMkU,EAAQsvB,EAASH,KAIvB,MAHInvB,GACA61B,EAAQzoC,KAAK,CAAEhE,KAAM,YAAab,MAAOwX,GAAQC,KAE/ClU,EAEV,MAAMA,EAEV,IAAKwqC,EAED,MADAT,EAAQzoC,KAAK,CAAEhE,KAAM,YAAab,MAAO,KACnC,IAAIoB,MAAM,aAEpBksC,EAAQzoC,KAAK,CAAEhE,KAAM,WAAYb,MAAO6F,KAAKC,UAAUioC,KAEvD,IAAIC,EAAWD,EAASE,MACxB,GAA0B,iBAAd,EAER,MADAX,EAAQzoC,KAAK,CAAEhE,KAAM,YAAab,MAAO,KACnC,IAAIoB,MAAM,aAEpB,GAAI4sC,EAAS5kC,MAAM,6BAGd,CAGD,GAAY,MADC4kC,EAAS5kC,MAAM0iC,IAGxB,MADAwB,EAAQzoC,KAAK,CAAEhE,KAAM,iBAAkBb,MAAOguC,IACxC,IAAI5sC,MAAM,kBAEpBksC,EAAQzoC,KAAK,CAAEhE,KAAM,gBAAiBb,MAAOguC,IAC7CA,EAAWxC,GAAYwC,GAG3B,OADAV,EAAQzoC,KAAK,CAAEhE,KAAM,MAAOb,MAAOguC,IAC5B,CAAEV,QAAAA,EAAStF,IAAKgG,MAKvC,MAAOzqC,GACHkG,QAAQC,IAAI,KAAMnG,GAEtB,MAAO,CAAE+pC,QAAAA,EAAStF,IAAK,MAE3Bx/B,sBAAsByjC,EAAUjnC,GAC5B,IAAIkpC,EAAclpC,EAClB,OAAa,CACT,GAAoB,KAAhBkpC,GAAsC,MAAhBA,EACtB,OAAO,KAIX,GAAa,QAATlpC,GAAkC,QAAhBkpC,EAClB,OAAO,KAGX,MAAMR,QAAahrC,GAAuBspC,GAAax/B,GAAI,IAAKu+B,IAA0BvoC,KAAKwpC,GAAaC,EAAUiC,GAEtH,GAAY,MAARR,EAAc,CACd,MAAMxW,EAAW,IAAI8U,GAAYC,EAAUyB,EAAM1oC,GAEjD,OAAIkpC,IAAgBlpC,SAAgBkyB,EAASoV,mBAGtCpV,EAFI,KAKfgX,EAAcA,EAAYntC,MAAM,KAAKyK,MAAM,GAAGzF,KAAK,OAI/DyG,GAAKw/B,GAAalB,GAA4B,IAAIpnC,QAAWqnC,GAA2BjrC,eAAwCmsC,EAAUjnC,GACtI,MAAMmpC,QAAgBlC,EAASO,aACzB4B,EAAYD,EAAQE,UAAU,0BAEpC,IAAKD,EACD,OAAOxkC,GAAO5D,WAAW,+BAAgC,wBAAyB,CAC9EY,UAAW,cAAezC,KAAM,CAAEgqC,QAASA,EAAQnpC,QAG3D,IAEI,MAAMonC,QAAiBH,EAASzpC,KAAK,CACjCuL,GAAIqgC,EAAU1Z,QACd1d,KAAMW,GAAO,CAAC,aAAe0mB,GAASr5B,KACtCqnC,gBAAgB,IAEdqB,EAAOS,EAAQ1B,UAAUC,YAAYN,GAC3C,OAAIsB,IAAS31B,GAAUizB,GAAU,EAAG,IACzB,KAEJ0C,EAEX,MAAOnqC,GAGH,MAAMA,EAEV,OAAO,MCvdJ,MCEMqG,GAAS,IAAIrE,EDFH,2CEAvB,IAWI+oC,GAXAtsC,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAQxF,MAAMiQ,GAAOnK,OAAO,GACd4K,GAAO5K,OAAO,GACdumC,GAAOvmC,OAAO,GACdwmC,GAAQxmC,OAAO,IACfymC,GAAQzmC,OAAO,IACf0mC,GAAQ1mC,OAAO,IACf8O,GAAS9O,OAAO,KAChB2mC,IAAe/7B,IAAQkE,IAAUlE,GACjCxE,GAAS,GACTwgC,GAAO,qEACN,MAAMC,GACThsC,YAAYqE,EAAOkrB,EAAGzO,EAAGjjB,GACrB4tC,GAAiB7rC,IAAIR,UAAM,GAC3B2H,GAAO5C,cAAcE,EAAOkH,GAAQ,aACpCpM,GAAuBC,KAAMqsC,GAAkB,CAAElc,EAAAA,EAAGzO,EAAAA,EAAGjjB,EAAAA,EAAGouC,SAAU,MAAQ,KAE5E1c,QAAM,OAAOlvB,EAASR,GAAuBT,KAAMqsC,GAAkB,KAAM,KAC3Elc,MAAEpyB,GACwB,KAAtB8X,GAAW9X,IACX4J,GAAO3D,mBAAmB,YAAa,QAASjG,GAEpDoD,EAASV,GAAuBT,KAAMqsC,GAAkB,KAAM,IAAK92B,GAAQxX,IAE3E2jB,QAAM,OAAOzgB,EAASR,GAAuBT,KAAMqsC,GAAkB,KAAM,KAC3E3qB,MAAE3jB,GACwB,KAAtB8X,GAAW9X,GACX4J,GAAO3D,mBAAmB,YAAa,QAASjG,GAEtB,IAArB+W,GAAS/W,GAAO,IACrB4J,GAAO3D,mBAAmB,kBAAmB,QAASjG,GAE1DoD,EAASV,GAAuBT,KAAMqsC,GAAkB,KAAM,IAAK92B,GAAQxX,IAE3EU,QAAM,OAAOwC,EAASR,GAAuBT,KAAMqsC,GAAkB,KAAM,KAC3E5tC,MAAEV,GACF,MAAMU,EAAIkJ,GAAO7B,UAAU/H,EAAO,SAClC,GAAU,KAANU,GAAkB,KAANA,EACZ,MAAM,IAAIU,MAAM,SAEpBgC,EAASV,GAAuBT,KAAMqsC,GAAkB,KAAM,IAAK5tC,GAEnEouC,eAAa,OAAO5rC,EAASR,GAAuBT,KAAMqsC,GAAkB,KAAM,YAClFS,oBACA,MAAMruC,EAAIuB,KAAK6sC,SACf,OAAS,MAALpuC,EACO,KAEJmuC,GAAUG,WAAWtuC,GAE5BuuC,SAEA,MAAMA,EAAKl4B,GAAS9U,KAAK0hB,GAIzB,OAHI1hB,KAAKitC,UACLD,EAAG,IAAM,KAENz3B,GAAQy3B,GAEfC,cACA,OAAe,KAAXjtC,KAAKvB,EACE,EAEJ,EAUPyuC,iBACA,OAAOx3B,GAAO,CAAC1V,KAAKmwB,EAAGnwB,KAAK0hB,EAAI1hB,KAAKitC,QAAU,OAAS,SAE5D,EAAEZ,GAAmB,IAAI5qC,QAAW4K,OAAOC,IAAI,kCAC3C,MAAO,mBAAmBtM,KAAKmwB,WAAWnwB,KAAK0hB,gBAAgB1hB,KAAKitC,sBAAsBjtC,KAAK6sC,aAEnGrjC,QACQvI,EAASR,GAAuBT,KAAMqsC,GAAkB,KAAM,aAC9D1kC,GAAO5D,WAAW,kCAAmC,wBAAyB,CAC1EY,UAAW,UAGnB,MAAMwrB,EAAEA,EAACzO,EAAEA,EAACjjB,EAAEA,GAAMgC,GAAuBT,KAAMqsC,GAAkB,KACnE,OAAO,IAAIO,GAAUzgC,GAAQgkB,EAAGzO,EAAGjjB,GAEvC8J,SAEI,OADAtK,OAAOsK,OAAO9H,GAAuBT,KAAMqsC,GAAkB,MACtDrsC,KAEXoB,WACI,OAAOnD,OAAOmD,SAASX,GAAuBT,KAAMqsC,GAAkB,MAE1Ec,SACI,MAAMhd,EAAEA,EAACzO,EAAEA,EAACjjB,EAAEA,EAACouC,SAAEA,GAAa7sC,KAC9B,MAAO,CACHotC,MAAO,YACPP,SAAwB,MAAZA,EAAoBA,EAASriC,WAAa,KACtD2lB,EAAAA,EAAGzO,EAAAA,EAAGjjB,EAAAA,GAGd8H,gBACI,OAAO,IAAIqmC,GAAUzgC,GAAQwgC,GAAMA,GAAM,IAG7CpmC,kBAAkB9H,GACd,MAAM4uC,EAAK1lC,GAAO1B,UAAUxH,EAAG,KAE/B,OAAK4uC,GAAMd,IAAWc,GAAMb,GACjBt8B,IAGPm9B,EAAKZ,IACL9kC,GAAO3D,mBAAmB,oBAAqB,IAAKvF,IAEhD4uC,EAAKZ,IAASH,IAG1B/lC,mBAAmB42B,EAAS1+B,GACxB,OAAQkJ,GAAO1B,UAAUk3B,GAAWmP,GAAQvmC,OAAO,GAAKtH,EAAI,IAGhE8H,sBAAsB9H,GAClB,MAAM4uC,EAAK1lC,GAAO1B,UAAUxH,GAC5B,OAAI4uC,GAAMn9B,GACC,GAEPm9B,GAAM18B,GACC,GAGH08B,EAAK18B,GAAQ,GAAK,GAE9BpK,uBAAuB4pB,EAAGzO,EAAG4rB,GACzB,MAAM7uC,EAAIkJ,GAAO1B,UAAUqnC,EAAI,KACzBC,EAAMX,GAAU/gC,KAAK,CAAEskB,EAAAA,EAAGzO,EAAAA,EAAGjjB,EAAAA,IAEnC,OADA0C,EAASV,GAAuB8sC,EAAKlB,GAAkB,KAAM,WAAY5tC,GAClE8uC,EAAIhlC,SAEfhC,YAAYgnC,GACR,MAAMxpC,EAAcL,GACTiE,GAAO3D,mBAAmBN,EAAS,YAAa6pC,GAE3D,GAAqB,iBAAT,EAAmB,CACH,KAApB13B,GAAW03B,IACXxpC,EAAW,gCAEf,MAAMosB,EAAIra,GAAUy3B,EAAK,EAAG,IACtB7rB,EAAI5L,GAAUy3B,EAAK,GAAI,IACzBxnC,OAAO2b,IAAM7M,IACb9Q,EAAW,mBAEf,MAAMtF,EAAImuC,GAAUY,eAAe13B,GAAUy3B,EAAK,GAAI,KACtD,OAAO,IAAIX,GAAUzgC,GAAQgkB,EAAGzO,EAAGjjB,GAEvC,GAAI8uC,aAAeX,GACf,OAAOW,EAAI/jC,QAEf,MAAM2mB,EAAIod,EAAIpd,EACL,MAALA,GACApsB,EAAW,aAEV2Q,GAAYyb,EAAG,KAChBpsB,EAAW,aAEf,MAAM2d,EAAI,SAAWA,EAAGsrB,GACpB,OAAItrB,GACKhN,GAAYgN,EAAG,KAChB3d,EAAW,aAER2d,GAEPsrB,GACKt4B,GAAYs4B,EAAI,KACjBjpC,EAAW,cAERuM,GAAMvK,OAAOinC,GAAMN,GAAa,KAEpC3oC,EAAW,aAbZ,CAcPwpC,EAAI7rB,EAAG6rB,EAAIP,IACVjnC,OAAO2b,IAAM7M,IACb9Q,EAAW,mBAEf,MAAMtF,EAAI,SAAWA,EAAGuuC,EAAIC,GACxB,GAAIxuC,EACA,OAAOmuC,GAAUY,eAAe/uC,GAEpC,GAAIuuC,EAIA,OAHKt4B,GAAYs4B,EAAI,KACjBjpC,EAAW,cAEY,IAAlB+Q,GAASk4B,GAAI,GAAa,GAAK,GAE5C,GAAIC,EAAS,CACT,OAAQA,GACJ,KAAK,EAAG,OAAO,GACf,KAAK,EAAG,OAAO,GAEnB,OAAOlpC,EAAW,mBAGtB,OAAOA,EAAW,aAlBZ,CAmBPwpC,EAAI9uC,EAAG8uC,EAAIP,GAAIO,EAAIN,SAEhB7lC,EAAS,IAAIwlC,GAAUzgC,GAAQgkB,EAAGzO,EAAGjjB,GAO3C,OANI8uC,EAAIN,UAAWM,EAAIN,QAAY7lC,EAAO6lC,SAEtCM,EAAIP,KAAMO,EAAIP,GAAO5lC,EAAO4lC,IAIzB5lC;yECnOf,MACMogB,GAAMzhB,OAAO,GACb0hB,GAAM1hB,OAAO,GACb2hB,GAAM3hB,OAAO,GACb0nC,GAAM1nC,OAAO,GACb2nC,GAAM3nC,OAAO,GACb4nC,GAAYjmB,IAAO3hB,OAAO,KAC1B6nC,GAAQ,CACVh7B,EAAG4U,GACH3U,EAAG9M,OAAO,GACV8nC,EAAGF,GAAYjmB,IAAO3hB,OAAO,IAAMA,OAAO,KAC1CuV,EAAGqyB,GAAY5nC,OAAO,2CACtByZ,EAAGiI,GACHqmB,GAAI/nC,OAAO,iFACXgoC,GAAIhoC,OAAO,iFACXioC,KAAMjoC,OAAO,uEAGjB,SAASkoC,GAAUlmB,GACf,MAAMnV,EAAEA,EAACC,EAAEA,GAAM+6B,GACXM,EAAKC,GAAIpmB,EAAIA,GACbqmB,EAAKD,GAAID,EAAKnmB,GACpB,OAAOomB,GAAIC,EAAKx7B,EAAImV,EAAIlV,GAE5B,MAAMw7B,GAAmBT,GAAMh7B,IAAM4U,GACrC,MAAM8mB,GACF1tC,YAAYmnB,EAAGC,EAAGoD,GACdprB,KAAK+nB,EAAIA,EACT/nB,KAAKgoB,EAAIA,EACThoB,KAAKorB,EAAIA,EAEb7kB,kBAAkB2I,GACd,KAAMA,aAAaq/B,IACf,MAAM,IAAIluC,UAAU,4CAExB,OAAO,IAAIiuC,GAAcp/B,EAAE6Y,EAAG7Y,EAAE8Y,EAAGP,IAEvClhB,qBAAqBioC,GACjB,MAAMC,EAsjBd,SAAqBC,EAAMx/B,EAAI0+B,GAAMC,GACjC,MAAMc,EAAU,IAAIlhC,MAAMihC,EAAKxvC,QAOzB0vC,EAAWC,GANMH,EAAKnwC,QAAO,CAACuwC,EAAKC,EAAK9vC,IACtC8vC,IAAQvnB,GACDsnB,GACXH,EAAQ1vC,GAAK6vC,EACNX,GAAIW,EAAMC,EAAK7/B,KACvBuY,IACqCvY,GAOxC,OANAw/B,EAAKM,aAAY,CAACF,EAAKC,EAAK9vC,IACpB8vC,IAAQvnB,GACDsnB,GACXH,EAAQ1vC,GAAKkvC,GAAIW,EAAMH,EAAQ1vC,GAAIiQ,GAC5Bi/B,GAAIW,EAAMC,EAAK7/B,KACvB0/B,GACID,EArkBWM,CAAYT,EAAOpwC,KAAK8Q,GAAMA,EAAEkc,KAC9C,OAAOojB,EAAOpwC,KAAI,CAAC8Q,EAAGjQ,IAAMiQ,EAAEggC,SAAST,EAAMxvC,MAEjDsH,kBAAkBioC,GACd,OAAOF,GAAca,cAAcX,GAAQpwC,IAAIkwC,GAAcc,YAEjEC,OAAO18B,GACH,KAAMA,aAAiB27B,IACnB,MAAM,IAAIjuC,UAAU,0BACxB,MAAQ0nB,EAAGunB,EAAItnB,EAAGunB,EAAInkB,EAAGokB,GAAOxvC,MACxB+nB,EAAG0nB,EAAIznB,EAAG0nB,EAAItkB,EAAGukB,GAAOh9B,EAC1Bi9B,EAAOzB,GAAIqB,GAAM9nB,IACjBmoB,EAAO1B,GAAIwB,GAAMjoB,IACjBooB,EAAK3B,GAAImB,EAAKO,GACdE,EAAK5B,GAAIsB,EAAKG,GACdI,EAAK7B,GAAIA,GAAIoB,EAAKI,GAAME,GACxBI,EAAK9B,GAAIA,GAAIuB,EAAKF,GAAMI,GAC9B,OAAOE,IAAOC,GAAMC,IAAOC,EAE/BC,SACI,OAAO,IAAI5B,GAActuC,KAAK+nB,EAAGomB,IAAKnuC,KAAKgoB,GAAIhoB,KAAKorB,GAExD+kB,SACI,MAAQpoB,EAAGunB,EAAItnB,EAAGunB,EAAInkB,EAAGokB,GAAOxvC,KAC1BmgB,EAAIguB,GAAImB,GAAM5nB,IACdtH,EAAI+tB,GAAIoB,GAAM7nB,IACdrH,EAAI8tB,GAAI/tB,GAAKsH,IACbpH,EAAI6tB,GAAIzmB,IAAOymB,IAAKmB,EAAKlvB,IAAMsH,IAAOvH,EAAIE,IAC1CE,EAAI4tB,GAAIV,GAAMttB,GACdK,EAAI2tB,GAAI5tB,GAAKmH,IACb0oB,EAAKjC,GAAI3tB,EAAIkH,GAAMpH,GACnB+vB,EAAKlC,GAAI5tB,GAAKD,EAAI8vB,GAAM1C,GAAMrtB,GAC9BiwB,EAAKnC,GAAIzmB,GAAM6nB,EAAKC,GAC1B,OAAO,IAAIlB,GAAc8B,EAAIC,EAAIC,GAErC9sC,IAAImP,GACA,KAAMA,aAAiB27B,IACnB,MAAM,IAAIjuC,UAAU,0BACxB,MAAQ0nB,EAAGunB,EAAItnB,EAAGunB,EAAInkB,EAAGokB,GAAOxvC,MACxB+nB,EAAG0nB,EAAIznB,EAAG0nB,EAAItkB,EAAGukB,GAAOh9B,EAChC,GAAI88B,IAAOjoB,IAAOkoB,IAAOloB,GACrB,OAAOxnB,KACX,GAAIsvC,IAAO9nB,IAAO+nB,IAAO/nB,GACrB,OAAO7U,EACX,MAAMi9B,EAAOzB,GAAIqB,GAAM9nB,IACjBmoB,EAAO1B,GAAIwB,GAAMjoB,IACjBooB,EAAK3B,GAAImB,EAAKO,GACdE,EAAK5B,GAAIsB,EAAKG,GACdI,EAAK7B,GAAIA,GAAIoB,EAAKI,GAAME,GACxBI,EAAK9B,GAAIA,GAAIuB,EAAKF,GAAMI,GACxBlvB,EAAIytB,GAAI4B,EAAKD,GACb3f,EAAIge,GAAI8B,EAAKD,GACnB,GAAItvB,IAAM8G,GACN,OAAI2I,IAAM3I,GACCxnB,KAAKmwC,SAGL7B,GAAciC,KAG7B,MAAMC,EAAKrC,GAAIztB,GAAKgH,IACd+oB,EAAMtC,GAAIztB,EAAI8vB,GACd1f,EAAIqd,GAAI2B,EAAKU,GACbJ,EAAKjC,GAAIhe,GAAKzI,GAAM+oB,EAAM/oB,GAAMoJ,GAChCuf,EAAKlC,GAAIhe,GAAKW,EAAIsf,GAAMJ,EAAKS,GAC7BH,EAAKnC,GAAIqB,EAAKG,EAAKjvB,GACzB,OAAO,IAAI4tB,GAAc8B,EAAIC,EAAIC,GAErCI,SAAS/9B,GACL,OAAO3S,KAAKwD,IAAImP,EAAMu9B,UAE1BS,eAAeC,GACX,IAAIt1B,EAAIu1B,GAAgBD,GAExB,MAAME,EAAKxC,GAAciC,KACzB,GAAIj1B,IAAMkM,GACN,OAAOspB,EACX,GAAIx1B,IAAMmM,GACN,OAAOznB,KACX,IAAKquC,GAAkB,CACnB,IAAIn/B,EAAI4hC,EACJl7B,EAAI5V,KACR,KAAOsb,EAAIkM,IACHlM,EAAImM,KACJvY,EAAIA,EAAE1L,IAAIoS,IACdA,EAAIA,EAAEu6B,SACN70B,IAAMmM,GAEV,OAAOvY,EAEX,IAAI6hC,MAAEA,EAAKC,GAAEA,EAAEC,MAAEA,EAAKC,GAAEA,GAAOC,GAAgB71B,GAC3C81B,EAAMN,EACNO,EAAMP,EACNl7B,EAAI5V,KACR,KAAOgxC,EAAKxpB,IAAO0pB,EAAK1pB,IAChBwpB,EAAKvpB,KACL2pB,EAAMA,EAAI5tC,IAAIoS,IACds7B,EAAKzpB,KACL4pB,EAAMA,EAAI7tC,IAAIoS,IAClBA,EAAIA,EAAEu6B,SACNa,IAAOvpB,GACPypB,IAAOzpB,GAOX,OALIspB,IACAK,EAAMA,EAAIlB,UACVe,IACAI,EAAMA,EAAInB,UACdmB,EAAM,IAAI/C,GAAcH,GAAIkD,EAAItpB,EAAI6lB,GAAMI,MAAOqD,EAAIrpB,EAAGqpB,EAAIjmB,GACrDgmB,EAAI5tC,IAAI6tC,GAEnBC,iBAAiBC,GACb,MAAMC,EAAUnD,GAAmB,IAAMkD,EAAI,EAAI,IAAMA,EAAI,EACrD/C,EAAS,GACf,IAAIt/B,EAAIlP,KACJyxC,EAAOviC,EACX,IAAK,IAAIgX,EAAS,EAAGA,EAASsrB,EAAStrB,IAAU,CAC7CurB,EAAOviC,EACPs/B,EAAO5rC,KAAK6uC,GACZ,IAAK,IAAIxyC,EAAI,EAAGA,EAAI,IAAMsyC,EAAI,GAAItyC,IAC9BwyC,EAAOA,EAAKjuC,IAAI0L,GAChBs/B,EAAO5rC,KAAK6uC,GAEhBviC,EAAIuiC,EAAKtB,SAEb,OAAO3B,EAEXkD,KAAKp2B,EAAGq2B,IACCA,GAAe3xC,KAAKqvC,OAAOf,GAAcsD,QAC1CD,EAAcpD,GAAMqD,MACxB,MAAML,EAAKI,GAAeA,EAAYE,cAAiB,EACvD,GAAI,IAAMN,EACN,MAAM,IAAIpyC,MAAM,iEAEpB,IAAI2yC,EAAcH,GAAeI,GAAiBrxC,IAAIixC,GACjDG,IACDA,EAAc9xC,KAAKsxC,iBAAiBC,GAChCI,GAAqB,IAANJ,IACfO,EAAcxD,GAAc0D,WAAWF,GACvCC,GAAiBvxC,IAAImxC,EAAaG,KAG1C,IAAI5iC,EAAIo/B,GAAciC,KAClBnwC,EAAIkuC,GAAciC,KACtB,MAAMiB,EAAU,GAAKnD,GAAmB,IAAMkD,EAAI,IAAMA,GAClDU,EAAa,IAAMV,EAAI,GACvBzgC,EAAO/K,OAAO,GAAKwrC,EAAI,GACvBW,EAAY,GAAKX,EACjBY,EAAUpsC,OAAOwrC,GACvB,IAAK,IAAIrrB,EAAS,EAAGA,EAASsrB,EAAStrB,IAAU,CAC7C,MAAM7e,EAAS6e,EAAS+rB,EACxB,IAAIG,EAAQ5tC,OAAO8W,EAAIxK,GAMvB,GALAwK,IAAM62B,EACFC,EAAQH,IACRG,GAASF,EACT52B,GAAKmM,IAEK,IAAV2qB,EAAa,CACb,IAAIC,EAAKP,EAAYzqC,GACjB6e,EAAS,IACTmsB,EAAKA,EAAGnC,UACZ9vC,EAAIA,EAAEoD,IAAI6uC,OAET,CACD,IAAIC,EAASR,EAAYzqC,EAASN,KAAKwrC,IAAIH,GAAS,GAChDA,EAAQ,IACRE,EAASA,EAAOpC,UACpBhhC,EAAIA,EAAE1L,IAAI8uC,IAGlB,MAAO,CAAEpjC,EAAAA,EAAG9O,EAAAA,GAEhBoyC,SAAS5B,EAAQe,GACb,IACIc,EACAC,EAFAp3B,EAAIu1B,GAAgBD,GAGxB,GAAIvC,GAAkB,CAClB,MAAM0C,MAAEA,EAAKC,GAAEA,EAAEC,MAAEA,EAAKC,GAAEA,GAAOC,GAAgB71B,GACjD,IAAMpM,EAAGkiC,EAAKhxC,EAAGuyC,GAAQ3yC,KAAK0xC,KAAKV,EAAIW,IACjCziC,EAAGmiC,EAAKjxC,EAAGwyC,GAAQ5yC,KAAK0xC,KAAKR,EAAIS,GACnCZ,IACAK,EAAMA,EAAIlB,UACVe,IACAI,EAAMA,EAAInB,UACdmB,EAAM,IAAI/C,GAAcH,GAAIkD,EAAItpB,EAAI6lB,GAAMI,MAAOqD,EAAIrpB,EAAGqpB,EAAIjmB,GAC5DqnB,EAAQrB,EAAI5tC,IAAI6tC,GAChBqB,EAAOC,EAAInvC,IAAIovC,OAEd,CACD,MAAM1jC,EAAEA,EAAC9O,EAAEA,GAAMJ,KAAK0xC,KAAKp2B,EAAGq2B,GAC9Bc,EAAQvjC,EACRwjC,EAAOtyC,EAEX,OAAOkuC,GAAc0D,WAAW,CAACS,EAAOC,IAAO,GAEnDxD,SAAS2D,EAAOhE,GAAO7uC,KAAKorB,IACxB,MAAMrD,EAAEA,EAACC,EAAEA,EAACoD,EAAEA,GAAMprB,KACd8yC,EAAMD,EACNE,EAAM5E,GAAI2E,EAAMA,GAChBE,EAAM7E,GAAI4E,EAAMD,GAChBG,EAAK9E,GAAIpmB,EAAIgrB,GACbG,EAAK/E,GAAInmB,EAAIgrB,GAEnB,GADW7E,GAAI/iB,EAAI0nB,KACRrrB,GACP,MAAM,IAAItoB,MAAM,oBACpB,OAAO,IAAIovC,GAAM0E,EAAIC,IAG7B5E,GAAcsD,KAAO,IAAItD,GAAcV,GAAME,GAAIF,GAAMG,GAAItmB,IAC3D6mB,GAAciC,KAAO,IAAIjC,GAAc9mB,GAAKC,GAAKD,IACjD,MAAMuqB,GAAmB,IAAItwC,QACtB,MAAM8sC,GACT3tC,YAAYmnB,EAAGC,GACXhoB,KAAK+nB,EAAIA,EACT/nB,KAAKgoB,EAAIA,EAEbmrB,eAAelB,GACXjyC,KAAK6xC,aAAeI,EACpBF,GAAiBvT,OAAOx+B,MAE5BuG,yBAAyBiP,GACrB,MAAM49B,EAA2B,KAAjB59B,EAAMtW,OAChB6oB,EAAIsrB,GAAcD,EAAU59B,EAAQA,EAAMgJ,SAAS,IACzD,IAAK80B,GAAoBvrB,GACrB,MAAM,IAAI5oB,MAAM,yBAEpB,IAAI6oB,EA2SZ,SAAiBD,GACb,MAAM8lB,EAAEA,GAAMD,GACR2F,EAAMxtC,OAAO,GACbytC,EAAOztC,OAAO,IACd0tC,EAAO1tC,OAAO,IACd2tC,EAAO3tC,OAAO,IACd4tC,EAAO5tC,OAAO,IACd6tC,EAAO7tC,OAAO,IACd8tC,EAAM9rB,EAAIA,EAAIA,EAAK8lB,EACnBiG,EAAMD,EAAKA,EAAK9rB,EAAK8lB,EACrBkG,EAAMC,GAAKF,EAAIrG,IAAOqG,EAAMjG,EAC5BoG,EAAMD,GAAKD,EAAItG,IAAOqG,EAAMjG,EAC5BqG,EAAOF,GAAKC,EAAIvsB,IAAOmsB,EAAMhG,EAC7BsG,EAAOH,GAAKE,EAAKV,GAAQU,EAAOrG,EAChCuG,EAAOJ,GAAKG,EAAKV,GAAQU,EAAOtG,EAChCwG,EAAOL,GAAKI,EAAKT,GAAQS,EAAOvG,EAChCyG,EAAQN,GAAKK,EAAKT,GAAQS,EAAOxG,EACjC0G,EAAQP,GAAKM,EAAMX,GAAQS,EAAOvG,EAClC2G,EAAQR,GAAKO,EAAM9G,IAAOqG,EAAMjG,EAChC4G,EAAMT,GAAKQ,EAAMd,GAAQS,EAAOtG,EAChC6G,EAAMV,GAAKS,EAAIlB,GAAOM,EAAMhG,EAClC,OAAOmG,GAAKU,EAAIhtB,IAhUJitB,CADG1G,GAAUlmB,IAErB,MAAM6sB,GAAU5sB,EAAIP,MAASA,GAC7B,GAAI2rB,EACIwB,IACA5sB,EAAImmB,IAAKnmB,QAEZ,CACyC,IAAP,EAAXxS,EAAM,MACPo/B,IACnB5sB,EAAImmB,IAAKnmB,IAEjB,MAAMyqB,EAAQ,IAAIlE,GAAMxmB,EAAGC,GAE3B,OADAyqB,EAAMoC,iBACCpC,EAEXlsC,2BAA2BiP,GACvB,MAAMuS,EAAIsrB,GAAc79B,EAAMgJ,SAAS,EAAG,KACpCwJ,EAAIqrB,GAAc79B,EAAMgJ,SAAS,GAAI,KACrCi0B,EAAQ,IAAIlE,GAAMxmB,EAAGC,GAE3B,OADAyqB,EAAMoC,iBACCpC,EAEXlsC,eAAemK,GACX,MAAM8E,EAAQs/B,GAAYpkC,GACpBqO,EAAMvJ,EAAMtW,OACZ61C,EAASv/B,EAAM,GACrB,GAAY,KAARuJ,GAAuB,KAARA,IAA0B,IAAXg2B,GAA8B,IAAXA,GACjD,OAAO/0C,KAAKg1C,kBAAkBx/B,GAElC,GAAY,KAARuJ,GAAyB,IAAXg2B,EACd,OAAO/0C,KAAKi1C,oBAAoBz/B,GACpC,MAAM,IAAIrW,MAAM,wGAAwG4f,KAE5HxY,sBAAsB2uC,GAClB,OAAO3G,GAAMqD,KAAKY,SAAS2C,GAAoBD,IAEnD3uC,qBAAqB6uC,EAAS9U,EAAW+U,GAErC,MAAM71B,EAuVd,SAAsB/D,GAClB,MAAMH,EAAEA,GAAMsyB,GAER0H,EAAqB,EADR75B,EAAKvc,OACO,IAC/B,IAAIsgB,EAAI6zB,GAAc53B,GAClB65B,EAAQ,IACR91B,IAASzZ,OAAOuvC,IAChB91B,GAAKlE,IACLkE,GAAKlE,GACT,OAAOkE,EAhWO+1B,CADVH,EAAUN,GAAYM,KAEhBjlB,EAAEA,EAACzO,EAAEA,GA2cnB,SAA4B4e,GACxB,GAAIA,aAAqBsM,GAErB,OADAtM,EAAUuU,iBACHvU,EAEX,IACI,OAAOsM,GAAU4I,QAAQlV,GAE7B,MAAOh/B,GACH,OAAOsrC,GAAU6I,YAAYnV,IApdZoV,CAAmBpV,GACpC,GAAiB,IAAb+U,GAA+B,IAAbA,EAClB,MAAM,IAAIl2C,MAAM,kDAEpB,GAAIqgB,IAAMgI,GACN,MAAM,IAAIroB,MAAM,iDACpB,MAAMw2C,EAAoB,EAAXN,EAAe,KAAO,KAC/BvtB,EAAIymB,GAAMqH,QAAQD,EAASE,GAAY1lB,KACvC7U,EAAEA,GAAMsyB,GACRkI,EAAOjH,GAAO1e,EAAG7U,GACjBy6B,EAAK5H,IAAK3uB,EAAIs2B,EAAMx6B,GACpB06B,EAAK7H,GAAIzsB,EAAIo0B,EAAMx6B,GACnB26B,EAAI1H,GAAMqD,KAAKsE,qBAAqBpuB,EAAGiuB,EAAIC,GACjD,IAAKC,EACD,MAAM,IAAI92C,MAAM,+CAEpB,OADA82C,EAAEpB,iBACKoB,EAEXE,WAAWC,GAAe,GACtB,OAAOC,GAAWr2C,KAAKsQ,MAAM8lC,IAEjC9lC,MAAM8lC,GAAe,GACjB,MAAMruB,EAAI8tB,GAAY71C,KAAK+nB,GAC3B,GAAIquB,EAAc,CAEd,MAAO,GADQp2C,KAAKgoB,EAAIP,GAAM,KAAO,OAClBM,IAGnB,MAAO,KAAKA,IAAI8tB,GAAY71C,KAAKgoB,KAGzCsuB,SACI,OAAOt2C,KAAKsQ,OAAM,GAAM/G,MAAM,GAElCgtC,SACI,OAAOv2C,KAAKm2C,YAAW,GAAM5sC,MAAM,GAEvCsrC,iBACI,MAAM3qB,EAAM,kCACNnC,EAAEA,EAACC,EAAEA,GAAMhoB,KACjB,IAAKszC,GAAoBvrB,KAAOurB,GAAoBtrB,GAChD,MAAM,IAAI7oB,MAAM+qB,GACpB,MAAM9T,EAAO+3B,GAAInmB,EAAIA,GAErB,GAAImmB,GAAI/3B,EADM63B,GAAUlmB,MACEP,GACtB,MAAM,IAAIroB,MAAM+qB,GAExBmlB,OAAO18B,GACH,OAAO3S,KAAK+nB,IAAMpV,EAAMoV,GAAK/nB,KAAKgoB,IAAMrV,EAAMqV,EAElDkoB,SACI,OAAO,IAAI3B,GAAMvuC,KAAK+nB,EAAGomB,IAAKnuC,KAAKgoB,IAEvCmoB,SACI,OAAO7B,GAAcc,WAAWpvC,MAAMmwC,SAASjB,WAEnD1rC,IAAImP,GACA,OAAO27B,GAAcc,WAAWpvC,MAAMwD,IAAI8qC,GAAcc,WAAWz8B,IAAQu8B,WAE/EwB,SAAS/9B,GACL,OAAO3S,KAAKwD,IAAImP,EAAMu9B,UAE1BsC,SAAS5B,GACL,OAAOtC,GAAcc,WAAWpvC,MAAMwyC,SAAS5B,EAAQ5wC,MAAMkvC,WAEjEgH,qBAAqBD,EAAGrjC,EAAGC,GACvB,MACM2jC,EADIlI,GAAcc,WAAWpvC,MACtBwyC,SAAS5/B,GAChB6jC,EAAKnI,GAAcc,WAAW6G,GAAGtF,eAAe99B,GAChD6jC,EAAMF,EAAGhzC,IAAIizC,GACnB,OAAOC,EAAIrH,OAAOf,GAAciC,WAAQ7wC,EAAYg3C,EAAIxH,YAKhE,SAASyH,GAASj1B,GACd,OAAOld,OAAO8C,SAASoa,EAAE,GAAI,KAAO,EAAI,KAAOA,EAAIA,EAEvD,SAASk1B,GAAY7hC,GACjB,GAAIA,EAAK7V,OAAS,GAAiB,IAAZ6V,EAAK,GACxB,MAAM,IAAI5V,MAAM,kCAAkC03C,GAAW9hC,MAEjE,MAAMgK,EAAMhK,EAAK,GACX6K,EAAM7K,EAAKyJ,SAAS,EAAGO,EAAM,GACnC,IAAKA,GAAOa,EAAI1gB,SAAW6f,EACvB,MAAM,IAAI5f,MAAM,2CAEpB,GAAe,IAAXygB,EAAI,IAAeA,EAAI,IAAM,IAC7B,MAAM,IAAIzgB,MAAM,8CAEpB,MAAO,CAAE4V,KAAMs+B,GAAczzB,GAAMxJ,KAAMrB,EAAKyJ,SAASO,EAAM,IAjBjEwvB,GAAMqD,KAAO,IAAIrD,GAAMX,GAAME,GAAIF,GAAMG,IACvCQ,GAAMgC,KAAO,IAAIhC,GAAM/mB,GAAKA,IAgCrB,MAAMolB,GACThsC,YAAYuvB,EAAGzO,GACX1hB,KAAKmwB,EAAIA,EACTnwB,KAAK0hB,EAAIA,EACT1hB,KAAK60C,iBAETtuC,mBAAmBmK,GACf,MAAM6I,EAAMu9B,GAASpmC,GACf3N,EAAO,wBACb,GAAmB,iBAAR2N,IAAqB6I,EAC5B,MAAM,IAAIlZ,UAAU,GAAG0C,oCAC3B,MAAMkY,EAAM1B,EAAMs9B,GAAWnmC,GAAOA,EACpC,GAAmB,MAAfuK,EAAI/b,OACJ,MAAM,IAAIC,MAAM,GAAG4D,2BACvB,OAAO,IAAI6pC,GAAUmK,GAAY97B,EAAI1R,MAAM,EAAG,KAAMwtC,GAAY97B,EAAI1R,MAAM,GAAI,OAElFhD,eAAemK,GACX,MAAM6I,EAAMu9B,GAASpmC,GACrB,GAAmB,iBAARA,IAAqB6I,EAC5B,MAAM,IAAIlZ,UAAU,oDACxB,MAAM8vB,EAAEA,EAACzO,EAAEA,GAlCnB,SAA2B3M,GACvB,GAAIA,EAAK7V,OAAS,GAAgB,IAAX6V,EAAK,GACxB,MAAM,IAAI5V,MAAM,0BAA0B03C,GAAW9hC,MAEzD,GAAIA,EAAK,KAAOA,EAAK7V,OAAS,EAC1B,MAAM,IAAIC,MAAM,uCAEpB,MAAQ4V,KAAMob,EAAG/Z,KAAM4gC,GAAWJ,GAAY7hC,EAAKyJ,SAAS,KACpDzJ,KAAM2M,EAAGtL,KAAM6gC,GAAeL,GAAYI,GAClD,GAAIC,EAAW/3C,OACX,MAAM,IAAIC,MAAM,gDAAgD03C,GAAWI,MAE/E,MAAO,CAAE9mB,EAAAA,EAAGzO,EAAAA,GAsBSw1B,CAAkB39B,EAAM7I,EAAM2lC,GAAW3lC,IAC1D,OAAO,IAAIk8B,GAAUzc,EAAGzO,GAE5Bnb,eAAemK,GACX,OAAO1Q,KAAKw1C,QAAQ9kC,GAExBmkC,iBACI,MAAM1kB,EAAEA,EAACzO,EAAEA,GAAM1hB,KACjB,IAAKm3C,GAAmBhnB,GACpB,MAAM,IAAIhxB,MAAM,0CACpB,IAAKg4C,GAAmBz1B,GACpB,MAAM,IAAIviB,MAAM,0CAExBi4C,WACI,MAAMC,EAAOzJ,GAAMtyB,GAAKmM,GACxB,OAAOznB,KAAK0hB,EAAI21B,EAEpBC,aACI,OAAOt3C,KAAKo3C,WAAa,IAAIxK,GAAU5sC,KAAKmwB,EAAGyd,GAAMtyB,EAAItb,KAAK0hB,GAAK1hB,KAEvEu3C,cAAcnB,GAAe,GACzB,OAAOC,GAAWr2C,KAAKw3C,SAASpB,IAEpCoB,SAASpB,GAAe,GACpB,MAAMqB,EAAOd,GAASe,GAAoB13C,KAAK0hB,IAC/C,GAAI00B,EACA,OAAOqB,EACX,MAAME,EAAOhB,GAASe,GAAoB13C,KAAKmwB,IACzCynB,EAAOF,GAAoBC,EAAKz4C,OAAS,GACzC24C,EAAOH,GAAoBD,EAAKv4C,OAAS,GAE/C,MAAO,KADQw4C,GAAoBC,EAAKz4C,OAAS,EAAIu4C,EAAKv4C,OAAS,EAAI,OAChD04C,IAAOD,MAASE,IAAOJ,IAElDtB,aACI,OAAOn2C,KAAKu3C,gBAEhBjnC,QACI,OAAOtQ,KAAKw3C,WAEhBM,oBACI,OAAOzB,GAAWr2C,KAAK+3C,gBAE3BA,eACI,OAAOlC,GAAY71C,KAAKmwB,GAAK0lB,GAAY71C,KAAK0hB,IAGtD,SAASs2B,MAAeC,GACpB,IAAKA,EAAOC,MAAMpB,IACd,MAAM,IAAI33C,MAAM,4BACpB,GAAsB,IAAlB84C,EAAO/4C,OACP,OAAO+4C,EAAO,GAClB,MAAM/4C,EAAS+4C,EAAO15C,QAAO,CAACqU,EAAG2G,IAAQ3G,EAAI2G,EAAIra,QAAQ,GACnDkI,EAAS,IAAIF,WAAWhI,GAC9B,IAAK,IAAID,EAAI,EAAG6d,EAAM,EAAG7d,EAAIg5C,EAAO/4C,OAAQD,IAAK,CAC7C,MAAMsa,EAAM0+B,EAAOh5C,GACnBmI,EAAO5G,IAAI+Y,EAAKuD,GAChBA,GAAOvD,EAAIra,OAEf,OAAOkI,EAEX,SAAS0vC,GAASthC,GACd,OAAOA,aAAiBtO,WAE5B,MAAMixC,GAAQ1qC,MAAM5B,KAAK,CAAE3M,OAAQ,MAAO,CAACT,EAAGQ,IAAMA,EAAEuL,SAAS,IAAIwP,SAAS,EAAG,OAC/E,SAAS68B,GAAWuB,GAChB,KAAMA,aAAkBlxC,YACpB,MAAM,IAAI/H,MAAM,uBACpB,IAAIuR,EAAM,GACV,IAAK,IAAIzR,EAAI,EAAGA,EAAIm5C,EAAOl5C,OAAQD,IAC/ByR,GAAOynC,GAAMC,EAAOn5C,IAExB,OAAOyR,EAEX,SAASmlC,GAAY9G,GACjB,GAAIA,EAAMpB,GACN,MAAM,IAAIxuC,MAAM,2BACpB,OAAO4vC,EAAIvkC,SAAS,IAAIwP,SAAS,GAAI,KAKzC,SAAS09B,GAAoB3I,GACzB,MAAMr+B,EAAMq+B,EAAIvkC,SAAS,IACzB,OAAoB,EAAbkG,EAAIxR,OAAa,IAAIwR,IAAQA,EAExC,SAASqmC,GAAYrmC,GACjB,GAAmB,iBAARA,EACP,MAAM,IAAIrQ,UAAU,4CAA8CqQ,GAEtE,OAAO3K,OAAO,KAAK2K,KAEvB,SAAS2lC,GAAW3lC,GAChB,GAAmB,iBAARA,EACP,MAAM,IAAIrQ,UAAU,2CAA6CqQ,GAErE,GAAIA,EAAIxR,OAAS,EACb,MAAM,IAAIC,MAAM,4CAA8CuR,EAAIxR,QACtE,MAAMm5C,EAAQ,IAAInxC,WAAWwJ,EAAIxR,OAAS,GAC1C,IAAK,IAAID,EAAI,EAAGA,EAAIo5C,EAAMn5C,OAAQD,IAAK,CACnC,MAAMgpB,EAAQ,EAAJhpB,EACJq5C,EAAU5nC,EAAInH,MAAM0e,EAAGA,EAAI,GAC3BswB,EAAO/zC,OAAO8C,SAASgxC,EAAS,IACtC,GAAI9zC,OAAOsC,MAAMyxC,IAASA,EAAO,EAC7B,MAAM,IAAIp5C,MAAM,yBACpBk5C,EAAMp5C,GAAKs5C,EAEf,OAAOF,EAEX,SAAShF,GAAc79B,GACnB,OAAOuhC,GAAYF,GAAWrhC,IAElC,SAASs/B,GAAYpkC,GACjB,OAAOA,aAAexJ,WAAaA,WAAW2E,KAAK6E,GAAO2lC,GAAW3lC,GAEzE,SAASmgC,GAAgB9B,GACrB,GAAmB,iBAARA,GAAoBvqC,OAAO+W,cAAcwzB,IAAQA,EAAM,EAC9D,OAAOhpC,OAAOgpC,GAClB,GAAmB,iBAARA,GAAoBoI,GAAmBpI,GAC9C,OAAOA,EACX,MAAM,IAAI1uC,UAAU,uDAExB,SAAS8tC,GAAIv7B,EAAGC,EAAI+6B,GAAMC,GACtB,MAAMzmC,EAASwL,EAAIC,EACnB,OAAOzL,GAAUogB,GAAMpgB,EAASyL,EAAIzL,EAExC,SAAS4sC,GAAKjsB,EAAGywB,GACb,MAAM3K,EAAEA,GAAMD,GACd,IAAIhuB,EAAMmI,EACV,KAAOywB,KAAUhxB,IACb5H,GAAOA,EACPA,GAAOiuB,EAEX,OAAOjuB,EAyBX,SAASivB,GAAO4J,EAAQC,EAAS9K,GAAMC,GACnC,GAAI4K,IAAWjxB,IAAOkxB,GAAUlxB,GAC5B,MAAM,IAAIroB,MAAM,6CAA6Cs5C,SAAcC,KAE/E,IAAI9lC,EAAIu7B,GAAIsK,EAAQC,GAChB7lC,EAAI6lC,EACJ3wB,EAAIP,GAAcpJ,EAAIqJ,GAC1B,KAAO7U,IAAM4U,IAAK,CACd,MACM2I,EAAItd,EAAID,EACRwxB,EAAIrc,EAAI3J,GAFJvL,EAAID,GAIdC,EAAID,EAAGA,EAAIud,EAAGpI,EAAI3J,EAAUA,EAAIgmB,EAGpC,GADYvxB,IACA4U,GACR,MAAM,IAAItoB,MAAM,0BACpB,OAAOgvC,GAAIpmB,EAAG2wB,GAmBlB,MAAMC,GAAa,CAAC/lC,EAAGC,KAAOD,EAAIC,EAAI6U,IAAO7U,EACvC+lC,GAAYlxB,IAAO3hB,OAAO,KAChC,SAASorC,GAAgB9yC,GACrB,MAAMid,EAAEA,GAAMsyB,GACRiL,EAAK9yC,OAAO,sCACZ+yC,GAAMrxB,GAAM1hB,OAAO,sCACnBgzC,EAAKhzC,OAAO,uCACZ8tC,EAAKgF,EACLG,EAAKL,GAAW9E,EAAKx1C,EAAGid,GACxBie,EAAKof,IAAYG,EAAKz6C,EAAGid,GAC/B,IAAI01B,EAAK7C,GAAI9vC,EAAI26C,EAAKH,EAAKtf,EAAKwf,EAAIz9B,GAChC41B,EAAK/C,IAAK6K,EAAKF,EAAKvf,EAAKsa,EAAIv4B,GACjC,MAAMy1B,EAAQC,EAAK4H,GACb3H,EAAQC,EAAK0H,GAKnB,GAJI7H,IACAC,EAAK11B,EAAI01B,GACTC,IACAC,EAAK51B,EAAI41B,GACTF,EAAK4H,IAAa1H,EAAK0H,GACvB,MAAM,IAAIz5C,MAAM,2CAA6Cd,GAEjE,MAAO,CAAE0yC,MAAAA,EAAOC,GAAAA,EAAIC,MAAAA,EAAOC,GAAAA,GAa/B,MAAM+H,GACFr4C,cACIZ,KAAKvB,EAAI,IAAIyI,WAAW,IAAImP,KAAK,GACjCrW,KAAK3B,EAAI,IAAI6I,WAAW,IAAImP,KAAK,GACjCrW,KAAKk5C,QAAU,EAEnB77B,QAAQ/d,GACJ,OAAO65C,GAAMC,WAAWp5C,KAAK3B,KAAMiB,GAEvC+5C,YAAY/5C,GACR,GAAoC,mBAAzB65C,GAAMG,eACb,MAAM,IAAIn6C,MAAM,yDACpB,MAAMygB,EAAMu5B,GAAMG,eAAet5C,KAAK3B,KAAMiB,GAC5C,GAAIsgB,aAAe1hB,QACf,MAAM,IAAIiB,MAAM,uDACpB,OAAOygB,EAEX25B,OACI,GAAIv5C,KAAKk5C,SAAW,IAChB,MAAM,IAAI/5C,MAAM,qDAEpBa,KAAKk5C,SAAW,EAEpBr7C,aAAa27C,EAAO,IAAItyC,YACpBlH,KAAK3B,QAAU2B,KAAKqd,KAAKrd,KAAKvB,EAAGyI,WAAW2E,KAAK,CAAC,IAAQ2tC,GAC1Dx5C,KAAKvB,QAAUuB,KAAKqd,KAAKrd,KAAKvB,GACV,IAAhB+6C,EAAKt6C,SAETc,KAAK3B,QAAU2B,KAAKqd,KAAKrd,KAAKvB,EAAGyI,WAAW2E,KAAK,CAAC,IAAQ2tC,GAC1Dx5C,KAAKvB,QAAUuB,KAAKqd,KAAKrd,KAAKvB,IAElCg7C,WAAWD,EAAO,IAAItyC,YAClBlH,KAAK3B,EAAI2B,KAAKq5C,SAASr5C,KAAKvB,EAAGyI,WAAW2E,KAAK,CAAC,IAAQ2tC,GACxDx5C,KAAKvB,EAAIuB,KAAKq5C,SAASr5C,KAAKvB,GACR,IAAhB+6C,EAAKt6C,SAETc,KAAK3B,EAAI2B,KAAKq5C,SAASr5C,KAAKvB,EAAGyI,WAAW2E,KAAK,CAAC,IAAQ2tC,GACxDx5C,KAAKvB,EAAIuB,KAAKq5C,SAASr5C,KAAKvB,IAEhCZ,iBAGI,OAFAmC,KAAKu5C,OACLv5C,KAAKvB,QAAUuB,KAAKqd,KAAKrd,KAAKvB,GACvBuB,KAAKvB,EAEhBi7C,eAGI,OAFA15C,KAAKu5C,OACLv5C,KAAKvB,EAAIuB,KAAKq5C,SAASr5C,KAAKvB,GACrBuB,KAAKvB,GAGpB,SAAS04C,GAAmBpI,GACxB,OAAOvnB,GAAMunB,GAAOA,EAAMnB,GAAMtyB,EAEpC,SAASg4B,GAAoBvE,GACzB,OAAOvnB,GAAMunB,GAAOA,EAAMnB,GAAMC,EAEpC,SAAS8L,GAASC,EAAQxV,EAAGxuB,GACzB,MAAMvX,EAAIg1C,GAAcuG,GACxB,IAAKzC,GAAmB94C,GACpB,OACJ,MAAMid,EAAEA,GAAMsyB,GACRiM,EAAItL,GAAMqD,KAAKY,SAASn0C,GACxB8xB,EAAIge,GAAI0L,EAAE9xB,EAAGzM,GACnB,GAAI6U,IAAM3I,GACN,OACJ,MAAM9F,EAAIysB,GAAIU,GAAOxwC,EAAGid,GAAK6yB,GAAI/J,EAAIxuB,EAAIua,EAAG7U,GAAIA,GAChD,GAAIoG,IAAM8F,GACN,OACJ,MAAM+lB,EAAM,IAAIX,GAAUzc,EAAGzO,GAE7B,MAAO,CAAE6rB,IAAAA,EAAK8H,UADIwE,EAAE9xB,IAAMwlB,EAAIpd,EAAI,EAAI,GAAK3rB,OAAOq1C,EAAE7xB,EAAIP,KAG5D,SAAS0tB,GAAoB31C,GACzB,IAAIuvC,EACJ,GAAmB,iBAARvvC,EACPuvC,EAAMvvC,OAEL,GAAmB,iBAARA,GAAoBgF,OAAO+W,cAAc/b,IAAQA,EAAM,EACnEuvC,EAAMhpC,OAAOvG,QAEZ,GAAmB,iBAARA,EAAkB,CAC9B,GAAmB,KAAfA,EAAIN,OACJ,MAAM,IAAIC,MAAM,oCACpB4vC,EAAMgI,GAAYv3C,OAEjB,CAAA,IAAIs3C,GAASt3C,GAMd,MAAM,IAAIa,UAAU,8BALpB,GAAmB,KAAfb,EAAIN,OACJ,MAAM,IAAIC,MAAM,oCACpB4vC,EAAMsE,GAAc7zC,GAKxB,IAAK23C,GAAmBpI,GACpB,MAAM,IAAI5vC,MAAM,qCACpB,OAAO4vC,EA6BX,SAAS+K,GAAMniC,GACX,MAAM4B,EAAMu9B,GAASn/B,GACfsD,EAAsB,iBAATtD,EACboH,GAAOxF,GAAO0B,IAAQtD,EAAKzY,OACjC,OAAIqa,EACe,KAARwF,GAAsB,KAARA,EACrB9D,EACe,KAAR8D,GAAsB,MAARA,EACrBpH,aAAgB42B,GAIjB,SAASwL,GAAgBC,EAAUC,EAAS7D,GAAe,GAC9D,GAAI0D,GAAME,GACN,MAAM,IAAI35C,UAAU,kDACxB,IAAKy5C,GAAMG,GACP,MAAM,IAAI55C,UAAU,kDACxB,MAAMwS,GA5CkBqnC,EA4CKD,aA3CJ1L,IACrB2L,EAAUrF,iBACHqF,GAGA3L,GAAMqH,QAAQsE,GAN7B,IAA4BA,EA8CxB,OADArnC,EAAEgiC,iBACKhiC,EAAE2/B,SAAS2C,GAAoB6E,IAAW7D,WAAWC,GAEhE,SAAS+D,GAAS3kC,GAEd,OAAO69B,GADO79B,EAAMtW,OAAS,GAAKsW,EAAMjM,MAAM,EAAG,IAAMiM,GAG3D,SAAS4kC,GAAY5kC,GACjB,MAAM6kC,EAAKF,GAAS3kC,GACd8kC,EAAKnM,GAAIkM,EAAIzM,GAAMtyB,GACzB,OAAOi/B,GAAWD,EAAK9yB,GAAM6yB,EAAKC,GAEtC,SAASC,GAAWxL,GAChB,GAAmB,iBAARA,EACP,MAAM,IAAI5vC,MAAM,mBAEpB,OAAOk3C,GADKR,GAAY9G,IAwC5B,SAASyL,GAASpF,EAASqF,EAASh9B,EAAO,IACvC,MAAM+7B,KAAEA,EAAIpV,EAAEA,EAACxuB,EAAEA,GAtCrB,SAAqBw/B,EAASF,EAAYwF,GACtC,GAAe,MAAXtF,EACA,MAAM,IAAIj2C,MAAM,2CAA2Ci2C,MAC/D,MAAM5pB,EAAKspB,GAAYM,GACjBx/B,EAAIu/B,GAAoBD,GACxByF,EAAW,CAACJ,GAAW3kC,GAAIwkC,GAAY5uB,IAC7C,GAAoB,MAAhBkvB,EAAsB,EACD,IAAjBA,IACAA,EAAevB,GAAMvrB,YAAY,KACrC,MAAM5nB,EAAI8uC,GAAY4F,GACtB,GAAiB,KAAb10C,EAAE9G,OACF,MAAM,IAAIC,MAAM,yCACpBw7C,EAAS/3C,KAAKoD,GAIlB,MAAO,CAAEwzC,KAFIxB,MAAe2C,GAEbvW,EADL+V,GAAS3uB,GACD5V,EAAAA,GAsBKglC,CAAYxF,EAASqF,EAASh9B,EAAKi9B,cAC1D,IAAInN,EACJ,MAAMsN,EAAO,IAAI5B,GAEjB,IADA4B,EAAKpB,WAAWD,KACPjM,EAAMoM,GAASkB,EAAKnB,eAAgBtV,EAAGxuB,KAC5CilC,EAAKpB,aACT,OA1BJ,SAAqBqB,EAAQr9B,GACzB,IAAI8vB,IAAEA,EAAG8H,SAAEA,GAAayF,EACxB,MAAMC,UAAEA,EAASC,IAAEA,EAAGC,UAAEA,GAAch9C,OAAO8N,OAAO,CAAEgvC,WAAW,EAAMC,KAAK,GAAQv9B,GAChFs9B,GAAaxN,EAAI6J,aACjB7J,EAAMA,EAAI+J,aACVjC,GAAY,GAEhB,MAAMxiB,EAASmoB,EAAMzN,EAAIgK,gBAAkBhK,EAAIuK,oBAC/C,OAAOmD,EAAY,CAACpoB,EAAQwiB,GAAYxiB,EAkBjCqoB,CAAY3N,EAAK9vB,GAyI5B8wB,GAAMqD,KAAKuB,eAAe,GAC1B,MAAM9sB,GAAS,CACX80B,KAt+B4Bz7C,UAu+B5B07C,IAAqB,iBAATn1B,MAAqB,WAAYA,KAAOA,KAAKI,YAAS3mB,GAEzDy5C,GAAQ,CACjBkC,kBAAkBnG,GACd,IAEI,OADAC,GAAoBD,IACb,EAEX,MAAO5zC,GACH,OAAO,IAGfg6C,iBAAmB7/B,IAEf,IADAA,EAAOq5B,GAAYr5B,IACVvc,OAAS,IAAMuc,EAAKvc,OAAS,KAClC,MAAM,IAAIC,MAAM,yDACpB,MAAM4vC,EAAMZ,GAAIkF,GAAc53B,GAAOmyB,GAAMtyB,GAC3C,GAAIyzB,IAAQvnB,IAAOunB,IAAQtnB,GACvB,MAAM,IAAItoB,MAAM,uBACpB,OAhgBR,SAAkB4vC,GACd,OAAOsH,GAAWR,GAAY9G,IA+fnBwM,CAASxM,IAEpBnhB,YAAa,CAAC4tB,EAAc,MACxB,GAAIn1B,GAAO+0B,IACP,OAAO/0B,GAAO+0B,IAAI3tB,gBAAgB,IAAIvmB,WAAWs0C,IAOjD,MAAM,IAAIr8C,MAAM,sDAGxBs8C,iBAAkB,IACPtC,GAAMmC,iBAAiBnC,GAAMvrB,YAAY,KAEpDipB,WAAAA,GACA1I,IAAAA,GACAjtB,OAAQrjB,MAAO6F,IACX,GAAI2iB,GAAO+0B,IAAK,CACZ,MAAMnlC,QAAeoQ,GAAO+0B,IAAIM,OAAOn/B,OAAO,UAAW7Y,EAAQuS,QACjE,OAAO,IAAI/O,WAAW+O,GAOtB,MAAM,IAAI9W,MAAM,iDAGxBi6C,WAAYv7C,MAAO2B,KAAQm8C,KACvB,GAAIt1B,GAAO+0B,IAAK,CACZ,MAAMQ,QAAav1B,GAAO+0B,IAAIM,OAAOG,UAAU,MAAOr8C,EAAK,CAAEuD,KAAM,OAAQ0Y,KAAM,CAAE1Y,KAAM,aAAe,EAAO,CAAC,SAC1GW,EAAUs0C,MAAe2D,GACzB1lC,QAAeoQ,GAAO+0B,IAAIM,OAAOI,KAAK,OAAQF,EAAMl4C,GAC1D,OAAO,IAAIwD,WAAW+O,GAStB,MAAM,IAAI9W,MAAM,sDAGxB48C,gBAAYr8C,EACZ45C,oBAAgB55C,EAChBs8C,WAAW/J,EAAa,EAAGQ,EAAQlE,GAAMqD,MACrC,MAAMU,EAASG,IAAUlE,GAAMqD,KAAOa,EAAQ,IAAIlE,GAAMkE,EAAM1qB,EAAG0qB,EAAMzqB,GAGvE,OAFAsqB,EAAOa,eAAelB,GACtBK,EAAOE,SAAS/E,IACT6E,ICljCf,IAWI2J,GAXAl8C,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAUzEk5C,GAACG,eAAiB,SAAU95C,KAAQm8C,GAC/C,OAAO7mC,GAASiS,GAAY,SAAUvnB,EAAKkW,GAAOimC,MAE/C,MAAMO,GACTt7C,YAAYs0C,GACR+G,GAAuBz7C,IAAIR,UAAM,GACjC2H,GAAOvD,eAA2C,KAA3ByR,GAAWq/B,GAAqB,6BAA8B,aAAc,cACnGn1C,GAAuBC,KAAMi8C,GAAwB1mC,GAAQ2/B,GAAa,KAE1EA,iBAAe,OAAOz0C,GAAuBT,KAAMi8C,GAAwB,KAC3E/B,gBAAc,OAAOgC,GAAWC,iBAAiB17C,GAAuBT,KAAMi8C,GAAwB,MACtGG,0BAAwB,OAAOF,GAAWC,iBAAiB17C,GAAuBT,KAAMi8C,GAAwB,MAAM,GAC1HH,KAAKv/B,GACD5U,GAAOvD,eAAuC,KAAvByR,GAAW0G,GAAiB,wBAAyB,SAAUA,GACtF,MAAO8/B,EAAQC,GAASC,GAAmBznC,GAASyH,GAASzH,GAASrU,GAAuBT,KAAMi8C,GAAwB,MAAO,CAC9HhB,WAAW,EACXF,WAAW,IAETxN,EAAMiP,GAAoB5G,QAAQyG,GACxC,OAAOzP,GAAU/gC,KAAK,CAClBskB,EAAG7f,GAAM,KAAOi9B,EAAIpd,EAAE3lB,SAAS,IAAK,IACpCkX,EAAGpR,GAAM,KAAOi9B,EAAI7rB,EAAElX,SAAS,IAAK,IACpC/L,EAAI69C,EAAQ,GAAO,KACpB/zC,SAEPk0C,mBAAmB9pC,GACf,MAAM+pC,EAASR,GAAWC,iBAAiBxpC,GAC3C,OAAO4C,GAAQonC,GAA0B7nC,GAASrU,GAAuBT,KAAMi8C,GAAwB,MAAOS,IAElHn2C,wBAAwB/G,EAAKo9C,GACzB,IAAIpnC,EAAQ7N,GAAO/B,SAASpG,EAAK,OACjC,GAAqB,KAAjBgW,EAAMtW,OAAe,CAErB,OAAOqW,GDktBZ,SAAsB2/B,EAAYkB,GAAe,GACpD,OAAO7H,GAAMsO,eAAe3H,GAAYiB,WAAWC,GCptB5B0G,CAAuBtnC,IAASonC,IAGnD,GAAqB,KAAjBpnC,EAAMtW,OAAe,CACrB,MAAM69C,EAAM,IAAI71C,WAAW,IAC3B61C,EAAI,GAAK,EACTA,EAAIv8C,IAAIgV,EAAO,GACfA,EAAQunC,EAGZ,OAAOxnC,GADOynC,GAAgBpH,QAAQpgC,GACjB2gC,WAAWyG,IAEpCr2C,wBAAwBgW,EAAQ+jB,GAC5B,MAAMiN,EAAMX,GAAU/gC,KAAKy0B,GACrB0a,EAAMwB,GAAoB/G,YAAY3gC,GAASY,GAAO,CAAC63B,EAAIpd,EAAGod,EAAI7rB,MAAM61B,gBACxEmF,EDusBP,SAA0BtH,EAAS9U,EAAW+U,EAAUe,GAAe,GAC1E,OAAO7H,GAAM0O,cAAc7H,EAAS9U,EAAW+U,GAAUc,WAAWC,GCxsBjD8G,CAA2BpoC,GAASyH,GAASy+B,EAAKzN,EAAIN,SACrE,OAAc,MAAVyP,EACOnnC,GAAQmnC,GAEZ/0C,GAAO3D,mBAAmB,+BAAgC,YAAas8B,GAElF/5B,kBAAkB42C,EAAIC,EAAIR,GACtB,MAAMS,EAAOL,GAAgBpH,QAAQsG,GAAWC,iBAAiBgB,GAAI51C,UAAU,IACzE+1C,EAAON,GAAgBpH,QAAQsG,GAAWC,iBAAiBiB,GAAI71C,UAAU,IAC/E,MAAO,KAAO81C,EAAK75C,IAAI85C,GAAMhtC,QAAQssC,ICzE7C,SAASW,GAAa9R,EAAM+R,GACxB,MAAO,CACH/qB,QAASW,GAAWqY,GACpB+R,aAAcA,GAAe,IAAIp/C,KAAI,CAACq/C,EAAY/+C,KAC9C,GAA+B,KAA3BmX,GAAW4nC,GAEX,MAAM,IAAIt+C,MAAM,IAEpB,OAAOs+C,EAAW/2C,kBAIvB,SAASg3C,GAAc3/C,GAC1B,GAAI0P,MAAMN,QAAQpP,GACd,OAAOA,EAAMK,KAAI,CAACoC,EAAK9B,KACnB,GAAI+O,MAAMN,QAAQ3M,GAAM,CACpB,GAAIA,EAAItB,OAAS,EAEb,MAAM,IAAIC,MAAM,IAEpB,OAAOo+C,GAAa/8C,EAAI,GAAIA,EAAI,IAEpC,OAAO+8C,GAAa/8C,EAAIiyB,QAASjyB,EAAIg9C,gBAG7C,MAAMp2C,EAASnJ,OAAOD,KAAKD,GAAOK,KAAKqtC,IACnC,MAAM+R,EAAcz/C,EAAM0tC,GAAMltC,QAAO,CAACC,EAAOi/C,KAC3Cj/C,EAAMi/C,IAAc,EACbj/C,IACR,IACH,OAAO++C,GAAa9R,EAAMxtC,OAAOD,KAAKw/C,GAAa9e,WAGvD,OADAt3B,EAAOs3B,MAAK,CAAC9rB,EAAGC,IAAOD,EAAE6f,QAAQkrB,cAAc9qC,EAAE4f,WAC1CrrB,ED2CX60C,GAAyB,IAAIx6C,QE9EtB,MCEMkG,GAAS,IAAIrE,EDFH,4CEAvB,IAWIs6C,GAXA79C,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAYxF,MAAMiQ,GAAOnK,OAAO,GACpB,SAAS83C,GAAaztC,EAAQrN,GAC1B,MAAMhF,EAAQ4J,GAAO1B,UAAUmK,EAAQ,SACjChJ,EAASqJ,GAAQ1S,GAIvB,OAHIqJ,EAAOlI,OAAS,IAChByI,GAAO3D,mBAAmB,kBAAmB,MAAMjB,IAAQhF,GAExDqJ,EAEX,SAAS02C,GAAiB//C,GACtB,OAAO2/C,GAAc3/C,GAAOK,KAAKoC,GAAQ,CAACA,EAAIiyB,QAASjyB,EAAIg9C,eAK/D,SAASO,GAAiBxpB,EAAIgZ,GAC1B,MAAM1P,EAAS,CACXggB,GAAatpB,EAAGE,OAAS,EAAG,SAC5BopB,GAAatpB,EAAGypB,UAAY,EAAG,YAC/BH,GAAatpB,EAAG0pB,UAAY,EAAG,YACpB,MAAT1pB,EAAGzoB,GAAcsnB,GAAWmB,EAAGzoB,IAAM,KACvC+xC,GAAatpB,EAAGx2B,OAAS,EAAG,SAC3Bw2B,EAAGxf,MAAQ,MAEhB,IAAIooB,EAAUjtB,GACd,GAAkB,MAAdqkB,EAAG4I,QAEHA,EAAUx1B,GAAO1B,UAAUsuB,EAAG4I,QAAS,cAGnCoQ,GAAuB,MAAhBA,EAAIV,UAAoBU,EAAIT,gBAAkB3P,GACrDx1B,GAAO3D,mBAAmB,4BAA6B,MAAOupC,QAGjE,GAAIA,EAAK,CAEV,MAAM2Q,EAAS3Q,EAAIT,cACL,MAAVoR,IACA/gB,EAAU+gB,GAIlB,IAAK3Q,EAOD,OALIpQ,IAAYjtB,KACZ2tB,EAAOj7B,KAAK6N,GAAQ0sB,IACpBU,EAAOj7B,KAAK,MACZi7B,EAAOj7B,KAAK,OAETgxB,GAAUiK,GAGrB,IAAIp/B,EAAIsH,OAAO,GAAKwnC,EAAIN,SAUxB,OATI9P,IAAYjtB,GACZzR,EAAImuC,GAAUuR,YAAYhhB,EAASoQ,EAAI9uC,GAElCsH,OAAOwnC,EAAI9uC,KAAOA,GACvBkJ,GAAO3D,mBAAmB,4BAA6B,MAAOupC,GAElE1P,EAAOj7B,KAAK6N,GAAQhS,IACpBo/B,EAAOj7B,KAAK6N,GAAQ88B,EAAIpd,IACxB0N,EAAOj7B,KAAK6N,GAAQ88B,EAAI7rB,IACjBkS,GAAUiK,GAKrB,SAASugB,GAAkB7pB,EAAIgZ,GAS3B,MAAM1P,EAAS,CACXggB,GAAatpB,EAAG4I,SAAW,EAAG,WAC9B0gB,GAAatpB,EAAGE,OAAS,EAAG,SAC5BopB,GAAatpB,EAAG8pB,sBAAwB,EAAG,wBAC3CR,GAAatpB,EAAG+pB,cAAgB,EAAG,gBACnCT,GAAatpB,EAAG0pB,UAAY,EAAG,YACpB,MAAT1pB,EAAGzoB,GAAcsnB,GAAWmB,EAAGzoB,IAAM,KACvC+xC,GAAatpB,EAAGx2B,OAAS,EAAG,SAC3Bw2B,EAAGxf,MAAQ,KACX+oC,GAAiBvpB,EAAGgqB,YAAc,KAOvC,OALIhR,IACA1P,EAAOj7B,KAAKi7C,GAAatQ,EAAIN,QAAS,YACtCpP,EAAOj7B,KAAK6N,GAAQ88B,EAAIpd,IACxB0N,EAAOj7B,KAAK6N,GAAQ88B,EAAI7rB,KAErBhM,GAAO,CAAC,OAAQke,GAAUiK,KAKrC,SAAS2gB,GAAkBjqB,EAAIgZ,GAC3B,MAAM1P,EAAS,CACXggB,GAAatpB,EAAG4I,SAAW,EAAG,WAC9B0gB,GAAatpB,EAAGE,OAAS,EAAG,SAC5BopB,GAAatpB,EAAGypB,UAAY,EAAG,YAC/BH,GAAatpB,EAAG0pB,UAAY,EAAG,YACpB,MAAT1pB,EAAGzoB,GAAcsnB,GAAWmB,EAAGzoB,IAAM,KACvC+xC,GAAatpB,EAAGx2B,OAAS,EAAG,SAC3Bw2B,EAAGxf,MAAQ,KACX+oC,GAAiBvpB,EAAGgqB,YAAc,KAOvC,OALIhR,IACA1P,EAAOj7B,KAAKi7C,GAAatQ,EAAIN,QAAS,kBACtCpP,EAAOj7B,KAAK6N,GAAQ88B,EAAIpd,IACxB0N,EAAOj7B,KAAK6N,GAAQ88B,EAAI7rB,KAErBhM,GAAO,CAAC,OAAQke,GAAUiK,KAE9B,MAAM4gB,GACT79C,cACIg9C,GAAmBp9C,IAAIR,UAAM,GAC7BD,GAAuBC,KAAM49C,GAAoB,CAC7Ch/C,KAAM,KACNkN,GAAI,KACJ2oB,MAAO,EACPwpB,SAAUl4C,OAAO,GACjBi4C,SAAU,KACVK,qBAAsB,KACtBC,aAAc,KACdvpC,KAAM,KACNhX,MAAOgI,OAAO,GACdo3B,QAASp3B,OAAO,GAChBwnC,IAAK,KACLgR,WAAY,MACb,KAGH3/C,WAAS,OAAOqC,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,QAChFc,eACA,OAAQ1+C,KAAKpB,MACT,KAAK,EAAG,MAAO,SACf,KAAK,EAAG,MAAO,WACf,KAAK,EAAG,MAAO,WAEnB,OAAO,KAEPA,SAAKb,GACL,OAAQA,GACJ,KAAK,KACDoD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,OAAQ,MACxE,MACJ,KAAK,EACL,IAAK,SACDz8C,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,OAAQ,GACxE,MACJ,KAAK,EACL,IAAK,SACL,IAAK,WACDz8C,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,OAAQ,GACxE,MACJ,KAAK,EACL,IAAK,SACL,IAAK,WACDz8C,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,OAAQ,GACxE,MACJ,QACI,MAAM,IAAIz+C,MAAM,iCAoBxB2M,SAAO,OAAO7K,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,MAC9E9xC,OAAG/N,GACHoD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,KAAgB,MAAT7/C,EAAiB,KAAOq1B,GAAWr1B,IAE1G02B,YAAU,OAAOxzB,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,SACjFnpB,UAAM12B,GAASoD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,QAASj2C,GAAO7B,UAAU/H,EAAO,UAChHkgD,eAAa,OAAOh9C,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,YACpFK,aAASlgD,GAASoD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,WAAYj2C,GAAO1B,UAAUlI,IAC/GigD,eAAa,OAAO/8C,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,YACpFI,aAASjgD,GACToD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,WAAsB,MAAT7/C,EAAiB,KAAO4J,GAAO1B,UAAUlI,IAEtHsgD,2BAAyB,OAAOp9C,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,wBAChGS,yBAAqBtgD,GACrBoD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,uBAAkC,MAAT7/C,EAAiB,KAAO4J,GAAO1B,UAAUlI,IAElIugD,mBAAiB,OAAOr9C,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,gBACxFU,iBAAavgD,GACboD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,eAA0B,MAAT7/C,EAAiB,KAAO4J,GAAO1B,UAAUlI,IAE1HgX,WAAS,OAAO9T,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,QAChF7oC,SAAKhX,GAASoD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,OAAQroC,GAAQxX,IAC9FA,YAAU,OAAOkD,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,SACjF7/C,UAAMA,GACNoD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,QAASj2C,GAAO1B,UAAUlI,IAE1Fo/B,cAAY,OAAOl8B,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,WACnFzgB,YAAQp/B,GAASoD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,UAAWj2C,GAAO1B,UAAUlI,IAC7GuiC,gBAAc,OAAOr/B,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,QAAU,KAC/Ftd,cAAUviC,GACVoD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,MAAiB,MAAT7/C,EAAiB,KAAO6uC,GAAU/gC,KAAK9N,IAE/GwgD,iBAAe,OAAOt9C,EAASR,GAAuBT,KAAM49C,GAAoB,KAAM,eAAiB,KACvGW,eAAWxgD,GACXoD,EAASV,GAAuBT,KAAM49C,GAAoB,KAAM,aAAwB,MAAT7/C,EAAiB,KAAO2/C,GAAc3/C,IAErH0d,WACA,GAAsB,MAAlBzb,KAAKsgC,UACL,MAAM,IAAInhC,MAAM,mEAEpB,OAAOmrB,GAAUtqB,KAAKktC,YAEtByR,mBACA,OAAOr0B,GAAUtqB,KAAK4+C,oBAEtB/yC,WACA,OAAsB,MAAlB7L,KAAKsgC,UACE,KAGJ,GAEPue,oBACA,OAAsB,MAAlB7+C,KAAKsgC,UACE,KAGJ,GAEXwe,WACI,OAAyB,MAAlB9+C,KAAKsgC,UAEZ4M,iBACA,GAAsB,MAAlBltC,KAAKsgC,UACL,MAAM,IAAInhC,MAAM,8EAEpB,MAAMN,EAAQmB,KAAK++C,aACnB,GAAqB,IAAjBlgD,EAAMK,OACN,MAAM,IAAIC,MAAM,4DAEpB,OAAQN,EAAM,IACV,KAAK,EACD,OAAOk/C,GAAiB/9C,KAAMA,KAAKsgC,WACvC,KAAK,EACD,OAAOke,GAAkBx+C,KAAMA,KAAKsgC,WACxC,KAAK,EACD,OAAO8d,GAAkBp+C,KAAMA,KAAKsgC,WAE5C,MAAM,IAAInhC,MAAM,oBAEhBy/C,yBACA,GAAsB,MAAlB5+C,KAAKsgC,UACL,MAAM,IAAInhC,MAAM,8EAEpB,MAAMN,EAAQmB,KAAK++C,aACnB,GAAqB,IAAjBlgD,EAAMK,OACN,MAAM,IAAIC,MAAM,4DAEpB,OAAQN,EAAM,IACV,KAAK,EACD,OAAOk/C,GAAiB/9C,MAC5B,KAAK,EACD,OAAOw+C,GAAkBx+C,MAC7B,KAAK,EACD,OAAOo+C,GAAkBp+C,MAEjC,MAAM,IAAIb,MAAM,oBAGpB4/C,aAEI,MAAMC,EAA+B,MAAjBh/C,KAAKg+C,SACnBiB,EAA+B,MAArBj/C,KAAKs+C,cAAqD,MAA7Bt+C,KAAKq+C,qBAC5Ca,EAAoC,MAAnBl/C,KAAKu+C,WAI5B,GAAMv+C,KAAKs+C,cAAkBt+C,KAAKq+C,sBAC1Br+C,KAAKs+C,aAAet+C,KAAKq+C,qBACzB,MAAM,IAAIl/C,MAAM,0CAMxB,IAAmB,IAAda,KAAKpB,MAA4B,IAAdoB,KAAKpB,OAAeqgD,EACxC,MAAM,IAAI9/C,MAAM,qEAEpB,GAAkB,IAAda,KAAKpB,MAAcsgD,EACnB,MAAM,IAAI//C,MAAM,6CAEpB,MAAMN,EAAQ,GA0Bd,OAxBiB,MAAbmB,KAAKpB,KACLC,EAAM+D,KAAK5C,KAAKpB,MAGZqgD,EACApgD,EAAM+D,KAAK,GAENo8C,GACLngD,EAAM+D,KAAK,GACNs8C,GACDrgD,EAAM+D,KAAK,IAGVs8C,GACLrgD,EAAM+D,KAAK,GACX/D,EAAM+D,KAAK,KAGX/D,EAAM+D,KAAK,GACX/D,EAAM+D,KAAK,GACX/D,EAAM+D,KAAK,IAGnB/D,EAAM6/B,OACC7/B,EAEX2K,QACI,OAAOi1C,GAAY5yC,KAAK7L,MAE5BuI,SAWI,OAVI9H,GAAuBT,KAAM49C,GAAoB,KAAKrQ,MACtD9sC,GAAuBT,KAAM49C,GAAoB,KAAKrQ,IAAO9sC,GAAuBT,KAAM49C,GAAoB,KAAKrQ,IAAI/jC,QAAQjB,UAE/H9H,GAAuBT,KAAM49C,GAAoB,KAAKW,aACtD99C,GAAuBT,KAAM49C,GAAoB,KAAKW,WAAatgD,OAAOsK,OAAO9H,GAAuBT,KAAM49C,GAAoB,KAAKW,WAAWngD,KAAKoC,IACnJvC,OAAOsK,OAAO/H,EAAIg9C,aACXv/C,OAAOsK,OAAO/H,QAG7BvC,OAAOsK,OAAO9H,GAAuBT,KAAM49C,GAAoB,MACxD59C,KAEXoB,WACI,OAAOnD,OAAOmD,SAASX,GAAuBT,KAAM49C,GAAoB,MAE5Er3C,YAAYguB,GACR,GAAoB,iBAAR,EAAkB,CAC1B,MAAMb,EAAU5e,GAASyf,GACzB,GAAIb,EAAQ,IAAM,IACd,OAAO+qB,GAAY5yC,KAtVxB,IAwVC,OAAQ6nB,EAAQ,IACZ,KAAK,EACL,KAAK,EAAG,OAAO+qB,GAAY5yC,KAvS3C,SAAuBkJ,GACnB,MAAM,IAAI5V,MAAM,SAsS4BggD,CAAczrB,EAAQnqB,MAAM,KAEhE,MAAM,IAAIpK,MAAM,gCAEpB,MAAMiI,EAAS,IAAIq3C,GAwCnB,OAvCe,MAAXlqB,EAAG31B,OACHwI,EAAOxI,KAAO21B,EAAG31B,MAER,MAAT21B,EAAGzoB,KACH1E,EAAO0E,GAAKyoB,EAAGzoB,IAEH,MAAZyoB,EAAGE,QACHrtB,EAAOqtB,MAAQF,EAAGE,OAEH,MAAfF,EAAG0pB,WACH72C,EAAO62C,SAAW1pB,EAAG0pB,UAEN,MAAf1pB,EAAGypB,WACH52C,EAAO42C,SAAWzpB,EAAGypB,UAEM,MAA3BzpB,EAAG8pB,uBACHj3C,EAAOi3C,qBAAuB9pB,EAAG8pB,sBAEd,MAAnB9pB,EAAG+pB,eACHl3C,EAAOk3C,aAAe/pB,EAAG+pB,cAEd,MAAX/pB,EAAGxf,OACH3N,EAAO2N,KAAOwf,EAAGxf,MAEL,MAAZwf,EAAGx2B,QACHqJ,EAAOrJ,MAAQw2B,EAAGx2B,OAEJ,MAAdw2B,EAAG4I,UACH/1B,EAAO+1B,QAAU5I,EAAG4I,SAEJ,MAAhB5I,EAAG+L,YACHl5B,EAAOk5B,UAAYsM,GAAU/gC,KAAK0oB,EAAG+L,YAEpB,MAAjB/L,EAAGgqB,aACHn3C,EAAOm3C,WAAahqB,EAAGgqB,YAKpBn3C,GAGfw2C,GAAqB,IAAIn8C,QC3azB,IAWI29C,GAAqBC,GAXrBt/C,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IASxF,SAAS4X,GAAS9Z,GACd,OAAa,MAATA,EACO,KAEJA,EAEX,SAASuhD,GAAOvhD,GACZ,OAAa,MAATA,EACO,KAEJA,EAAMyM,WAGV,MAAM+0C,GACT3+C,YAAYo9C,EAAUM,EAAcD,GAChCj/C,EAAiBY,KAAM,CACnBg+C,SAAUnmC,GAASmmC,GACnBM,aAAczmC,GAASymC,GACvBD,qBAAsBxmC,GAASwmC,KAGvClR,SACI,MAAM6Q,SAAEA,EAAQM,aAAEA,EAAYD,qBAAEA,GAAyBr+C,KACzD,MAAO,CACHotC,MAAO,UACP4Q,SAAUsB,GAAOtB,GACjBM,aAAcgB,GAAOhB,GACrBD,qBAAsBiB,GAAOjB,KA8ClC,MAAMmB,GACT5+C,YAAYqyB,EAAO+W,GACfoV,GAAoB5+C,IAAIR,UAAM,GACd,MAAZgqC,IACAA,EAAWyV,IAEf1/C,GAAuBC,KAAMo/C,GAAqBnhD,OAAOsK,OAAO0qB,EAAMysB,aAAathD,KAAKm2B,IACpF,GAAoB,iBAAhB,GAA4BA,EAAGyV,WAAaA,EAC5C,MAAM,IAAI7qC,MAAM,qBAEpB,OAAOo1B,MACN,KAELn1B,EAAiBY,KAAM,CACnBgqC,SAAAA,EACAvuB,KAAM5D,GAASob,EAAMxX,MACrBg9B,OAAQxlB,EAAMwlB,OACdkH,UAAW1sB,EAAM0sB,UACjBC,WAAY3sB,EAAM2sB,WAClBnrB,MAAOxB,EAAMwB,MACborB,WAAY5sB,EAAM4sB,WAClB5B,SAAUhrB,EAAMgrB,SAChB6B,QAAS7sB,EAAM6sB,QACfC,MAAO9sB,EAAM8sB,MACbC,UAAW/sB,EAAM+sB,UACjBC,cAAepoC,GAASob,EAAMgtB,iBAGlCP,mBAAiB,OAAOj/C,GAAuBT,KAAMo/C,GAAqB,KAI9EjS,SACI,MAAM8S,cAAEA,EAAaJ,WAAEA,EAAUG,UAAEA,EAAS/B,SAAEA,EAAQ6B,QAAEA,EAAOrkC,KAAEA,EAAIskC,MAAEA,EAAKtrB,MAAEA,EAAKgkB,OAAEA,EAAMmH,WAAEA,EAAUD,UAAEA,EAASD,aAAEA,GAAiB1/C,KACrI,MAAO,CACHotC,MAAO,QACP6S,cAAeX,GAAOW,GACtBJ,WAAYP,GAAOO,GACnBG,UAAAA,EACA/B,SAAUqB,GAAOrB,GACjB6B,QAASR,GAAOQ,GAChBrkC,KAAAA,EAAMskC,MAAAA,EAAOtrB,MAAAA,EAAOgkB,OAAAA,EAAQmH,WAAAA,EAAYD,UAAAA,EACxCD,aAAAA,GAGR,EAAEN,GAAsB,IAAI39C,QAAW4K,OAAO24B,aAC1C,IAAItmC,EAAQ,EACZ,MAAO,CACHumC,KAAM,IACEvmC,EAAQsB,KAAKd,OACN,CACHnB,MAAOiC,KAAK0/C,aAAahhD,KAAUwmC,MAAM,GAG1C,CAAEnnC,WAAO2B,EAAWwlC,MAAM,IAIzChmC,aAAW,OAAOc,KAAK0/C,aAAaxgD,OACpCghD,WACA,OAAsB,MAAlBlgD,KAAK2/C,UACE,KAEJ,IAAI9kC,KAAsB,IAAjB7a,KAAK2/C,WAEzB9hD,qBAAqBa,GACjB,MAAM61B,EAAKv0B,KAAK0/C,aAAahhD,GAC7B,GAAU,MAAN61B,EACA,MAAM,IAAIp1B,MAAM,cAEpB,MAAoB,iBAAR,QACMa,KAAKgqC,SAASmW,eAAe5rB,GAGpCA,EAGf6rB,UAAY,QAASpgD,KAAKyb,KAC1B4kC,WAAa,QAASrgD,KAAKigD,cAC3BK,gBACI,IAAKtgD,KAAKogD,UACN,MAAM,IAAIjhD,MAAM,IAEpB,MA+OG,CAAEohD,OAAQ,aAAc9kC,MADAwX,EA9OMjzB,MA+OMyb,KAAMg9B,OAAQxlB,EAAMwlB,QADnE,IAAmCxlB,GA3O5B,MAAMutB,GACT5/C,YAAY6G,EAAKuiC,GACG,MAAZA,IACAA,EAAWyV,IAEfz/C,KAAKgqC,SAAWA,EAChB,MAAMnH,EAAS5kC,OAAOsK,OAAOd,EAAIo7B,OAAOt5B,SACxCnK,EAAiBY,KAAM,CACnBygD,gBAAiBh5C,EAAIg5C,gBACrBC,UAAWj5C,EAAIi5C,UACfC,YAAal5C,EAAIk5C,YACjBC,QAASn5C,EAAIm5C,QACbnuB,QAAShrB,EAAIgrB,QACb1d,KAAMtN,EAAIsN,KACV8tB,OAAAA,EACAnkC,MAAO+I,EAAI/I,MACXmiD,iBAAkBp5C,EAAIo5C,mBAM9B1T,SACI,MAAM1a,QAAEA,EAAOiuB,UAAEA,EAASC,YAAEA,EAAW5rC,KAAEA,EAAIrW,MAAEA,EAAKkiD,QAAEA,EAAO/d,OAAEA,EAAM4d,gBAAEA,EAAeI,iBAAEA,GAAqB7gD,KAC7G,MAAO,CACHotC,MAAO,MACP3a,QAAAA,EAASiuB,UAAAA,EAAWC,YAAAA,EAAa5rC,KAAAA,EAAMrW,MAAAA,EACvCkiD,QAAAA,EAAS/d,OAAAA,EAAQ4d,gBAAAA,EAAiBI,iBAAAA,GAG1ChjD,iBACI,aAAcmC,KAAKgqC,SAAS8W,SAAS9gD,KAAK0gD,WAE9C7iD,uBACI,aAAcmC,KAAKgqC,SAASmW,eAAengD,KAAKygD,iBAEpD5iD,8BACI,aAAcmC,KAAKgqC,SAAS+W,sBAAsB/gD,KAAKygD,iBAE3DO,eACI,MA6MG,CAAET,OAAQ,WAAY94C,IAAK,CAC1Bg5C,iBAFoBh5C,EA5MMzH,MA8MLygD,gBACrBC,UAAWj5C,EAAIi5C,UACfC,YAAal5C,EAAIk5C,YACjBluB,QAAShrB,EAAIgrB,QACb1d,KAAMtN,EAAIsN,KACV8tB,OAAQ5kC,OAAOsK,OAAOd,EAAIo7B,OAAOt5B,SACjC7K,MAAO+I,EAAI/I,QARvB,IAAgC+I,GAzMzB,MAAMw5C,GACTrgD,YAAY2zB,EAAIyV,GACZqV,GAAyB7+C,IAAIR,UAAM,GACnB,MAAZgqC,IACAA,EAAWyV,IAEf1/C,GAAuBC,KAAMq/C,GAA0BphD,OAAOsK,OAAOgsB,EAAG2sB,KAAK9iD,KAAKqJ,IAC9E,GAAIuiC,IAAaviC,EAAIuiC,SAEjB,MAAM,IAAI7qC,MAAM,qBAEpB,OAAOsI,MACN,KACLrI,EAAiBY,KAAM,CACnBgqC,SAAAA,EACAl+B,GAAIyoB,EAAGzoB,GACPD,KAAM0oB,EAAG1oB,KACTs1C,gBAAiB5sB,EAAG4sB,gBACpB1lC,KAAM8Y,EAAG9Y,KACT/c,MAAO61B,EAAG71B,MACVgiD,UAAWnsB,EAAGmsB,UACdC,YAAapsB,EAAGosB,YAChBS,UAAW7sB,EAAG6sB,UACdtB,QAASvrB,EAAGurB,QACZuB,kBAAmB9sB,EAAG8sB,kBACtBrD,SAAWzpB,EAAG+sB,mBAAqB/sB,EAAGypB,SACtCuD,UAAWhtB,EAAGgtB,UACdhb,OAAQhS,EAAGgS,OACXib,KAAMjtB,EAAGitB,OAGbN,WAAS,OAAOzgD,GAAuBT,KAAMq/C,GAA0B,KAI3ElS,SACI,MAAMrhC,GAAEA,EAAED,KAAEA,EAAIs1C,gBAAEA,EAAe1lC,KAAEA,EAAI/c,MAAEA,EAAKgiD,UAAEA,EAASC,YAAEA,EAAWS,UAAEA,EAASF,KAAEA,EAAIK,UAAEA,EAAShb,OAAEA,EAAMib,KAAEA,GAASxhD,KACrH,MAAO,CACHotC,MAAO,qBACPsT,UAAAA,EAAWC,YAAAA,EAAaY,UAAAA,EAAWJ,gBAAAA,EACnCE,kBAAmB/B,GAAOt/C,KAAKqhD,mBAC/Bx1C,KAAAA,EACAmyC,SAAUsB,GAAOt/C,KAAKg+C,UACtB8B,QAASR,GAAOt/C,KAAK8/C,SACrBrkC,KAAAA,EAAM/c,MAAAA,EAAOwiD,KAAAA,EAAME,UAAAA,EAAWI,KAAAA,EAAMjb,OAAAA,EAAQz6B,GAAAA,GAGhD5M,aAAW,OAAOc,KAAKkhD,KAAKhiD,OAChC,EAAEmgD,GAA2B,IAAI59C,QAAW4K,OAAO24B,aAC/C,IAAItmC,EAAQ,EACZ,MAAO,CACHumC,KAAM,IACEvmC,EAAQsB,KAAKd,OACN,CAAEnB,MAAOiC,KAAKkhD,KAAKxiD,KAAUwmC,MAAM,GAEvC,CAAEnnC,WAAO2B,EAAWwlC,MAAM,IAIzCuc,UACA,OAAOzhD,KAAK8/C,QAAU9/C,KAAKg+C,SAE/BngD,iBACI,MAAMo1B,QAAcjzB,KAAKgqC,SAAS8W,SAAS9gD,KAAK0gD,WAChD,GAAa,MAATztB,EACA,MAAM,IAAI9zB,MAAM,QAEpB,OAAO8zB,EAEXp1B,uBACI,MAAM02B,QAAWv0B,KAAKgqC,SAASmW,eAAengD,KAAKyb,MACnD,GAAU,MAAN8Y,EACA,MAAM,IAAIp1B,MAAM,QAEpB,OAAOo1B,EAEX12B,sBACI,aAAcmC,KAAKgqC,SAAS0X,iBAAoB1hD,KAAK2gD,YAAc,EAEvEK,eACI,OAAOW,GAA+B3hD,MAE1C4hD,eAAejvC,GACX,OAAIA,IAAUA,EAAMytC,UACTz4C,GAAO5D,WAAW,gDAAiD,wBAAyB,CAC/FY,UAAW,0BAGZk9C,GAAiC7hD,KAAM2S,IAI/C,MAAMmvC,GACTlhD,YAAY2zB,EAAIyV,GACI,MAAZA,IACAA,EAAWyV,IAEfz/C,KAAKgqC,SAAWA,EAChBhqC,KAAK2gD,YAAiC,MAAlBpsB,EAAGosB,YAAuBpsB,EAAGosB,YAAc,KAC/D3gD,KAAK0gD,UAA6B,MAAhBnsB,EAAGmsB,UAAqBnsB,EAAGmsB,UAAY,KACzD1gD,KAAKyb,KAAO8Y,EAAG9Y,KACfzb,KAAKtB,MAAQ61B,EAAG71B,MAChBsB,KAAKpB,KAAO21B,EAAG31B,KACfoB,KAAK6L,KAAO0oB,EAAG1oB,KACf7L,KAAK8L,GAAKyoB,EAAGzoB,IAAM,KACnB9L,KAAKi+C,SAAW1pB,EAAG0pB,SACnBj+C,KAAKy0B,MAAQF,EAAGE,MAChBz0B,KAAK+U,KAAOwf,EAAGxf,KACf/U,KAAKjC,MAAQw2B,EAAGx2B,MAChBiC,KAAKg+C,SAAWzpB,EAAGypB,SACnBh+C,KAAKq+C,qBAAmD,MAA3B9pB,EAAG8pB,qBAAgC9pB,EAAG8pB,qBAAuB,KAC1Fr+C,KAAKs+C,aAAmC,MAAnB/pB,EAAG+pB,aAAwB/pB,EAAG+pB,aAAe,KAClEt+C,KAAKm9B,QAAU5I,EAAG4I,QAClBn9B,KAAKsgC,UAAY/L,EAAG+L,UACpBtgC,KAAKu+C,WAA+B,MAAjBhqB,EAAGgqB,WAAsBhqB,EAAGgqB,WAAa,KAKhEpR,SACI,MAAMwT,YAAEA,EAAWD,UAAEA,EAAShiD,MAAEA,EAAK+c,KAAEA,EAAI7c,KAAEA,EAAIkN,GAAEA,EAAED,KAAEA,EAAI4oB,MAAEA,EAAK1f,KAAEA,EAAIurB,UAAEA,EAASie,WAAEA,GAAev+C,KACpG,MAAO,CACHotC,MAAO,qBACPmR,WAAAA,EAAYoC,YAAAA,EAAaD,UAAAA,EACzBvjB,QAASmiB,GAAOt/C,KAAKm9B,SACrBpoB,KAAAA,EAAMlJ,KAAAA,EACNoyC,SAAUqB,GAAOt/C,KAAKi+C,UACtBD,SAAUsB,GAAOt/C,KAAKg+C,UACtBviC,KAAAA,EACA6iC,aAAcgB,GAAOt/C,KAAKs+C,cAC1BD,qBAAsBiB,GAAOt/C,KAAKq+C,sBAClC5pB,MAAAA,EAAO6L,UAAAA,EAAWx0B,GAAAA,EAAIpN,MAAAA,EAAOE,KAAAA,EAC7Bb,MAAOuhD,GAAOt/C,KAAKjC,QAG3BF,iBACI,IAAI8iD,EAAc3gD,KAAK2gD,YACvB,GAAmB,MAAfA,EAAqB,CACrB,MAAMpsB,QAAWv0B,KAAKmgD,iBAClB5rB,IACAosB,EAAcpsB,EAAGosB,aAGzB,GAAmB,MAAfA,EACA,OAAO,KAEX,MAAM1tB,EAAQjzB,KAAKgqC,SAAS8W,SAASH,GACrC,GAAa,MAAT1tB,EACA,MAAM,IAAI9zB,MAAM,QAEpB,OAAO8zB,EAEXp1B,uBACI,OAAOmC,KAAKgqC,SAASmW,eAAengD,KAAKyb,MAE7C5d,WAAWkkD,GACP,OAAO/hD,KAAKgqC,SAASgY,mBAAmBhiD,KAAKyb,KAAMsmC,GAEvD3B,UACI,OAA0B,MAAlBpgD,KAAK0gD,UAEjBuB,WACI,OAAsB,IAAdjiD,KAAKpB,KAEjBsjD,WACI,OAAsB,IAAdliD,KAAKpB,KAEjByhD,WACI,OAAsB,IAAdrgD,KAAKpB,KAEjBoiD,eACI,OAAKhhD,KAAKogD,UAKHuB,GAA+B3hD,MAJ3B2H,GAAO5D,WAAW,wCAAyC,wBAAyB,CACvFY,UAAW,kBAKvBi9C,eAAejvC,GACX,OAAK3S,KAAKogD,UAKNztC,IAAUA,EAAMytC,UACTz4C,GAAO5D,WAAW,gDAAiD,wBAAyB,CAC/FY,UAAW,kBAGZk9C,GAAiC7hD,KAAM2S,GATnChL,GAAO5D,WAAW,wCAAyC,wBAAyB,CACvFY,UAAW,mBAc3B,SAASk9C,GAAiCttB,EAAI5hB,GAC1C,MAAO,CAAE4tC,OAAQ,sBAAuBhsB,GAAAA,EAAI5hB,MAAAA,GAEhD,SAASgvC,GAA+BptB,GACpC,MAAO,CAAEgsB,OAAQ,mBAAoBhsB,GAAAA,GAazC,SAAS4tB,KACL,MAAM,IAAIhjD,MAAM,oCAiEP,MAAAsgD,GAAgB,IA/D7B,MACI5hD,mBAAqB,OAAOskD,KAC5BtkD,mBAAqB,OAAOskD,KAC5BtkD,kBAAkB02B,GAAM,OAAO4tB,KAC/BtkD,WAAW02B,GAAM,OAAO4tB,KACxBtkD,kBAAkBkF,GAAQ,OAAOo/C,KAEjCtkD,uBAAyB,OAAOskD,KAEhCtkD,mBAAmB40B,EAAS2vB,GACxB,OAAOD,KAEXtkD,4BAA4B40B,EAAS2vB,GACjC,OAAOD,KAEXtkD,cAAc40B,EAAS2vB,GACnB,OAAOD,KAEXtkD,mBAAmB40B,EAAS4vB,EAAUD,GAClC,OAAOD,KAGXtkD,2BAA2BykD,GAAY,OAAOH,KAE9CtkD,eAAe0kD,GACX,OAAOJ,KAEXtkD,+BAA+B0kD,GAC3B,OAAOJ,KAEXtkD,qBAAqB4d,GACjB,OAAO0mC,KAEXtkD,4BAA4B4d,GACxB,OAAO0mC,KAGXtkD,cAAckD,GACV,OAAOohD,KAGXtkD,oBAAoB40B,GAChB,OAAO0vB,KAEXtkD,yBAAyB4d,EAAMsmC,EAAUlc,GACrC,OAAOsc,KAEXtkD,mBAAmBukD,GACf,OAAOD,KAGXtkD,SAASwR,EAAOvO,GAAY,OAAOqhD,KACnCtkD,WAAWwR,EAAOvO,GAAY,OAAOqhD,KACrCtkD,WAAWwR,KAAUnJ,GAAQ,OAAOi8C,KACpCtkD,oBAAoBwR,GAAS,OAAO8yC,KACpCtkD,gBAAgBwR,GAAS,OAAO8yC,KAChCtkD,UAAUwR,EAAOvO,GAAY,OAAOqhD,KACpCtkD,yBAAyBwR,GAAS,OAAO8yC,KACzCtkD,kBAAkBwR,EAAOvO,GAAY,OAAOqhD,KAC5CtkD,qBAAqBwR,EAAOvO,GAAY,OAAOqhD,OC5enD,IAWIK,GAAmBC,GAXnB1iD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAuBxF,MAAMy3B,GAAiB3xB,OAAO,sEAM9B,SAASlC,GAAU9F,GACf,GAAuB,iBAAX,EACR,MAAM,IAAIoB,MAAM,kBAEpB,OAAOpB,EAEJ,MAAM2kD,GACT9hD,cACI4hD,GAAkBhiD,IAAIR,UAAM,GAC5ByiD,GAAqBjiD,IAAIR,UAAM,GAC/B,MAAMyyB,EAAUzyB,KAAKyyB,QAAQpY,KAAKra,MAC5B2iD,EAAY3iD,KAAK2iD,UAAUtoC,KAAKra,MAChCoiD,EAAWpiD,KAAKoiD,SAAS/nC,KAAKra,MAC9B+U,EAAO/U,KAAK+U,KAAKsF,KAAKra,MACtByb,EAAOzb,KAAKyb,KAAKpB,KAAKra,MACtBy4C,EAASz4C,KAAKy4C,OAAOp+B,KAAKra,MAC1B4iD,EAAU5iD,KAAK4iD,QAAQvoC,KAAKra,MAC5B6iC,EAAS7iC,KAAK6iD,QAAQpnC,GAC5B1b,GAAuBC,KAAMwiD,GAAmB,CAC5C/vB,QAAAA,EACAkwB,UAAAA,EACAP,SAAAA,EACArtC,KAAAA,EACA0G,KAAAA,EACAg9B,OAAAA,EACAmK,QAAAA,EACA/f,OAAAA,EACA9hC,OAAQf,KAAK8C,OAAO,CAChBggD,UAAW9iD,KAAK+iD,UAAUX,OAAU1iD,GACpCsjD,QAAShjD,KAAK+iD,UAAUX,OAAU1iD,GAClCghD,UAAW1gD,KAAK+iD,UAAUtnC,OAAM/b,GAChC+yB,QAASzyB,KAAK+iD,UAAUtwB,OAAS/yB,GACjCmjC,OAAQ7iC,KAAK+iD,UAAUlgB,OAAQnjC,KAEnCujD,mBAAoBjjD,KAAK8C,OAAO,CAC5B+I,KAAM7L,KAAK+iD,UAAUtwB,GACrB7zB,KAAMoB,KAAK+iD,UAAUtK,GACrB3sC,GAAI9L,KAAK+iD,UAAUtwB,GACnBgC,MAAOz0B,KAAK+iD,UAAUtK,GACtBwF,SAAUj+C,KAAK+iD,UAAUH,GACzB5E,SAAUh+C,KAAK+iD,UAAUH,GACzBtE,aAAct+C,KAAK+iD,UAAUH,GAC7BvE,qBAAsBr+C,KAAK+iD,UAAUH,GACrC7tC,KAAM/U,KAAK+iD,UAAUhuC,GACrBhX,MAAOiC,KAAK+iD,UAAUH,KAE1BM,oBAAqBljD,KAAK8C,OAAO,CAC7B2Y,KAAMA,EACN/c,MAAO+5C,EACP75C,KAAMoB,KAAK+iD,UAAUtK,EAAQ,GAE7BiI,UAAW1gD,KAAK+iD,UAAUtnC,GAC1BklC,YAAa3gD,KAAK+iD,UAAUtK,GAE5Btb,QAASn9B,KAAK+iD,UAAUtK,GACxB5sC,KAAM4mB,EACN3mB,GAAI9L,KAAKyyB,QACTwrB,SAAU0E,EACV3E,SAAUh+C,KAAK+iD,UAAUJ,GACzBrE,aAAct+C,KAAK+iD,UAAUJ,GAC7BtE,qBAAsBr+C,KAAK+iD,UAAUJ,GACrC5kD,MAAO4kD,EACP5tC,KAAMA,EACN0f,MAAOgkB,EACPtoB,EAAG1U,EACHiG,EAAGjG,EACHhd,EAAGg6C,EACH8F,WAAYv+C,KAAK+iD,UAAU/iD,KAAKu+C,aACjC,CACC7/C,MAAO,CAAC,uBAEb,KACHqB,GAAuBC,KAAMyiD,GAAsBziD,KAAK8C,OAAO,CAC3D21C,OAAQA,EACRh9B,KAAMzb,KAAK+iD,UAAUtnC,EAAM,MAC3BkkC,UAAWlH,EACXmH,WAAYnkC,EACZgZ,MAAOz0B,KAAK+iD,UAAUl/C,GAAW,sBACjCg8C,WAAY8C,EACZ1E,SAAU0E,EACV7C,QAAS6C,EACT5C,MAAO//C,KAAK+iD,UAAUtwB,EAAS,8CAC/ButB,UAAWn8C,GACXo8C,cAAejgD,KAAK+iD,UAAUJ,KAC9B,KAGRlwB,QAAQ10B,GACJ,OAAOq1B,GAAWr1B,GAGtB0sC,YAAY1sC,GAIR,OAH0B,KAAtB8X,GAAW9X,IAA6C,+BAA5B+X,GAAU/X,EAAO,EAAG,KAChD4J,GAAO3D,mBAAmB,uBAAwB,QAASjG,GAExDiC,KAAKyyB,QAAQ3c,GAAU/X,EAAO,KAGzCojD,gBAAgBpjD,GACZ,OAAOu2B,GAAiB,CACpBzoB,KAAM7L,KAAKyyB,QAAQ10B,EAAM8N,MACzB4oB,MAAO9sB,GAAO7B,UAAU/H,EAAM02B,MAAO,iBAI7C2tB,SAASrkD,GACL,GAAa,MAATA,EACA,MAAO,SAEX,OAAQA,GACJ,IAAK,WACD,MAAO,MACX,IAAK,SACL,IAAK,UACD,OAAOA,EAEf,MAAuB,iBAAX,GAAwB2W,GAAY3W,IAAU8X,GAAW9X,GAAS,GACnE0X,GAAS1X,GAEb4J,GAAO3D,mBAAmB,mBAAoB,QAASjG,GAGlEk1B,MAAMl1B,EAAOisC,GACT,MAAM/6B,EAASxO,GAAuBT,KAAMyiD,GAAsB,KAAKliD,KAAKP,KAAMjC,GAElF,OADAkR,EAAOywC,aAAe3hD,EAAM2hD,aAAathD,KAAKW,GAAMiB,KAAKyb,KAAK1c,KACvD,IAAIygD,GAAMvwC,EAAQ+6B,GAE7BmZ,sBAAsBplD,EAAOisC,GACzB,MAAM,IAAI7qC,MAGd8jD,mBAAmBllD,EAAOisC,GACtB,OAAOvpC,GAAuBT,KAAMwiD,GAAmB,KAAKS,mBAAmBllD,GAEnFmlD,oBAAoBnlD,EAAOisC,GAGL,OAFlBjsC,EAAQE,OAAO8N,OAAO,GAAIhO,IAEhBgX,MAA+B,MAAfhX,EAAMoR,QAC5BpR,EAAMgX,KAAOhX,EAAMoR,OAED,MAAlBpR,EAAMkgD,UAAoBlgD,EAAMwR,MAChCxR,EAAMkgD,SAAWlgD,EAAMwR,KAE3BxR,EAAQ0C,GAAuBT,KAAMwiD,GAAmB,KAAKU,oBAAoBnlD,GACjF,MAAMwvC,EAAMX,GAAUwW,gBAAgBrlD,EAAMoyB,EAAGpyB,EAAM2jB,EAAG3jB,EAAMU,GAK9D,OAJAV,EAAMuiC,UAAYiN,EACG,MAAjBxvC,EAAMo/B,UACNp/B,EAAMo/B,QAAUoQ,EAAIT,eAEjB,IAAIgV,GAAoB/jD,EAAOisC,GAG1CviC,IAAI1J,EAAOisC,GACP,MAAMviC,EAAMzH,KAAK8C,OAAO,CACpB2vB,QAASzyB,KAAKyyB,QACdiuB,UAAW1gD,KAAKyb,KAChBklC,YAAa3gD,KAAKy4C,OAClB1jC,KAAM/U,KAAK+U,KACXrW,MAAOsB,KAAKy4C,OACZmI,QAAS5gD,KAAKqjD,QACdxgB,OAAQ7iC,KAAK6iC,OACb4d,gBAAiBzgD,KAAKyb,KACtBolC,iBAAkB7gD,KAAKy4C,QACxB,CACC/5C,MAAO,CAAC,aAXAsB,CAYTjC,GACH,OAAO,IAAIyiD,GAAI/4C,EAAKuiC,GAExBsZ,QAAQvlD,EAAOisC,GACX,MAAMsZ,EAAUtjD,KAAK8C,OAAO,CACxB49C,UAAW1gD,KAAKyb,KAChBklC,YAAa3gD,KAAKy4C,OAClB0I,gBAAiBnhD,KAAK+iD,UAAU/iD,KAAKyyB,SACrC4uB,kBAAmBrhD,KAAK2iD,UACxB92C,KAAM7L,KAAKyyB,QACXqtB,QAAS9/C,KAAK2iD,UACdzB,KAAMlhD,KAAK6iD,SAASpkD,GAAOuB,KAAKyH,IAAIhJ,EAAGurC,KACvCoX,UAAWphD,KAAK+U,KAChBysC,KAAMxhD,KAAK+iD,UAAU/iD,KAAK+U,MAC1BwxB,OAAQvmC,KAAK+iD,UAAU/iD,KAAKy4C,QAC5B3sC,GAAI9L,KAAKyyB,QACTurB,SAAUh+C,KAAK+iD,UAAU/iD,KAAK2iD,WAC9BlnC,KAAMzb,KAAKyb,KACX/c,MAAOsB,KAAKy4C,OACZ75C,KAAMoB,KAAK+iD,UAAU/iD,KAAKy4C,OAAQ,IACnC,CACCh9B,KAAM,CAAC,mBACPuiC,SAAU,CAAC,qBACXt/C,MAAO,CAAC,qBAnBIsB,CAoBbjC,GAEH,GAAoB,MAAhBulD,EAAQ9B,KACR,GAAI8B,EAAQ9B,KAAKtiD,QAAU,EAAG,CAE1B,MAAMnB,EAAQuJ,SAASg8C,EAAQ9B,MAC/B,GAAc,IAAVzjD,GAAyB,IAAVA,EAWf,OAAO4J,GAAO5D,WAAW,0BAA2B,WAAY,CAC5DhG,MAAOulD,EAAQ9B,OAVnB,GAAsB,MAAlB8B,EAAQ/c,QAAkB+c,EAAQ/c,SAAWxoC,EAC7C,OAAO4J,GAAO5D,WAAW,kCAAmC,WAAY,CACpEhG,MAAO,CAAEyjD,KAAM8B,EAAQ9B,KAAMjb,OAAQ+c,EAAQ/c,UAGrD+c,EAAQ/c,OAASxoC,SACVulD,EAAQ9B,UAQlB,IAAK9sC,GAAY4uC,EAAQ9B,KAAM,IAEhC,OAAO75C,GAAO5D,WAAW,4BAA6B,WAAY,CAC9DhG,MAAOulD,EAAQ9B,OAK3B,OAAO,IAAIP,GAAmBqC,EAAStZ,GAG3CnH,OAAO9kC,GACH,OAAO0C,GAAuBT,KAAMwiD,GAAmB,KAAK3f,OAAO9kC,GAEvEgD,OAAOhD,GACH,OAAO0C,GAAuBT,KAAMwiD,GAAmB,KAAKzhD,OAAOhD,GAEvEwlD,UAAUxlD,GAEN,OADAyJ,QAAQC,IAAI,KAAM1J,GACX,KAGXykC,YAAYzkC,GACR,MAAM,IAAIoB,MAKdo/C,WAAWxgD,GACP,OAAO2/C,GAAc3/C,GAGzBylD,aAAa32C,EAAQ42C,GACjB,OAAS1lD,GACAA,EAGE8O,EAAOtM,KAAKP,KAAMjC,GAFd0lD,EAMnBV,UAAUl2C,EAAQ62C,GACd,OAAS3lD,GACQ,MAATA,EACO2lD,EAEJ72C,EAAOtM,KAAKP,KAAMjC,GAIjC8kD,QAAQh2C,GACJ,OAASwrC,IACL,IAAK5qC,MAAMN,QAAQkrC,GACf,MAAM,IAAIl5C,MAAM,gBAEpB,OAAOk5C,EAAMj6C,KAAKa,GAAM4N,EAAOtM,KAAKP,KAAMf,MAIlD0jD,UAAU5kD,GACN,OAAO4J,GAAO1B,UAAUlI,EAAO,SAEnC6kD,QAAQ7kD,GACJ,MAAMqJ,EAASpH,KAAK2iD,UAAU5kD,GAI9B,OAHIqJ,EAAS,GAAKA,EAASswB,KACvB/vB,GAAO3D,mBAAmB,kBAAmB,QAASjG,GAEnDqJ,EAGXi8C,QAAQtlD,GACJ,OAAQA,GACJ,KAAK,EACL,IAAK,OACD,OAAO,EACX,KAAK,EACL,IAAK,QACD,OAAO,EAEf,OAAO4J,GAAO3D,mBAAmB,oBAAoBJ,KAAKC,UAAU9F,KAAU,QAASA,GAK3F4lD,WAAWC,GAIP,OAHoB,MAAhBA,IACAA,GAAe,GAEnB,SAAkB7lD,GACd,GAAI2W,GAAY3W,EAAO6lD,GACnB,OAAO7lD,EAAM2I,cAEjB,MAAM,IAAIvH,MAAM,kBAGxB4V,KAAKhX,GAID,OAHyB,MAArB8X,GAAW9X,IACX4J,GAAO3D,mBAAmB,GAAI,QAASjG,GAEpCA,EAGX0d,KAAK1d,GAID,OAH0B,KAAtB8X,GAAW9X,IACX4J,GAAO3D,mBAAmB,GAAI,QAASjG,GAEpC0C,GAAuBT,KAAMwiD,GAAmB,KAAKztC,KAAKhX,GAGrE06C,OAAO16C,GACH,OAAO4J,GAAO7B,UAAU/H,GAK5B+E,OAAO+J,EAAQg3C,GACX,OAAS9lD,IACL,MAAMqJ,EAAS,GACf,IAAK,MAAM5H,KAAOqN,EAAQ,CACtB,IAAIi3C,EAAStkD,EACb,GAAIqkD,GAAYrkD,KAAOqkD,KAAcC,KAAU/lD,GAC3C,IAAK,MAAMgmD,KAAUF,EAASrkD,GAC1B,GAAIukD,KAAUhmD,EAAO,CACjB+lD,EAASC,EACT,MAIZ,IACI,MAAMC,EAAKn3C,EAAOrN,GAAKe,KAAKP,KAAMjC,EAAM+lD,SAC7BpkD,IAAPskD,IACA58C,EAAO5H,GAAOwkD,GAGtB,MAAO1iD,GACH,MAAMoC,EAAWpC,aAAiBnC,MAASmC,EAAMoC,QAAU,eAC3DiE,GAAO5D,WAAW,2BAA2BvE,MAAQkE,KAAY,WAAY,CAAE3F,MAAAA,KAGvF,OAAOqJ,GAIf68C,YAAYlmD,GACR,OAAOuS,GAAM3I,GAAO1B,UAAUlI,GAAQ,KAG9CykD,GAAoB,IAAI/gD,QAAWghD,GAAuB,IAAIhhD,QC3YvD,MAAMyiD,GACTtjD,YAAYmC,GACR3D,EAAiBY,KAAM,CAAE+C,KAAAA,IAE7ByG,QACI,OAAO,IAAI06C,GAAclkD,KAAK+C,MAElC0mC,SAASyC,GACL,OAAOlsC,MAGR,MAAMmkD,WAAsBD,GAC/BtjD,YAAYwjD,EAAiB,EAAGC,GAC5Bt1C,MAAM,+BAAgCq1C,GAAkB,KACxD,MAAME,EAAQ,CAAEF,eAAAA,GAChB,SAAS5jD,EAAIuC,EAAMwhD,GACf,IAAIxmD,GAASsmD,GAAS,IAAIthD,GACb,MAAThF,IACAA,EAAQwmD,GAEW,iBAAX,GACR58C,GAAO3D,mBAAmB,qBAAqBjB,IAAQ,QAASshD,GAEpEC,EAAMvhD,GAAQhF,EAElByC,EAAI,SAAU,MACdA,EAAI,WAAY,MAChBA,EAAI,aAAc,GAClBA,EAAI,gBAAiB,IACrBA,EAAI,yBAA0B,MAC9BA,EAAI,sBAAuB,MAC3BpB,EAAiBY,KAAMskD,GAE3B96C,QACI,OAAO,IAAI26C,GAAcnkD,KAAKokD,eAAgBpkD,OAK/C,MAAMwkD,WAAkBN,GAC3BtjD,YAAY6xB,EAASgyB,GACjB11C,MAAM,0BACN3P,EAAiBY,KAAM,CACnByyB,QAAUA,GA5CH,6CA6CPgyB,cAAkC,MAAjBA,EAAyB,EAAIA,IAGtDj7C,QACI,OAAO,IAAIg7C,GAAUxkD,KAAKyyB,QAASzyB,KAAKykD,eAE5Chb,SAASyC,GAEL,OADAA,EAAQ1B,UAAU/X,QAAQzyB,KAAKyyB,SACxBzyB,MAGR,MAAM0kD,WAA6BR,GACtCtjD,YAAY+jD,GACR51C,MAAM,uCACN3P,EAAiBY,KAAM,CACnB2kD,YAAah9C,GAAO1B,UAAU0+C,KAGtC9mD,qBAAqBmsC,GACjB,OAAOhqC,KAAK2kD,YAEhBn7C,QACI,OAAO,IAAIk7C,GAAqB1kD,KAAK2kD,cCrE7C,IAWIC,GAXA7kD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAyDxF,MAAM4kD,GAAW,IAAIrtC,IACfstC,GAAmB,IAAIpC,GACtB,MAAMqC,GACTnkD,YAAYmC,EAAMiiD,EAAUxa,GACxBoa,GAAepkD,IAAIR,UAAM,GACzB,MAAMm9B,EAAUx1B,GAAO1B,UAAU++C,GAChB,MAAbxa,IACAA,EAAYsa,IAEhB,MAAMla,EAAU,IAAIpzB,IACpBzX,GAAuBC,KAAM4kD,GAAgB,CAAE7hD,KAAAA,EAAMo6B,QAAAA,EAASqN,UAAAA,EAAWI,QAAAA,GAAW,KAExFuC,SACI,MAAO,CAAEpqC,KAAM/C,KAAK+C,KAAMo6B,QAASn9B,KAAKm9B,SAExCp6B,WAAS,OAAO9B,EAASR,GAAuBT,KAAM4kD,GAAgB,KAAM,QAC5E7hD,SAAKhF,GAASoD,EAASV,GAAuBT,KAAM4kD,GAAgB,KAAM,OAAQ7mD,GAClFo/B,cAAY,OAAOl8B,EAASR,GAAuBT,KAAM4kD,GAAgB,KAAM,WAC/EznB,YAAQp/B,GAASoD,EAASV,GAAuBT,KAAM4kD,GAAgB,KAAM,UAAWj9C,GAAO1B,UAAUlI,EAAO,YAChHysC,gBAAc,OAAOvpC,EAASR,GAAuBT,KAAM4kD,GAAgB,KAAM,aACjFpa,cAAUzsC,GAASoD,EAASV,GAAuBT,KAAM4kD,GAAgB,KAAM,YAAa7mD,GAC5F6sC,cACA,OAAOn9B,MAAM5B,KAAKpL,GAAuBT,KAAM4kD,GAAgB,KAAKha,QAAQtrC,UAEhF2lD,aAAata,GACT,GAAI3qC,KAAKoB,WACL,MAAM,IAAIjC,MAAM,UAEpB,GAAIsB,GAAuBT,KAAM4kD,GAAgB,KAAKha,QAAQlqC,IAAIiqC,EAAO5nC,MACrE,MAAM,IAAI5D,MAAM,mCAAmCwrC,EAAO5nC,SAG9D,OADAtC,GAAuBT,KAAM4kD,GAAgB,KAAKha,QAAQpqC,IAAImqC,EAAO5nC,KAAM4nC,EAAOlB,SAASzpC,OACpFA,KAEXosC,UAAUrpC,GACN,OAAQtC,GAAuBT,KAAM4kD,GAAgB,KAAKha,QAAQlqC,IAAIqC,IAAU,KAGpFmiD,WAAWC,GACP,OAAQnlD,KAAK4qC,QAAQ7pC,QAAQmO,GAAOA,EAAEnM,KAAKjE,MAAM,KAAK,KAAOqmD,IAEjE37C,QACI,MAAMA,EAAQ,IAAIu7C,GAAQ/kD,KAAK+C,KAAM/C,KAAKm9B,QAASn9B,KAAKwqC,WAIxD,OAHAxqC,KAAK4qC,QAAQtiC,SAASqiC,IAClBnhC,EAAMy7C,aAAata,EAAOnhC,YAEvBA,EAEXjB,SAEI,OADAtK,OAAOsK,OAAO9H,GAAuBT,KAAM4kD,GAAgB,MACpD5kD,KAEXoB,WACI,OAAOnD,OAAOmD,SAASX,GAAuBT,KAAM4kD,GAAgB,MAExEQ,oBAAoB7wB,GAChB,MAAM8vB,EAAQrkD,KAAKosC,UAAU,wBAA2B,IAAI+X,GAC5D,IAAI50C,EAAM80C,EAAMgB,OAIhB,GAHa,MAAT9wB,EAAGzoB,KACHyD,GAAO80C,EAAMiB,UAEb/wB,EAAGxf,KACH,IAAK,IAAI9V,EAAI,EAAGA,EAAIs1B,EAAGxf,KAAK7V,OAAQD,GAAK,EACD,OAAhCs1B,EAAGxf,KAAKxN,UAAUtI,EAAGA,EAAI,GACzBsQ,GAAO80C,EAAMkB,WAGbh2C,GAAO80C,EAAMmB,cAIzB,GAAIjxB,EAAGgqB,WAAY,CACf,MAAMA,EAAav+C,KAAKwqC,UAAU+T,WAAWhqB,EAAGgqB,YAChD,IAAK,MAAM9S,KAAQ8S,EACfhvC,GAAO80C,EAAMoB,oBAAsBpB,EAAMqB,uBAAyBnH,EAAW9S,GAAM+R,YAAYt+C,OAGvG,OAAOqQ,EAEXhJ,YAAY2lC,GAER,GAAe,MAAXA,EACA,OAAO6Y,GAAQl5C,KAAK,aAMxB,GAHyB,iBAAb,IACRqgC,EAAUnmC,OAAOmmC,IAEI,iBAArB,GAAsD,iBAArB,EAA+B,CAChE,MAAMyZ,EAAcd,GAASnkD,IAAIwrC,GACjC,GAAIyZ,EACA,OAAOA,IAEX,GAAyB,iBAAb,EACR,OAAO,IAAIZ,GAAQ,UAAW7Y,GAElCvkC,GAAO3D,mBAAmB,kBAAmB,UAAWkoC,GAG5D,GAA+B,mBAAnBA,EAAa,MAAkB,CAIvC,OAHcA,EAAQ1iC,QAM1B,GAAyB,iBAAb,EAAuB,CACD,iBAAlB0iC,EAAY,MAA+C,iBAArBA,EAAe,SAC7DvkC,GAAO3D,mBAAmB,yCAA0C,UAAWkoC,GAEnF,MAAM0Z,EAAS,IAAIb,GAAS7Y,EAAY,KAAIA,EAAe,SAO3D,OANIA,EAAQ2Z,YAAoC,MAAtB3Z,EAAQ4Z,aAC9BF,EAAOX,aAAa,IAAIT,GAAUtY,EAAQ2Z,WAAY3Z,EAAQ4Z,aAK3DF,EAEX,OAAOj+C,GAAO3D,mBAAmB,kBAAmB,UAAWkoC,GAEnE3lC,gBAAgBw/C,EAAeJ,GACI,iBAAnB,IACRI,EAAgBhgD,OAAOggD,IAE3B,MAAMC,EAAWnB,GAASnkD,IAAIqlD,GAC1BC,GACAr+C,GAAO3D,mBAAmB,2BAA2BJ,KAAKC,UAAUmiD,EAASjjD,QAAS,gBAAiBgjD,GAE3GlB,GAASrkD,IAAIulD,EAAeJ,IAGpCf,GAAiB,IAAInjD,QCtMrB,IAWIwkD,GAAmCC,GAAkCC,GAAgCC,GAAkCC,GAAqCC,GAA8BC,GAA6BC,GAAyBC,GAAiCC,GAAoCC,GAAmCC,GAAkCC,GAAgCC,GAAgCC,GAAqCC,GAX/ejnD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAKxF,SAASgH,GAAK0G,GACV,OAAO/J,KAAKsJ,MAAMtJ,KAAKC,UAAU8J,IAc9B,MAAMs5C,GACTrmD,YAAYopC,GACRic,GAAkCziD,IAAIxD,MACtCkmD,GAAiC1lD,IAAIR,UAAM,GAC3CmmD,GAA+B3lD,IAAIR,UAAM,GACzComD,GAAiC5lD,IAAIR,UAAM,GAG3CqmD,GAAoC7lD,IAAIR,UAAM,GAC9CD,GAAuBC,KAAMkmD,GAAkClc,EAAU,KACzEjqC,GAAuBC,KAAMmmD,GAAgC,KAAM,KACnEpmD,GAAuBC,KAAMomD,GAAkC,IAAM,KACrErmD,GAAuBC,KAAMqmD,IAAsC,EAAG,KAEtEa,sBAAoB,OAAOzmD,GAAuBT,KAAMomD,GAAkC,KAC1Fc,oBAAgBnpD,GAASgC,GAAuBC,KAAMomD,GAAkCroD,EAAO,KACnGgY,QACI,GAAItV,GAAuBT,KAAMmmD,GAAgC,KAC7D,MAAM,IAAIhnD,MAAM,8BAEpBsB,GAAuBT,KAAMimD,GAAmC,IAAKK,IAA8B/lD,KAAKP,MACxGD,GAAuBC,KAAMmmD,GAAgC5rC,WAAW9Z,GAAuBT,KAAMimD,GAAmC,IAAKK,IAA8BjsC,KAAKra,MAAOS,GAAuBT,KAAMomD,GAAkC,MAAO,KAEjQe,OACI,IAAK1mD,GAAuBT,KAAMmmD,GAAgC,KAC9D,MAAM,IAAIhnD,MAAM,0BAEpBioD,aAAa3mD,GAAuBT,KAAMmmD,GAAgC,MAC1EpmD,GAAuBC,KAAMmmD,GAAgC,KAAM,KAEvEkB,MAAMC,GACFtnD,KAAKmnD,OACDG,GACAvnD,GAAuBC,KAAMqmD,IAAsC,EAAG,KAG9EkB,SACIvnD,KAAK+V,SAGbmwC,GAAmC,IAAIzkD,QAAW0kD,GAAiC,IAAI1kD,QAAW2kD,GAAmC,IAAI3kD,QAAW4kD,GAAsC,IAAI5kD,QAAWwkD,GAAoC,IAAIr/C,QAAW0/C,GAA+BzoD,eAAeyoD,IACtS,MAAM3F,QAAoBlgD,GAAuBT,KAAMkmD,GAAkC,KAAKxE,iBAC9F,IAAgF,IAA5EjhD,GAAuBT,KAAMqmD,GAAqC,KAAtE,CAKA,GAAI1F,IAAgBlgD,GAAuBT,KAAMqmD,GAAqC,KAAM,CACxF,IAAK,IAAIxzC,EAAIpS,GAAuBT,KAAMqmD,GAAqC,KAAO,EAAGxzC,GAAK8tC,EAAa9tC,IACvGpS,GAAuBT,KAAMkmD,GAAkC,KAAKsB,KAAK,QAAS30C,GAEtF9S,GAAuBC,KAAMqmD,GAAqC1F,EAAa,KAEnF5gD,GAAuBC,KAAMmmD,GAAgC5rC,WAAW9Z,GAAuBT,KAAMimD,GAAmC,IAAKK,GAA8BjsC,KAAKra,MAAOS,GAAuBT,KAAMomD,GAAkC,MAAO,UAVzPrmD,GAAuBC,KAAMqmD,GAAqC1F,EAAa,MAYhF,MAAM8G,GACT7mD,YAAYopC,GACRuc,GAA4B/lD,IAAIR,UAAM,GACtCwmD,GAAwBhmD,IAAIR,UAAM,GAClCD,GAAuBC,KAAMumD,GAA6Bvc,EAAU,KACpEjqC,GAAuBC,KAAMwmD,IAA0B7F,IACnD3gD,KAAK0nD,MAAM/G,EAAalgD,GAAuBT,KAAMumD,GAA6B,QACnF,KAEP1oD,YAAY8iD,EAAa3W,GACrB,MAAM,IAAI7qC,MAAM,kCAEpB4W,QACItV,GAAuBT,KAAMwmD,GAAyB,KAAKjmD,KAAKP,MAAO,GACvES,GAAuBT,KAAMumD,GAA6B,KAAKoB,GAAG,QAASlnD,GAAuBT,KAAMwmD,GAAyB,MAErIW,OACI1mD,GAAuBT,KAAMumD,GAA6B,KAAKvlD,IAAI,QAASP,GAAuBT,KAAMwmD,GAAyB,MAEtIa,MAAMC,GAAmBtnD,KAAKmnD,OAC9BI,SAAWvnD,KAAK+V,SAEpBwwC,GAA8B,IAAI9kD,QAAW+kD,GAA0B,IAAI/kD,QACpE,MAAMmmD,WAAgCH,GACzC7mD,YAAYopC,EAAUjpC,GAClBgO,MAAMi7B,GACNyc,GAAgCjmD,IAAIR,UAAM,GAC1CD,GAAuBC,KAAMymD,GAAiCx/C,GAAKlG,GAAS,KAEhFlD,YAAY8iD,EAAa3W,GAErB,MADAxiC,QAAQC,IAAIhH,GAAuBT,KAAMymD,GAAiC,MACpE,IAAItnD,MAAM,UAGxBsnD,GAAkC,IAAIhlD,QAC/B,MAAMomD,WAAqCJ,GAC9C7mD,YAAYopC,EAAUvuB,GAClB1M,MAAMi7B,GACN0c,GAAmClmD,IAAIR,UAAM,GAC7CD,GAAuBC,KAAM0mD,GAAoCjrC,EAAM,KAE3E5d,YAAY8iD,EAAa3W,GACrB,MAAMzV,QAAWyV,EAAS+W,sBAAsBtgD,GAAuBT,KAAM0mD,GAAoC,MAC7GnyB,GACAyV,EAASwd,KAAK/mD,GAAuBT,KAAM0mD,GAAoC,KAAMnyB,IAIjGmyB,GAAqC,IAAIjlD,QAClC,MAAMqmD,GACTlnD,YAAYopC,EAAUjpC,GAClB4lD,GAAkCnjD,IAAIxD,MACtC4mD,GAAiCpmD,IAAIR,UAAM,GAC3C6mD,GAA+BrmD,IAAIR,UAAM,GACzC8mD,GAA+BtmD,IAAIR,UAAM,GAGzC+mD,GAAoCvmD,IAAIR,UAAM,GAC9CD,GAAuBC,KAAM4mD,GAAkC5c,EAAU,KACzEjqC,GAAuBC,KAAM6mD,GAAgC5/C,GAAKlG,GAAS,KAC3EhB,GAAuBC,KAAM8mD,GAAgCrmD,GAAuBT,KAAM2mD,GAAmC,IAAKK,IAA8B3sC,KAAKra,MAAO,KAC5KD,GAAuBC,KAAM+mD,IAAsC,EAAG,KAE1EhxC,SACoF,IAA5EtV,GAAuBT,KAAM+mD,GAAqC,MAClEtmD,GAAuBT,KAAM4mD,GAAkC,KAAKlF,iBAAiBtzC,MAAMuyC,IACvF5gD,GAAuBC,KAAM+mD,GAAqCpG,EAAa,QAGvFlgD,GAAuBT,KAAM4mD,GAAkC,KAAKe,GAAG,QAASlnD,GAAuBT,KAAM8mD,GAAgC,MAEjJK,OACI1mD,GAAuBT,KAAM4mD,GAAkC,KAAK5lD,IAAI,QAASP,GAAuBT,KAAM8mD,GAAgC,MAElJO,MAAMC,GACFtnD,KAAKmnD,OACDG,GACAvnD,GAAuBC,KAAM+mD,IAAsC,EAAG,KAG9EQ,SACIvnD,KAAK+V,SAGb6wC,GAAmC,IAAInlD,QAAWolD,GAAiC,IAAIplD,QAAWqlD,GAAiC,IAAIrlD,QAAWslD,GAAsC,IAAItlD,QAAWklD,GAAoC,IAAI//C,QAAWogD,GAA+BnpD,eAA4C8iD,GAEjU,IAAgF,IAA5ElgD,GAAuBT,KAAM+mD,GAAqC,KAClE,OAEJ,MAAMhmD,EAASkG,GAAKxG,GAAuBT,KAAM6mD,GAAgC,MACjF9lD,EAAO+hD,UAAYriD,GAAuBT,KAAM+mD,GAAqC,KAAO,EAC5FhmD,EAAOiiD,QAAUrC,EACjB5gD,GAAuBC,KAAM+mD,GAAqCpG,EAAa,KAC/E,MAAMO,QAAazgD,GAAuBT,KAAM4mD,GAAkC,KAAKmB,QAAQhnD,GAC/F,IAAK,MAAM0G,KAAOy5C,EACdzgD,GAAuBT,KAAM4mD,GAAkC,KAAKY,KAAK/mD,GAAuBT,KAAM6mD,GAAgC,KAAMp/C,IC5KpJ,IAWIugD,GAA6BC,GAAwBC,GAA2BC,GAA+BC,GAAkCC,GAA8BC,GAAgCC,GAA6BC,GAA0BC,GAAmCC,GAA2BC,GAAwBC,GAA4BC,GAA0BC,GAXlZ/oD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAgBxF,MAAMqsC,GAAOvmC,OAAO,GAEpB,SAASgjD,GAAOpT,EAAQ53C,GACpB,OAAO43C,EAAS,IAAM/xC,KAAKC,UAAU9F,GAAO,CAACM,EAAGI,KAC5C,GAAmB,iBAAP,EACR,MAAO,UAAUA,EAAE+L,aAEvB,GAAmB,iBAAP,EACR,OAAO/L,EAAEiI,cAGb,GAAmB,iBAAf,IAA4B+G,MAAMN,QAAQ1O,GAAI,CAC9C,MAAMT,EAAOC,OAAOD,KAAKS,GAEzB,OADAT,EAAK0gC,OACE1gC,EAAKO,QAAO,CAACC,EAAOgB,KACvBhB,EAAMgB,GAAOf,EAAEe,GACRhB,IACR,IAEP,OAAOC,KAGR,MAAMuqD,GACTpoD,YAAYmC,GAAQ3D,EAAiBY,KAAM,CAAE+C,KAAAA,IAC7CgT,SACAoxC,QACAE,MAAMC,IACNC,WAKJ,SAAS0B,GAAU7gD,GAGf,OAFAA,EAAQqF,MAAM5B,KAAK,IAAKxD,IAAID,GAAQ9I,WAC9Bo/B,OACCt2B,EAMXvK,eAAeqrD,GAAgBC,EAAQnf,GACnC,GAAc,MAAVmf,EACA,MAAM,IAAIhqD,MAAM,iBAMpB,GAHIsO,MAAMN,QAAQg8C,KACdA,EAAS,CAAEtmB,OAAQsmB,IAEC,iBAAZ,EACR,OAAQA,GACJ,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,UACD,MAAO,CAAEvqD,KAAMuqD,EAAQC,IAAKD,GAIxC,GAAIz0C,GAAYy0C,EAAQ,IAAK,CACzB,MAAM1tC,EAAO0tC,EAAOziD,cACpB,MAAO,CAAE9H,KAAM,cAAewqD,IAAKL,GAAO,KAAM,CAAEttC,KAAAA,IAASA,KAAAA,GAE/D,GAAI0tC,EAAO5I,OAAQ,CACf,MAAMlxC,EAAQ85C,EAEd,MAAO,CAAEvqD,KAAM,SAAUwqD,IAAKL,GAAO,SAAU15C,GAAQtO,QArCjDhD,EAqC8DsR,EApCjEzL,KAAKsJ,MAAMtJ,KAAKC,UAAU9F,MADrC,IAAcA,EAuCV,GAAKorD,EAAO12B,SAAW02B,EAAOtmB,OAAS,CACnC,MAAMxzB,EAAQ85C,EACRpoD,EAAS,CACX8hC,QAAUxzB,EAAMwzB,QAAU,IAAIzkC,KAAKW,GACtB,MAALA,EACO,KAEP0O,MAAMN,QAAQpO,GACPkqD,GAAUlqD,EAAEX,KAAKW,GAAMA,EAAE2H,iBAE7B3H,EAAE2H,iBAGjB,GAAI2I,EAAMojB,QAAS,CACf,MAAM42B,EAAY,GACZ37C,EAAW,GACX47C,EAAc7d,IACZ/2B,GAAY+2B,GACZ4d,EAAUzmD,KAAK6oC,GAGf/9B,EAAS9K,KAAK,WACVymD,EAAUzmD,WAAWoyB,GAAeyW,EAAMzB,KADhC,KAKlBv8B,MAAMN,QAAQkC,EAAMojB,SACpBpjB,EAAMojB,QAAQnqB,QAAQghD,GAGtBA,EAAWj6C,EAAMojB,SAEjB/kB,EAASxO,cACHhB,QAAQC,IAAIuP,GAEtB3M,EAAO0xB,QAAUw2B,GAAUI,EAAUjrD,KAAKwU,GAAMA,EAAElM,iBAEtD,MAAO,CAAE3F,OAAAA,EAAQqoD,IAAKL,GAAO,QAAShoD,GAASnC,KAAM,SAEzD,OAAO+I,GAAO3D,mBAAmB,wBAAyB,QAASmlD,GAEvE,SAAS5hB,KAAY,OAAO,IAAK1sB,MAAQ0sB,UAKlC,MAAMgiB,GAGT3oD,YAAY4oD,GAYR,GAXAxB,GAA4BxkD,IAAIxD,MAChCioD,GAAuBznD,IAAIR,UAAM,GACjCkoD,GAA0B1nD,IAAIR,UAAM,GAEpCmoD,GAA8B3nD,IAAIR,UAAM,GACxCooD,GAAiC5nD,IAAIR,UAAM,GAC3CqoD,GAA6B7nD,IAAIR,UAAM,GACvCsoD,GAA+B9nD,IAAIR,UAAM,GACzCuoD,GAA4B/nD,IAAIR,UAAM,GACtCwoD,GAAyBhoD,IAAIR,UAAM,GACnCyoD,GAAkCjoD,IAAIR,UAAM,GAC3B,QAAbwpD,EACAzpD,GAAuBC,KAAMqoD,IAA8B,EAAM,KACjEtoD,GAAuBC,KAAMooD,GAAkC,KAAM,UAEpE,GAAIoB,EAAU,CACf,MAAMtd,EAAU6Y,GAAQl5C,KAAK29C,GAC7BzpD,GAAuBC,KAAMqoD,IAA8B,EAAO,KAClEtoD,GAAuBC,KAAMooD,GAAkClqD,QAAQI,QAAQ4tC,GAAU,KACzF3xB,YAAW,KAAQva,KAAKwnD,KAAK,UAAWtb,EAAS,QAAU,QAG3DnsC,GAAuBC,KAAMqoD,IAA8B,EAAO,KAClEtoD,GAAuBC,KAAMooD,GAAkC,KAAM,KAIzEroD,GAAuBC,KAAMsoD,GAAgC,IAAI9wC,IAAO,KACxEzX,GAAuBC,KAAMioD,GAAwB,IAAIzwC,IAAO,KAChEzX,GAAuBC,KAAMkoD,GAA2B,IAAI1wC,IAAO,KACnEzX,GAAuBC,KAAMmoD,GAA+B,KAAM,KAClEpoD,GAAuBC,KAAMuoD,GAA6B,EAAG,KAC7DxoD,GAAuBC,KAAMwoD,GAA0B,IAAIhxC,IAAO,KAClEzX,GAAuBC,KAAMyoD,IAAmC,EAAO,KAEvE7d,cACA,OAAOn9B,MAAM5B,KAAKpL,GAAuBT,KAAMkoD,GAA2B,KAAK5oD,UAEnF2lD,aAAata,GACT,GAAIlqC,GAAuBT,KAAMkoD,GAA2B,KAAKxnD,IAAIiqC,EAAO5nC,MACxE,MAAM,IAAI5D,MAAM,mCAAmCwrC,EAAO5nC,SAG9D,OADAtC,GAAuBT,KAAMkoD,GAA2B,KAAK1nD,IAAImqC,EAAO5nC,KAAM4nC,EAAOlB,SAASzpC,OACvFA,KAEXosC,UAAUrpC,GACN,OAAQtC,GAAuBT,KAAMkoD,GAA2B,KAAKxnD,IAAIqC,IAAU,KAEnF0mD,oBAAgB1rD,GAASgC,GAAuBC,KAAMyoD,KAAqC1qD,EAAO,KAClG0rD,sBAAoB,OAAOhpD,GAAuBT,KAAMyoD,GAAmC,KAC/F5qD,oBAAoB02B,EAAIwW,EAAU2e,GAC9B,GAAI1pD,KAAKypD,iBAAmC,IAAhBC,EAAKxqD,QAAyB,MAATq1B,EAAGzoB,GAChD,OAAO,KAEX,MAAM69C,EAASp1B,EAAGzoB,GAAGpF,cACfqO,EAAOg2B,EAASrkC,cAChBkjD,EAAgB,GACtB,IAAK,IAAI3qD,EAAI,EAAGA,EAAIyqD,EAAKxqD,OAAQD,IAAK,CAClC,MAAM8mC,EAAM2jB,EAAKzqD,GAEX4qD,EAAO9jB,EAAIrN,QAAQ,WAAYixB,GAAQjxB,QAAQ,SAAU3jB,GAOzD6vB,EAAU,IAAI8B,GAAamjB,IACF,IAA3B9jB,EAAIjhC,QAAQ,YACZ8/B,EAAQD,KAAO,CAAE5vB,KAAAA,EAAM40C,OAAAA,IAE3B,IAAIG,EAAe,gBACnB,MAAM1jB,QAAaqB,GAAU7C,GAC7B,IACI,MAAMx9B,EAASg/B,EAAKrB,SACpB,GAAI39B,EAAO2N,KACP,OAAO3N,EAAO2N,KAEd3N,EAAO1D,UACPomD,EAAe1iD,EAAO1D,SAG9B,MAAOpC,IAEP,GAAI8kC,EAAK5B,YAAc,KAAO4B,EAAK5B,WAAa,IAC5C,OAAO78B,GAAO5D,WAAW,yCAAyC+lD,IAAgB,iBAAkB,CAChG7xB,OAAQ,uBACRuK,YAAajO,EAAIryB,KAAM,CAAE6jC,IAAAA,EAAK+jB,aAAAA,KAItCF,EAAchnD,KAAKknD,GAEvB,OAAOniD,GAAO5D,WAAW,wCAAwC6lD,EAAcxrD,KAAKgmC,GAAMxgC,KAAKC,UAAUugC,KAAItgC,KAAK,QAAS,iBAAkB,CACzIm0B,OAAQ,mBACRuK,YAAajO,EAAIryB,KAAM,CAAEwnD,KAAAA,EAAME,cAAAA,KAGvCG,iBAAiBx1B,EAAI9Y,EAAMklC,GACvB,OAAOpsB,EAEXy1B,iBACI,OAAOriD,GAAO5D,WAAW,kCAAmC,wBAAyB,CACjFY,UAAW,mBAGnB9G,eAAe+nC,GACX,OAAOj+B,GAAO5D,WAAW,uBAAuB6hC,EAAIzgC,SAAU,wBAAyB,CACnFR,UAAWihC,EAAIzgC,OACfjD,KAAM0jC,IAId/nC,uBACI,OAAO8J,GAAO7B,gBAAgBrF,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAAEmF,OAAQ,mBAAqB,aAEtKtH,kBAAkB40B,GACd,MAAyB,iBAAb,EACDA,QAEEA,EAAQW,aAEzBv1B,mBAAmBukD,GACf,MAAMlW,QAAgBlsC,KAAKuqC,aAC3B,GAA0B,iBAAd,GAA0B/lC,OAAO+W,cAAc6mC,IAAaA,EAAW,EAAG,CAElF,IAAIzB,QAAoB3gD,KAAK0hD,iBAK7B,OAJAf,GAAeyB,EACXzB,EAAc,IACdA,EAAc,GAEXzU,EAAQ1B,UAAU4X,SAASzB,GAEtC,OAAOzU,EAAQ1B,UAAU4X,SAASA,GAEtCvkD,mBAEI,GAA2E,MAAvE4C,GAAuBT,KAAMooD,GAAkC,KAAc,CAE7E,MAAM6B,EAAgBjqD,KAAKgqD,iBAAiB57C,MAAM89B,IAC9ClsC,KAAKwnD,KAAK,UAAWtb,EAAS,MACvBA,KACP5qC,IAKA,MAHIb,GAAuBT,KAAMooD,GAAkC,OAAS6B,GACxElqD,GAAuBC,KAAMooD,GAAkC,KAAM,KAEnE9mD,KAGV,OADAvB,GAAuBC,KAAMooD,GAAkC6B,EAAe,WACjEA,EAEjB,MAAMC,EAAiBzpD,GAAuBT,KAAMooD,GAAkC,MAC/E+B,EAAUC,SAAgBlsD,QAAQC,IAAI,CACzC+rD,EACAlqD,KAAKgqD,mBAkBT,OAhBIG,EAAShtB,UAAYitB,EAAOjtB,UACxB18B,GAAuBT,KAAMqoD,GAA8B,MAE3DroD,KAAKwnD,KAAK,UAAW4C,EAAQD,GAEzB1pD,GAAuBT,KAAMooD,GAAkC,OAAS8B,GACxEnqD,GAAuBC,KAAMooD,GAAkClqD,QAAQI,QAAQ8rD,GAAS,MAK5FziD,GAAO5D,WAAW,oBAAoBomD,EAAShtB,cAAcitB,EAAOjtB,WAAY,gBAAiB,CAC7F9tB,MAAO,aAIZ86C,EAAS3gD,QAAQjB,SAE5B1K,mBACI,MAAMo1B,MAAEA,EAAK+qB,SAAEA,SAAmBlgD,EAAkB,CAChDm1B,MAAOjzB,KAAK8gD,SAAS,UACrB9C,SAAW,WACP,IACI,MAAMA,QAAiBv9C,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAAEmF,OAAQ,gBACtI,OAAOwC,GAAO1B,UAAU+3C,EAAU,aAEtC,MAAO18C,IACP,OAAO,MANA,KASf,IAAIg9C,EAAe,KAAMD,EAAuB,KAChD,GAAIprB,GAASA,EAAMgtB,cAAe,CAI9B5B,EAAuBt4C,OAAO,cAE9B,MAAMskD,SAA2BrqD,KAAKuqC,cAAc6B,UAAU,uCAC1Die,IACAhM,QAA6BgM,EAAkBC,eAAetqD,OAElEs+C,EAAgBrrB,EAAMgtB,cAAgB3T,GAAQ+R,EAElD,OAAO,IAAIkB,GAAQvB,EAAUM,EAAcD,GAE/CxgD,sBAAsB0sD,GAClB,MAAMre,QAAgBlsC,KAAKuqC,aAErB3F,EAAU3mC,OAAO8N,OAAO,GAAIw+C,QAAgBzsD,EAAkB,CAChEgO,GAAKy+C,EAASz+C,GAAKkpB,GAAeu1B,EAASz+C,GAAI9L,WAAQN,EACvDmM,KAAO0+C,EAAS1+C,KAAOmpB,GAAeu1B,EAAS1+C,KAAM7L,WAAQN,KAEjE,OAAOwsC,EAAQ1B,UAAUyY,mBAAmBre,GAEhD/mC,kBAAkB2sD,GACd,MAAMhoB,QAAoBxiC,KAAKyqD,gBAAgBD,GAC/C,OAAO7iD,GAAO1B,gBAAgBxF,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAC/HmF,OAAQ,cAAeq9B,YAAAA,IACvB,aAER3kC,WAAW2sD,GACP,MAAMj2B,GAAEA,EAAE6tB,SAAEA,SAAmBtkD,EAAkB,CAC7Cy2B,GAAIv0B,KAAKyqD,gBAAgBD,GACzBpI,SAAUpiD,KAAK0qD,aAAaF,EAAIpI,YAEpC,OAAO3hD,GAAuBT,KAAMgoD,GAA6B,IAAKW,IAAwBpoD,KAAKP,KAAMu0B,EAAI6tB,EAAUoI,EAAIpgB,eAAiB,GAAK,GAGrJvsC,mBAAmB8sD,EAAUC,GACzB,MAAMn4B,QAAEA,EAAO2vB,SAAEA,SAAmBtkD,EAAkB,CAClD20B,QAASuC,GAAe21B,GACxBvI,SAAUpiD,KAAK0qD,aAAaE,KAEhC,OAAOjjD,GAAO1B,gBAAgBxF,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAC/HmF,OAAQ,aAAcstB,QAAAA,EAAS2vB,SAAAA,IAC/B,aAERvkD,4BAA4B8sD,EAAUC,GAClC,MAAMn4B,QAAEA,EAAO2vB,SAAEA,SAAmBtkD,EAAkB,CAClD20B,QAASuC,GAAe21B,GACxBvI,SAAUpiD,KAAK0qD,aAAaE,KAEhC,OAAOjjD,GAAO7B,gBAAgBrF,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAC/HmF,OAAQ,sBAAuBstB,QAAAA,EAAS2vB,SAAAA,IACxC,aAERvkD,cAAc8sD,EAAUC,GACpB,MAAMn4B,QAAEA,EAAO2vB,SAAEA,SAAmBtkD,EAAkB,CAClD20B,QAASuC,GAAe21B,GACxBvI,SAAUpiD,KAAK0qD,aAAaE,KAEhC,OAAOr1C,SAAc9U,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CACtHmF,OAAQ,UAAWstB,QAAAA,EAAS2vB,SAAAA,KAGpCvkD,mBAAmB8sD,EAAUE,EAAWD,GACpC,MAAMvI,EAAW16C,GAAO1B,UAAU4kD,IAC5Bp4B,QAAEA,EAAO2vB,SAAEA,SAAmBtkD,EAAkB,CAClD20B,QAASuC,GAAe21B,GACxBvI,SAAUpiD,KAAK0qD,aAAaE,KAEhC,OAAOr1C,SAAc9U,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CACtHmF,OAAQ,eAAgBstB,QAAAA,EAAS4vB,SAAAA,EAAUD,SAAAA,KAInDvkD,2BAA2BykD,GACvB,MAAM,IAAInjD,MAIdtB,eAAeo1B,GACX,MAAMpmB,SAAgB7M,KAAKuqC,cAAcC,UACnCv7B,QAAexO,GAAuBT,KAAMgoD,GAA6B,IAAKY,IAA4BroD,KAAKP,KAAMizB,GAAO,GAClI,OAAc,MAAVhkB,EACO,KAEJpC,EAAOomB,MAAMhkB,EAAQjP,MAEhCnC,+BAA+Bo1B,GAC3B,MAAMpmB,SAAgB7M,KAAKuqC,cAAcC,UACnCv7B,EAASxO,GAAuBT,KAAMgoD,GAA6B,IAAKY,IAA4BroD,KAAKP,KAAMizB,GAAO,GAC5H,OAAc,MAAVhkB,EACO,KAEJpC,EAAOs2C,sBAAsBl0C,EAAQjP,MAEhDnC,qBAAqB4d,GACjB,MAAM5O,SAAgB7M,KAAKuqC,cAAcC,UACnCv7B,QAAexO,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAAEmF,OAAQ,iBAAkBsW,KAAAA,IACtJ,OAAO5O,EAAOq2C,oBAAoBj0C,EAAQjP,MAE9CnC,4BAA4B4d,GACxB,MAAM5O,SAAgB7M,KAAKuqC,cAAcC,UACnC8Y,QAAgB7iD,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAAEmF,OAAQ,wBAAyBsW,KAAAA,IAC9J,GAAe,MAAX6nC,EACA,OAAO,KAIX,GAAwB,MAApBA,EAAQtF,UAAiD,MAA7BsF,EAAQhC,kBAA2B,CAC/D,MAAM/sB,QAAW9zB,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAAEmF,OAAQ,iBAAkBsW,KAAAA,IAClJ6nC,EAAQhC,kBAAoB/sB,EAAGypB,SAEnC,OAAOnxC,EAAOy2C,QAAQA,EAAStjD,MAEnCnC,iBAAiBkD,GACb,MAAM+pD,EAAS,GACX/pD,EAAO0xB,UACHhlB,MAAMN,QAAQpM,EAAO0xB,SACrBq4B,EAAOr4B,QAAUv0B,QAAQC,IAAI4C,EAAO0xB,QAAQr0B,KAAKwU,GAAMoiB,GAAepiB,EAAG5S,SAGzE8qD,EAAOr4B,QAAUuC,GAAej0B,EAAO0xB,QAASzyB,OAGxD,MAAM+qD,EAAevrD,IACE,MAAfuB,EAAOvB,KAGXsrD,EAAOtrD,GAAOQ,KAAK0qD,aAAa3pD,EAAOvB,MAE3CurD,EAAY,aACZA,EAAY,WACZ,MAAM3jD,QAAetJ,EAAkBgtD,GAIvC,GAHIr9C,MAAMN,QAAQ/F,EAAOqrB,UACrBrrB,EAAOqrB,QAAQiM,OAEf39B,EAAO2/C,UAAW,CAClB,GAAI3/C,EAAO+hD,WAAa/hD,EAAOiiD,QAC3B,MAAM,IAAI7jD,MAAM,kBAEpBiI,EAAOs5C,UAAY3/C,EAAO2/C,UAE9B,OAAOt5C,EAGXvJ,cAAcmtD,GACV,MAAM9e,QAAEA,EAAOnrC,OAAEA,SAAiBjD,EAAkB,CAChDouC,QAASlsC,KAAKuqC,aACdxpC,OAAQf,KAAKirD,WAAWD,KAE5B,aAAcvqD,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAAEmF,OAAQ,UAAWpE,OAAAA,KAAW3C,KAAKqhB,GAC7IysB,EAAQ1B,UAAU/iC,IAAIgY,EAAGzf,QAIxCkrD,aAAa/tB,GACT,OAAOx1B,GAAO5D,WAAW,4CAA6C,wBAAyB,CAC3FY,UAAW,mBAGnB9G,kBAAkBkF,GACd,aAAagnC,GAAYohB,SAASnrD,KAAM+C,GAE5ClF,gBAAgBkF,GACZ,MAAMkyB,QAAiBj1B,KAAKorD,YAAYroD,GACxC,OAAIkyB,QACaA,EAASo2B,YAEnB,KAEXxtD,kBAAkBkF,GACd,GAAsB,iBAAV,EAMP,CACD,MAAM0vB,QAAgB1vB,EAAKqwB,aAC3B,OAAe,MAAXX,EACO9qB,GAAO3D,mBAAmB,kCAAmC,OAAQjB,GAEzE0vB,EAXqB,CAC5B,MAAMwC,QAAiBj1B,KAAKorD,YAAYroD,GACxC,GAAIkyB,EACA,aAAaA,EAAS7B,aAU9B,OAAO,KAEXv1B,oBAAoB40B,GAChB,MAAM,IAAItzB,MAGdtB,yBAAyB4d,EAAMsmC,EAAW,EAAGlc,GACzC,OAAiB,IAAbkc,EACO/hD,KAAK+gD,sBAAsBtlC,GAE/B,IAAIvd,SAAQL,MAAOS,EAASgtD,KAC/B,IAAIC,EAAQ,KACZ,MAAMzqD,EAAY,MAAO6/C,IACrB,IACI,MAAM2C,QAAgBtjD,KAAK+gD,sBAAsBtlC,GACjD,GAAe,MAAX6nC,GACI3C,EAAc2C,EAAQ3C,YAAc,GAAKoB,EAOzC,OANAzjD,EAAQglD,GACRtjD,KAAKgB,IAAI,QAASF,QACdyqD,IACAnE,aAAamE,GACbA,EAAQ,OAMxB,MAAOjqD,GACHkG,QAAQC,IAAI,MAAOnG,GAEvBtB,KAAKwrD,KAAK,QAAS1qD,IAER,MAAX+kC,IACA0lB,EAAQhxC,YAAW,KACF,MAATgxC,IAGJA,EAAQ,KACRvrD,KAAKgB,IAAI,QAASF,GAClBwqD,EAAO3jD,GAAOlE,UAAU,UAAW,UAAW,QAC/CoiC,IAEP/kC,QAAed,KAAK0hD,qBAG5B7jD,mBAAmBukD,GACf,MAAM,IAAIjjD,MAGdssD,cAAcC,GACV,MAAMH,EAAQ9qD,GAAuBT,KAAMwoD,GAA0B,KAAK9nD,IAAIgrD,GACzEH,IAGDA,EAAMA,OACNnE,aAAamE,EAAMA,OAEvB9qD,GAAuBT,KAAMwoD,GAA0B,KAAKhqB,OAAOktB,IAEvEC,YAAYxxB,EAAO0L,EAAU,GACzB,IAAIt7B,EAAIqhD,EACR,MAAMF,GAAW3rD,GAAuBC,KAAMuoD,IAA8BqD,EAAKnrD,GAAuBT,KAAMuoD,GAA6B,KAAMh+C,EAAKqhD,IAAMA,GAAK,KAAMrhD,GACjK6c,EAAO,KACT3mB,GAAuBT,KAAMwoD,GAA0B,KAAKhqB,OAAOktB,GACnEvxB,KAEJ,GAAIn6B,KAAK6rD,OACLprD,GAAuBT,KAAMwoD,GAA0B,KAAKhoD,IAAIkrD,EAAS,CAAEH,MAAO,KAAMnkC,KAAAA,EAAM0kC,KAAMjmB,QAEnG,CACD,MAAM0lB,EAAQhxC,WAAW6M,EAAMye,GAC/BplC,GAAuBT,KAAMwoD,GAA0B,KAAKhoD,IAAIkrD,EAAS,CAAEH,MAAAA,EAAOnkC,KAAAA,EAAM0kC,KAAMvkB,OAElG,OAAOmkB,EAEXK,mBAAmB3kC,GACf,IAAK,MAAM4kC,KAAOvrD,GAAuBT,KAAMioD,GAAwB,KAAK3oD,SACxE8nB,EAAK4kC,EAAIC,YAKjBC,eAAeF,GACX,OAAQA,EAAIptD,MACR,IAAK,QACL,IAAK,UACD,OAAO,IAAIoqD,GAAoBgD,EAAIptD,MACvC,IAAK,QACD,OAAO,IAAIqoD,GAAuBjnD,MACtC,IAAK,QACD,OAAO,IAAI8nD,GAAuB9nD,KAAMgsD,EAAIjrD,QAChD,IAAK,cACD,OAAO,IAAI8mD,GAA6B7nD,KAAMgsD,EAAIvwC,MACtD,IAAK,SACD,OAAO,IAAImsC,GAAwB5nD,KAAMgsD,EAAIjrD,QAErD,MAAM,IAAI5B,MAAM,sBAAsB6sD,EAAIptD,QAE9CutD,mBAAmBC,EAAQC,GACvB,IAAK,MAAML,KAAOvrD,GAAuBT,KAAMioD,GAAwB,KAAK3oD,SACxE,GAAI0sD,EAAIC,aAAeG,EAAQ,CACvBJ,EAAIM,SACJN,EAAIC,WAAW9E,OAEnB6E,EAAIC,WAAaI,EACbL,EAAIM,SACJD,EAAOt2C,QAE6D,MAApEtV,GAAuBT,KAAMmoD,GAA+B,MAC5DkE,EAAOhF,MAAM5mD,GAAuBT,KAAMmoD,GAA+B,MAE7E,OAIZtqD,SAASwR,EAAOvO,GACZ,MAAMkrD,QAAYvrD,GAAuBT,KAAMgoD,GAA6B,IAAKc,IAA0BvoD,KAAKP,KAAMqP,GAStH,OARA28C,EAAIO,UAAU3pD,KAAK,CAAE9B,SAAAA,EAAU0qD,MAAM,IAChCQ,EAAIM,UACLN,EAAIC,WAAWl2C,QACfi2C,EAAIM,SAAU,EAC0D,MAApE7rD,GAAuBT,KAAMmoD,GAA+B,MAC5D6D,EAAIC,WAAW5E,MAAM5mD,GAAuBT,KAAMmoD,GAA+B,OAGlFnoD,KAEXnC,WAAWwR,EAAOvO,GACd,MAAMkrD,QAAYvrD,GAAuBT,KAAMgoD,GAA6B,IAAKc,IAA0BvoD,KAAKP,KAAMqP,GAStH,OARA28C,EAAIO,UAAU3pD,KAAK,CAAE9B,SAAAA,EAAU0qD,MAAM,IAChCQ,EAAIM,UACLN,EAAIC,WAAWl2C,QACfi2C,EAAIM,SAAU,EAC0D,MAApE7rD,GAAuBT,KAAMmoD,GAA+B,MAC5D6D,EAAIC,WAAW5E,MAAM5mD,GAAuBT,KAAMmoD,GAA+B,OAGlFnoD,KAEXnC,WAAWwR,KAAUnJ,GACjB,MAAM8lD,QAAYvrD,GAAuBT,KAAMgoD,GAA6B,IAAKa,IAA0BtoD,KAAKP,KAAMqP,EAAOnJ,GAC7H,IAAK8lD,EACD,OAAO,EAGX,MAAM3mD,EAAQ2mD,EAAIO,UAAUrtD,OAM5B,OALA8sD,EAAIO,UAAYP,EAAIO,UAAUxrD,QAAO,EAAGD,SAAAA,EAAU0qD,KAAAA,MAC9C,MAAM93B,EAAU,IAAI/yB,EAAaX,KAAOwrD,EAAO,KAAO1qD,EAAWuO,GAEjE,OADAkL,YAAW,KAAQzZ,EAASP,KAAKP,QAASkG,EAAMwtB,KAAa,IACrD83B,KAEJnmD,EAAQ,EAEpBxH,oBAAoBwR,GAChB,GAAIA,EAAO,CACP,MAAM28C,QAAYvrD,GAAuBT,KAAMgoD,GAA6B,IAAKa,IAA0BtoD,KAAKP,KAAMqP,GACtH,OAAK28C,EAGEA,EAAIO,UAAUrtD,OAFV,EAIf,IAAIstD,EAAQ,EACZ,IAAK,MAAMD,UAAEA,KAAe9rD,GAAuBT,KAAMioD,GAAwB,KAAK3oD,SAClFktD,GAASD,EAAUrtD,OAEvB,OAAOstD,EAEX3uD,gBAAgBwR,GACZ,GAAIA,EAAO,CACP,MAAM28C,QAAYvrD,GAAuBT,KAAMgoD,GAA6B,IAAKa,IAA0BtoD,KAAKP,KAAMqP,GACtH,OAAK28C,EAGEA,EAAIO,UAAUnuD,KAAI,EAAG0C,SAAAA,KAAeA,IAFhC,GAIf,IAAIsG,EAAS,GACb,IAAK,MAAMmlD,UAAEA,KAAe9rD,GAAuBT,KAAMioD,GAAwB,KAAK3oD,SAClF8H,EAASA,EAAOsO,OAAO62C,EAAUnuD,KAAI,EAAG0C,SAAAA,KAAeA,KAE3D,OAAOsG,EAEXvJ,UAAUwR,EAAOvO,GACb,MAAMkrD,QAAYvrD,GAAuBT,KAAMgoD,GAA6B,IAAKa,IAA0BtoD,KAAKP,KAAMqP,GACtH,IAAK28C,EACD,OAAOhsD,KAEX,GAAIc,EAAU,CACV,MAAMpC,EAAQstD,EAAIO,UAAUnuD,KAAI,EAAG0C,SAAAA,KAAeA,IAAUgE,QAAQhE,GAChEpC,GAAS,GACTstD,EAAIO,UAAUtoB,OAAOvlC,EAAO,GASpC,OANKoC,GAAqC,IAAzBkrD,EAAIO,UAAUrtD,SACvB8sD,EAAIM,SACJN,EAAIC,WAAW9E,OAEnB1mD,GAAuBT,KAAMioD,GAAwB,KAAKzpB,OAAOwtB,EAAI5C,MAElEppD,KAEXnC,yBAAyBwR,GACrB,GAAIA,EAAO,CACP,MAAM+5C,IAAEA,EAAGkD,QAAEA,EAAOL,WAAEA,SAAqBxrD,GAAuBT,KAAMgoD,GAA6B,IAAKc,IAA0BvoD,KAAKP,KAAMqP,GAC3Ii9C,GACAL,EAAW9E,OAEf1mD,GAAuBT,KAAMioD,GAAwB,KAAKzpB,OAAO4qB,QAGjE,IAAK,MAAOA,GAAKkD,QAAEA,EAAOL,WAAEA,MAAiBxrD,GAAuBT,KAAMioD,GAAwB,KAC1FqE,GACAL,EAAW9E,OAEf1mD,GAAuBT,KAAMioD,GAAwB,KAAKzpB,OAAO4qB,GAGzE,OAAOppD,KAGXnC,kBAAkBwR,EAAOvO,GACrB,aAAad,KAAK2nD,GAAGt4C,EAAOvO,GAGhCjD,qBAAqBwR,EAAOvO,GACxB,OAAOd,KAAKgB,IAAIqO,EAAOvO,GAI3BjD,iBAEImC,KAAKysD,qBAEL,IAAK,MAAMf,KAAWjrD,GAAuBT,KAAMwoD,GAA0B,KAAKxqD,OAC9EgC,KAAKyrD,cAAcC,GAGvBG,aAAW,OAA4E,MAApEprD,GAAuBT,KAAMmoD,GAA+B,KACnFd,MAAMC,GACF,GAAwE,MAApE7mD,GAAuBT,KAAMmoD,GAA+B,KAAc,CAC1E,GAAI1nD,GAAuBT,KAAMmoD,GAA+B,QAAUb,EACtE,OAEJ,OAAO3/C,GAAO5D,WAAW,yCAA0C,wBAAyB,CACxFY,UAAW,UAGnB3E,KAAK+rD,oBAAoBrqC,GAAMA,EAAE2lC,MAAMC,KACvCvnD,GAAuBC,KAAMmoD,KAAiCb,EAAiB,KAC/E,IAAK,MAAMiE,KAAS9qD,GAAuBT,KAAMwoD,GAA0B,KAAKlpD,SAExEisD,EAAMA,OACNnE,aAAamE,EAAMA,OAGvBA,EAAMO,KAAOvkB,KAAYgkB,EAAMO,KAGvCvE,SACI,GAAwE,MAApE9mD,GAAuBT,KAAMmoD,GAA+B,KAAhE,CAGAnoD,KAAK+rD,oBAAoBrqC,GAAMA,EAAE6lC,WACjCxnD,GAAuBC,KAAMmoD,GAA+B,KAAM,KAClE,IAAK,MAAMoD,KAAS9qD,GAAuBT,KAAMwoD,GAA0B,KAAKlpD,SAAU,CAEtF,IAAIumC,EAAU0lB,EAAMO,KAChBjmB,EAAU,IACVA,EAAU,GAGd0lB,EAAMO,KAAOvkB,KAEbhtB,WAAWgxC,EAAMnkC,KAAMye,MAwGnC,SAAS6mB,GAAatlD,EAAQ2O,GAC1B,IACI,MAAMP,EAAQm3C,GAAYvlD,EAAQ2O,GAClC,GAAIP,EACA,OAAOskB,GAAatkB,GAG5B,MAAOlU,IACP,OAAO,KAEX,SAASqrD,GAAYvlD,EAAQ2O,GACzB,GAAe,OAAX3O,EACA,OAAO,KAEX,IACI,MAAMC,EAASM,GAAO7B,UAAUgQ,GAAU1O,EAAQ2O,EAAOA,EAAQ,KAC3D7W,EAASyI,GAAO7B,UAAUgQ,GAAU1O,EAAQC,EAAQA,EAAS,KACnE,OAAOyO,GAAU1O,EAAQC,EAAS,GAAIA,EAAS,GAAKnI,GAExD,MAAOoC,IACP,OAAO,KAEX,SAAS4nC,GAAOnrC,GACZ,MAAMqJ,EAASqJ,GAAQ1S,GACvB,GAAIqJ,EAAOlI,OAAS,GAChB,MAAM,IAAIC,MAAM,+BAEpB,MAAMgqC,EAAS,IAAIjiC,WAAW,IAE9B,OADAiiC,EAAO3oC,IAAI4G,EAAQ,GAAKA,EAAOlI,QACxBiqC,EAEX,SAASC,GAASrrC,GACd,GAAKA,EAAMmB,OAAS,IAAQ,EACxB,OAAOnB,EAEX,MAAMqJ,EAAS,IAAIF,WAA0C,GAA/BH,KAAKsS,KAAKtb,EAAMmB,OAAS,KAEvD,OADAkI,EAAO5G,IAAIzC,GACJqJ,EAzIX6gD,GAAyB,IAAIxmD,QAAWymD,GAA4B,IAAIzmD,QAAW0mD,GAAgC,IAAI1mD,QAAW2mD,GAAmC,IAAI3mD,QAAW4mD,GAA+B,IAAI5mD,QAAW6mD,GAAiC,IAAI7mD,QAAW8mD,GAA8B,IAAI9mD,QAAW+mD,GAA2B,IAAI/mD,QAAWgnD,GAAoC,IAAIhnD,QAAWumD,GAA8B,IAAIphD,QAAW8hD,GAEzc7qD,eAAyC+nC,GAErC,MAAMwjB,EAAML,GAAOnjB,EAAIzgC,OAAQygC,GAC/B,IAAIgnB,EAAUnsD,GAAuBT,KAAMsoD,GAAgC,KAAK5nD,IAAI0oD,GAUpF,OATKwD,IACDA,EAAU5sD,KAAK6sD,SAASjnB,GACxBnlC,GAAuBT,KAAMsoD,GAAgC,KAAK9nD,IAAI4oD,EAAKwD,GAC3EryC,YAAW,KACH9Z,GAAuBT,KAAMsoD,GAAgC,KAAK5nD,IAAI0oD,KAASwD,GAC/EnsD,GAAuBT,KAAMsoD,GAAgC,KAAK9pB,OAAO4qB,KAE9E,YAEMwD,GACdjE,GAAyB9qD,eAAe8qD,EAAuBp0B,EAAI6tB,EAAU0K,GACxEA,GA/wBmB,IAgxBnBnlD,GAAO5D,WAAW,0CAA2C,iBAAkB,CAC3Ek0B,OAAQ,qBACRuK,YAAavkC,OAAO8N,OAAO,GAAIwoB,EAAI,CAAE6tB,SAAAA,EAAUhY,gBAAgB,MAGvE,MAAM5H,EAA0BjO,EAChC,IACI,OAAOhf,SAAcvV,KAAK6sD,SAAS,CAAE1nD,OAAQ,OAAQq9B,YAAAA,EAAa4f,SAAAA,KAEtE,MAAO9gD,GAEH,IAAKtB,KAAKypD,iBAAmBjoD,EAAgBF,IAAUwrD,GAAW,GAAkB,WAAb1K,GAA2C,MAAlB5f,EAAY12B,IAA8C,eAAhCgK,GAAUxU,EAAMyT,KAAM,EAAG,GAAqB,CACpK,MAAMA,EAAOzT,EAAMyT,KACbg4C,QAAiB/3B,GAAewN,EAAY12B,GAAI9L,MAEtD,IAAIgtD,EACJ,IACIA,EA8HhB,SAA6Bj4C,GACzB,MAAM3N,EAAS,CACXuiD,OAAQ,GAAID,KAAM,GAAI3e,SAAU,GAAIvK,SAAU,GAAIwf,UAAW,GAAI5d,UAAW,IAEhF,GAAIvsB,GAAWd,GAAQ,IACnB,MAAM,IAAI5V,MAAM,oCAEpB,MAAMwqD,EAAS7zC,GAAUf,EAAM,EAAG,IAClC,GAAIe,GAAU6zC,EAAQ,EAAG,MAAQ7zC,GAAUvE,GAAO,EAAG,IACjD,MAAM,IAAIpS,MAAM,iCAEpBiI,EAAOuiD,OAAS7zC,GAAU6zC,EAAQ,IAElC,IACI,MAAMD,EAAO,GACPuD,EAAatlD,GAAO7B,UAAUgQ,GAAUf,EAAM,GAAI,KAClDm4C,EAAavlD,GAAO7B,UAAUgQ,GAAUf,EAAMk4C,EAAYA,EAAa,KACvEE,EAAWr3C,GAAUf,EAAMk4C,EAAa,IAC9C,IAAK,IAAI7uC,EAAI,EAAGA,EAAI8uC,EAAY9uC,IAAK,CACjC,MAAM2nB,EAAM2mB,GAAaS,EAAc,GAAJ/uC,GACnC,GAAW,MAAP2nB,EACA,MAAM,IAAI5mC,MAAM,SAEpBuqD,EAAK9mD,KAAKmjC,GAEd3+B,EAAOsiD,KAAOA,EAElB,MAAOpoD,GACH,MAAM,IAAInC,MAAM,+BAGpB,IACI,MAAM4rC,EAAW4hB,GAAY53C,EAAM,IACnC,GAAgB,MAAZg2B,EACA,MAAM,IAAI5rC,MAAM,SAEpBiI,EAAO2jC,SAAWA,EAEtB,MAAOzpC,GACH,MAAM,IAAInC,MAAM,mCAGpB,GAAI2W,GAAUf,EAAM,IAAK,OAASe,GAAUvE,GAAO,EAAG,IAClD,MAAM,IAAIpS,MAAM,4CAEpBiI,EAAOo5B,SAAW1qB,GAAUf,EAAM,GAAI,KAEtC,IACI,MAAMirC,EAAY2M,GAAY53C,EAAM,KACpC,GAAiB,MAAbirC,EACA,MAAM,IAAI7gD,MAAM,SAEpBiI,EAAO44C,UAAYA,EAEvB,MAAO1+C,GACH,MAAM,IAAInC,MAAM,oCAGpB,OADAiI,EAAOg7B,UAAY,0CAA0CtjC,MAAM,KAAKV,KAAKC,GAAM+I,EAAO/I,KACnF+I,EAxLgBgmD,CAAoBt3C,GAAUxU,EAAMyT,KAAM,IAEzD,MAAOzT,GACH,OAAOqG,GAAO5D,WAAWzC,EAAMoC,QAAS,iBAAkB,CACtDu0B,OAAQ,WACRuK,YAAAA,EAAatgC,KAAM,CAAE6S,KAAAA,KAI7B,GAAIi4C,EAASrD,OAAOjjD,gBAAkBqmD,EAASrmD,cAC3C,OAAOiB,GAAO5D,WAAW,4BAA6B,iBAAkB,CACpEgR,KAAAA,EAAMytB,YAAAA,EACNF,eAAgB,sDAChBD,UAAW,iBACXD,UAAW4qB,EAAS5qB,YAG5B,MAAMirB,QAAmBrtD,KAAKstD,cAAc9qB,EAAawqB,EAASjiB,SAAUiiB,EAAStD,MACrF,OAAkB,MAAd2D,EACO1lD,GAAO5D,WAAW,iCAAkC,iBAAkB,CACzEk0B,OAAQ,eACRuK,YAAAA,EAAatgC,KAAM,CAAE6S,KAAMzT,EAAMyT,KAAMqtB,UAAW4qB,EAAS5qB,aAG5D3hC,GAAuBT,KAAMgoD,GAA6B,IAAKW,GAAwBpoD,KAAKP,KAAM,CACrG8L,GAAIihD,EACJh4C,KAAMW,GAAO,CACTs3C,EAASxsB,SAAU6I,GAAY,CAACgkB,EAAYL,EAAShN,eAE1DoC,EAAU0K,EAAU,GAE3B,MAAMxrD,IAEXsnD,GAA6B/qD,eAA0Co1B,EAAOs6B,GAC7E,MAAM1gD,SAAgB7M,KAAKuqC,cAAcC,UACzC,OAAI91B,GAAYue,EAAO,UACNxyB,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAC9GmF,OAAQ,WAAYu7C,UAAWztB,EAAOs6B,oBAAAA,UAGjC9sD,GAAuBT,KAAMgoD,GAA6B,IAAKU,IAA2BnoD,KAAKP,KAAM,CAC9GmF,OAAQ,WAAYi9C,SAAUv1C,EAAOu1C,SAASnvB,GAAQs6B,oBAAAA,KAE3D1E,GAA2BhrD,eAAwCwR,EAAOm+C,GACzE,IAAIxB,QAAY9C,GAAgB75C,EAAOrP,MAMvC,MAHiB,UAAbgsD,EAAIptD,MAAoB4uD,GAAYA,EAAStuD,OAAS,IAA6B,IAAxBsuD,EAAS,GAAG5M,UACvEoL,QAAY9C,GAAgB,CAAE3I,OAAQ,WAAY94C,IAAK+lD,EAAS,IAAMxtD,OAEnES,GAAuBT,KAAMioD,GAAwB,KAAKvnD,IAAIsrD,EAAI5C,MAAQ,MAClFN,GAA2BjrD,eAAwCwR,GAClE,MAAMo+C,QAAqBvE,GAAgB75C,EAAOrP,MAE5CopD,EAAMqE,EAAarE,IACzB,IAAI4C,EAAMvrD,GAAuBT,KAAMioD,GAAwB,KAAKvnD,IAAI0oD,GACxE,IAAK4C,EAAK,CAINA,EAAM,CAAEC,WAHWjsD,KAAKksD,eAAeuB,GAGnBrE,IAAAA,EAAKsE,eAFF,IAAIjsD,QAEcksD,QADzB,IAAIn2C,IAC8B80C,SAAS,EAAOC,UAAW,IAC7E9rD,GAAuBT,KAAMioD,GAAwB,KAAKznD,IAAI4oD,EAAK4C,GAEvE,OAAOA,GAyCX,MAAM4B,GAAQ,IAAI1mD,WAAW,IAE7B,SAASmiC,GAAY1zB,GACjB,MAAMvO,EAAS,GACf,IAAIkiC,EAAY,EAEhB,IAAK,IAAIrqC,EAAI,EAAGA,EAAI0W,EAAMzW,OAAQD,IAC9BmI,EAAOxE,KAAKgrD,IACZtkB,GAAa,GAEjB,IAAK,IAAIrqC,EAAI,EAAGA,EAAI0W,EAAMzW,OAAQD,IAAK,CACnC,MAAM8V,EAAOpN,GAAO/B,SAAS+P,EAAM1W,IAEnCmI,EAAOnI,GAAKiqC,GAAOI,GAEnBliC,EAAOxE,KAAKsmC,GAAOn0B,EAAK7V,SACxBkI,EAAOxE,KAAKwmC,GAASr0B,IACrBu0B,GAAa,GAAmC,GAA9BviC,KAAKsS,KAAKtE,EAAK7V,OAAS,IAE9C,OAAOwW,GAAOtO,GAElB,MAAMmK,GAAQ,qEC/7Bd,IAWIs8C,GAA2BC,GAA+BC,GAAyBC,GAAuBC,GAA8BC,GAXxIztD,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAEpFF,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAMjG,MAAMowD,GACTvtD,YAAYopC,GACR6jB,GAA0BrqD,IAAIxD,MAC9BZ,EAAiBY,KAAM,CAAEgqC,SAAWA,GAAY,OAEpDnsC,iBAAiBukD,GACb,OAAO3hD,GAAuBT,KAAM6tD,GAA2B,IAAKC,IAA+BvtD,KAAKP,KAAM,cAAcouD,mBAAmBpuD,KAAKozB,aAAcgvB,GAEtKvkD,0BAA0BukD,GACtB,OAAO3hD,GAAuBT,KAAM6tD,GAA2B,IAAKC,IAA+BvtD,KAAKP,KAAM,uBAAuBquD,4BAA4BruD,KAAKozB,aAAcgvB,GAExLvkD,kBAAkB02B,GACd,OAAO9zB,GAAuBT,KAAM6tD,GAA2B,IAAKC,IAA+BvtD,KAAKP,KAAM,eAAesuD,kBAAkB7tD,GAAuBT,KAAM6tD,GAA2B,IAAKE,IAAyBxtD,KAAKP,KAAMu0B,IAEpP12B,WAAW02B,GACP,OAAO9zB,GAAuBT,KAAM6tD,GAA2B,IAAKC,IAA+BvtD,KAAKP,KAAM,QAAQO,WAAWE,GAAuBT,KAAM6tD,GAA2B,IAAKE,IAAyBxtD,KAAKP,KAAMu0B,IAEtO12B,0BAA0B02B,GACtB,MAAMyV,EAAWvpC,GAAuBT,KAAM6tD,GAA2B,IAAKC,IAA+BvtD,KAAKP,KAAM,uBAExH,IAAI+J,EAAM9L,OAAO8N,OAAO,GAAIwoB,GAS5B,GARc,MAAVxqB,EAAI+B,KACJ/B,EAAI+B,GAAKk+B,EAAS9U,YAAYnrB,EAAI+B,IAAIsC,MAAMtC,GAC9B,MAANA,EACOnE,GAAO3D,mBAAmB,yCAA0C,QAAS+F,EAAI+B,IAErFA,KAGC,MAAZ/B,EAAI8B,KAAc,CAClB,MAAMA,EAAO9B,EAAI8B,KACjB9B,EAAI8B,KAAO3N,QAAQC,IAAI,CACnB6B,KAAKozB,aACLpzB,KAAKk1B,YAAYrpB,KAClBuC,MAAK,EAAEqkB,EAAS5mB,KACVA,GAAQ4mB,EAAQ/rB,gBAAkBmF,EAAKnF,cAGrC+rB,EAFI9qB,GAAO3D,mBAAmB,4BAA6B,UAAW6H,KAcrF,OATiB,MAAb9B,EAAI0qB,QACJ1qB,EAAI0qB,MAAQz0B,KAAKuuD,uBAErBxkD,EAAMjM,EAAkBiM,GACJ,MAAhBA,EAAIk0C,WACJl0C,EAAIk0C,SAAWjU,EAASskB,YAAYvkD,IAExCA,EAAMjM,EAAkBiM,SAEXjM,EAAkBiM,GAEnClM,kBAAkBkF,GACd,MAAMinC,EAAWvpC,GAAuBT,KAAM6tD,GAA2B,IAAKC,IAA+BvtD,KAAKP,KAAM,eACxH,aAAagqC,EAAS9U,YAAYnyB,GAEtClF,sBAAsB02B,GAClB,MAAMyV,EAAWvpC,GAAuBT,KAAM6tD,GAA2B,IAAKC,IAA+BvtD,KAAKP,KAAM,mBAClHwuD,EAAQ/P,GAAY5yC,WAAW7L,KAAKyuD,oBAAoBl6B,IAC9D,aAAayV,EAAS0kB,2BAA2B1uD,KAAK2uD,gBAAgBH,KAG9EX,GAA4B,IAAIjnD,QAAWknD,GAAgC,SAAuCnpD,GAC9G,OAAI3E,KAAKgqC,SACEhqC,KAAKgqC,SAETriC,GAAO5D,WAAW,mBAAoB,wBAAyB,CAAEY,UAAAA,KACzEopD,GAA0BlwD,eAAuC02B,GAEhE,MAAMq6B,EAAU,GAChB,GAAe,OAFfr6B,EAAKt2B,OAAO8N,OAAO,GAAIwoB,IAEhB1oB,KAAc,CACjB,MAAMA,EAAO0oB,EAAG1oB,KAChB+iD,EAAQhsD,KAAK1E,QAAQC,IAAI,CACrB6B,KAAKozB,aACLpzB,KAAKk1B,YAAYrpB,KAClBuC,MAAK,EAAEqkB,EAAS5mB,MACVA,GAAQ4mB,EAAQ/rB,gBAAkBmF,EAAKnF,eACxCiB,GAAO3D,mBAAmB,4BAA6B,UAAW6H,GAEtE0oB,EAAG1oB,KAAO4mB,MAIlB,aADMv0B,QAAQC,IAAIywD,GACXr6B,GAEJ,MAAMs6B,WAAmBV,GAC5BvtD,YAAY6xB,EAASuX,GACjBj7B,MAAMi7B,GACNgkB,GAAsBxqD,IAAIxD,MAC1BZ,EAAiBY,KAAM,CAAEyyB,QAAAA,IAE7B50B,mBAAqB,OAAOmC,KAAKyyB,QACjCq8B,QAAQ9kB,GACJ,OAAO,IAAI6kB,GAAW7uD,KAAKyyB,QAASuX,GAExCnsC,sBAAsB02B,GAClB9zB,GAAuBT,KAAMguD,GAAuB,IAAKC,IAA8B1tD,KAAKP,KAAM,eAAgB,mBAEtHnC,kBAAkB6F,GACdjD,GAAuBT,KAAMguD,GAAuB,IAAKC,IAA8B1tD,KAAKP,KAAM,WAAY,eAElHnC,oBAAoBqhC,EAAQrgC,EAAOd,GAC/B0C,GAAuBT,KAAMguD,GAAuB,IAAKC,IAA8B1tD,KAAKP,KAAM,aAAc,kBAGxHguD,GAAwB,IAAIpnD,QAAWqnD,GAA+B,SAAsCjjD,EAAQrG,GAChH,OAAOgD,GAAO5D,WAAW,0BAA0BiH,IAAU,wBAAyB,CAClFrG,UAAAA,KAGD,MAAMoqD,WAAsBZ,GAE/BvtD,YAAYouD,GACRjgD,MAAMigD,EAAOhlB,UACbkkB,GAAsB1tD,IAAIR,UAAM,GAChCD,GAAuBC,KAAMkuD,GAAuBc,EAAQ,KAEhEnxD,mBACI,aAAa4C,GAAuBT,KAAMkuD,GAAuB,KAAK96B,aAE1E07B,QAAQ9kB,GACJ,OAAO,IAAI+kB,GAActuD,GAAuBT,KAAMkuD,GAAuB,KAAKY,QAAQ9kB,IAE9FnsC,sBAAsB02B,GAClB,aAAa9zB,GAAuBT,KAAMkuD,GAAuB,KAAKS,gBAAgBp6B,GAE1F12B,sBAAsB02B,GAClB,aAAa9zB,GAAuBT,KAAMkuD,GAAuB,KAAKe,gBAAgB16B,GAE1F12B,kBAAkB6F,GACd,aAAajD,GAAuBT,KAAMkuD,GAAuB,KAAKgB,YAAYxrD,GAEtF7F,oBAAoBqhC,EAAQrgC,EAAOd,GAC/B,aAAa0C,GAAuBT,KAAMkuD,GAAuB,KAAKiB,cAAcjwB,EAAQrgC,EAAOd,IAG3GmwD,GAAwB,IAAIzsD,QCtJ5B,MAAM2tD,GAAQ,IAAI/mD,IACX,SAASgnD,GAAoBC,GAC5BF,GAAM9uD,IAAIgvD,KAGdF,GAAM5rD,IAAI8rD,GACV9nD,QAAQC,IAAI,8BACZD,QAAQC,IAAI,6BAA6B6nD,yCACzC9nD,QAAQC,IAAI,IACZD,QAAQC,IAAI,6EACZD,QAAQC,IAAI,sEACZD,QAAQC,IAAI,IACZD,QAAQC,IAAI,2EACZD,QAAQC,IAAI,0EACZD,QAAQC,IAAI,iFACZD,QAAQC,IAAI,IACZD,QAAQC,IAAI,sDACZD,QAAQC,IAAI,+BClBhB,IAWI8nD,GAA+BC,GAA8BC,GAAqCC,GAA4BC,GAA6BC,GAA0BC,GAA8BC,GAXnN/vD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAOjF,MAAM8vD,GACTnvD,YAAYopC,GACRulB,GAA8B/rD,IAAIxD,MAClCwvD,GAA6BhvD,IAAIR,UAAM,GACvCyvD,GAAoCjvD,IAAIR,UAAM,GAC9C0vD,GAA2BlvD,IAAIR,UAAM,GACrC2vD,GAA4BnvD,IAAIR,UAAM,GACtCD,GAAuBC,KAAMwvD,GAA8BxlB,EAAU,KACrEjqC,GAAuBC,KAAMyvD,GAAqC,KAAM,KACxE1vD,GAAuBC,KAAM0vD,GAA4BjvD,GAAuBT,KAAMuvD,GAA+B,IAAKK,IAA0Bv1C,KAAKra,MAAO,KAChKD,GAAuBC,KAAM2vD,GAA6B,KAAM,KAEpEK,WAAWhmB,GACP,MAAM,IAAI7qC,MAAM,iCAEpB8wD,aAAajmB,EAAU5iC,GACnB,MAAM,IAAIjI,MAAM,iCAEpB+wD,SAASlmB,GACL,MAAM,IAAI7qC,MAAM,iCAEpB4W,QAAUtV,GAAuBT,KAAMuvD,GAA+B,IAAKK,IAA0BrvD,KAAKP,MAAO,GACjHmnD,OACI1mD,GAAuBT,KAAMuvD,GAA+B,IAAKM,IAA8BtvD,KAAKP,MACpGS,GAAuBT,KAAMwvD,GAA8B,KAAKxuD,IAAI,QAASP,GAAuBT,KAAM0vD,GAA4B,MAE1IrI,MAAMC,GACEA,GACA7mD,GAAuBT,KAAMuvD,GAA+B,IAAKM,IAA8BtvD,KAAKP,MAExGS,GAAuBT,KAAMwvD,GAA8B,KAAKxuD,IAAI,QAASP,GAAuBT,KAAM0vD,GAA4B,MAE1InI,SAAWvnD,KAAK+V,SAEpBy5C,GAA+B,IAAI/tD,QAAWguD,GAAsC,IAAIhuD,QAAWiuD,GAA6B,IAAIjuD,QAAWkuD,GAA8B,IAAIluD,QAAW8tD,GAAgC,IAAI3oD,QAAWgpD,GAA2B/xD,eAAwC8iD,GAC1S,IACkF,MAA1ElgD,GAAuBT,KAAMyvD,GAAqC,MAClE1vD,GAAuBC,KAAMyvD,GAAqCzvD,KAAKgwD,WAAWvvD,GAAuBT,KAAMwvD,GAA8B,MAAO,KAExJ,MAAMW,QAAiB1vD,GAAuBT,KAAMyvD,GAAqC,KACzF,GAAgB,MAAZU,EAEA,YADA1vD,GAAuBT,KAAMwvD,GAA8B,KAAKrD,mBAAmBnsD,KAAMA,KAAKkwD,SAASzvD,GAAuBT,KAAMwvD,GAA8B,OAGtK,MAAMtjB,QAAgBzrC,GAAuBT,KAAMwvD,GAA8B,KAAKjlB,aAItF,GAHK9pC,GAAuBT,KAAM2vD,GAA6B,MAC3D5vD,GAAuBC,KAAM2vD,GAA6BzjB,EAAS,KAEnEzrC,GAAuBT,KAAM2vD,GAA6B,KAAKxyB,UAAY+O,EAAQ/O,QACnF,MAAM,IAAIh+B,MAAM,iBAEpB,MAAMiI,QAAe3G,GAAuBT,KAAMwvD,GAA8B,KAAKY,KAAK,uBAAwB,CAACD,UAC7GnwD,KAAKiwD,aAAaxvD,GAAuBT,KAAMwvD,GAA8B,KAAMpoD,GAE7F,MAAO9F,GACHkG,QAAQC,IAAI,QAASnG,GAEzBb,GAAuBT,KAAMwvD,GAA8B,KAAKhE,KAAK,QAAS/qD,GAAuBT,KAAM0vD,GAA4B,OACxIG,GAA+B,WAC9B,MAAMQ,EAAkB5vD,GAAuBT,KAAMyvD,GAAqC,KACtFY,IACAtwD,GAAuBC,KAAMyvD,GAAqC,KAAM,KACxEY,EAAgBjiD,MAAM+hD,IAClB1vD,GAAuBT,KAAMwvD,GAA8B,KAAKY,KAAK,sBAAuB,CAACD,SAIlG,MAAMG,WAAgCP,GACzCnvD,YAAYopC,EAAUjpC,GAvE1B,IAAc4M,EAwENoB,MAAMi7B,GACN8lB,GAA+BtvD,IAAIR,UAAM,GACzCD,GAAuBC,KAAM8vD,IA1EvBniD,EA0E4D5M,EAzE/D6C,KAAKsJ,MAAMtJ,KAAKC,UAAU8J,KAyE8C,KAE/EuiD,SAASlmB,GACL,OAAO,IAAI8d,GAAuB9d,EAAUvpC,GAAuBT,KAAM8vD,GAAgC,MAE7GjyD,iBAAiBmsC,GACb,MAAMmmB,QAAiBnmB,EAASomB,KAAK,gBAAiB,CAAC3vD,GAAuBT,KAAM8vD,GAAgC,OAEpH,OADAtoD,QAAQC,IAAI,UAAW0oD,GAChBA,EAEXtyD,mBAAmBmsC,EAAUumB,GACzB,MAAMrkB,QAAgBlC,EAASO,aAC/B,IAAK,MAAMnjC,KAAUmpD,EAAS,CAC1B,MAAM9oD,EAAMykC,EAAQ1B,UAAU/iC,IAAIL,EAAQ4iC,GAC1CA,EAASwd,KAAK/mD,GAAuBT,KAAM8vD,GAAgC,KAAMroD,KAI7FqoD,GAAiC,IAAIruD,QAC9B,MAAM+uD,WAAkCT,GAC3ClyD,iBAAiBmsC,GACb,aAAaA,EAASomB,KAAK,kCAAmC,IAElEvyD,mBAAmBmsC,EAAUumB,GACzB,MAAMrkB,QAAgBlC,EAASO,aAC/B,IAAK,MAAMnjC,KAAUmpD,EACjBvmB,EAASwd,KAAK,UAAWtb,EAAQ1B,UAAU/uB,KAAKrU,KC/G5D,IAWIqpD,GAA4BC,GAA6BC,GAA0BC,GAXnF7wD,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAkBxF,MAAM4wD,GAAY,+CAA+C/xD,MAAM,MAEvE,SAASgyD,GAAS/yD,GACd,GAAa,MAATA,GAAiB8yD,GAAU/rD,mBAA2B,EACtD,OAAO/G,EAGX,GAAkC,mBAAtBA,EAAgB,WACxB,OAAOA,EAEX,GAAI0P,MAAMN,QAAQpP,GACd,OAAQA,EAAMK,IAAI0yD,IAEtB,GAAuB,iBAAX,EACR,OAAO7yD,OAAOD,KAAKD,GAAOQ,QAAO,CAACC,EAAOgB,KACrChB,EAAMgB,GAAOzB,EAAMyB,GACZhB,IACR,IAEP,MAAM,IAAIW,MAAM,sBAAsBpB,mBAE1C,SAASgzD,GAAahzD,GAClB,OAAIA,EACOA,EAAM2I,cAEV3I,EAKX,MAAMizD,GAAiB,CAGnBC,SAAS,EAETC,aAAe,GAAK,GAEpBC,eAAgB,KAGb,MAAMC,GACTxwD,YAAYopC,EAAUvX,GAClBrzB,EAAiBY,KAAM,CAAEgqC,SAAAA,EAAUvX,QAAAA,IAEvCq8B,QAAQ9kB,GACJ,OAAOriC,GAAO5D,WAAW,iCAAkC,wBAAyB,CAChFY,UAAW,mBAGnB9G,mBACI,OAAOmC,KAAKyyB,QAEhB50B,mBACI,aAAamC,KAAKgqC,SAASO,aAE/B1sC,mBACI,aAAamC,KAAKgqC,SAASqnB,aAE/BxzD,kBAAkB02B,GACd,aAAav0B,KAAKgqC,SAASskB,YAAY/5B,GAE3C12B,WAAW02B,GACP,aAAav0B,KAAKgqC,SAASzpC,KAAKg0B,GAEpC12B,kBAAkBkF,GACd,aAAa/C,KAAKgqC,SAAS9U,YAAYnyB,GAE3ClF,iBAAiBukD,GACb,aAAapiD,KAAKgqC,SAASokB,aAAapuD,KAAKyyB,SAEjD50B,0BAA0BukD,GACtB,aAAapiD,KAAKgqC,SAASqkB,sBAAsBruD,KAAKyyB,SAI1D50B,+BAA+B2sD,GAC3B,MAAMj2B,EAAKu8B,GAAStG,GACd98C,EAAW,GAEjB,GAAI6mB,EAAG1oB,KAAM,CACT,MAAM8oB,EAAQJ,EAAG1oB,KACjB6B,EAAS9K,KAAK,WACV,MAAMiJ,QAAampB,GAAeL,EAAO30B,KAAKgqC,UAClC,MAARn+B,GAAgBA,EAAKnF,gBAAkB1G,KAAKyyB,QAAQ/rB,eACpDiB,GAAO3D,mBAAmB,wBAAyB,cAAewmD,GAEtEj2B,EAAG1oB,KAAOA,GALA,SASd0oB,EAAG1oB,KAAO7L,KAAKyyB,QAWnB,GANmB,MAAf8B,EAAG0pB,UACHvwC,EAAS9K,KAAK,WACV2xB,EAAG0pB,eAAiBj+C,KAAKgqC,SAASskB,YAAYrwD,OAAO8N,OAAO9N,OAAO8N,OAAO,GAAIwoB,GAAK,CAAE1oB,KAAM7L,KAAKyyB,YADtF,IAKL,MAAT8B,EAAGzoB,GAAY,CACf,MAAMwlD,EAAM/8B,EAAGzoB,GACf4B,EAAS9K,KAAK,WACV2xB,EAAGzoB,SAAWkpB,GAAes8B,EAAKtxD,KAAKgqC,WAD7B,IAKdt8B,EAASxO,cACHhB,QAAQC,IAAIuP,GAEtB,MAAM6jD,EAAQvxD,KAAKgqC,SAASwnB,kBAAkBj9B,GAC9C,OAAOv0B,KAAKgqC,SAASomB,KAAK,sBAAuB,CAACmB,IAEtD1zD,sBAAsB02B,GAElB,MAAMosB,QAAoB3gD,KAAKgqC,SAAS0X,iBAElCjmC,QAAazb,KAAKyxD,yBAAyBl9B,GAIjD,iBAAkBr2B,SAAQ,CAACI,EAASgtD,KAChC,MAAMoG,EAAU7zD,MAAOypC,IAEnB,MAAM/S,QAAWv0B,KAAKgqC,SAASmW,eAAe1kC,GACpC,MAAN8Y,EAKJv0B,KAAKgqC,SAAS2hB,aAAY,KAAQ+F,EAAQ,OAAUpqB,GAJhDhpC,EAAQ0B,KAAKgqC,SAAS+f,iBAAiBx1B,EAAI9Y,EAAMklC,KAMzD+Q,EAAQ,QAGhB7zD,sBAAsB2sD,GAClB,MAAMj2B,EAAKu8B,GAAStG,GAEpB,GAAIj2B,EAAG1oB,KAAM,CACT,MAAMA,QAAampB,GAAeT,EAAG1oB,KAAM7L,KAAKgqC,UAChD,GAAY,MAARn+B,GAAgBA,EAAKnF,gBAAkB1G,KAAKyyB,QAAQ/rB,cACpD,OAAOiB,GAAO3D,mBAAmB,wBAAyB,cAAewmD,GAE7Ej2B,EAAG1oB,KAAOA,OAGV0oB,EAAG1oB,KAAO7L,KAAKyyB,QAEnB,MAAM8+B,EAAQvxD,KAAKgqC,SAASwnB,kBAAkBj9B,GAC9C,aAAav0B,KAAKgqC,SAASomB,KAAK,uBAAwB,CAACmB,IAE7D1zD,kBAAkB8zD,GACd,MAAMjuD,EAAkC,iBAAtB,EAAkC21B,GAAYs4B,GAAYA,EAC5E,aAAa3xD,KAAKgqC,SAASomB,KAAK,gBAAiB,CAC7C76C,GAAQ7R,GAAU1D,KAAKyyB,QAAQ/rB,gBAGvC7I,oBAAoBqhC,EAAQrgC,EAAOuR,GAC/B,MAAMrS,EAAQ+yD,GAAS1gD,GAEjBwhD,QAAkB9zB,GAAiB+zB,aAAa3yB,EAAQrgC,EAAOd,GAAOF,MAAOE,IAC/E,MAAM00B,QAAgBuC,GAAej3B,GACrC,OAAe,MAAX00B,EACO9qB,GAAO3D,mBAAmB,0CAA2C,QAASjG,GAElF00B,KAEX,aAAazyB,KAAKgqC,SAASomB,KAAK,uBAAwB,CACpDpwD,KAAKyyB,QAAQ/rB,cACb9C,KAAKC,UAAUi6B,GAAiBg0B,WAAWF,EAAU1yB,OAAQrgC,EAAO+yD,EAAU7zD,UAGtFF,aAAa0f,GACT,OAAOvd,KAAKgqC,SAASomB,KAAK,yBAA0B,CAChDpwD,KAAKyyB,QAAQ/rB,cAAe6W,EAAU,OAI9C1f,yBAAyB8zD,GACrB,MAAMjuD,EAAkC,iBAAtB,EAAkC21B,GAAYs4B,GAAYA,EAC5E,aAAa3xD,KAAKgqC,SAASomB,KAAK,WAAY,CACxCpwD,KAAKyyB,QAAQ/rB,cAAe6O,GAAQ7R,MAIzC,MAAMquD,WAA2BxI,GACpC3oD,YAAYsrC,GACRn9B,MAAMm9B,GACNukB,GAA2BjwD,IAAIR,UAAM,GACrC0wD,GAA4BlwD,IAAIR,UAAM,GACtCD,GAAuBC,KAAMywD,GAA4B,EAAG,KAC5D1wD,GAAuBC,KAAM0wD,GAA6BzyD,OAAO8N,OAAO,GAAIilD,IAAiB,KAEjGgB,YAAYxyD,GACR,OAAOiB,GAAuBT,KAAM0wD,GAA6B,KAAKlxD,GAE1EyyD,YAAYz8B,GAER,IAAK,MAAM9Y,KAAQ8Y,EAAS,CACxB,MAAMh2B,EAAMkd,EACN3e,EAAQy3B,EAAQh2B,GACtB,UAAY,UAAmBiB,GAAuBT,KAAM0wD,GAA6B,KAAKlxD,GAC1F,OAAOmI,GAAO3D,mBAAmB,uBAAwB,WAAWxE,IAAOzB,GAInF,IAAK,MAAM2e,KAAQ8Y,EAAS,CACxB,MAAMh2B,EAAMkd,EACZjc,GAAuBT,KAAM0wD,GAA6B,KAAKlxD,GAAQg2B,EAAQh2B,IAGvF0yD,eAAe/sD,EAAQ8J,GACnB,IAAI1E,EAAIqhD,EACR,MAAO,CACHzmD,OAAAA,EAAQ8J,OAAAA,EAAQ+sB,IAAKj8B,GAAuBC,KAAMywD,IAA6B7E,EAAKnrD,GAAuBT,KAAMywD,GAA4B,KAAMlmD,EAAKqhD,IAAMA,GAAK,KAAMrhD,GAAK4nD,QAAS,OAO/Lt0D,WAAWsH,EAAQ8J,GAEf,MAAM,IAAI9P,MAAM,iCAEpBtB,gBAAgB40B,EAAU,GACtB,MAAMyZ,QAAgBlsC,KAAKuqC,aACrB6nB,QAAiBpyD,KAAKowD,KAAK,eAAgB,IAEjD,GAAyB,iBAAb,EAAuB,CAC/B,GAAI39B,EAAU2/B,EAASlzD,OACnB,MAAM,IAAIC,MAAM,mBAEpB,OAAO,IAAIiyD,GAAcpxD,KAAMoyD,EAAS3/B,IAG5CA,EAAUyZ,EAAQ1B,UAAU/X,QAAQA,GACpC,IAAK,MAAM4/B,KAAWD,EAClB,GAAIlmB,EAAQ1B,UAAU/X,QAAQ4/B,KAAaA,EACvC,OAAO,IAAIjB,GAAcpxD,KAAMqyD,GAGvC,MAAM,IAAIlzD,MAAM,mBAIpBtB,uBACI,OAAOknD,GAAQl5C,KAAKlE,GAAO1B,gBAAgBjG,KAAK6sD,SAAS,CAAE1nD,OAAQ,cAEvE+mD,eAAeF,GAEX,MAAiB,YAAbA,EAAIptD,KACG,IAAI4xD,GAA0BxwD,MAExB,UAAbgsD,EAAIptD,KACG,IAAI0xD,GAAwBtwD,KAAMgsD,EAAIjrD,QAIhC,WAAbirD,EAAIptD,MAA2C,aAAtBotD,EAAIjrD,OAAOw/C,OAC7B,IAAIyI,GAAoB,UAE5Bj6C,MAAMm9C,eAAeF,GAEhCwF,kBAAkBj9B,GACd,MAAMntB,EAAS,GAuBf,MArBA,CAAC,UAAW,WAAY,WAAY,OAAQ,eAAgB,uBAAwB,QAAS,SAASkB,SAAS9I,IAC3G,GAAe,MAAX+0B,EAAG/0B,GACH,OAEJ,IAAI8yD,EAAS9yD,EACD,aAARA,IACA8yD,EAAS,OAEblrD,EAAOkrD,GAAU78C,GAAS8e,EAAG/0B,OAGjC,CAAC,OAAQ,KAAM,QAAQ8I,SAAS9I,IACb,MAAX+0B,EAAG/0B,KAGP4H,EAAO5H,GAAO+V,GAAQgf,EAAG/0B,QAGzB+0B,EAAGgqB,aACHn3C,EAAmB,WAAIs2C,GAAcnpB,EAAGgqB,aAErCn3C,EAEXmrD,cAAc3sB,GACV,OAAQA,EAAIzgC,QACR,IAAK,UACD,MAAO,CAAEA,OAAQ,cAAee,KAAM,IAC1C,IAAK,iBACD,MAAO,CAAEf,OAAQ,kBAAmBe,KAAM,IAC9C,IAAK,cACD,MAAO,CAAEf,OAAQ,eAAgBe,KAAM,IAC3C,IAAK,aACD,MAAO,CACHf,OAAQ,iBACRe,KAAM,CAAC6qD,GAAanrB,EAAInT,SAAUmT,EAAIwc,WAE9C,IAAK,sBACD,MAAO,CACHj9C,OAAQ,0BACRe,KAAM,CAAC6qD,GAAanrB,EAAInT,SAAUmT,EAAIwc,WAE9C,IAAK,UACD,MAAO,CACHj9C,OAAQ,cACRe,KAAM,CAAC6qD,GAAanrB,EAAInT,SAAUmT,EAAIwc,WAE9C,IAAK,eACD,MAAO,CACHj9C,OAAQ,mBACRe,KAAM,CACF6qD,GAAanrB,EAAInT,SAChB,KAAOmT,EAAIyc,SAAS73C,SAAS,IAC9Bo7B,EAAIwc,WAGhB,IAAK,kBACD,MAAO,CACHj9C,OAAQ,yBACRe,KAAM,CAAC0/B,EAAI4sB,oBAEnB,IAAK,WACD,GAAI,aAAc5sB,EACd,MAAO,CACHzgC,OAAQ,uBACRe,KAAM,CAAC0/B,EAAIwc,WAAYxc,EAAI2nB,sBAG9B,GAAI,cAAe3nB,EACpB,MAAO,CACHzgC,OAAQ,qBACRe,KAAM,CAAC0/B,EAAI8a,YAAa9a,EAAI2nB,sBAGpC,MACJ,IAAK,iBACD,MAAO,CACHpoD,OAAQ,2BACRe,KAAM,CAAC0/B,EAAInqB,OAEnB,IAAK,wBACD,MAAO,CACHtW,OAAQ,4BACRe,KAAM,CAAC0/B,EAAInqB,OAEnB,IAAK,OACD,MAAO,CACHtW,OAAQ,WACRe,KAAM,CAAClG,KAAKwxD,kBAAkB5rB,EAAIpD,aAAcoD,EAAIwc,WAE5D,IAAK,cACD,MAAO,CACHj9C,OAAQ,kBACRe,KAAM,CAAClG,KAAKwxD,kBAAkB5rB,EAAIpD,eAG1C,IAAK,UASD,OARIoD,EAAI7kC,QAAgC,MAAtB6kC,EAAI7kC,OAAO0xB,UACrBhlB,MAAMN,QAAQy4B,EAAI7kC,OAAO0xB,SACzBmT,EAAI7kC,OAAO0xB,QAAUmT,EAAI7kC,OAAO0xB,QAAQr0B,IAAI2yD,IAG5CnrB,EAAI7kC,OAAO0xB,QAAUs+B,GAAanrB,EAAI7kC,OAAO0xB,UAG9C,CAAEttB,OAAQ,cAAee,KAAM,CAAC0/B,EAAI7kC,SAEnD,OAAO,KAEX0xD,YAAYttD,EAAQe,EAAM5E,GACtB,GAAe,aAAX6D,EAAuB,CACvB,MAAMiC,EAASsrD,GAAYpxD,GAC3B,OAAI8F,EAGOO,GAAOlE,UAAU,0CAA2C,iBAAkB,CACjFsR,KAAM3N,EAAO2N,KACbytB,YAAat8B,EAAK,KAGnByB,GAAOlE,UAAU,2CAA4C,iBAAkB,CAClFsR,KAAM,KAAMytB,YAAat8B,EAAK,GAAIhE,KAAM,CAAEZ,MAAAA,KAKlD,MAAMoC,EAAUE,KAAKC,UA4K7B,SAAwB9F,GACpB,MAAMqJ,EAAS,GAEf,OADAurD,GAAgB50D,EAAOqJ,GAChBA,EA/K4BwrD,CAAetxD,IAC9C,OAAIoC,EAAQyD,MAAM,iDACPQ,GAAOlE,UAAU,oDAAqD,qBAAsB,CAC/F++B,YAAat8B,EAAK,KAGtBxC,EAAQyD,MAAM,UAAYzD,EAAQyD,MAAM,WACjCQ,GAAOlE,UAAU,8BAA+B,gBAAiB,CACpE++B,YAAat8B,EAAK,KAItBxC,EAAQyD,MAAM,4BAA8BzD,EAAQyD,MAAM,eACnDQ,GAAOlE,UAAU,0BAA2B,0BAA2B,CAC1E++B,YAAat8B,EAAK,KAGtBxC,EAAQyD,MAAM,yBACPQ,GAAOlE,UAAU,gDAAiD,wBAAyB,CAC9FkB,UAAWQ,EAAQjD,KAAM,CAAEsgC,YAAat8B,EAAK,MAGtC,gBAAXf,GAA4BzB,EAAQyD,MAAM,gFACnCQ,GAAOlE,UAAU,4EAA6E,0BAA2B,CAC5H++B,YAAat8B,EAAK,KAGnB5E,EAEXzD,eAAe+nC,GAGX,GAAmB,SAAfA,EAAIzgC,QAAoC,gBAAfygC,EAAIzgC,OAA0B,CACvD,IAAIovB,EAAKqR,EAAIpD,YACb,GAAIjO,GAAiB,MAAXA,EAAG31B,MAAgB+I,GAAO1B,UAAUsuB,EAAG31B,OAEtB,MAAnB21B,EAAG+pB,cAAmD,MAA3B/pB,EAAG8pB,qBAA8B,CAC5D,MAAMwU,QAAgB7yD,KAAKqxD,aACC,MAAxBwB,EAAQvU,cAAwD,MAAhCuU,EAAQxU,uBAExCzY,EAAM3nC,OAAO8N,OAAO,GAAI65B,EAAK,CACzBpD,YAAavkC,OAAO8N,OAAO,GAAIwoB,EAAI,CAAE31B,UAAMc,QAM/D,MAAMklC,EAAU5kC,KAAKuyD,cAAc3sB,GACnC,GAAe,MAAXhB,EAAiB,CACjB5kC,KAAKwnD,KAAK,QAAS,CAAE5oD,KAAM,cAAegmC,QAAAA,IAC1C,IACI,MAAMx9B,QAAepH,KAAKowD,KAAKxrB,EAAQz/B,OAAQy/B,EAAQ1+B,MAGvD,OADAlG,KAAKwnD,KAAK,QAAS,CAAE5oD,KAAM,cAAewI,OAAAA,IACnCA,EAEX,MAAO9F,GAEH,MADAtB,KAAKwnD,KAAK,QAAS,CAAE5oD,KAAM,WAAY0C,MAAAA,IACjCtB,KAAKyyD,YAAY7tB,EAAQz/B,OAAQy/B,EAAQ1+B,KAAM5E,IAG7D,OAAOyN,MAAM89C,SAASjnB,IAG9B6qB,GAA6B,IAAIhvD,QAAWivD,GAA8B,IAAIjvD,QACvE,MAAMqxD,WAAwBf,GACjCnxD,YAAYmlC,EAAKmG,GACF,MAAPnG,IACAA,EAAM,yBAEVh3B,MAAMm9B,GACNykB,GAAyBnwD,IAAIR,UAAM,GACnC4wD,GAAiCpwD,IAAIR,UAAM,GACtB,iBAAT,EACRD,GAAuBC,KAAM2wD,GAA0B,CAAE/rB,QAAS,IAAI8B,GAAaX,IAAQ,MAG3FhmC,GAAuBC,KAAM2wD,GAA0B1yD,OAAO8N,OAAO,GAAIg6B,GAAM,KAC/EtlC,GAAuBT,KAAM2wD,GAA0B,KAAK/rB,QAAUnkC,GAAuBT,KAAM2wD,GAA0B,KAAK/rB,QAAQp7B,SAE9IzJ,GAAuBC,KAAM4wD,GAAkC,IAAM,KAEzE/yD,WAAWsH,EAAQ8J,GA9dvB,IAAclR,EAAAA,EA+dQkR,EAAdA,EA9dGrL,KAAKsJ,MAAMtJ,KAAKC,UAAU9F,IAge7B,MAAM2pC,EAAazpC,OAAO8N,OAAO,GAAItL,GAAuBT,KAAM2wD,GAA0B,MAC5FjpB,EAAW9C,QAAU8C,EAAW9C,QAAQp7B,QACxCk+B,EAAW9C,QAAQD,KAAO3kC,KAAKkyD,eAAe/sD,EAAQ8J,GACtD,MAAM7H,SAAgBqgC,GAAUC,IAAa3C,SAC7C,MAAI,UAAW39B,EACJO,GAAO5D,WAAW,sBAAuB,gBAAiB,CAC7DqD,OAAAA,IAGDA,EAAOA,OAEd8/C,sBAAoB,OAAOzmD,GAAuBT,KAAM4wD,GAAkC,KAC1F1J,oBAAgBnpD,GAChB,IAAKyG,OAAOC,UAAU1G,IAAUA,EAAQ,EACpC,MAAM,IAAIoB,MAAM,oBAEpBY,GAAuBC,KAAM4wD,GAAkC7yD,EAAO,KACtEiC,KAAK+rD,oBAAoBC,KApdjC,SAAoBjuD,GAChB,OAAQA,GAA4C,iBAA3BA,EAAqB,iBAodlCg1D,CAAW/G,KACXA,EAAI9E,gBAAkBzmD,GAAuBT,KAAM4wD,GAAkC,UAKrGD,GAA2B,IAAIlvD,QAAWmvD,GAAmC,IAAInvD,QAK1E,MAAMuxD,WAA8BF,GACvClyD,YAAYmlC,EAAKmG,GACbn9B,MAAMg3B,EAAKmG,GACX9sC,EAAiBY,KAAM,CAAEksC,QAAAA,IAE7BruC,uBACI,OAAOmC,KAAKksC,SAGpB,SAASwmB,GAAY30D,GACjB,GAAa,MAATA,EACA,OAAO,KAGX,GAA+B,iBAAnBA,EAAa,SAAkBA,EAAM2F,QAAQyD,MAAM,aAAeuN,GAAY3W,EAAMgX,MAC5F,MAAO,CAAErR,QAAS3F,EAAM2F,QAASqR,KAAMhX,EAAMgX,MAGjD,GAAuB,iBAAX,EAAqB,CAC7B,IAAK,MAAMvV,KAAOzB,EAAO,CACrB,MAAMqJ,EAASsrD,GAAY30D,EAAMyB,IACjC,GAAI4H,EACA,OAAOA,EAGf,OAAO,KAGX,GAAuB,iBAAX,EACR,IACI,OAAOsrD,GAAY9uD,KAAKsJ,MAAMnP,IAElC,MAAOuD,IAEX,OAAO,KAEX,SAASqxD,GAAgB50D,EAAOqJ,GAC5B,GAAa,MAATrJ,EAAJ,CAQA,GAJ+B,iBAAnBA,EAAa,SACrBqJ,EAAOxE,KAAK7E,EAAM2F,SAGC,iBAAX,EACR,IAAK,MAAMlE,KAAOzB,EACd40D,GAAgB50D,EAAMyB,GAAM4H,GAIpC,GAAuB,iBAAX,EACR,IACI,OAAOurD,GAAgB/uD,KAAKsJ,MAAMnP,GAAQqJ,GAE9C,MAAO9F,MCzkBf,MAAM2xD,GAAgB,mEAYf,MAAMC,WAAqBF,GAC9BpyD,YAAY4oD,EAAW,YAAa2J,GAChC,MAAMjnB,EAAU6Y,GAAQl5C,KAAK29C,GACf,MAAV2J,IACAA,EAASF,IAGblkD,MADmBmkD,GAAaE,cAAclnB,EAASinB,GACrCjnB,GAClB9sC,EAAiBY,KAAM,CAAEmzD,OAAAA,IAEzBpkD,MAAMkjD,YAAY,CAAEhB,SAAS,IAEjC/F,aAAa/tB,GACT,IACI,OAAO,IAAI+1B,GAAa/1B,EAASn9B,KAAKmzD,QAE1C,MAAO7xD,IACP,OAAOyN,MAAMm8C,aAAa/tB,GAE9B52B,qBAAqB2lC,EAASinB,GACZ,MAAVA,IACAA,EAASF,IAEb,MAAMruB,EAAU,IAAI8B,GAAa,WAlCzC,SAAiB3jC,GACb,OAAQA,GACJ,IAAK,YACD,MAAO,mBACX,IAAK,QACD,MAAO,uBACX,IAAK,WACD,MAAO,wBAEf,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWjB,GAyBlBswD,CAAQnnB,EAAQnpC,SAASowD,KACtEvuB,EAAQkC,WAAY,EAOpB,MAAO,CAAElC,QAAAA,EAASqD,cANIpqC,MAAO+mC,EAASE,EAAUgoB,KACxCqG,IAAWF,IACX5D,GAAoB,iBAEjB,IAIfiE,sBACI,OAAQtzD,KAAKmzD,SAAWF,IC9ChC,MAAMA,GAAgB,mCA4Bf,MAAMM,WAAwBP,GACjCpyD,YAAY4oD,EAAW,YAAa2J,GAChC,MAAMjnB,EAAU6Y,GAAQl5C,KAAK29C,GACf,MAAV2J,IACAA,EAASF,IAEblkD,MAAMwkD,GAAgBH,cAAclnB,EAASinB,GAASjnB,GACtD9sC,EAAiBY,KAAM,CAAEmzD,OAAAA,IAE7BjI,aAAa/tB,GACT,IACI,OAAO,IAAIo2B,GAAgBp2B,EAASn9B,KAAKmzD,QAE7C,MAAO7xD,IACP,OAAOyN,MAAMm8C,aAAa/tB,GAE9Bm2B,sBACI,OAAQtzD,KAAKmzD,SAAWF,GAE5B1sD,qBAAqB2lC,EAASinB,GACZ,MAAVA,IACAA,EAASF,IAEb,MAAMruB,EAAU,IAAI8B,GAAa,WAlDzC,SAAiB3jC,GACb,OAAQA,GACJ,IAAK,YACD,MAAO,4BACX,IAAK,UACD,MAAO,4BACX,IAAK,UACD,MAAO,4BACX,IAAK,SACD,MAAO,2BACX,IAAK,QACD,MAAO,0BACX,IAAK,QACD,MAAO,gCACX,IAAK,WACD,MAAO,+BACX,IAAK,WACD,MAAO,4BACX,IAAK,mBACD,MAAO,4BACX,IAAK,WACD,MAAO,4BACX,IAAK,iBACD,MAAO,0BAEf,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWjB,GAyBlBswD,CAAQnnB,EAAQnpC,YAAYowD,KACzEvuB,EAAQkC,WAAY,EAOpB,MAAO,CAAElC,QAAAA,EAASqD,cANIpqC,MAAO+mC,EAASE,EAAUgoB,KACxCqG,IAAWF,IACX5D,GAAoB,YAEjB,KC5DZ,MAAMmE,WAA2BR,GACpCpyD,YAAY4oD,EAAW,aACnB,MAAMtd,EAAU6Y,GAAQl5C,KAAK29C,GAC7B,GAAqB,cAAjBtd,EAAQnpC,KACR,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWwlD,GAEvEz6C,MAAM,8BAAgCm9B,ICG9C,MAAM+mB,GAAgB,qCAChBQ,GAAoB,+BACnB,MAAMC,WAAwBxP,GACjCtjD,YAAY+yD,EAASC,GACjB7kD,MAAM0kD,IAENr0D,EAAiBY,KAAM,CAAE2zD,QAAAA,EAASC,gBAAAA,IAEtCpqD,QACI,OAAO,IAAIkqD,GAAgB1zD,KAAK2zD,QAAS3zD,KAAK4zD,kBAG/C,MAAMC,WAA0BtK,GACnC3oD,YAAY4oD,EAAU2J,GAClBpkD,QACA,MAAMm9B,EAAU6Y,GAAQl5C,KAAK29C,GAC7B,GAAc,MAAV2J,EAAgB,CAChB,MAAMxoB,EAASuB,EAAQE,UAAUqnB,IAE7BN,EADAxoB,EACSA,EAAOipB,gBAGPX,GAGjB7zD,EAAiBY,KAAM,CAAEmzD,OAAAA,EAAQjnB,QAAAA,IAEjClsC,KAAK8zD,aAETA,aACI,MAAMnpB,EAAS3qC,KAAKksC,QAAQE,UAAUqnB,IACtC,GAAI9oB,EACA,OAAOA,EAAOgpB,QAElB,OAAQ3zD,KAAKksC,QAAQnpC,MACjB,IAAK,YACD,MAAO,2BACX,IAAK,UACD,MAAO,mCACX,IAAK,UACD,MAAO,mCACX,IAAK,QACD,MAAO,iCACX,IAAK,SACD,MAAO,kCAGf,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWhE,KAAKksC,SAE5EvG,OAAOxrB,EAAQlL,GACX,MAAM8kD,EAAQ91D,OAAOD,KAAKiR,GAAQ1Q,QAAO,CAACC,EAAOgB,KAC7C,MAAMzB,EAAQkR,EAAOzP,GAIrB,OAHa,MAATzB,IACAS,GAAS,IAAIgB,KAAOzB,KAEjBS,IACR,IACG20D,EAAWnzD,KAAW,OAAI,WAAWA,KAAKmzD,SAAW,GAC3D,MAAO,GAAGnzD,KAAK8zD,2BAA2B35C,IAAS45C,IAAQZ,IAE/Da,aACI,MAAO,GAAGh0D,KAAK8zD,mBAEnBG,YAAY95C,EAAQlL,GAGhB,OAFAA,EAAOkL,OAASA,EAChBlL,EAAOilD,OAASl0D,KAAKmzD,OACdlkD,EAEXpR,sBACI,OAAOmC,KAAKksC,QAEhBruC,YAAYsc,EAAQlL,EAAQklD,GACxB,MAAMpuB,EAAOouB,EAAOn0D,KAAKg0D,aAAeh0D,KAAK2lC,OAAOxrB,EAAQlL,GACtDykB,EAAWygC,EAAOn0D,KAAKi0D,YAAY95C,EAAQlL,GAAU,KAQrD21B,EAAU,IAAI8B,GAAaX,GAC3B2B,EAAa,CACf9C,QAAAA,EACAmD,qBAAsB,IACtBI,gBAAiBtqC,MAAO+mC,EAASE,KAC7B,MAAM19B,EAAS09B,EAASU,UAAY5hC,KAAKsJ,MAAM4sB,GAAagL,EAASH,OAAS,GACxEW,GAAwC,iBAAnBl+B,EAAa,OAAkBA,EAAOA,OAAS,IAAIV,cAAc5B,QAAQ,eAAiB,EAYrH,MAXe,UAAXqV,EAEI/S,GAA2B,GAAjBA,EAAOm/B,QAAiC,SAAlBn/B,EAAO1D,SAAsB4hC,GAC7DR,EAASM,mBAAmBh+B,EAAOA,QAInCk+B,GACAR,EAASM,mBAAmBh+B,EAAOA,QAGpC09B,IAGXpR,IACAkR,EAAQmC,UAAU,eAAgB,oDAClCnC,EAAQD,KAAO1mC,OAAOD,KAAK01B,GAASt1B,KAAKC,GAAM,GAAGA,KAAKq1B,EAAQr1B,OAAMyF,KAAK,MAE9E,MAAMghC,QAAiB2C,GAAUC,GACjC,IAAK5C,EAASU,UACV,MAAM,IAAIrmC,MAUd,MAAMiI,EAASxD,KAAKsJ,MAAM4sB,GAAagL,EAASH,OAChD,GAAe,UAAXxqB,EAAoB,CACpB,GAAsB,OAAlB/S,EAAO+qD,QAAkB,CAEzB,MAAM7wD,EAAQ,IAAInC,MAAM,oBAExB,MADAmC,EAAM8F,OAASxD,KAAKC,UAAUuD,GACxB9F,EAEV,GAAI8F,EAAO9F,MAAO,CAEd,MAAMA,EAAQ,IAAInC,MAAMiI,EAAO9F,MAAMoC,SAAW,iBAOhD,MANI0D,EAAO9F,MAAMC,OACbD,EAAMC,KAAO6F,EAAO9F,MAAMC,MAE1B6F,EAAO9F,MAAMyT,OACbzT,EAAMyT,KAAO3N,EAAO9F,MAAMyT,MAExBzT,EAEV,OAAO8F,EAAOA,OAId,GAAqB,GAAjBA,EAAOm/B,SAAmC,qBAAnBn/B,EAAO1D,SAAqD,0BAAnB0D,EAAO1D,SACvE,OAAO0D,EAAOA,OAElB,GAAqB,GAAjBA,EAAOm/B,QAAiC,MAAlBn/B,EAAO1D,QAAiB,CAC9C,MAAMpC,EAAQ,IAAInC,MAAM,oBAKxB,MAJAmC,EAAM8F,OAASxD,KAAKC,UAAUuD,GAIxB9F,EAEV,OAAO8F,EAAOA,OAItBgtD,wBAAwB5xB,GACpB,MAAMp7B,EAAS,GACf,IAAK,IAAI5H,KAAOgjC,EAAa,CACzB,GAAwB,MAApBA,EAAYhjC,GACZ,SAEJ,IAAIzB,EAAQykC,EAAYhjC,GACZ,SAARA,GAA4B,IAAVzB,IAQlBA,EAJA,CAAEa,MAAM,EAAMq/C,UAAU,EAAMD,UAAU,EAAMqW,aAAa,EAAMhW,sBAAsB,EAAM5pB,OAAO,EAAM12B,OAAO,GAAOyB,GAChHiW,GAASF,GAAQxX,IAEZ,eAARyB,EACG,IAAMQ,KAAKksC,QAAQ1B,UAAU+T,WAAWxgD,GAAOK,KAAKoC,GACjD,aAAaA,EAAIiyB,0BAA0BjyB,EAAIg9C,YAAY15C,KAAK,cACxEA,KAAK,KAAO,IAGPyR,GAAQxX,GAEpBqJ,EAAO5H,GAAOzB,GAElB,OAAOqJ,EAEXktD,YAAY1uB,EAAKtkC,EAAOkhC,GAoEpB,MAAMlhC,EAEVzD,uBACI,OAAOmC,KAAKksC,QAEhBruC,eAAe+nC,GACX,OAAQA,EAAIzgC,QACR,IAAK,UACD,OAAOnF,KAAKksC,QAAQ/O,QACxB,IAAK,iBACD,OAAOn9B,KAAKqmC,MAAM,QAAS,CAAEkuB,OAAQ,oBACzC,IAAK,cACD,OAAOv0D,KAAKqmC,MAAM,QAAS,CAAEkuB,OAAQ,iBACzC,IAAK,aAED,OAAOv0D,KAAKqmC,MAAM,UAAW,CACzBkuB,OAAQ,UACR9hC,QAASmT,EAAInT,QACb22B,IAAKxjB,EAAIwc,WAEjB,IAAK,sBACD,OAAOpiD,KAAKqmC,MAAM,QAAS,CACvBkuB,OAAQ,0BACR9hC,QAASmT,EAAInT,QACb22B,IAAKxjB,EAAIwc,WAEjB,IAAK,UACD,OAAOpiD,KAAKqmC,MAAM,QAAS,CACvBkuB,OAAQ,cACR9hC,QAASmT,EAAInT,QACb22B,IAAKxjB,EAAIwc,WAEjB,IAAK,eACD,OAAOpiD,KAAKqmC,MAAM,QAAS,CACvBkuB,OAAQ,mBACR9hC,QAASmT,EAAInT,QACb4vB,SAAUzc,EAAIyc,SACd+G,IAAKxjB,EAAIwc,WAEjB,IAAK,kBACD,OAAOpiD,KAAKqmC,MAAM,QAAS,CACvBkuB,OAAQ,yBACR7jD,IAAKk1B,EAAI4sB,oBACV,GAAMvoB,OAAO3oC,GACLtB,KAAKs0D,YAAY1uB,EAAKtkC,EAAOskC,EAAI4sB,qBAEhD,IAAK,WACD,MAAI,aAAc5sB,EACP5lC,KAAKqmC,MAAM,QAAS,CACvBkuB,OAAQ,uBACRnL,IAAKxjB,EAAIwc,SACTiB,QAAUzd,EAAI2nB,oBAAsB,OAAS,UAG9C5lD,GAAO5D,WAAW,mDAAoD,wBAAyB,CAClGY,UAAW,wBAEnB,IAAK,iBACD,OAAO3E,KAAKqmC,MAAM,QAAS,CACvBkuB,OAAQ,2BACRC,OAAQ5uB,EAAInqB,OAEpB,IAAK,wBACD,OAAOzb,KAAKqmC,MAAM,QAAS,CACvBkuB,OAAQ,4BACRC,OAAQ5uB,EAAInqB,OAEpB,IAAK,OAAQ,CACT,GAAqB,WAAjBmqB,EAAIwc,SACJ,MAAM,IAAIjjD,MAAM,wDAEpB,MAAMs1D,EAAWz0D,KAAKo0D,wBAAwBxuB,EAAIpD,aAClDiyB,EAASt6C,OAAS,QAClBs6C,EAASF,OAAS,WAClB,IACI,aAAav0D,KAAKqmC,MAAM,QAASouB,GAAU,GAE/C,MAAOnzD,GACH,OAAOtB,KAAKs0D,YAAY1uB,EAAKtkC,EAAOskC,EAAIpD,cAGhD,IAAK,cAAe,CAChB,MAAMiyB,EAAWz0D,KAAKo0D,wBAAwBxuB,EAAIpD,aAClDiyB,EAASt6C,OAAS,QAClBs6C,EAASF,OAAS,kBAClB,IACI,aAAav0D,KAAKqmC,MAAM,QAASouB,GAAU,GAE/C,MAAOnzD,GACH,OAAOtB,KAAKs0D,YAAY1uB,EAAKtkC,EAAOskC,EAAIpD,eA2DpD,OAAOzzB,MAAM89C,SAASjnB,GAE1B/nC,mBACI,OAAOmC,KAAKksC,QAEhBruC,sBACI,MAA0B,cAAtBmC,KAAKksC,QAAQnpC,KACN,EAEJ+Q,kBAAkB9T,KAAKqmC,MAAM,QAAS,CAAEkuB,OAAQ,cAAeG,QAE1EpB,sBACI,MAAM3oB,EAAS3qC,KAAKksC,QAAQE,UAAUqnB,IACtC,OAAI9oB,EACQA,EAAOipB,kBAAoB5zD,KAAKmzD,OAEpCF,KAAkBjzD,KAAKmzD,QCpavC,MAAMwB,GAAmB,mCA4BlB,MAAMC,WAAuB5B,GAChCpyD,YAAY4oD,EAAW,YAAaqL,EAAWC,GAC3C,MAAM5oB,EAAU6Y,GAAQl5C,KAAK29C,GACZ,MAAbqL,IACAA,EAAYF,IAEK,MAAjBG,IACAA,EAAgB,MAGpB/lD,MADmB6lD,GAAexB,cAAclnB,EAAS2oB,EAAWC,GAClD5oB,GAClB9sC,EAAiBY,KAAM,CAAE60D,UAAAA,EAAWC,cAAAA,IAExC5J,aAAa/tB,GACT,IACI,OAAO,IAAIy3B,GAAez3B,EAASn9B,KAAK60D,UAAW70D,KAAK80D,eAE5D,MAAOxzD,IACP,OAAOyN,MAAMm8C,aAAa/tB,GAE9B52B,qBAAqB2lC,EAAS2oB,EAAWC,GACpB,MAAbD,IACAA,EAAYF,IAEK,MAAjBG,IACAA,EAAgB,MAEpB,MAAMlwB,EAAU,IAAI8B,GAAa,WAtDzC,SAAiB3jC,GACb,OAAQA,GACJ,IAAK,YACD,MAAO,oBACX,IAAK,UACD,MAAO,oBACX,IAAK,UACD,MAAO,oBACX,IAAK,QACD,MAAO,kBACX,IAAK,SACD,MAAO,mBACX,IAAK,QACD,MAAO,4BACX,IAAK,WACD,MAAO,2BACX,IAAK,WACD,MAAO,6BACX,IAAK,iBACD,MAAO,2BACX,IAAK,WACD,MAAO,6BACX,IAAK,mBACD,MAAO,6BAEf,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWjB,GA6BlBswD,CAAQnnB,EAAQnpC,YAAY8xD,KACzEjwB,EAAQkC,WAAY,EAChBguB,GACAlwB,EAAQqC,eAAe,GAAI6tB,GAQ/B,MAAO,CAAElwB,QAAAA,EAASqD,cANIpqC,MAAO+mC,EAASE,EAAUgoB,KACxC+H,IAAcF,IACdtF,GAAoB,mBAEjB,IAIfiE,sBACI,OAAQtzD,KAAK60D,YAAcF,ICpEnC,MAAMI,GAAgB,CAClBC,UAAW,2BACXC,QAAS,2BACTC,QAAS,2BACTC,OAAQ,4BAeZ,SAASC,GAAgBlpB,EAASmpB,EAAQC,EAAsBC,GAC5DA,IAAiBA,EACjB,IAAIC,GAAY,EACZC,EAAgBJ,EAgBpB,OAfqB,MAAjBI,GACAA,EAAgBV,GAAc7oB,EAAQnpC,MACjB,MAAjB0yD,GACA9tD,GAAO3D,mBAAmB,iDAAkD,gBAAiBqxD,GAEjGE,GAAe,EACfC,GAAY,GAEPC,IAAkBV,GAAc7oB,EAAQnpC,QAC7CwyD,GAAe,EACfC,GAAY,GAEY,MAAxBF,IACAA,EAAuB,MAEpB,CAAEG,cAAAA,EAAeH,qBAAAA,EAAsBE,UAAAA,EAAWD,aAAAA,GAEtD,MAAMG,WAAuB1C,GAChCpyD,YAAY4oD,EAAW,YAAa6L,EAAQM,EAAYC,GACpD,MAAM1pB,EAAU6Y,GAAQl5C,KAAK29C,IACvBiM,cAAEA,EAAaH,qBAAEA,EAAoBC,aAAEA,GAAiBH,GAAgBlpB,EAASmpB,EAAQM,EAAYC,GAE3G7mD,MADmB2mD,GAAetC,cAAclnB,EAASupB,EAAeH,EAAsBC,GAC5ErpB,GAClB9sC,EAAiBY,KAAM,CAAEy1D,cAAAA,EAAeH,qBAAAA,EAAsBC,aAAAA,IAElEhvD,qBAAqB2lC,EAASmpB,EAAQM,EAAYC,GAC9C,MAAMH,cAAEA,EAAaH,qBAAEA,EAAoBE,UAAEA,EAASD,aAAEA,GAAiBH,GAAgBlpB,EAASmpB,EAAQM,EAAYC,GACtH,IAAI7vB,EAAM,WA5ClB,SAAiBhjC,GACb,OAAQA,GACJ,IAAK,YACD,MAAO,mCACX,IAAK,UACD,MAAO,mCACX,IAAK,UACD,MAAO,mCACX,IAAK,SACD,MAAO,kCAEf,OAAO4E,GAAO3D,mBAAmB,sBAAuB,UAAWjB,GAiCzCswD,CAAQnnB,EAAQnpC,YAClCwyD,IACAxvB,GAAO,OAEXA,GAAO0vB,EACP,MAAM7wB,EAAU,IAAI8B,GAAaX,GACjCnB,EAAQkC,WAAY,EAChBwuB,GACA1wB,EAAQqC,eAAe,GAAIquB,GAQ/B,MAAO,CAAE1wB,QAAAA,EAASqD,cANIpqC,MAAO+mC,EAASE,EAAUgoB,KACxC0I,GACAnG,GAAoB,mBAEjB,IAIfiE,sBACI,OAAQtzD,KAAKy1D,gBAAkBV,GAAc/0D,KAAKksC,QAAQnpC,OC5ElE,IAWI8yD,GAA6BC,GAA2BC,GAAsCC,GAAiCC,GAA6BC,GAA+BC,GAA+BC,GAX1Nr2D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IASxF,MAAM0Q,GAAO5K,OAAO,KACdumC,GAAOvmC,OAAO,KAIpB,SAASwhC,KAAY,OAAO,IAAK1sB,MAAQ0sB,UAEzC,MAAM8uB,GAAgB,CAAEC,aAAc,IAAKC,SAAU,EAAGC,OAAQ,GAC1DC,GAAe,CACjB9V,aAAc,EAAG+V,SAAU,EAAGC,cAAe,EAAGC,eAAgB,EAChEC,WAAY,EAAGC,kBAAmB,EAAGC,gBAAiB,EAAGC,MAAO,EAChExN,SAAU,KAAMyN,cAAe,KAAMC,WAAY,GAmBrD,SAAS10D,GAAU0pC,EAASnuC,EAAO6nC,GAC/B,OAAQA,EAAIzgC,QACR,IAAK,UAIL,IAAK,cAEL,IAAK,aAmBL,IAAK,cACD,OAAOwC,GAAO1B,UAAUlI,GAAOyM,WAxBnC,IAAK,iBAML,IAAK,sBACD,OAAO7C,GAAO7B,UAAU/H,GAAOyM,WACnC,IAAK,UAEL,IAAK,eAWL,IAAK,OACD,OAAO+K,GAAQxX,GAVnB,IAAK,WACD,OAAI6nC,EAAI2nB,oBACG3pD,KAAKC,UAAUqoC,EAAQ1B,UAAU2Y,sBAAsBplD,IAE3D6F,KAAKC,UAAUqoC,EAAQ1B,UAAUvX,MAAMl1B,IAClD,IAAK,iBACD,OAAO6F,KAAKC,UAAUqoC,EAAQ1B,UAAU0Y,oBAAoBnlD,IAChE,IAAK,wBACD,OAAO6F,KAAKC,UAAUqoC,EAAQ1B,UAAU8Y,QAAQvlD,IAKpD,IAAK,UACD,OAAO6F,KAAKC,UAAU9F,EAAMK,KAAKK,GAAMytC,EAAQ1B,UAAU/iC,IAAIhJ,MAErE,OAAOkJ,GAAO5D,WAAW,qBAAsB,wBAAyB,CACpEY,UAAW,YAAYf,KAAKC,UAAU+hC,EAAIzgC,aAKlD,SAASgyD,GAAYC,EAAQ7G,GACzB,MAAM8G,EAAQ,IAAI7/C,IAClB,IAAK,MAAMpQ,OAAEA,EAAMkwD,OAAEA,EAAMd,OAAEA,KAAYjG,EAAS,CAC9C,MAAMxxD,EAAIs4D,EAAM32D,IAAI42D,IAAW,CAAElwD,OAAAA,EAAQovD,OAAQ,GACjDz3D,EAAEy3D,QAAUA,EACZa,EAAM72D,IAAI82D,EAAQv4D,GAEtB,IACIw4D,EADAC,EAAa,EAEjB,IAAK,MAAMhB,OAAEA,EAAMpvD,OAAEA,KAAYiwD,EAAM/3D,SAC/Bk3D,GAAUY,GAAUZ,EAASgB,IAC7BA,EAAahB,EACbe,EAAanwD,GAGrB,OAAOmwD,EAoBJ,MAAME,WAAyBlO,GAClC3oD,YAAY82D,EAAWxrB,GACnBn9B,MAAMm9B,GACN2pB,GAA4BryD,IAAIxD,MAChC81D,GAA0Bt1D,IAAIR,UAAM,GACpC+1D,GAAqCv1D,IAAIR,UAAM,GAC/CD,GAAuBC,KAAM81D,GAA2B4B,EAAUt5D,KAAK8Q,GAC/DA,aAAaq6C,GACNtrD,OAAO8N,OAAO,CAAEi+B,SAAU96B,GAAKmnD,GAAeI,IAG9Cx4D,OAAO8N,OAAO,GAAIsqD,GAAennD,EAAGunD,MAE/C,KACJ12D,GAAuBC,KAAM+1D,GAAsC,KAAM,KACzE/1D,KAAKo3D,OAAS,EACdp3D,KAAK23D,YAAc,EACnB33D,KAAK43D,aAAe,EAChB53D,KAAKo3D,OAAS32D,GAAuBT,KAAM81D,GAA2B,KAAKv3D,QAAO,CAACqU,EAAG3F,IAAO2F,EAAI3F,EAAEupD,QAAS,IAC5G7uD,GAAO3D,mBAAmB,gCAAiC,SAAUhE,KAAKo3D,QAGlFv5D,uBACI,OAAOknD,GAAQl5C,KAAKlE,GAAO1B,gBAAgBjG,KAAK6sD,SAAS,CAAE1nD,OAAQ,cAAeoD,SAEtF2jD,eAAeF,GACX,MAAM,IAAI7sD,MAAM,SAEpBtB,eAAe+nC,SACLnlC,GAAuBT,KAAM61D,GAA6B,IAAKK,IAA+B31D,KAAKP,MAEzG,MAAM63D,EAAU,IAAIxvD,IACpB,IAAK,IAAIpJ,EAAI,EAAGA,EAAIe,KAAKo3D,OAAQn4D,IAC7BwB,GAAuBT,KAAM61D,GAA6B,IAAKI,IAA6B11D,KAAKP,KAAM63D,EAASjyB,GAEpH,MAAMx+B,EAAS3G,GAAuBT,KAAM61D,GAA6B,IAAKO,IAAiC71D,KAAKP,KAAM63D,EAASjyB,GACnI,IAAK,MAAMkyB,KAAUD,EACjBC,EAAO5yB,MAAO,EAElB,OAAO99B,GAGf0uD,GAA4B,IAAIr0D,QAAWs0D,GAAuC,IAAIt0D,QAAWo0D,GAA8B,IAAIjvD,QAAWovD,GAAkC,SAAyC+B,GAErN,MAAMC,EAAav3D,GAAuBT,KAAM81D,GAA2B,KAAKvsD,SCrK7E,SAAiB8uC,GACpB,IAAK,IAAIp5C,EAAIo5C,EAAMn5C,OAAS,EAAGD,EAAI,EAAGA,IAAK,CACvC,MAAMgpB,EAAIlhB,KAAKC,MAAMD,KAAKwhC,UAAYtpC,EAAI,IACpCud,EAAM67B,EAAMp5C,GAClBo5C,EAAMp5C,GAAKo5C,EAAMpwB,GACjBowB,EAAMpwB,GAAKzL,GDiKfy7C,CAAQD,GACRA,EAAWt5B,MAAK,CAAC9rB,EAAGC,IAAOA,EAAE0jD,SAAW3jD,EAAE2jD,WAC1C,IAAK,MAAM2B,KAAUF,EACjB,IAAiC,IAA7BD,EAAQjzD,QAAQozD,GAChB,OAAOA,EAGf,OAAO,MACRjC,GAA8B,SAAqC4B,EAASjyB,GAC3E,MAAMsyB,EAASz3D,GAAuBT,KAAM61D,GAA6B,IAAKG,IAAiCz1D,KAAKP,KAAMyN,MAAM5B,KAAKgsD,GAASz5D,KAAK+xB,GAAMA,EAAE+nC,UAC3J,GAAc,MAAVA,EACA,OAAO,KAEX,MAAM9wD,EAAS,GACT0wD,EAAS,CACXI,OAAAA,EAAQ9wD,OAAAA,EAAQ+wD,SAAS,EAAOjzB,MAAM,EACtC0nB,QAAS,KAAMwL,QAAS,MAEtBt9C,EAAMysB,KAuBZ,OAtBAuwB,EAAOlL,QAAU,WACb,IACIsL,EAAOxB,WACPtvD,EAAOA,aAAe8wD,EAAOluB,SAAS6iB,SAASjnB,GAEnD,MAAOtkC,GACH42D,EAAOtB,iBACPxvD,EAAO9F,MAAQA,EAEfw2D,EAAO5yB,MACPgzB,EAAOvB,gBAEX,MAAM0B,EAAM9wB,KAAYzsB,EACxBo9C,EAAOhB,YAAcmB,EACrBH,EAAOnB,gBAAkB,IAAOmB,EAAOnB,gBAAkB,IAAOsB,EAChEP,EAAOlL,QAAU,MAfJ,GAiBjBkL,EAAOM,QAAU,WAtLrB,IAAe9wB,QAAAA,EAuLK4wB,EAAO5B,aAtLhB,IAAIp4D,SAASI,IAAcic,WAAWjc,EAASgpC,OAuLlDwwB,EAAOM,QAAU,MAFJ,GAIjBP,EAAQr0D,IAAIs0D,GACLA,GACR5B,GAGHr4D,iBACI,IAAIy6D,EAAc73D,GAAuBT,KAAM+1D,GAAsC,KACrF,IAAKuC,EAAa,CACd,MAAM5qD,EAAW,GACjBjN,GAAuBT,KAAM81D,GAA2B,KAAKxtD,SAAS4vD,IAClExqD,EAAS9K,KAzLrB/E,eAA2Bq6D,EAAQvX,GAC/B,KAAOuX,EAAOvX,YAAc,GAAKuX,EAAOvX,YAAcA,GAC7CuX,EAAOjB,gBACRiB,EAAOjB,cAAgB,WACnB,MAAMtW,QAAoBuX,EAAOluB,SAAS0X,iBACtCf,EAAcuX,EAAOvX,cACrBuX,EAAOvX,YAAcA,GAEzBuX,EAAOjB,cAAgB,MALJ,UAQrBiB,EAAOjB,cACbiB,EAAOrB,YA6KW0B,CAAYL,EAAQ,IAClCxqD,EAAS9K,KAAK,WACVs1D,EAAO1O,eAAiB0O,EAAOluB,SAASO,cAD9B,OAIlBxqC,GAAuBC,KAAM+1D,GAAsCuC,EAAc,iBAEvEp6D,QAAQC,IAAIuP,GAElB,IAAIyvB,EAAU,KACd,IAAK,MAAM+6B,KAAUz3D,GAAuBT,KAAM81D,GAA2B,KAAM,CAC/E,MAAM5pB,EAAWgsB,EAAe,SACjB,MAAX/6B,EACAA,EAAU+O,EAAQ/O,QAEb+O,EAAQ/O,UAAYA,GACzBx1B,GAAO5D,WAAW,6CAA8C,wBAAyB,CACrFY,UAAW,2BAZsD,GAgB3E,WAEJ2zD,GACPnC,GAAgCt4D,eAA6Cg6D,EAASjyB,GAErF,MAAM2qB,EAAU,GAChB,IAAK,MAAMuH,KAAUD,EACjB,GAAI,WAAYC,EAAO1wD,OAAQ,CAC3B,MAAMA,EAAS0wD,EAAO1wD,OAAOA,OAC7BmpD,EAAQ3tD,KAAK,CACTwE,OAAAA,EACAkwD,OAAQ90D,GAAWs1D,EAAOI,OAAe,SAAG9wD,EAAQw+B,GACpD4wB,OAAQsB,EAAOI,OAAO1B,SAKlC,KAAIjG,EAAQhyD,QAAO,CAACqU,EAAGud,IAAOvd,EAAIud,EAAEqmC,QAAS,GAAKx2D,KAAKo3D,QAAvD,CAGA,OAAQxxB,EAAIzgC,QACR,IAAK,iBAyBL,IAAK,kBACD,MAAM,IAAIhG,MAAM,QAvBpB,IAAK,cACL,IAAK,cACD,OA1JZ,SAAmBoxD,GAEf,MAAMjxD,EAASixD,EAAQnyD,KAAK+xB,GAAMpqB,OAAOoqB,EAAE/oB,UAC3C9H,EAAOo/B,MAAK,CAAC9rB,EAAGC,IAAQD,EAAIC,GAAM,EAAKA,EAAID,EAAK,EAAI,IACpD,MAAM4lD,EAAMl5D,EAAOJ,OAAS,EAE5B,OAAII,EAAOJ,OAAS,EACTI,EAAOk5D,IAGVl5D,EAAOk5D,EAAM,GAAKl5D,EAAOk5D,GAAO7nD,IAAQ27B,GAgJjCmsB,CAAUlI,GACrB,IAAK,WAGD,MAAI,aAAc3qB,GAAwB,YAAjBA,EAAIwc,SAClBmO,EAAQ,GAAGnpD,OAEf+vD,GAAYn3D,KAAKo3D,OAAQ7G,GACpC,IAAK,UACL,IAAK,aACL,IAAK,sBACL,IAAK,UACL,IAAK,eACL,IAAK,iBACL,IAAK,wBACL,IAAK,UAEL,IAAK,OAED,OAAO4G,GAAYn3D,KAAKo3D,OAAQ7G,GAIxC,OAAO5oD,GAAO5D,WAAW,qBAAsB,wBAAyB,CACpEY,UAAW,YAAYf,KAAKC,UAAU+hC,EAAIzgC,eAE/CixD,GAAkCv4D,eAAeu4D,EAAgCyB,EAASjyB,GACzF,GAAqB,IAAjBiyB,EAAQ3rD,KACR,MAAM,IAAI/M,MAAM,gBAIpB,MAAMu5D,EAAc,GAGpB,IAAIC,EAAa,EACjB,IAAK,MAAMb,KAAUD,EAUbC,EAAOlL,SACP8L,EAAY91D,KAAKk1D,EAAOlL,SAGxBkL,EAAOM,QACPM,EAAY91D,KAAKk1D,EAAOM,SAIxBN,EAAOK,UAIXL,EAAOK,SAAU,EACjBQ,KAaJ,MAAM56D,QAAc0C,GAAuBT,KAAM61D,GAA6B,IAAKM,IAA+B51D,KAAKP,KAAM63D,EAASjyB,GACtI,QAAclmC,IAAV3B,EAAqB,CACrB,GAAIA,aAAiBoB,MACjB,MAAMpB,EAEV,OAAOA,EAIX,IAAK,IAAIkB,EAAI,EAAGA,EAAI05D,EAAY15D,IAC5BwB,GAAuBT,KAAM61D,GAA6B,IAAKI,IAA6B11D,KAAKP,KAAM63D,EAASjyB,GAEpH,GAA2B,IAAvB8yB,EAAYx5D,OACZ,MAAM,IAAIC,MAAM,kBAMpB,aADMjB,QAAQ06D,KAAKF,SACNj4D,GAAuBT,KAAM61D,GAA6B,IAAKO,GAAiC71D,KAAKP,KAAM63D,EAASjyB,IEtVrI,MAAMizB,GAbN,WACI,GAAoB,oBAAT5yC,KACP,OAAOA,KAEX,GAAsB,oBAAXC,OACP,OAAOA,OAEX,GAAsB,oBAAXC,OACP,OAAOA,OAEX,MAAM,IAAIhnB,MAAM,kCAGDinB,GAAY0yC,UCH/B,IAWIC,GAA4BC,GAA0BC,GAA4BC,GAA0BC,GAA+BC,GAAkCC,GAAkCC,GAA2BC,GAAuBC,GAAsBC,GAXvR15D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAMjF,MAAMy5D,GACT94D,YAAYopC,EAAUjpC,GAClBg4D,GAA2Bv4D,IAAIR,UAAM,GACrCg5D,GAAyBx4D,IAAIR,UAAM,GACnCi5D,GAA2Bz4D,IAAIR,UAAM,GACrCk5D,GAAyB14D,IAAIR,UAAM,GACnCm5D,GAA8B34D,IAAIR,UAAM,GACxCD,GAAuBC,KAAM+4D,GAA4B/uB,EAAU,KACnEjqC,GAAuBC,KAAMg5D,GAA0Bp1D,KAAKC,UAAU9C,GAAS,KAC/EhB,GAAuBC,KAAMi5D,GAA4B,KAAM,KAC/Dl5D,GAAuBC,KAAMk5D,GAA0B,KAAM,KAC7Dn5D,GAAuBC,KAAMm5D,GAA+B,KAAM,KAElEp4D,aAAW,OAAO6C,KAAKsJ,MAAMzM,GAAuBT,KAAMg5D,GAA0B,MACxFjjD,QACIhW,GAAuBC,KAAMi5D,GAA4Bx4D,GAAuBT,KAAM+4D,GAA4B,KAAK3I,KAAK,gBAAiBpwD,KAAKe,QAAQqN,MAAM+hD,IAE5J1vD,GAAuBT,KAAM+4D,GAA4B,KAAKY,UAAUxJ,EAAUnwD,MAC3EmwD,KACP,KAERhJ,OACK1mD,GAAuBT,KAAMi5D,GAA4B,KAAM7qD,MAAM+hD,IAClE1vD,GAAuBT,KAAM+4D,GAA4B,KAAK3I,KAAK,kBAAmB,CAACD,OAE3FpwD,GAAuBC,KAAMi5D,GAA4B,KAAM,KAInE5R,MAAMC,GACGA,GACD3/C,GAAO5D,WAAW,mEAAoE,wBAAyB,CAC3GY,UAAW,iBAGnB5E,GAAuBC,KAAMk5D,KAA4B5R,EAAiB,KAE9EC,SACIxnD,GAAuBC,KAAMk5D,GAA0B,KAAM,KAEjEU,eAAel2D,GACX,GAAqE,MAAjEjD,GAAuBT,KAAMi5D,GAA4B,MAGO,OAAhEx4D,GAAuBT,KAAMk5D,GAA0B,KAAe,CACtE,IAAIW,EAAcp5D,GAAuBT,KAAMm5D,GAA+B,KAE1EU,EADe,MAAfA,EACc75D,KAAK85D,MAAMr5D,GAAuBT,KAAM+4D,GAA4B,KAAMr1D,GAG1Em2D,EAAYzrD,MAAKvQ,gBACrBmC,KAAK85D,MAAMr5D,GAAuBT,KAAM+4D,GAA4B,KAAMr1D,MAGxF3D,GAAuBC,KAAMm5D,GAA+BU,EAAYzrD,MAAK,KACrE3N,GAAuBT,KAAMm5D,GAA+B,OAASU,GACrE95D,GAAuBC,KAAMm5D,GAA+B,KAAM,QAEtE,MAGZt7D,YAAYmsC,EAAUtmC,GAClB,MAAM,IAAIvE,MAAM,4CAGxB45D,GAA6B,IAAIt3D,QAAWu3D,GAA2B,IAAIv3D,QAAWw3D,GAA6B,IAAIx3D,QAAWy3D,GAA2B,IAAIz3D,QAAW03D,GAAgC,IAAI13D,QACzM,MAAMs4D,WAA8BL,GACvC94D,YAAYopC,GACRj7B,MAAMi7B,EAAU,CAAC,aAErBnsC,YAAYmsC,EAAUtmC,GAClBsmC,EAASwd,KAAK,QAASlgD,SAAS5D,EAAQ+0C,UAGzC,MAAMuhB,WAAgCN,GACzC94D,YAAYopC,GACRj7B,MAAMi7B,EAAU,CAAC,2BAErBnsC,YAAYmsC,EAAUtmC,GAClBsmC,EAASwd,KAAK,UAAW9jD,IAG1B,MAAMu2D,WAA8BP,GACvC94D,YAAYopC,EAAUjpC,GAClBgO,MAAMi7B,EAAU,CAAC,OAAQjpC,IACzBq4D,GAAiC54D,IAAIR,UAAM,GAC3Cq5D,GAAiC74D,IAAIR,UAAM,GAC3CD,GAAuBC,KAAMo5D,GAAkCx1D,KAAKC,UAAU9C,GAAS,KACvFhB,GAAuBC,KAAMq5D,GAAkCrvB,EAASO,aAAan8B,MAAM89B,GAAYA,EAAQ1B,YAAY,KAE3H0vB,gBAAc,OAAOt2D,KAAKsJ,MAAMzM,GAAuBT,KAAMo5D,GAAkC,MACnGv7D,YAAYmsC,EAAUtmC,GAClB,MAAM8mC,QAAkB/pC,GAAuBT,KAAMq5D,GAAkC,KACvFrvB,EAASwd,KAAK/mD,GAAuBT,KAAMo5D,GAAkC,KAAM5uB,EAAU/iC,IAAI/D,EAASsmC,KAGlHovB,GAAmC,IAAI33D,QAAW43D,GAAmC,IAAI53D,QAClF,MAAM04D,WAAuBpI,GAChCnxD,YAAYsrC,GACRn9B,MAAMm9B,GACNotB,GAA0B94D,IAAIR,UAAM,GACpCu5D,GAAsB/4D,IAAIR,UAAM,GAEhCw5D,GAAqBh5D,IAAIR,UAAM,GAG/By5D,GAAwBj5D,IAAIR,UAAM,GAClCD,GAAuBC,KAAMs5D,GAA2B,IAAI9hD,IAAO,KACnEzX,GAAuBC,KAAMu5D,IAAuB,EAAO,KAC3Dx5D,GAAuBC,KAAMw5D,GAAsB,IAAIhiD,IAAO,KAC9DzX,GAAuBC,KAAMy5D,GAAyB,IAAIjiD,IAAO,KAErE00C,eAAeF,GACX,OAAQA,EAAIptD,MACR,IAAK,QACD,OAAO,IAAIoqD,GAAoB,SACnC,IAAK,QACD,OAAO,IAAI+Q,GAAsB/5D,MACrC,IAAK,UACD,OAAO,IAAIg6D,GAAwBh6D,MACvC,IAAK,QACD,OAAO,IAAIi6D,GAAsBj6D,KAAMgsD,EAAIjrD,QAC/C,IAAK,SAGD,GAA0B,aAAtBirD,EAAIjrD,OAAOw/C,OACX,OAAO,IAAIyI,GAAoB,YAG3C,OAAOj6C,MAAMm9C,eAAeF,GAEhC2N,UAAUxJ,EAAUlE,GAChBxrD,GAAuBT,KAAMw5D,GAAsB,KAAKh5D,IAAI2vD,EAAUlE,GACtE,MAAMmO,EAAU35D,GAAuBT,KAAMy5D,GAAyB,KAAK/4D,IAAIyvD,GAC/E,GAAIiK,EAAS,CACT,IAAK,MAAM12D,KAAW02D,EAClBnO,EAAW2N,eAAel2D,GAE9BjD,GAAuBT,KAAMy5D,GAAyB,KAAKj7B,OAAO2xB,IAG1EtyD,WAAWsH,EAAQ8J,GACf,MAAMykB,EAAU1zB,KAAKkyD,eAAe/sD,EAAQ8J,GACtCorD,EAAU,IAAIn8D,SAAQ,CAACI,EAASgtD,KAClC7qD,GAAuBT,KAAMs5D,GAA2B,KAAK94D,IAAIkzB,EAAQsI,GAAI,CAAEtI,QAAAA,EAASp1B,QAAAA,EAASgtD,OAAAA,OAKrG,OAHI7qD,GAAuBT,KAAMu5D,GAAuB,YAC9Cv5D,KAAKs6D,OAAO12D,KAAKC,UAAU6vB,UAExB2mC,EAGjBx8D,eACI,IAAI4C,GAAuBT,KAAMu5D,GAAuB,KAAxD,CAGAx5D,GAAuBC,KAAMu5D,IAAuB,EAAM,KAC1D,IAAK,MAAM7lC,QAAEA,KAAajzB,GAAuBT,KAAMs5D,GAA2B,KAAKh6D,eAC7EU,KAAKs6D,OAAO12D,KAAKC,UAAU6vB,KAIzC71B,sBAAsB6F,GAClB,MAAM0D,EAASxD,KAAKsJ,MAAMxJ,GAC1B,GAAI,OAAQ0D,EAAQ,CAChB,MAAMizD,EAAU55D,GAAuBT,KAAMs5D,GAA2B,KAAK54D,IAAI0G,EAAO40B,IACxF,IAAKq+B,EAED,YADA7yD,QAAQC,IAAI,6CAIhB,GADAhH,GAAuBT,KAAMs5D,GAA2B,KAAK96B,OAAOp3B,EAAO40B,IACvE,UAAW50B,EAAQ,CACnB,MAAM1D,QAAEA,EAAOnC,KAAEA,EAAIwT,KAAEA,GAAS3N,EAAO9F,MACjCA,EAAQqG,GAAOlE,UAAUC,GAAW,gBAAiB,eAAgB,CACvEkhC,QAAS,MAAMhhC,KAAKC,UAAUw2D,EAAQ3mC,WACtCxxB,KAAM,CAAEX,KAAAA,EAAMwT,KAAAA,KAElBslD,EAAQ/O,OAAOhqD,QAGf+4D,EAAQ/7D,QAAQ8I,EAAOA,aAG1B,GAAsB,qBAAlBA,EAAOjC,OAA+B,CAC3C,MAAMgrD,EAAW/oD,EAAO6H,OAAOw+C,aACzBxB,EAAaxrD,GAAuBT,KAAMw5D,GAAsB,KAAK94D,IAAIyvD,GAC/E,GAAIlE,EACAA,EAAW2N,eAAexyD,EAAO6H,OAAO7H,YAEvC,CACD,IAAIgzD,EAAU35D,GAAuBT,KAAMy5D,GAAyB,KAAK/4D,IAAIyvD,GAC9D,MAAXiK,IACAA,EAAU,GACV35D,GAAuBT,KAAMy5D,GAAyB,KAAKj5D,IAAI2vD,EAAUiK,IAE7EA,EAAQx3D,KAAKwE,EAAO6H,OAAO7H,UAIvCvJ,aAAa6F,GACT,MAAM,IAAIvE,MAAM,mCAGxBm6D,GAA4B,IAAI73D,QAAW83D,GAAwB,IAAI93D,QAAW+3D,GAAuB,IAAI/3D,QAAWg4D,GAA0B,IAAIh4D,QCpOtJ,IAWI84D,GAXAx6D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAKjF,MAAMu6D,WAA0BL,GACnCv5D,YAAYmlC,EAAKmG,GACbn9B,MAAMm9B,GACNquB,GAA6B/5D,IAAIR,UAAM,GAEnCD,GAAuBC,KAAMu6D,GADZ,iBAAT,EACmD,IAAIzB,GAAU/yB,GAGdA,EAHoB,KAKnF/lC,KAAKy6D,UAAUC,OAAS,KACpB16D,KAAK26D,UAET36D,KAAKy6D,UAAUG,UAAal3D,IACxB1D,KAAK66D,gBAAgBn3D,EAAQqR,OAGjC0lD,gBAAc,OAAOh6D,GAAuBT,KAAMu6D,GAA8B,KACpF18D,aAAa6F,GACT1D,KAAKy6D,UAAUrK,KAAK1sD,IAG5B62D,GAA+B,IAAI94D,QCmC9B,MAACsjD,GAnEN,SAA8BA,GAE1B,SAAS+V,EAAY/3D,EAAMo6B,EAAS3H,GAChC,MAAMpO,EAAO,WACT,MAAM8kB,EAAU,IAAI6Y,EAAQhiD,EAAMo6B,GAQlC,GAN0B,MAAtB3H,EAAQswB,YACR5Z,EAAQ+Y,aAAa,IAAIT,GAAU,KAAMhvB,EAAQswB,aAEjDtwB,EAAQmvB,aACRzY,EAAQ+Y,aAAa,IAAIP,GAAqBlvB,EAAQmvB,cAEtDnvB,EAAQulC,UAAW,CACnB,MAAMh1B,IAAEA,EAAGotB,OAAEA,GAAW39B,EAAQulC,UAChC7uB,EAAQ+Y,aAAa,IAAIyO,GAAgB3tB,EAAKotB,IAGlD,OADAjnB,EAAQ+Y,aAAa,IAAId,IAClBjY,GAGX6Y,EAAQ59B,SAASpkB,EAAMqkB,GACvB29B,EAAQ59B,SAASgW,EAAS/V,GACtBoO,EAAQquB,UACRruB,EAAQquB,SAASv7C,SAASvF,IACtBgiD,EAAQ59B,SAASpkB,EAAMqkB,MAyCnC,OArCA0zC,EAAY,YAAa,EAAG,CAAEhV,WAAY,EAAGjC,SAAU,CAAC,aACxDiX,EAAY,UAAW,EAAG,CAAEhV,WAAY,IACxCgV,EAAY,UAAW,EAAG,CAAEhV,WAAY,IACxCgV,EAAY,SAAU,EAAG,CAAEhV,WAAY,IACvCgV,EAAY,QAAS,GAAI,CAAEhV,WAAY,KACvCgV,EAAY,UAAW,GAAI,IAC3BA,EAAY,eAAgB,EAAG,IAC/BA,EAAY,OAAQ,IAAK,CAAEhV,WAAY,IAEvCgV,EAAY,QAAS,IAAK,CACtBhV,WAAY,EACZnB,YAAa,KACboW,UAAW,CACP5H,OAAQ,qCACRptB,IAAK,kCAGb+0B,EAAY,cAAe,MAAO,CAC9BnW,YAAa,KACboW,UAAW,CACP5H,OAAQ,qCACRptB,IAAK,0CAGb+0B,EAAY,MAAO,GAAI,CACnBhV,WAAY,EACZiV,UAAW,CACP5H,OAAQ,qCACRptB,IAAK,4BAGb+0B,EAAY,OAAQ,GAAI,CACpBC,UAAW,CACP5H,OAAQ,qCACRptB,IAAK,oCAGNgf,EAEKiW,CAAqBC,ICvE/BC,QAAoBx7D,ECA1B,IAWIy7D,GAAuCC,GAXvCr7D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAKjF,MAAMo7D,WAAiB7a,GAC1B5/C,YAAY6G,EAAK6zD,EAAOl7B,GACpBrxB,MAAMtH,EAAKA,EAAIuiC,UAEf5qC,EAAiBY,KAAM,CAAEkG,KADZo1D,EAAMp4B,eAAe9C,EAAU34B,EAAIsN,KAAMtN,EAAIo7B,QAC3BzC,SAAAA,EAAUm7B,UAAWD,IAEpDE,gBAAc,OAAOx7D,KAAKogC,SAASr9B,KACnC04D,qBAAmB,OAAOz7D,KAAKogC,SAASvzB,UAEzC,MAAM6uD,WAAmCza,GAC5CrgD,YAAY06D,EAAOtxB,EAAUzV,GACzBxlB,MAAMwlB,EAAIyV,GACVmxB,GAAsC36D,IAAIR,UAAM,GAChDD,GAAuBC,KAAMm7D,GAAuCG,EAAO,KAE3Epa,WACA,OAAOnyC,MAAMmyC,KAAK9iD,KAAKqJ,IACnB,MAAM24B,EAAW34B,EAAIo7B,OAAO3jC,OAASuB,GAAuBT,KAAMm7D,GAAuC,KAAK55B,SAAS95B,EAAIo7B,OAAO,IAAM,KACxI,OAAIzC,EACO,IAAIi7B,GAAS5zD,EAAKhH,GAAuBT,KAAMm7D,GAAuC,KAAM/6B,GAG5F34B,MAKvB0zD,GAAwC,IAAI15D,QACrC,MAAMk6D,WAAoC7Z,GAC7ClhD,YAAY06D,EAAOtxB,EAAUzV,GACzBxlB,MAAMwlB,EAAIyV,GACVoxB,GAAuC56D,IAAIR,UAAM,GACjDD,GAAuBC,KAAMo7D,GAAwCE,EAAO,KAEhFz9D,WAAWkkD,GACP,MAAMuB,QAAgBv0C,MAAM6sD,OAC5B,OAAe,MAAXtY,EACO,KAEJ,IAAIoY,GAA2Bj7D,GAAuBT,KAAMo7D,GAAwC,KAAMp7D,KAAKgqC,SAAUsZ,IAGxI8X,GAAyC,IAAI35D,QACtC,MAAMo6D,WAA6Bl7D,EACtCC,YAAYk7D,EAAUh7D,EAAUC,EAAQq/B,EAAU27B,GAC9ChtD,MAAM+sD,EAAUh7D,EAAUC,GAC1B,MAAM0G,EAAM,IAAI4zD,GAASU,EAAMD,EAASP,UAAWn7B,GAEnDhhC,EAAiBY,KAAM,CAAEkG,KADZ41D,EAASP,UAAUr4B,eAAe9C,EAAU34B,EAAIsN,KAAMtN,EAAIo7B,QACxCzC,SAAAA,EAAU34B,IAAAA,IAEzC+zD,gBACA,OAAOx7D,KAAKogC,SAASr9B,KAErB04D,qBACA,OAAOz7D,KAAKogC,SAASvzB,SAEzBhP,iBACI,aAAamC,KAAKyH,IAAIq5C,WAE1BjjD,uBACI,aAAamC,KAAKyH,IAAI04C,iBAE1BtiD,8BACI,aAAamC,KAAKyH,IAAIs5C,yBC7EvB,MCEMp5C,GAAS,IAAIrE,EDFH,wCEAvB,IAWI04D,GAXAj8D,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAoBxF,SAASg8D,GAAWl+D,GAChB,OAAQA,GAAwC,mBAAvBA,EAAiB,YAa9C,MAAMm+D,GACFt7D,YAAYk7D,EAAU17B,EAAUl6B,GAG5B,GAFA81D,GAA4Bx7D,IAAIR,UAAM,GACtCZ,EAAiBY,KAAM,CAAEogC,SAAAA,IACrBA,EAAS9xB,OAAOpP,OAASgH,EAAKhH,OAC9B,MAAM,IAAIC,MAAM,sBAGpB,MAAM24D,EAASqE,GAAUL,EAAShE,OAAQ,eACpC7iC,EAAWgnC,GAAWnE,GAAUA,EAAS,KAC/C/3D,GAAuBC,KAAMg8D,GAA6B,iBACtD,MAAMI,QAAqBl+D,QAAQC,IAAIiiC,EAAS9xB,OAAOlQ,KAAI,CAAC+P,EAAOzP,IACxDyP,EAAMkuD,UAAUn2D,EAAKxH,IAAQ,CAACE,EAAMb,IAC1B,YAATa,EACOo2B,GAAej3B,EAAOk3B,GAE1Bl3B,OAGf,OAAO+9D,EAASP,UAAU54B,mBAAmBvC,EAAUg8B,GATD,GAUpD,KAEVE,iBACI,OAAO77D,GAAuBT,KAAMg8D,GAA6B,MAazE,SAASG,GAAUp+D,EAAOw+D,GACtB,OAAa,MAATx+D,EACO,KAEqB,mBAApBA,EAAMw+D,GACPx+D,EAEPA,EAAMisC,UAAiD,mBAA7BjsC,EAAMisC,SAASuyB,GAClCx+D,EAAMisC,SAEV,KAEJnsC,eAAe2+D,GAAcC,GAEhC,MAAMC,E1B3CH,SAAqB92B,GACxB,MAAMx+B,EAAS,GAEXw+B,EAAI95B,KACJ1E,EAAO0E,GAAK85B,EAAI95B,IAEhB85B,EAAI/5B,OACJzE,EAAOyE,KAAO+5B,EAAI/5B,MAElB+5B,EAAI7wB,OACJ3N,EAAO2N,KAAOQ,GAAQqwB,EAAI7wB,OAE9B,MAAM4nD,EAAa,qEAAqE79D,MAAM,KAC9F,IAAK,MAAMU,KAAOm9D,EACRn9D,KAAOomC,GAAoB,MAAZA,EAAIpmC,KAGzB4H,EAAO5H,GAAOmI,GAAO1B,UAAU2/B,EAAIpmC,GAAM,WAAWA,MAExD,MAAMo9D,EAAa,aAAa99D,MAAM,KACtC,IAAK,MAAMU,KAAOo9D,EACRp9D,KAAOomC,GAAoB,MAAZA,EAAIpmC,KAGzB4H,EAAO5H,GAAOmI,GAAO7B,UAAU8/B,EAAIpmC,GAAM,WAAWA,MAcxD,OAZIomC,EAAI2Y,aACJn3C,EAAOm3C,WAAab,GAAc9X,EAAI2Y,aAEtC,aAAc3Y,IACdx+B,EAAOg7C,SAAWxc,EAAIwc,UAEtB,mBAAoBxc,IACpBx+B,EAAOy1D,wBAA0Bj3B,EAAIwE,gBAErC,eAAgBxE,IAChBx+B,EAAO01D,WAAal3B,EAAIk3B,YAErB11D,E0BKW21D,CAAY1nC,GAAMU,YAAY0mC,EAAK,cAarD,OAVIC,EAAU5wD,GACVnE,GAAO3D,mBAAmB,qBAAsB,eAAgB04D,EAAU5wD,IAErE4wD,EAAU3nD,MACfpN,GAAO3D,mBAAmB,uBAAwB,iBAAkB04D,EAAU3nD,MAG9E2nD,EAAU7wD,OACV6wD,EAAU7wD,WAAampB,GAAe0nC,EAAU7wD,OAE7C6wD,EArCXV,GAA8B,IAAIv6D,QAoDlC,MAAMu7D,WA7CN,WACI,OAAOC,SA4CiBC,IACxBt8D,YAAYk7D,EAAUt8D,GAClBuP,QACA3P,EAAiBY,KAAM,CACnB+C,KAAM+4D,EAASP,UAAUn6B,gBAAgB5hC,GACzC29D,UAAWrB,EAAUp/C,KAAMld,IAY/B,OAVc,IAAIiY,MAAMzX,KAAM,CAE1B0H,MAAO7J,MAAOwB,EAAQ+9D,EAASl3D,IACV7G,EAAOg+D,eAAen3D,GAC1ByJ,eACItQ,EAAOi+D,cAAcp3D,SAEzB7G,EAAO+wD,QAAQlqD,KAMpCk6B,eACA,OAAOpgC,KAAKm9D,UAAU5B,UAAUl6B,YAAYrhC,KAAK0c,MAErD2gD,eAAen3D,GACX,OAAOlG,KAAKm9D,UAAU5B,UAAUl6B,YAAYrhC,KAAK0c,KAAMxW,GAE3DrI,6BAA6BqI,GACzB,MAAMk6B,EAAWpgC,KAAKq9D,eAAen3D,GAErC,IAAIw2D,EAAY,GAIhB,GAHIt8B,EAAS9xB,OAAOpP,OAAS,IAAMgH,EAAKhH,SACpCw9D,QAAkBF,GAAct2D,EAAK6D,QAErCq2B,EAAS9xB,OAAOpP,SAAWgH,EAAKhH,OAChC,MAAM,IAAIC,MAAM,8EAEpB,MAAMi9D,QAjDPv+D,eAA2B0/D,EAASjvD,EAAQpI,GAE/C,MAAM4xD,EAASqE,GAAUoB,EAAS,eAC5BtoC,EAAWgnC,GAAWnE,GAAUA,EAAS,KAC/C,aAAa55D,QAAQC,IAAImQ,EAAOlQ,KAAI,CAAC+P,EAAOzP,IACjCyP,EAAMkuD,UAAUn2D,EAAKxH,IAAQ,CAACE,EAAMb,IAC1B,YAATa,EACOo2B,GAAej3B,EAAOk3B,GAE1Bl3B,OAwCgBy/D,CAAYx9D,KAAKm9D,UAAUrF,OAAQ13B,EAAS9xB,OAAQpI,GAC/E,OAAOjI,OAAO8N,OAAO,GAAI2wD,QAAiB5+D,EAAkB,CACxDgO,GAAI9L,KAAKm9D,UAAU/pC,aACnBre,KAAM/U,KAAKm9D,UAAU5B,UAAUr5B,mBAAmB9B,EAAUg8B,MAGpEv+D,oBAAoBqI,GAChB,MAAMkB,QAAepH,KAAKy9D,oBAAoBv3D,GAC9C,OAAsB,IAAlBkB,EAAOlI,OACAkI,EAAO,GAEXA,EAEXvJ,cAAcqI,GACV,MAAM4xD,EAASqE,GAAUn8D,KAAKm9D,UAAUrF,OAAQ,mBAChD,KAlJS/5D,EAkJI+5D,IAjJmC,mBAA3B/5D,EAAqB,gBAkJtC,OAAO4J,GAAO5D,WAAW,wDAAyD,wBAAyB,CACvGY,UAAW,oBApJ3B,IAAiB5G,EAuJT,MAAMw2B,QAAWujC,EAAO7I,sBAAsBjvD,KAAKyuD,uBAAuBvoD,IACpE8jC,EAAWmyB,GAAUn8D,KAAKm9D,UAAUrF,OAAQ,WAClD,OAAO,IAAI6D,GAA4B37D,KAAKm9D,UAAU5B,UAAWvxB,EAAUzV,GAE/E12B,qBAAqBqI,GACjB,MAAM4xD,EAASqE,GAAUn8D,KAAKm9D,UAAUrF,OAAQ,eAChD,OAnKa/5D,EAmKI+5D,IAlK2B,mBAAvB/5D,EAAiB,kBAuKzB+5D,EAAOxJ,kBAAkBtuD,KAAKyuD,uBAAuBvoD,IAJvDyB,GAAO5D,WAAW,kDAAmD,wBAAyB,CACjGY,UAAW,gBArK3B,IAAqB5G,EA0KjBF,0BAA0BqI,GACtB,MAAM4xD,EAASqE,GAAUn8D,KAAKm9D,UAAUrF,OAAQ,QAChD,KAzKS/5D,EAyKI+5D,IAxKwB,mBAAhB/5D,EAAU,KAyK3B,OAAO4J,GAAO5D,WAAW,2CAA4C,wBAAyB,CAC1FY,UAAW,SA3K3B,IAAiB5G,EA8KT,MAAMqiC,EAAWpgC,KAAKq9D,eAAen3D,GAC/BquB,QAAWv0B,KAAKyuD,uBAAuBvoD,GAC7C,IAAIkB,EAAS,KACb,IACIA,QAAe0wD,EAAOv3D,KAAKg0B,GAE/B,MAAOjzB,GACH,GAAIE,EAAgBF,GAChB,MAAMtB,KAAKm9D,UAAU5B,UAAU93D,UAAU28B,EAAU9+B,EAAMyT,KAAMwf,GAEnE,MAAMjzB,EAEV,OAAOtB,KAAKm9D,UAAU5B,UAAUp5B,qBAAqB/B,EAAUh5B,IAMvE,MAAMs2D,WAHN,WACI,OAAOT,SAEgBU,IACvB/8D,YAAYk7D,EAAUt8D,GAMlB,OALAuP,QACA3P,EAAiBY,KAAM,CACnB+C,KAAM+4D,EAASP,UAAUj6B,aAAa9hC,GACtC29D,UAAWrB,EAAUp/C,KAAMld,IAExB,IAAIiY,MAAMzX,KAAM,CAEnB0H,MAAO7J,MAAOwB,EAAQ+9D,EAASl3D,IACpB,IAAIg2D,GAAoBJ,EAAUz8D,EAAOg+D,eAAen3D,GAAOA,KAK9Ek6B,eACA,OAAOpgC,KAAKm9D,UAAU5B,UAAUh6B,SAASvhC,KAAK0c,MAElD2gD,eAAen3D,GACX,OAAOlG,KAAKm9D,UAAU5B,UAAUh6B,SAASvhC,KAAK0c,KAAMxW,IAQ5D,MAAMkG,GAAWC,OAAOC,IAAI,4BACtBsxD,GAAiB,IAAIn8D,QAI3B,SAASo8D,GAAY/B,GACjB,OAAO8B,GAAel9D,IAAIo7D,EAAS1vD,KAMvCvO,eAAeigE,GAAUhC,EAAUzsD,GAC/B,IAAI+wB,EACAyC,EACJ,GAAIp1B,MAAMN,QAAQkC,GAEd+wB,EAAW07B,EAASP,UAAUh6B,SAASlyB,EAAM,IAC7CwzB,EAASxzB,OAER,GAAuB,iBAAX,EAEb+wB,EAAW07B,EAASP,UAAUh6B,SAASlyB,GACvCwzB,EAAS,CAACi5B,EAASP,UAAU55B,cAAcvB,SAE1C,IAjBWriC,EAiBIsR,IAhBgB,iBAAnB,GAAgC,mBAAoBtR,GAC9B,mBAA1BA,EAAoB,gBAAqBA,EAAMqiC,SAiBxDA,EAAW/wB,EAAM+wB,SACjByC,QAAexzB,EAAMitD,qBAEpB,CAAA,KAAI,aAAcjtD,GAOnB,MADA7H,QAAQC,IAAI4H,GACN,IAAIlQ,MAAM,QALhBihC,EAAW/wB,EAAM+wB,SACjByC,EAAS,CAACi5B,EAASP,UAAU55B,cAAcvB,IAzBnD,IAAoBriC,EAgChB8kC,EAASA,EAAOzkC,KAAKW,IACjB,OAAS,MAALA,EACO,KAEP0O,MAAMN,QAAQpO,IAxPPqJ,EAyPUrJ,EAAEX,KAAKW,GAAMA,EAAE2H,iBAxPxC0B,EAAQqF,MAAM5B,KAAK,IAAKxD,IAAID,GAAQ9I,WAC9Bo/B,OACCt2B,GAwPIrJ,EAAE2H,cA3PjB,IAAmB0B,KAsQf,MAAO,CAAEg4B,SAAAA,EAAUgpB,IATPvmB,EAAOzkC,KAAKW,GACX,MAALA,EACO,OAEP0O,MAAMN,QAAQpO,GACPA,EAAE+E,KAAK,KAEX/E,IACR+E,KAAK,KACgB++B,OAAAA,GAE5BhlC,eAAekgE,GAAOjC,EAAUzsD,GAC5B,MAAM2uD,KAAEA,GAASH,GAAY/B,GAC7B,OAAOkC,EAAKt9D,WAAWo9D,GAAUhC,EAAUzsD,IAAQ+5C,MAAQ,KAE/DvrD,eAAeogE,GAAOnC,EAAUzsD,GAE5B,MAAMyoD,EAASqE,GAAUL,EAAShE,OAAQ,MACpCoG,EAAY/B,GAAUL,EAAShE,OAAQ,OAC7C,IAAKA,GAAUA,IAAWoG,MAnRRngE,EAmRmC+5D,IAlRd,mBAAd/5D,EAAQ,IAA2C,mBAAfA,EAAS,KAmRlE,OAAO4J,GAAO5D,WAAW,+CAAgD,wBAAyB,CAC9FY,UAAW,OArRvB,IAAsB5G,EAwRlB,MAAMqiC,SAAEA,EAAQgpB,IAAEA,EAAGvmB,OAAEA,SAAiBi7B,GAAUhC,EAAUzsD,IACtDo8B,KAAEA,EAAIuyB,KAAEA,GAASH,GAAY/B,GACnC,IAAI9P,EAAMgS,EAAKt9D,IAAI0oD,GACnB,IAAK4C,EAAK,CACN,MACMjrD,EAAS,CAAE0xB,QADAgZ,GAAcqwB,EACLj5B,OAAAA,GACpB/hC,EAAY2G,IACd,MAAMisB,EAAU,IAAImoC,GAAqBC,EAAU,KAAMzsD,EAAO+wB,EAAU34B,GAC1E+/C,GAAKsU,EAAUzsD,EAAOqkB,EAAQxtB,KAAMwtB,IAExC,IAAI44B,GAAU,EAedN,EAAM,CAAE5C,IAAAA,EAAKmD,UAAW,GAAIx2C,MAdd,KACNu2C,IAGJwL,EAAOnQ,GAAG5mD,EAAQD,GAClBwrD,GAAU,IASqBnF,KAPtB,KACJmF,IAGLwL,EAAO92D,IAAID,EAAQD,GACnBwrD,GAAU,KAGd0R,EAAKx9D,IAAI4oD,EAAK4C,GAElB,OAAOA,EAsBX,IAAImS,GAAWjgE,QAAQI,UACvBT,eAAe2pD,GAAKsU,EAAUzsD,EAAOnJ,EAAMwtB,GACvC,UACUyqC,GAEV,MAAO78D,IACP,MAAM88D,EA1BVvgE,eAAqBi+D,EAAUzsD,EAAOnJ,EAAMwtB,SAClCyqC,GACN,MAAMnS,QAAY+R,GAAOjC,EAAUzsD,GACnC,IAAK28C,EACD,OAAO,EAEX,MAAM3mD,EAAQ2mD,EAAIO,UAAUrtD,OAS5B,OARA8sD,EAAIO,UAAYP,EAAIO,UAAUxrD,QAAO,EAAGD,SAAAA,EAAU0qD,KAAAA,MAC9C,MAAM6S,EAAWn4D,EAAKqD,QAKtB,OAJImqB,GACA2qC,EAASz7D,KAAK,IAAIi5D,GAAqBC,EAAWtQ,EAAO,KAAO1qD,EAAWuO,EAAOqkB,EAAQ0M,SAAU1M,EAAQjsB,MAEhH8S,YAAW,KAAQzZ,EAASP,KAAKu7D,KAAauC,KAAc,IACpD7S,KAEJnmD,EAAQ,EAWMy0D,CAAMgC,EAAUzsD,EAAOnJ,EAAMwtB,GAEnD,OADAyqC,GAAWC,QACEA,EAEjB,MAAM9mD,GAAiB,CAAC,QACjB,MAAMgnD,GACT19D,YAAYvB,EAAQ2hC,EAAK82B,EAAS,KAAMyG,GAIpC,IAAIC,EAFJp/D,EAAiBY,KAAM,CAAEX,OAAAA,EAAQy4D,OAAAA,EAAQyD,UAD3Bz6B,GAAUj1B,KAAKm1B,KAE7B/iC,OAAO0B,eAAeK,KAAMoM,GAAU,CAAErO,MAAO,KAE/C,IAAI0tC,EAAO,KACPgzB,EAAW,KACf,GAAIF,EAAW,CACX,MAAMv0B,EAAWmyB,GAAUrE,EAAQ,WACnC2G,EAAW,IAAI9C,GAA4B37D,KAAKu7D,UAAWvxB,EAAUu0B,GAEzE,IAAIP,EAAO,IAAIxmD,IAEf,GAAwB,iBAAZ,EACR,GAAI9C,GAAYrV,GACZosC,EAAOpsC,EACPm/D,EAActgE,QAAQI,QAAQe,OAE7B,CACD,MAAM41B,EAAWknC,GAAUrE,EAAQ,eACnC,IAAKmE,GAAWhnC,GACZ,MAAMttB,GAAOlE,UAAU,mDAAoD,wBAAyB,CAChGkB,UAAW,gBAGnB65D,EAAcvpC,EAASC,YAAY71B,GAAQ+O,MAAMq9B,IAC7C,GAAY,MAARA,EACA,MAAM,IAAItsC,MAAM,QAGpB,OADA0+D,GAAY79D,MAAMyrC,KAAOA,EAClBA,UAKf+yB,EAAcn/D,EAAO+zB,aAAahlB,MAAMq9B,IACpC,GAAY,MAARA,EACA,MAAM,IAAItsC,MAAM,QAGpB,OADA0+D,GAAY79D,MAAMyrC,KAAOA,EAClBA,KA7KvB,IAAqBqwB,EAAUx8D,EAAVw8D,EAiLD97D,KAjLWV,EAiLL,CAAEk/D,YAAAA,EAAa/yB,KAAAA,EAAMgzB,SAAAA,EAAUT,KAAAA,GAhLrDJ,GAAep9D,IAAIs7D,EAAS1vD,IAAW9M,GAkLnC,MAAMo/D,EAAU,IAAIjnD,MAAM,GAAI,CAC1B/W,IAAK,CAACrB,EAAQs/D,EAAO1+D,KAEjB,GAAIqX,GAAexS,QAAQ65D,IAAU,EACjC,OAAO/mD,QAAQlX,IAAIrB,EAAQs/D,EAAO1+D,GAEtC,MAAMyX,EAAOhV,OAAOi8D,GACdv3D,EAASpH,KAAKuhC,SAAS7pB,GAC7B,GAAItQ,EACA,OAAOA,EAEX,MAAM,IAAIjI,MAAM,2BAA2BuY,QAKnD,OAFAtY,EAAiBY,KAAM,CAAE0+D,QAAAA,IAElB,IAAIjnD,MAAMzX,KAAM,CACnBU,IAAK,CAACrB,EAAQs/D,EAAO1+D,KACjB,GAAI0+D,KAASt/D,GAAUiY,GAAexS,QAAQ65D,IAAU,EACpD,OAAO/mD,QAAQlX,IAAIrB,EAAQs/D,EAAO1+D,GAEtC,MAAMyX,EAAOhV,OAAOi8D,GACdv3D,EAAS/H,EAAOgiC,YAAY3pB,GAClC,GAAItQ,EACA,OAAOA,EAEX,MAAM,IAAIjI,MAAM,4BAA4BuY,QAIxD7Z,mBAAqB,aAAaggE,GAAY79D,MAAMw+D,YACpDI,wBACI,OAAOf,GAAY79D,MAAMy+D,SAE7Bp9B,YAAY7hC,GAIR,MAHqB,iBAAT,IACRA,EAAMA,EAAIqN,UAEd,IAAYmwD,GAAch9D,KAAMR,GAEpC+hC,SAAS/hC,GAIL,MAHqB,iBAAT,IACRA,EAAMA,EAAIqN,UAEd,IAAY6wD,GAAa19D,KAAMR,GAEnC3B,kBAAkBwR,EAAOyzC,EAAY,EAAGE,EAAU,UAC9C,MAAMvX,KAAEA,EAAI+yB,YAAEA,GAAgBX,GAAY79D,MACpCyyB,EAAWgZ,SAAqB+yB,GAChCp+B,SAAEA,EAAQyC,OAAEA,SAAiBi7B,GAAU99D,KAAMqP,GAC7CtO,EAAS,CAAE0xB,QAAAA,EAASoQ,OAAAA,EAAQigB,UAAAA,EAAWE,QAAAA,GACvC8U,EAASqE,GAAUn8D,KAAK83D,OAAQ,WACtC,OA3bU/5D,EA2bI+5D,IA1b0B,mBAAnB/5D,EAAa,eA+bpB+5D,EAAO/P,QAAQhnD,IAAS3C,KAAKqJ,GAChC,IAAI4zD,GAAS5zD,EAAKzH,KAAKu7D,UAAWn7B,KALlCz4B,GAAO5D,WAAW,4CAA6C,wBAAyB,CAC3FY,UAAW,YA7b3B,IAAkB5G,EAocdF,SAASwR,EAAOvO,GACZ,MAAMkrD,QAAYiS,GAAOj+D,KAAMqP,GAG/B,OAFA28C,EAAIO,UAAU3pD,KAAK,CAAE9B,SAAAA,EAAU0qD,MAAM,IACrCQ,EAAIj2C,QACG/V,KAEXnC,WAAWwR,EAAOvO,GACd,MAAMkrD,QAAYiS,GAAOj+D,KAAMqP,GAG/B,OAFA28C,EAAIO,UAAU3pD,KAAK,CAAE9B,SAAAA,EAAU0qD,MAAM,IACrCQ,EAAIj2C,QACG/V,KAEXnC,WAAWwR,KAAUnJ,GACjB,aAAashD,GAAKxnD,KAAMqP,EAAOnJ,EAAM,MAEzCrI,oBAAoBwR,GAChB,GAAIA,EAAO,CACP,MAAM28C,QAAY+R,GAAO/9D,KAAMqP,GAC/B,OAAK28C,EAGEA,EAAIO,UAAUrtD,OAFV,EAIf,MAAM8+D,KAAEA,GAASH,GAAY79D,MAC7B,IAAIwsD,EAAQ,EACZ,IAAK,MAAMD,UAAEA,KAAeyR,EAAK1+D,SAC7BktD,GAASD,EAAUrtD,OAEvB,OAAOstD,EAEX3uD,gBAAgBwR,GACZ,GAAIA,EAAO,CACP,MAAM28C,QAAY+R,GAAO/9D,KAAMqP,GAC/B,OAAK28C,EAGEA,EAAIO,UAAUnuD,KAAI,EAAG0C,SAAAA,KAAeA,IAFhC,GAIf,MAAMk9D,KAAEA,GAASH,GAAY79D,MAC7B,IAAIoH,EAAS,GACb,IAAK,MAAMmlD,UAAEA,KAAeyR,EAAK1+D,SAC7B8H,EAASA,EAAOsO,OAAO62C,EAAUnuD,KAAI,EAAG0C,SAAAA,KAAeA,KAE3D,OAAOsG,EAEXvJ,UAAUwR,EAAOvO,GACb,MAAMkrD,QAAY+R,GAAO/9D,KAAMqP,GAC/B,IAAK28C,EACD,OAAOhsD,KAEX,GAAIc,EAAU,CACV,MAAMpC,EAAQstD,EAAIO,UAAUnuD,KAAI,EAAG0C,SAAAA,KAAeA,IAAUgE,QAAQhE,GAChEpC,GAAS,GACTstD,EAAIO,UAAUtoB,OAAOvlC,EAAO,GAOpC,OAJgB,MAAZoC,GAA6C,IAAzBkrD,EAAIO,UAAUrtD,SAClC8sD,EAAI7E,OACJ0W,GAAY79D,MAAMg+D,KAAKx/B,OAAOwtB,EAAI5C,MAE/BppD,KAEXnC,yBAAyBwR,GACrB,GAAIA,EAAO,CACP,MAAM28C,QAAY+R,GAAO/9D,KAAMqP,GAC/B,IAAK28C,EACD,OAAOhsD,KAEXgsD,EAAI7E,OACJ0W,GAAY79D,MAAMg+D,KAAKx/B,OAAOwtB,EAAI5C,SAEjC,CACD,MAAM4U,KAAEA,GAASH,GAAY79D,MAC7B,IAAK,MAAMopD,IAAEA,EAAGjC,KAAEA,KAAU6W,EAAK1+D,SAC7B6nD,IACA6W,EAAKx/B,OAAO4qB,GAGpB,OAAOppD,KAGXnC,kBAAkBwR,EAAOvO,GACrB,aAAad,KAAK2nD,GAAGt4C,EAAOvO,GAGhCjD,qBAAqBwR,EAAOvO,GACxB,aAAad,KAAKgB,IAAIqO,EAAOvO,GAEjCyF,kBAAkBy6B,GAMd,OALA,cAA6Bs9B,GACzB19D,YAAY6xB,EAASqlC,EAAS,MAC1B/oD,MAAM0jB,EAASuO,EAAK82B,KAMhCvxD,YAAYlH,EAAQ2hC,EAAK82B,EAAS,MAE9B,OADiB,IAAI93D,KAAKX,EAAQ2hC,EAAK82B,IAOxC,MAAM+G,WAHb,WACI,OAAOP,GAEmBQ,KC1kBvB,SAASC,GAAev/D,GAE3B,OAAO4zB,GAAW9I,GAAU,KADV4xB,GAAWC,iBAAiB38C,GAAK,GACN+H,UAAU,IAAIA,UAAU,KCLzE,MAAMy3D,GAAW,gCACXC,GAAO,YACb,SAASC,GAAOC,EAAOC,GACnB,IAAIC,EAAU,GACd,OAAOF,EAAM5gE,QAAO,CAACC,EAAOsb,KACpBA,IAASslD,EACTC,IAEKvlD,EAAK3S,MAAM83D,IAChBzgE,EAAMoE,KAAKF,OAAOC,aAAa08D,GAAWvlD,IAG1CulD,EAAU,GACV7gE,EAAMoE,KAAKkX,IAERtb,IACR,IAyBA,SAAS8gE,GAAUvqD,GACtB,GAAgB,MAAZA,EAAK,GACL,MAAM1U,UAAU,yBAEpB,OA3BG,SAAgB0U,EAAMipD,GAEzB,IAAK,IAAI/+D,EAAI+/D,GAAS9/D,OAAS,EAAGD,GAAK,EAAGA,IACtC8V,EAAOA,EAAKjW,MAAMkgE,GAAS//D,IAAI6E,KAAKk6D,EAAKz2D,UAAU,EAAItI,EAAG,EAAIA,EAAI,IAGtE,MAAMsgE,EAAS,GACTC,EAAWzqD,EAAK2jB,QAAQ,8BAA8B,CAACv6B,EAAKwZ,EAAM8nD,EAAM3lD,KAC1E,GAAI2lD,EACA,IAAK,IAAIxgE,EAAIqI,SAASm4D,GAAOxgE,GAAK,EAAGA,IACjCsgE,EAAO38D,KAAK,UAIhB28D,EAAO38D,KAAK+U,EAAKjR,eAErB,MAAO,MAEX,GAAI84D,EACA,MAAM,IAAIrgE,MAAM,cAAcyE,KAAKC,UAAU27D,MAEjD,OAAON,GAAOA,GAAOK,EAAQ,KAAM,KAM5BvpC,CAAOjhB,EAAKxN,UAAU,EAAI,EAAIy3D,GAAS9/D,QAAS6V,EAAKxN,UAAU,EAAG,EAAI,EAAIy3D,GAAS9/D,SC7CvF,MCEMyI,GAAS,IAAIrE,EDFH,yCEChB,MAAMo8D,GACT9+D,YAAY++D,GACRvgE,EAAiBY,KAAM,CAAE2/D,OAAAA,IAG7B7gE,MAAM8gE,GACF,OAAOA,EAASl5D,cAAc5H,MAAM,OAGxCgF,KAAKq7D,GACD,OAAOA,EAAMr7D,KAAK,MCT1B,IAWI+7D,GAAwBC,GAAmBC,GAAuBC,GAAoBC,GAXtFlgE,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAOjF,MAAMigE,WAAoBR,GAC7B9+D,YAAY++D,EAAQ5qD,EAAMme,GACtBnkB,MAAM4wD,GACNE,GAAuBr8D,IAAIxD,MAC3B8/D,GAAkBt/D,IAAIR,UAAM,GAC5B+/D,GAAsBv/D,IAAIR,UAAM,GAChCggE,GAAmBx/D,IAAIR,UAAM,GAC7BD,GAAuBC,KAAM8/D,GAAmB/qD,EAAM,KACtDhV,GAAuBC,KAAM+/D,GAAuB7sC,EAAU,KAC9DnzB,GAAuBC,KAAMggE,GAAoB,KAAM,KAEvDh5C,YAAU,OAAOvmB,GAAuBT,KAAM8/D,GAAmB,KACrEK,eACI,OAAOb,GAAU7+D,GAAuBT,KAAM8/D,GAAmB,MAErEM,QAAQ1hE,GACJ,MAAMygE,EAAQ1+D,GAAuBT,KAAM6/D,GAAwB,IAAKI,IAAwB1/D,KAAKP,MAIrG,OAHItB,EAAQ,GAAKA,GAASygE,EAAMjgE,SAC5ByI,GAAO3D,mBAAmB,uBAAuBtF,IAAS,QAASA,GAEhEygE,EAAMzgE,GAEjB2hE,aAAavmD,GACT,OAAOrZ,GAAuBT,KAAM6/D,GAAwB,IAAKI,IAAwB1/D,KAAKP,MAAM8E,QAAQgV,IAGpHgmD,GAAoB,IAAIr+D,QAAWs+D,GAAwB,IAAIt+D,QAAWu+D,GAAqB,IAAIv+D,QAAWo+D,GAAyB,IAAIj5D,QAAWq5D,GAAyB,WAC3K,GAA6D,MAAzDx/D,GAAuBT,KAAMggE,GAAoB,KAAc,CAC/D,MAAMb,EAAQn/D,KAAKmgE,eAInB,GAFiBnkC,GAAGmjC,EAAMr7D,KAAK,MAAQ,QAEtBrD,GAAuBT,KAAM+/D,GAAuB,KACjE,MAAM,IAAI5gE,MAAM,sBAAsBa,KAAK2/D,iBAG/C5/D,GAAuBC,KAAMggE,GAAoBb,EAAO,KAE5D,OAAO1+D,GAAuBT,KAAMggE,GAAoB,MClDrD,MAAMM,GAAS,IAHf,cAAqBJ,GACxBt/D,cAAgBmO,MAAM,KAHZ,w3LACG,wECAJpH,GAAS,IAAIrE,ECFH,sCCCVi9D,GAAYtiE,OAAOsK,OAAO,CACvCi4D,GAAIA,KCFJ,IAWIC,GAXA1gE,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAKjF,MAAMygE,WAAqBR,GAC9Bt/D,YAAY++D,EAAQ5qD,EAAM4rD,EAAQztC,GAC9BnkB,MAAM4wD,EAAQ5qD,EAAMme,GACpButC,GAAqBjgE,IAAIR,UAAM,GAC/BD,GAAuBC,KAAMygE,GAAsBE,EAAQ,KAE3DC,cAAY,OAAOngE,GAAuBT,KAAMygE,GAAsB,KAC1EN,eACI,OCpBD,SAAoBprD,EAAM8rD,GAC7B,IAAI1B,EAAQG,GAAUvqD,GAAMjR,KAAK,KAoBjC,OAlBA+8D,EAAQ/hE,MAAM,MAAMwJ,SAASq4D,IACzB,MAAMx5D,EAAQw5D,EAAOx5D,MAAM,iCAC3B,IAAKA,EACD,MAAM,IAAIhI,MAAM,kCAEpB,IAAI2hE,EAAY,EAChB,MAAMC,ECVP,SAAoBvwD,EAAOuE,GAC9B,MAAM/R,GAAY,GAAKwN,GAAS,EAC1BpJ,EAAS,GACf,IAAI5I,EAAQ,EAAGwS,EAAO,EAAGgwD,EAAQ,EACjC,IAAK,IAAI/hE,EAAI,EAAGA,EAAI8V,EAAK7V,OAAQD,IAK7B,IAHAT,EAAUA,GAAS,EAPZ,mEAOwBsG,QAAQiQ,EAAK9V,IAC5C+R,GAAQ,EAEDA,GAAQR,GAAO,CAElB,MAAMzS,EAASS,GAAUwS,EAAOR,EAChChS,IAAU,GAAMwS,EAAOR,GAAU,EACjCQ,GAAQR,EAGM,IAAVzS,EACAijE,GAASh+D,GAGToE,EAAOxE,KAAK7E,EAAQijE,GACpBA,EAAQ,GAIpB,OAAO55D,EDfe65D,CAAW35D,SAASH,EAAM,IAAKA,EAAM,IACjD+5D,EAAW55D,SAASH,EAAM,IAC1Bg6D,EAAQ,IAAIl4D,OAAO,KAAK9B,EAAM,OAAQ,KAC5Cg4D,EAAQA,EAAMzmC,QAAQyoC,GAAO,CAAChjE,EAAKmW,KAEnB,KADEysD,EAAUD,KAEpBxsD,EAAS5R,OAAOC,aAAa2R,EAAOse,WAAW,GAAIsuC,GACnDJ,KAEGxsD,QAGR6qD,EAAMrgE,MAAM,KDDRsiE,CAAWphE,KAAKgnB,MAAOhnB,KAAK4gE,UGf3C,SAASS,GAAarwD,GAClB,OAAS,GAAKA,GAAQ,GAAO,EAAIA,EAAQ,IAM7C,SAASswD,GAAkB1B,EAAU2B,EAAWjB,IAC5C34D,GAAO9C,gBAAgB,QACP,MAAZ08D,IACAA,EAAWjB,IAEf,MAAMnB,EAAQoC,EAASziE,MAAM8gE,IACxBT,EAAMjgE,OAAS,GAAO,GAAKigE,EAAMjgE,OAAS,IAAMigE,EAAMjgE,OAAS,KAChEyI,GAAO3D,mBAAmB,0BAA2B,WAAY,gBAErE,MAAMw9D,EAAU1sD,GAAS,IAAI5N,WAAWH,KAAKsS,KAAK,GAAK8lD,EAAMjgE,OAAS,KACtE,IAAImI,EAAS,EACb,IAAK,IAAIpI,EAAI,EAAGA,EAAIkgE,EAAMjgE,OAAQD,IAAK,CACnC,IAAIP,EAAQ6iE,EAASlB,aAAalB,EAAMlgE,GAAGuD,UAAU,UACtC,IAAX9D,GACAiJ,GAAO3D,mBAAmB,kCAAkC/E,IAAK,WAAY,gBAEjF,IAAK,IAAIwiE,EAAM,EAAGA,EAAM,GAAIA,IACpB/iE,EAAS,GAAM,GAAK+iE,IACpBD,EAAQn6D,GAAU,IAAO,GAAM,EAAKA,EAAS,GAEjDA,IAGR,MAAMq6D,EAAc,GAAKvC,EAAMjgE,OAAS,EAElCyiE,EAAeN,GADAlC,EAAMjgE,OAAS,GAMpC,OAJiB4V,GAASoM,GAAOsgD,EAAQj4D,MAAM,EAAGm4D,EAAc,KAAK,GAAKC,MACxDH,EAAQA,EAAQtiE,OAAS,GAAKyiE,IAC5Ch6D,GAAO3D,mBAAmB,4BAA6B,WAAY,gBAEhEuR,GAAQisD,EAAQj4D,MAAM,EAAGm4D,EAAc,IAElD,SAASE,GAAkBJ,EAASD,EAAWjB,KACtCkB,EAAQtiE,OAAS,GAAMsiE,EAAQtiE,OAAS,IAAMsiE,EAAQtiE,OAAS,KAChEyI,GAAO3D,mBAAmB,uBAAwB,UAAW,gBAEjD,MAAZu9D,IACAA,EAAWjB,IAEf,MAAMuB,EAAU,CAAC,GACjB,IAAIC,EAAgB,GACpB,IAAK,IAAI7iE,EAAI,EAAGA,EAAIuiE,EAAQtiE,OAAQD,IAE5B6iE,EAAgB,GAChBD,EAAQA,EAAQ3iE,OAAS,KAAO,EAChC2iE,EAAQA,EAAQ3iE,OAAS,IAAMsiE,EAAQviE,GACvC6iE,GAAiB,IAIjBD,EAAQA,EAAQ3iE,OAAS,KAAO4iE,EAChCD,EAAQA,EAAQ3iE,OAAS,IAAMsiE,EAAQviE,IAAO,EAAI6iE,EAElDD,EAAQj/D,KAAK4+D,EAAQviE,KAvDpB,GAuDsC,EAAI6iE,GAvD7B,EAAK,MAwDnBA,GAAiB,GAIzB,MAAMC,EAAeP,EAAQtiE,OAAS,EAChCg0B,EAAW5rB,SAAS4Z,GAAOsgD,GAASj6D,UAAU,EAAG,GAAI,IAAM85D,GAAaU,GAI9E,OAFAF,EAAQA,EAAQ3iE,OAAS,KAAO6iE,EAChCF,EAAQA,EAAQ3iE,OAAS,IAAOg0B,GAAa,EAAI6uC,EAC1CR,EAASz9D,KAAK+9D,EAAQzjE,KAAKM,GAAU6iE,EAASnB,QAAQ1hE,MHpDjE+hE,GAAuB,IAAIh/D,QGsD3B,MAAM0K,GAAS,GACR,MAAM61D,GACTphE,YAAYqE,EAAOu8D,EAASS,EAAQ1kD,EAAUgkD,GAC1B,MAAZhkD,IACAA,EAAW,IAEC,MAAZgkD,IACAA,EAAWjB,IAEf34D,GAAO5C,cAAcE,EAAOkH,GAAQ,YACpC/M,EAAiBY,KAAM,CAAEiiE,OAAAA,EAAQ1kD,SAAAA,EAAUgkD,SAAAA,EAAUC,QAAAA,IAEzDU,cACI,MAAM1kD,EAAO6b,GAAY,WAAar5B,KAAKud,SAAUua,EAAAA,yBAAyBqqC,MAC9E,OAAO7kD,GAAO+b,GAAYr5B,KAAKiiE,OAAQnqC,EAAwBA,yBAACqqC,MAAO3kD,EAAM,KAAM,GAAI,UAE3FjX,kBAAkB07D,EAAQ1kD,EAAUgkD,GAEhC,MAAMC,EAAUF,GAAkBW,EAAQV,GAE1C,OADAU,EAASL,GAAkBj6D,GAAO/B,SAAS47D,GAAUD,GAC9C,IAAIS,GAAS71D,GAAQq1D,EAASS,EAAQ1kD,EAAUgkD,GAE3Dh7D,mBAAmB67D,EAAU7kD,EAAUgkD,GACnC,MAAMC,EAAU75D,GAAO/B,SAASw8D,EAAU,WACpCH,EAASL,GAAkBJ,EAASD,GAC1C,OAAO,IAAIS,GAAS71D,GAAQoJ,GAAQisD,GAAUS,EAAQ1kD,EAAUgkD,GAEpEh7D,uBAAuB67D,EAAUb,GAE7B,OAAOK,GADSj6D,GAAO/B,SAASw8D,EAAU,WACRb,GAEtCh7D,uBAAuB07D,EAAQV,GAC3B,OAAOD,GAAkBW,EAAQV,GAErCh7D,uBAAuB07D,EAAQV,GAC3B,IAEI,OADAD,GAAkBW,EAAQV,IACnB,EAEX,MAAOjgE,IACP,OAAO,GCvHf,IAWI+gE,GAXAtiE,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAUjF,MAAMqiE,WAAmBnU,GAC5BvtD,YAAYs0C,EAAYlL,GACpBj7B,MAAMi7B,GACNq4B,GAAuB7hE,IAAIR,UAAM,GACjCD,GAAuBC,KAAMqiE,GAAwBntB,EAAY,KAEjE91C,EAAiBY,KAAM,CAAEyyB,QADTssC,GAAe/+D,KAAKuiE,WAAWroB,aAI/CqoB,iBAAe,OAAO9hE,GAAuBT,KAAMqiE,GAAwB,KAC3EntB,iBAAe,OAAOl1C,KAAKuiE,WAAWrtB,WAC1Cr3C,mBAAqB,OAAOmC,KAAKyyB,QACjCq8B,QAAQ9kB,GACJ,OAAO,IAAIs4B,GAAW7hE,GAAuBT,KAAMqiE,GAAwB,KAAMr4B,GAErFnsC,sBAAsB2sD,GAElB,MAAMj2B,EAAKt2B,OAAO8N,OAAO,GAAIy+C,QAAW1sD,EAAkB,CACtDgO,GAAK0+C,EAAI1+C,GAAKkpB,GAAew1B,EAAI1+C,GAAI9L,KAAKgqC,eAAYtqC,EACtDmM,KAAO2+C,EAAI3+C,KAAOmpB,GAAew1B,EAAI3+C,KAAM7L,KAAKgqC,eAAYtqC,KAEjD,MAAX60B,EAAG1oB,OACCunB,GAAWmB,EAAG1oB,QAAU7L,KAAKyyB,SAC7B9qB,GAAO3D,mBAAmB,oCAAqC,UAAWwmD,EAAI3+C,aAE3E0oB,EAAG1oB,MAGd,MAAM22D,EAAM/jB,GAAY5yC,KAAK0oB,GAE7B,OADAiuC,EAAIliC,UAAYtgC,KAAKuiE,WAAWzmB,KAAK0mB,EAAI7jB,cAClC6jB,EAAIt1B,WAEfrvC,kBAAkB6F,GACd,OAAO1D,KAAKuiE,WAAWzmB,KAAKtf,GAAY94B,IAAUwpC,WAEtDrvC,oBAAoBqhC,EAAQrgC,EAAOd,GAE/B,MAAM6zD,QAAkB9zB,GAAiB+zB,aAAa3yB,EAAQrgC,EAAOd,GAAOF,MAAOkF,IAC/E,GAAqB,MAAjB/C,KAAKgqC,SACL,OAAOriC,GAAO5D,WAAW,8CAA+C,wBAAyB,CAC7FY,UAAW,cACXzC,KAAM,CAAEa,KAAAA,KAGhB,MAAM0vB,QAAgBzyB,KAAKgqC,SAAS9U,YAAYnyB,GAChD,OAAe,MAAX0vB,EACO9qB,GAAO5D,WAAW,wBAAyB,oBAAqB,CACnEhG,MAAOgF,IAGR0vB,KAEX,OAAOzyB,KAAKuiE,WAAWzmB,KAAKhe,GAAiBriB,KAAKm2C,EAAU1yB,OAAQrgC,EAAO+yD,EAAU7zD,QAAQmvC,YAGrGm1B,GAAyB,IAAI5gE,QC1E7B,IAWI8I,GAAIk4D,GAAwBC,GAX5BjiE,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAEpFF,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAc3F4kE,MAAAA,GAAc,mBAErBC,GAAe,IAAI17D,WAAW,CAAC,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,MACnF27D,GAAc,WACdryC,GAAIzqB,OAAO,sEAEjB,SAAS+8D,GAAK/kE,EAAOmB,GACjB,IAAIkI,EAAS,GACb,KAAOrJ,GACHqJ,EAJQ,mBAISrJ,EAAQ,IAAMqJ,EAC/BrJ,EAAQgJ,KAAKuhC,MAAMvqC,EAAQ,IAE/B,KAAOqJ,EAAOlI,OAAkB,EAATA,GACnBkI,EAAS,IAAMA,EAEnB,MAAO,KAAOA,EAElB,SAAS27D,GAAkB3yD,GACvB,MAAMrS,EAAQ4J,GAAO/B,SAASwK,GAG9B,OAAOoE,GADOkB,GAAO,CAAC3X,EADR+X,GAAUoL,GAAOA,GAAOnjB,IAAS,EAAG,MAItD,MAAMoO,GAAS,GACf,SAAS62D,GAAMtkE,EAAOukE,EAAW/oB,EAAWhF,GACxC,MAAMngC,EAAO,IAAI7N,WAAW,IAC5B,GAAIxI,EAAQmkE,GAAa,CACrB,GAAkB,MAAd3tB,EACA,OAAOvtC,GAAO5D,WAAW,uCAAwC,wBAAyB,CACtFY,UAAW,gBAInBoQ,EAAKvU,IAAIsU,GAASogC,GAAa,QAI/BngC,EAAKvU,IAAIsU,GAASolC,IAGtB,IAAK,IAAIj7C,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC1B8V,EAAK,IAAM9V,GAAK,IAAQP,GAAU,GAAKO,EAAM,IAEjD,MAAMikE,EAAIpuD,GAASiS,GAAY,SAAUk8C,EAAWluD,IACpD,MAAO,CAAEouD,GAAID,EAAE35D,MAAM,EAAG,IAAK65D,GAAIF,EAAE35D,MAAM,KAE7C,SAAS85D,GAAWloB,EAAMmoB,GACtB,MAAM52D,EAAa42D,EAAKxkE,MAAM,KAC9B,GAA0B,IAAtB4N,EAAWxN,QAAmC,MAAlBwN,EAAW,IAA6B,IAAfyuC,EAAKrwC,MAC1D,MAAM,IAAI3L,MAAM,kBAAoBmkE,GAElB,MAAlB52D,EAAW,IACXA,EAAWqN,QAEf,IAAI3S,EAAS+zC,EACb,IAAK,IAAIl8C,EAAI,EAAGA,EAAIyN,EAAWxN,OAAQD,IAAK,CACxC,MAAMskE,EAAY72D,EAAWzN,GAC7B,GAAIskE,EAAUp8D,MAAM,aAAc,CAC9B,MAAMzI,EAAQ4I,SAASi8D,EAAUh8D,UAAU,EAAGg8D,EAAUrkE,OAAS,IACjE,GAAIR,GAASmkE,GACT,MAAM,IAAI1jE,MAAM,wBAA0BokE,GAE9Cn8D,EAASA,EAAOo8D,YAAYX,GAAcnkE,OAEzC,CAAA,IAAI6kE,EAAUp8D,MAAM,YAQrB,MAAM,IAAIhI,MAAM,4BAA8BokE,GARZ,CAClC,MAAM7kE,EAAQ4I,SAASi8D,GACvB,GAAI7kE,GAASmkE,GACT,MAAM,IAAI1jE,MAAM,wBAA0BokE,GAE9Cn8D,EAASA,EAAOo8D,YAAY9kE,KAMpC,OAAO0I,EAEJ,MAAMq8D,WAAqBnB,GAC9B1hE,YAAYqE,EAAOs9D,EAAYmB,EAAmBT,EAAWK,EAAM5kE,EAAOoM,EAAO80D,EAAU51B,GACvFj7B,MAAMwzD,EAAYv4B,GAClBriC,GAAO5C,cAAcE,EAAOkH,GAAQ,gBACpC/M,EAAiBY,KAAM,CAAEk6C,UAAWqoB,EAAWnmB,sBAE/Ch9C,EAAiBY,KAAM,CACnB0jE,kBAAAA,EAAmBC,YAFH7tD,GAAUiX,GAAU7L,GAAOlhB,KAAKk6C,YAAa,EAAG,GAGhE+oB,UAAAA,EAAWK,KAAAA,EAAM5kE,MAAAA,EAAOoM,MAAAA,IAE5B1L,EAAiBY,KAAM,CAAE4/D,SAAAA,IAE7B9Q,QAAQ9kB,GACJ,OAAO,IAAIy5B,GAAat3D,GAAQnM,KAAKuiE,WAAYviE,KAAK0jE,kBAAmB1jE,KAAKijE,UAAWjjE,KAAKsjE,KAAMtjE,KAAKtB,MAAOsB,KAAK8K,MAAO9K,KAAK4/D,SAAU51B,GAE3I45B,kBAMA,GAAI5jE,KAAK8K,OAAS,IACd,MAAM,IAAI3L,MAAM,oBAEpB,OAAO4jE,GAAkBrtD,GAAO,CAC5B,aAAcotD,GAAK9iE,KAAK8K,MAAO,GAAI9K,KAAK0jE,kBACxCZ,GAAK9iE,KAAKtB,MAAO,GAAIsB,KAAKijE,UAC1BvtD,GAAO,CAAC,OAAQ1V,KAAKk1C,gBAG7B2uB,UAAY,OAAqB,MAAb7jE,KAAKsjE,KACzBQ,SACI,OAAO,IAAIC,GAAiB53D,GAAQnM,KAAKyyB,QAASzyB,KAAKk6C,UAAWl6C,KAAK0jE,kBAAmB1jE,KAAKijE,UAAWjjE,KAAKsjE,KAAMtjE,KAAKtB,MAAOsB,KAAK8K,MAAO9K,KAAKgqC,UAEtJw5B,YAAYQ,GACR,MAAMtlE,EAAQiJ,GAAO7B,UAAUk+D,EAAQ,SACvC,GAAItlE,EAAQ,WACR,MAAM,IAAIS,MAAM,mBAAqBuD,OAAOhE,IAGhD,IAAI4kE,EAAOtjE,KAAKsjE,KACZA,IACAA,GAAQ,KAAe,WAAR5kE,GACXA,EAAQmkE,KACRS,GAAQ,MAGhB,MAAMF,GAAEA,EAAED,GAAEA,GAAOH,GAAMtkE,EAAOsB,KAAKijE,UAAWjjE,KAAKk6C,UAAWl6C,KAAKk1C,YAC/D+uB,EAAK,IAAI/nB,GAAW5rC,IAAOH,GAASgzD,GAAMp9D,OAAO/F,KAAKk1C,aAAe1kB,GAAG,KAC9E,OAAO,IAAIizC,GAAat3D,GAAQ83D,EAAIjkE,KAAK2jE,YAAapuD,GAAQ6tD,GAAKE,EAAM5kE,EAAOsB,KAAK8K,MAAQ,EAAG9K,KAAK4/D,SAAU5/D,KAAKgqC,UAExHq5B,WAAWC,GACP,OAAOD,GAAWrjE,KAAMsjE,GAE5B/8D,gBAAgBizC,GACZ,OAAO/4C,GAAuBgjE,GAAcl5D,GAAI,IAAKk4D,IAAwBliE,KAAKkjE,GAAcjqB,EAAM,MAE1GjzC,kBAAkB07D,EAAQ1kD,EAAW,GAAI+lD,EAAOX,GAAapB,EAAWjB,IAC/DgD,IACDA,EAAOX,IAEX,MAAM/C,EAAWoC,GAASkC,WAAWjC,EAAQ1kD,EAAUgkD,GACvD,OAAO9gE,GAAuBgjE,GAAcl5D,GAAI,IAAKk4D,IAAwBliE,KAAKkjE,GAAc7D,EAASsC,cAAetC,GAAUyD,WAAWC,GAEjJ/8D,oBAAoBq5D,EAAU0D,EAAOX,IAIjC,OAHKW,IACDA,EAAOX,IAEJliE,GAAuBgjE,GAAcl5D,GAAI,IAAKk4D,IAAwBliE,KAAKkjE,GAAc7D,EAASsC,cAAetC,GAAUyD,WAAWC,GAEjJ/8D,uBAAuBq9D,GACnB,MAAMpuD,EAAQV,GAASL,GAAamvD,IACf,KAAjBpuD,EAAMtW,QAAiB6jE,GAAkBvtD,EAAMjM,MAAM,EAAG,OAASq6D,GACjEj8D,GAAO3D,mBAAmB,uBAAwB,cAAe,gBAErE,MAAM8G,EAAQ0K,EAAM,GACdkuD,EAAoBnuD,GAAQC,EAAMjM,MAAM,EAAG,IAC3C7K,EAAQ4I,SAASiO,GAAQC,EAAMjM,MAAM,EAAG,KAAKhC,UAAU,GAAI,IAC3D07D,EAAY1tD,GAAQC,EAAMjM,MAAM,GAAI,KACpC/J,EAAMgW,EAAMjM,MAAM,GAAI,IAC5B,OAAQgM,GAAQC,EAAMjM,MAAM,EAAG,KAE3B,IAAK,aACL,IAAK,aAAc,CACf,MAAM2wC,EAAY3kC,GAAQ/V,GAC1B,OAAO,IAAIukE,GAAiB53D,GAAQ4yD,GAAe7kB,GAAYA,EAAWwpB,EAAmBT,EAAW,KAAMvkE,EAAOoM,EAAO,MAGhI,IAAK,aACL,IAAK,cACD,GAAe,IAAXtL,EAAI,GACJ,MAEJ,OAAO,IAAIikE,GAAat3D,GAAQ,IAAI+vC,GAAW18C,EAAI+J,MAAM,IAAKm6D,EAAmBT,EAAW,KAAMvkE,EAAOoM,EAAO,KAAM,MAE9H,OAAOnD,GAAO3D,mBAAmB,8BAA+B,cAAe,gBAEnFuC,oBAAoBgX,EAAW,GAAI+lD,EAAOX,GAAapB,EAAWjB,IACzDgD,IACDA,EAAOX,IAEX,MAAM/C,EAAWoC,GAASmC,YAAYv2C,GAAY,IAAKrQ,EAAUgkD,GACjE,OAAO9gE,GAAuBgjE,GAAcl5D,GAAI,IAAKk4D,IAAwBliE,KAAKkjE,GAAc7D,EAASsC,cAAetC,GAAUyD,WAAWC,IAGrJ/4D,GAAKk5D,GAAchB,GAAyB,SAAgC2B,EAAOxE,GAC/E,MAAMpmB,EAAO7xC,GAAO/B,SAASw+D,EAAO,QACpC,GAAI5qB,EAAKt6C,OAAS,IAAMs6C,EAAKt6C,OAAS,GAClC,MAAM,IAAIC,MAAM,gBAEpB,MAAM+jE,EAAIpuD,GAASiS,GAAY,SAAU67C,GAAcppB,IACjD+oB,EAAa,IAAIrmB,GAAW3mC,GAAQ2tD,EAAE35D,MAAM,EAAG,MACrD,OAAO,IAAIk6D,GAAat3D,GAAQo2D,EAAY,aAAchtD,GAAQ2tD,EAAE35D,MAAM,KAAM,IAAK,EAAG,EAAGq2D,EAAU,OAElG,MAAMmE,WAAyBlV,GAClCjuD,YAAYqE,EAAOwtB,EAASynB,EAAWwpB,EAAmBT,EAAWK,EAAM5kE,EAAOoM,EAAOk/B,GACrFj7B,MAAM0jB,EAASuX,GACfriC,GAAO5C,cAAcE,EAAOkH,GAAQ,oBACpC/M,EAAiBY,KAAM,CAAEk6C,UAAAA,IAEzB96C,EAAiBY,KAAM,CACnBk6C,UAAAA,EAAWypB,YAFK7tD,GAAUiX,GAAU7L,GAAOg5B,IAAa,EAAG,GAEnCwpB,kBAAAA,EAAmBT,UAAAA,EAAWK,KAAAA,EAAM5kE,MAAAA,EAAOoM,MAAAA,IAG3EgkD,QAAQ9kB,GACJ,OAAO,IAAI+5B,GAAiB53D,GAAQnM,KAAKyyB,QAASzyB,KAAKk6C,UAAWl6C,KAAK0jE,kBAAmB1jE,KAAKijE,UAAWjjE,KAAKsjE,KAAMtjE,KAAKtB,MAAOsB,KAAK8K,MAAOk/B,GAE7I45B,kBAMA,GAAI5jE,KAAK8K,OAAS,IACd,MAAM,IAAI3L,MAAM,oBAEpB,OAAO4jE,GAAkBrtD,GAAO,CAC5B,aACAotD,GAAK9iE,KAAK8K,MAAO,GACjB9K,KAAK0jE,kBACLZ,GAAK9iE,KAAKtB,MAAO,GACjBsB,KAAKijE,UACLjjE,KAAKk6C,aAGb2pB,UAAY,OAAqB,MAAb7jE,KAAKsjE,KACzBE,YAAYQ,GACR,MAAMtlE,EAAQiJ,GAAO7B,UAAUk+D,EAAQ,SACvC,GAAItlE,EAAQ,WACR,MAAM,IAAIS,MAAM,mBAAqBuD,OAAOhE,IAGhD,IAAI4kE,EAAOtjE,KAAKsjE,KACZA,IACAA,GAAQ,KAAe,WAAR5kE,GACXA,EAAQmkE,KACRS,GAAQ,MAGhB,MAAMF,GAAEA,EAAED,GAAEA,GAAOH,GAAMtkE,EAAOsB,KAAKijE,UAAWjjE,KAAKk6C,UAAW,MAC1DmqB,EAAKnoB,GAAWooB,WAAWnB,EAAInjE,KAAKk6C,WAAW,GAC/CznB,EAAUssC,GAAesF,GAC/B,OAAO,IAAIN,GAAiB53D,GAAQsmB,EAAS4xC,EAAIrkE,KAAK2jE,YAAapuD,GAAQ6tD,GAAKE,EAAM5kE,EAAOsB,KAAK8K,MAAQ,EAAG9K,KAAKgqC,UAEtHq5B,WAAWC,GACP,OAAOD,GAAWrjE,KAAMsjE,IAGzB,MAAMiB,GACT3jE,YAAYqhE,EAAQ1kD,EAAW,GAAI+lD,EAAO,iBAAkB3D,EAASW,IACjEoC,GAA0BliE,IAAIR,UAAM,GACpCD,GAAuBC,KAAM0iE,GAA2Be,GAAaS,WAAWjC,EAAQ1kD,EAAU+lD,EAAM3D,GAAS,KAErH6E,UAAU9lE,EAAQ,GACd,OAAO+B,GAAuBT,KAAM0iE,GAA2B,KAAKc,YAAY9kE,IAIjF,SAAS+lE,GAAeT,GAC3B,MAAMtlE,EAAQiJ,GAAO7B,UAAUk+D,EAAQ,SAIvC,OAHItlE,EAAQ,GAAKA,GAASmkE,KACtBl7D,GAAO3D,mBAAmB,wBAAyB,QAAStF,GAEzD,aAAaA;uFANxBgkE,GAA4B,IAAIjhE,QCpRhC,IAWIijE,GAAUC,GAASC,GAXnB7kE,GAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOnC,EAAOoC,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUlC,GAASqC,EAAIA,EAAErC,MAAQA,EAAQmC,EAAMM,IAAIP,EAAUlC,GAASA,GAEpG0C,GAA0BT,QAAQA,OAAKS,wBAA2B,SAAUR,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAErC,MAAQmC,EAAMQ,IAAIT,IAIxF,MAAM4kE,GAAiB,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,IAEvCC,GAAO,CAAC,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,KAEtLC,GAAI,CAAC,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,EAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,EAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAC//CC,GAAK,CAAC,GAAM,EAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,EAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KAEhgDhkD,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FgkD,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAE1/FC,GAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,SAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,YAE1/Fx1B,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/Fw1B,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,W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"} \ No newline at end of file diff --git a/packages/ethers/package.json b/packages/ethers/package.json new file mode 100644 index 000000000..b55dee5c4 --- /dev/null +++ b/packages/ethers/package.json @@ -0,0 +1,39 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/signing-key": "^6.0.0-beta.1", + "@ethersproject/transactions": "^6.0.0-beta.1", + "@ethersproject/wallet": "^6.0.0-beta.1" + }, + "description": "Ethereum Providers for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "ethers", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/ethers", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/ethers/src.ts/_version.ts b/packages/ethers/src.ts/_version.ts new file mode 100644 index 000000000..2c9965d52 --- /dev/null +++ b/packages/ethers/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "ethers@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/ethers/src.ts/ethers.ts b/packages/ethers/src.ts/ethers.ts new file mode 100644 index 000000000..4532ed175 --- /dev/null +++ b/packages/ethers/src.ts/ethers.ts @@ -0,0 +1,208 @@ + +export { + Interface +} from "@ethersproject/abi"; + +export { + getAddress, getIcapAddress, + getCreateAddress, getCreate2Address, + isAddressable, isAddress, resolveAddress +} from "@ethersproject/address"; + +export { + arrayify, + decodeBase64, encodeBase64, + isHexString, isBytesLike, + concat, dataLength, dataSlice, stripZerosLeft, + hexlify, quantity, + zeroPadLeft, zeroPadRight +} from "@ethersproject/bytes"; + +export { + BaseContract, Contract, + ContractEventPayload, ContractTransactionReceipt, ContractTransactionResponse, + EventLog +} from "@ethersproject/contract"; + +export { + computeHmac, + + keccak256, + ripemd160, + sha256, sha512, + + pbkdf2, + scrypt, scryptSync, + + randomBytes, + lock, +} from "@ethersproject/crypto"; + +export { + id, + isValidName, namehash, dnsEncode, + messagePrefix, hashMessage, + TypedDataEncoder +} from "@ethersproject/hash"; + +export { + FixedFormat, FixedNumber, formatFixed, parseFixed, + fromTwos, toTwos, mask, + toArray, toBigInt, toHex, toNumber, + decodeBase58, encodeBase58 +} from "@ethersproject/math"; + +export { + defineProperties, resolveProperties, + getStore, setStore +} from "@ethersproject/properties"; + + + + + +export { + getDefaultProvider, + + AbstractProvider, UnmanagedSubscriber, + + AbstractSigner, + VoidSigner, + WrappedSigner, + + showThrottleMessage, + + EnsResolver, + + Formatter, + + NetworkPlugin, + GasCostPlugin, + EnsPlugin, + //LayerOneConnectionPlugin, + MaxPriorityFeePlugin, + //PriceOraclePlugin, + + Network, + + Block, + FeeData, + Log, + TransactionReceipt, + TransactionResponse, + + dummyProvider, + + FallbackProvider, + + JsonRpcProvider, + JsonRpcSigner, + StaticJsonRpcProvider, + + AlchemyProvider, + AnkrProvider, + CloudflareProvider, + EtherscanProvider, + InfuraProvider, + PocketProvider, + + IpcSocketProvider, + SocketProvider, + WebSocketProvider, + +} from "@ethersproject/providers"; + +export type { + ProviderPlugin, Subscriber, Subscription, + + CommunityResourcable, + + AvatarLinkageType, AvatarLinkage, AvatarResult, + + FormatFunc, + + Networkish, + GasCostParameters, + + BlockTag, + CallRequest, TransactionRequest, PreparedRequest, + EventFilter, Filter, FilterByBlockHash, OrphanFilter, ProviderEvent, + Provider, + + Signer, +} from "@ethersproject/providers"; + + +export { encodeRlp, decodeRlp } from "@ethersproject/rlp"; + +export { Signature, SigningKey } from "@ethersproject/signing-key"; + +export { + formatBytes32String, parseBytes32String, + + nameprep, + + _toEscapedUtf8String, + toUtf8Bytes, toUtf8CodePoints, toUtf8String, + + UnicodeNormalizationForm, + Utf8ErrorFuncs, Utf8ErrorReason +} from "@ethersproject/strings"; + +export { Transaction } from "@ethersproject/transactions"; + +export { + computeAddress, + + defaultPath, + + getAccountPath, + + HDNodeWallet, HDNodeVoidWallet, + HDNodeWalletManager, + + Mnemonic, + + Wallet +} from "@ethersproject/wallet"; + +export { fetchData, FetchRequest, FetchResponse } from "@ethersproject/web"; + +export { + Wordlist, WordlistOwl, WordlistOwlA, + + wordlists +} from "@ethersproject/wordlists"; + +export { version } from "./_version.js"; + + +export type { Addressable, NameResolver } from "@ethersproject/address" +export type { BytesLike, Hexable } from "@ethersproject/bytes"; +export type { + ConstantContractMethod, ContractEvent, ContractEventArgs, ContractEventName, + ContractInterface, ContractMethod, ContractMethodArgs, ContractRunner, + ContractTransaction, DeferredTopicFilter, Overrides +} from "@ethersproject/contract"; +export type { ProgressCallback } from "@ethersproject/crypto"; +export type { TypedDataDomain, TypedDataField } from "@ethersproject/hash"; +export type { + EventEmitterable, Listener, + Frozen, Freezable +} from "@ethersproject/properties"; +export type { RlpStructuredData } from "@ethersproject/rlp"; +export type { SignatureLike } from "@ethersproject/signing-key"; +export type { Utf8ErrorFunc } from "@ethersproject/strings"; +export type { + AccessList, AccessListish, + SignedTransaction, TransactionLike +} from "@ethersproject/transactions"; +export type { + ConnectionInfo, + PreflightRequestFunc, ProcessResponseFunc, + ThrottleRetryFunc +} from "@ethersproject/web"; + + + + diff --git a/packages/ethers/src.ts/index.ts b/packages/ethers/src.ts/index.ts new file mode 100644 index 000000000..ed55f588c --- /dev/null +++ b/packages/ethers/src.ts/index.ts @@ -0,0 +1,6 @@ + +// import { ethers } from "ethers"; +export * as ethers from "./ethers.js"; + +// import { toUtf8String, etc } from "ethers"; +export * from "./ethers.js"; diff --git a/packages/ethers/tsconfig.json b/packages/ethers/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/ethers/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/hash/LICENSE.md b/packages/hash/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/hash/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/hash/package.json b/packages/hash/package.json new file mode 100644 index 000000000..994794708 --- /dev/null +++ b/packages/hash/package.json @@ -0,0 +1,38 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1" + }, + "description": "Hash utilities for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/hash", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/hash", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/hash/src.ts/_version.ts b/packages/hash/src.ts/_version.ts new file mode 100644 index 000000000..35489f044 --- /dev/null +++ b/packages/hash/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/hash@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/hash/src.ts/id.ts b/packages/hash/src.ts/id.ts new file mode 100644 index 000000000..e444e5e49 --- /dev/null +++ b/packages/hash/src.ts/id.ts @@ -0,0 +1,6 @@ +import { keccak256 } from "@ethersproject/crypto"; +import { toUtf8Bytes } from "@ethersproject/strings"; + +export function id(value: string): string { + return keccak256(toUtf8Bytes(value)); +} diff --git a/packages/hash/src.ts/index.ts b/packages/hash/src.ts/index.ts new file mode 100644 index 000000000..be937ed84 --- /dev/null +++ b/packages/hash/src.ts/index.ts @@ -0,0 +1,6 @@ +export { id } from "./id.js" +export { isValidName, namehash, dnsEncode } from "./namehash.js"; +export { messagePrefix, hashMessage } from "./message.js"; +export { TypedDataEncoder } from "./typed-data.js"; + +export type { TypedDataDomain, TypedDataField } from "./typed-data.js"; diff --git a/packages/hash/src.ts/logger.ts b/packages/hash/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/hash/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/hash/src.ts/message.ts b/packages/hash/src.ts/message.ts new file mode 100644 index 000000000..1eb274612 --- /dev/null +++ b/packages/hash/src.ts/message.ts @@ -0,0 +1,15 @@ +import { concat } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { toUtf8Bytes } from "@ethersproject/strings"; + + +export const messagePrefix = "\x19Ethereum Signed Message:\n"; + +export function hashMessage(message: Uint8Array | string): string { + if (typeof(message) === "string") { message = toUtf8Bytes(message); } + return keccak256(concat([ + toUtf8Bytes(messagePrefix), + toUtf8Bytes(String(message.length)), + message + ])); +} diff --git a/packages/hash/src.ts/namehash.ts b/packages/hash/src.ts/namehash.ts new file mode 100644 index 000000000..2c2ae8d9f --- /dev/null +++ b/packages/hash/src.ts/namehash.ts @@ -0,0 +1,68 @@ +import { concat, hexlify } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { nameprep, toUtf8Bytes } from "@ethersproject/strings"; + +import { logger } from "./logger.js"; + + +const Zeros = new Uint8Array(32); +Zeros.fill(0); + +const Partition = new RegExp("^((.*)\\.)?([^.]+)$"); + +export function isValidName(name: string): boolean { + try { + const comps = name.split("."); + for (let i = 0; i < comps.length; i++) { + if (nameprep(comps[i]).length === 0) { + throw new Error("empty") + } + } + return true; + } catch (error) { } + return false; +} + +export function namehash(name: string): string { + if (typeof(name) !== "string") { + logger.throwArgumentError("invalid ENS name; not a string", "name", name); + } + + let current = name; + let result: string | Uint8Array = Zeros; + while (current.length) { + const partition = current.match(Partition); + if (partition == null || partition[2] === "") { + return logger.throwArgumentError("invalid ENS name; missing component", "name", name); + } + const label = toUtf8Bytes(nameprep(partition[3])); + result = keccak256(concat([result, keccak256(label)])); + + current = partition[2] || ""; + } + + return hexlify(result); +} + +export function dnsEncode(name: string): string { + if (typeof(name) !== "string") { + logger.throwArgumentError("invalid DNS name; not a string", "name", name); + } + + if (name === "") { return "0x00"; } + + // @TODO: should we enforce the 255 octet limit? + + return concat(name.split(".").map((comp) => { + if (comp === "") { + logger.throwArgumentError("invalid DNS name; missing component", "name", name); + } + + // We jam in an _ prefix to fill in with the length later + // Note: Nameprep throws if the component is over 63 bytes + const bytes = toUtf8Bytes("_" + nameprep(comp)); + + bytes[0] = bytes.length - 1; + return bytes; + })) + "00"; +} diff --git a/packages/hash/src.ts/tests/test-hash.ts b/packages/hash/src.ts/tests/test-hash.ts new file mode 100644 index 000000000..6a4f53171 --- /dev/null +++ b/packages/hash/src.ts/tests/test-hash.ts @@ -0,0 +1,110 @@ +import assert from "assert"; +import { loadTests } from "./utils.js" +import type { TestCaseNamehash } from "./types.js"; + + +import { dnsEncode, isValidName, namehash } from "../index.js"; + + +describe("Tests Namehash", function() { + const tests = loadTests("namehash"); + for (const test of tests) { + it(`hashes ENS names: ${ JSON.stringify(test.ensName) }`, function() { + const actual = namehash(test.ensName); + + assert.equal(actual, test.namehash, "namehash"); + + // The empty string is not a valid ENS name + if (test.ensName) { + assert.ok(isValidName(test.ensName), "isValidName"); + } + }); + } +}); + +describe("Tests Bad ENS Names", function() { + const badTests: Array<{ ensName: any, prefix: string }> = [ + { ensName: ".", prefix: "missing component" }, + { ensName:"..", prefix: "missing component" }, + { ensName:"ricmoo..eth", prefix: "missing component" }, + { ensName:"ricmoo...eth", prefix: "missing component" }, + { ensName:".foo", prefix: "missing component" }, + { ensName:"foo.", prefix: "missing component" }, + { ensName: 1234, prefix: "not a string" }, + { ensName: true, prefix: "not a string" }, + ]; + + // The empty string is not a valid name, but has a valid namehash + // (the zero hash) as it is the base case for recursion + it("empty ENS name", function() { + assert.ok(!isValidName(""), "!isValidName"); + }); + + for (const { ensName, prefix } of badTests) { + it(`fails on bad ENS name: ${ JSON.stringify(ensName) }`, function() { + assert.ok(!isValidName(ensName), "!isValidName"); + assert.throws(() => { + const result = namehash(ensName); + console.log(result); + }, (error) => { + const errorPrefix = `invalid ENS name; ${ prefix }`; + return (error.code === "INVALID_ARGUMENT" && + error.argument === "name" && error.value === ensName && + error.message.substring(0, errorPrefix.length) === errorPrefix); + }); + }); + } +}); + +describe("Tests DNS Encoding", function() { + const tests: Array<{ ensName: string, dnsEncoded: string}> = [ + { ensName: "", dnsEncoded: "0x00" }, + { ensName: "ricmoo.eth", dnsEncoded: "0x067269636d6f6f0365746800" }, + ]; + + for (const { ensName, dnsEncoded } of tests) { + it(`computes the DNS Encoding: ${ JSON.stringify(ensName) }`, function() { + assert.equal(dnsEncode(ensName), dnsEncoded, "dnsEncoded"); + }); + } +}); + +describe("Tests DNS Names", function() { + const badTests: Array<{ ensName: any, prefix: string}> = [ + { ensName: ".", prefix: "invalid DNS name; missing component" }, + { ensName: "foo..bar", prefix: "invalid DNS name; missing component" }, + { ensName: ".foo", prefix: "invalid DNS name; missing component" }, + { ensName: "foo.", prefix: "invalid DNS name; missing component" }, + { ensName: 1234, prefix: "invalid DNS name; not a string" }, + { ensName: true, prefix: "invalid DNS name; not a string" }, + ]; + + for (const { ensName, prefix } of badTests) { + it(`fails on bad DNS name: ${ JSON.stringify(ensName) }`, function() { + assert.throws(() => { + const result = dnsEncode(ensName); + console.log(result); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.argument === "name" && error.value === ensName && + error.message.substring(0, prefix.length) === prefix); + }); + }); + } + + { + const ensName = "foobar012345678901234567890123456789012345678901234567890123456789"; + const prefix = "too long"; + it(`fails on bad DNS name: ${ JSON.stringify(ensName) }`, function() { + assert.throws(() => { + const result = dnsEncode(ensName); + console.log(result); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.argument === "value" && error.value === ensName && + error.message.substring(0, prefix.length) === prefix); + }); + }); + } + +}); diff --git a/packages/hash/src.ts/tests/test-typed-data.ts b/packages/hash/src.ts/tests/test-typed-data.ts new file mode 100644 index 000000000..bf9a6ab50 --- /dev/null +++ b/packages/hash/src.ts/tests/test-typed-data.ts @@ -0,0 +1,20 @@ +import assert from "assert"; +import { loadTests } from "./utils.js"; +import type { TestCaseTypedData } from "./types.js"; + +import { TypedDataEncoder } from "../index.js"; + + +describe("Tests Typed Data (EIP-712)", function() { + const tests = loadTests("typed-data"); + for (const test of tests) { + it(`tests encoding typed-data: ${ test.name }`, function() { + const encoder = TypedDataEncoder.from(test.types); + assert.equal(encoder.primaryType, test.primaryType, "primaryType"); + assert.equal(encoder.encode(test.data), test.encoded, "encoded"); + + assert.equal(TypedDataEncoder.getPrimaryType(test.types), test.primaryType, "primaryType"); + assert.equal(TypedDataEncoder.hash(test.domain, test.types, test.data), test.digest, "digest"); + }); + } +}); diff --git a/packages/hash/src.ts/tests/types.ts b/packages/hash/src.ts/tests/types.ts new file mode 100644 index 000000000..18be09d5e --- /dev/null +++ b/packages/hash/src.ts/tests/types.ts @@ -0,0 +1,69 @@ + +export interface TestCaseHash { + name: string; + data: string; + sha256: string; + sha512: string; + ripemd160: string; + keccak256: string; +} + +export interface TestCaseNamehash { + name: string; + ensName: string; + namehash: string; +} + +export interface TestCasePbkdf { + name: string; + password: string; + salt: string; + dkLen: number; + pbkdf2: { + iterations: number; + algorithm: string; + key: string; + }, + scrypt: { + N: number; + r: number; + p: number; + key: string; + } +} + +export interface TestCaseHmac { + name: string; + data: string; + key: string; + algorithm: "sha256" | "sha512"; + hmac: string; +} + +export interface TestCaseTypedDataDomain { + name?: string; + version?: string; + chainId?: number; + verifyingContract?: string; + salt?: string; +} + +export interface TestCaseTypedDataType { + name: string; + type: string; +} + +export interface TestCaseTypedData { + name: string; + + domain: TestCaseTypedDataDomain; + primaryType: string; + types: Record> + data: any; + + encoded: string; + digest: string; + + privateKey?: string; + signature?: string; +} diff --git a/packages/hash/src.ts/tests/utils.ts b/packages/hash/src.ts/tests/utils.ts new file mode 100644 index 000000000..0b1da525d --- /dev/null +++ b/packages/hash/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + ".json.gz"); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/hash/src.ts/typed-data.ts b/packages/hash/src.ts/typed-data.ts new file mode 100644 index 000000000..c64685057 --- /dev/null +++ b/packages/hash/src.ts/typed-data.ts @@ -0,0 +1,520 @@ +//import { TypedDataDomain, TypedDataField } from "@ethersproject/providerabstract-signer"; +import { getAddress } from "@ethersproject/address"; +import { arrayify, concat, hexlify, zeroPadLeft, isHexString } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { defineProperties } from "@ethersproject/properties"; +import { mask, toHex, toTwos } from "@ethersproject/math"; + +import { id } from "./id.js"; +import { logger } from "./logger.js"; + +import type { BigNumberish, BytesLike } from "@ethersproject/logger"; + + +const padding = new Uint8Array(32); +padding.fill(0); + +const BN__1 = BigInt(-1); +const BN_0 = BigInt(0); +const BN_1 = BigInt(1); +const BN_MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + +export interface TypedDataDomain { + name?: string; + version?: string; + chainId?: BigNumberish; + verifyingContract?: string; + salt?: BytesLike; +}; + +export interface TypedDataField { + name: string; + type: string; +}; + +function hexPadRight(value: BytesLike) { + const bytes = arrayify(value); + const padOffset = bytes.length % 32 + if (padOffset) { + return concat([ bytes, padding.slice(padOffset) ]); + } + return hexlify(bytes); +} + +const hexTrue = toHex(BN_1, 32); +const hexFalse = toHex(BN_0, 32); + +const domainFieldTypes: Record = { + name: "string", + version: "string", + chainId: "uint256", + verifyingContract: "address", + salt: "bytes32" +}; + +const domainFieldNames: Array = [ + "name", "version", "chainId", "verifyingContract", "salt" +]; + +function checkString(key: string): (value: any) => string { + return function (value: any){ + if (typeof(value) !== "string") { + logger.throwArgumentError(`invalid domain value for ${ JSON.stringify(key) }`, `domain.${ key }`, value); + } + return value; + } +} + +const domainChecks: Record any> = { + name: checkString("name"), + version: checkString("version"), + chainId: function(value: any) { + return logger.getBigInt(value, "domain.chainId"); + }, + verifyingContract: function(value: any) { + try { + return getAddress(value).toLowerCase(); + } catch (error) { } + return logger.throwArgumentError(`invalid domain value "verifyingContract"`, "domain.verifyingContract", value); + }, + salt: function(value: any) { + const bytes = logger.getBytes(value, "domain.salt"); + if (bytes.length !== 32) { + logger.throwArgumentError(`invalid domain value "salt"`, "domain.salt", value); + } + return hexlify(bytes); + } +} + +function getBaseEncoder(type: string): null | ((value: any) => string) { + // intXX and uintXX + { + const match = type.match(/^(u?)int(\d*)$/); + if (match) { + const signed = (match[1] === ""); + + const width = parseInt(match[2] || "256"); + if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) { + logger.throwArgumentError("invalid numeric width", "type", type); + } + + const boundsUpper = mask(BN_MAX_UINT256, signed ? (width - 1): width); + const boundsLower = signed ? ((boundsUpper + BN_1) * BN__1): BN_0; + + return function(_value: BigNumberish) { + const value = logger.getBigInt(_value, "value"); + + if (value < boundsLower || value > boundsUpper) { + logger.throwArgumentError(`value out-of-bounds for ${ type }`, "value", value); + } + + return toHex(toTwos(value, 256), 32); + }; + } + } + + // bytesXX + { + const match = type.match(/^bytes(\d+)$/); + if (match) { + const width = parseInt(match[1]); + if (width === 0 || width > 32 || match[1] !== String(width)) { + logger.throwArgumentError("invalid bytes width", "type", type); + } + + return function(value: BytesLike) { + const bytes = arrayify(value); + if (bytes.length !== width) { + logger.throwArgumentError(`invalid length for ${ type }`, "value", value); + } + return hexPadRight(value); + }; + } + } + + switch (type) { + case "address": return function(value: string) { + return zeroPadLeft(getAddress(value), 32); + }; + case "bool": return function(value: boolean) { + return ((!value) ? hexFalse: hexTrue); + }; + case "bytes": return function(value: BytesLike) { + return keccak256(value); + }; + case "string": return function(value: string) { + return id(value); + }; + } + + return null; +} + +function encodeType(name: string, fields: Array): string { + return `${ name }(${ fields.map(({ name, type }) => (type + " " + name)).join(",") })`; +} + +export class TypedDataEncoder { + readonly primaryType!: string; + + readonly #types: string; + get types(): Record> { + return JSON.parse(this.#types); + } + + readonly #fullTypes: Map + + readonly #encoderCache: Map string>; + + constructor(types: Record>) { + this.#types = JSON.stringify(types); + this.#fullTypes = new Map(); + this.#encoderCache = new Map(); + + // Link struct types to their direct child structs + const links: Map> = new Map(); + + // Link structs to structs which contain them as a child + const parents: Map> = new Map(); + + // Link all subtypes within a given struct + const subtypes: Map> = new Map(); + + Object.keys(types).forEach((type) => { + links.set(type, new Set()); + parents.set(type, [ ]); + subtypes.set(type, new Set()); + }); + + for (const name in types) { + const uniqueNames: Set = new Set(); + + for (const field of types[name]) { + + // Check each field has a unique name + if (uniqueNames.has(field.name)) { + logger.throwArgumentError(`duplicate variable name ${ JSON.stringify(field.name) } in ${ JSON.stringify(name) }`, "types", types); + } + uniqueNames.add(field.name); + + // Get the base type (drop any array specifiers) + const baseType = ((field.type.match(/^([^\x5b]*)(\x5b|$)/)))[1] || null; + if (baseType === name) { + logger.throwArgumentError(`circular type reference to ${ JSON.stringify(baseType) }`, "types", types); + } + + // Is this a base encoding type? + const encoder = getBaseEncoder(baseType); + if (encoder) { continue; } + + if (!parents.has(baseType)) { + logger.throwArgumentError(`unknown type ${ JSON.stringify(baseType) }`, "types", types); + } + + // Add linkage + (parents.get(baseType) as Array).push(name); + (links.get(name) as Set).add(baseType); + } + } + + // Deduce the primary type + const primaryTypes = Array.from(parents.keys()).filter((n) => ((parents.get(n) as Array).length === 0)); + + if (primaryTypes.length === 0) { + logger.throwArgumentError("missing primary type", "types", types); + } else if (primaryTypes.length > 1) { + logger.throwArgumentError(`ambiguous primary types or unused types: ${ primaryTypes.map((t) => (JSON.stringify(t))).join(", ") }`, "types", types); + } + + defineProperties(this, { primaryType: primaryTypes[0] }); + + // Check for circular type references + function checkCircular(type: string, found: Set) { + if (found.has(type)) { + logger.throwArgumentError(`circular type reference to ${ JSON.stringify(type) }`, "types", types); + } + + found.add(type); + + for (const child of (links.get(type) as Set)) { + if (!parents.has(child)) { continue; } + + // Recursively check children + checkCircular(child, found); + + // Mark all ancestors as having this decendant + for (const subtype of found) { + (subtypes.get(subtype) as Set).add(child); + } + } + + found.delete(type); + } + checkCircular(this.primaryType, new Set()); + + // Compute each fully describe type + for (const [ name, set ] of subtypes) { + const st = Array.from(set); + st.sort(); + this.#fullTypes.set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join("")); + } + } + + getEncoder(type: string): (value: any) => string { + let encoder = this.#encoderCache.get(type); + if (!encoder) { + encoder = this.#getEncoder(type); + this.#encoderCache.set(type, encoder); + } + return encoder; + } + + #getEncoder(type: string): (value: any) => string { + + // Basic encoder type (address, bool, uint256, etc) + { + const encoder = getBaseEncoder(type); + if (encoder) { return encoder; } + } + + // Array + const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/); + if (match) { + const subtype = match[1]; + const subEncoder = this.getEncoder(subtype); + const length = parseInt(match[3]); + return (value: Array) => { + if (length >= 0 && value.length !== length) { + logger.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value); + } + + let result = value.map(subEncoder); + if (this.#fullTypes.has(subtype)) { + result = result.map(keccak256); + } + + return keccak256(concat(result)); + }; + } + + // Struct + const fields = this.types[type]; + if (fields) { + const encodedType = id(this.#fullTypes.get(type) as string); + return (value: Record) => { + const values = fields.map(({ name, type }) => { + const result = this.getEncoder(type)(value[name]); + if (this.#fullTypes.has(type)) { return keccak256(result); } + return result; + }); + values.unshift(encodedType); + return concat(values); + } + } + + return logger.throwArgumentError(`unknown type: ${ type }`, "type", type); + } + + encodeType(name: string): string { + const result = this.#fullTypes.get(name); + if (!result) { + return logger.throwArgumentError(`unknown type: ${ JSON.stringify(name) }`, "name", name); + } + return result; + } + + encodeData(type: string, value: any): string { + return this.getEncoder(type)(value); + } + + hashStruct(name: string, value: Record): string { + return keccak256(this.encodeData(name, value)); + } + + encode(value: Record): string { + return this.encodeData(this.primaryType, value); + } + + hash(value: Record): string { + return this.hashStruct(this.primaryType, value); + } + + _visit(type: string, value: any, callback: (type: string, data: any) => any): any { + // Basic encoder type (address, bool, uint256, etc) + { + const encoder = getBaseEncoder(type); + if (encoder) { return callback(type, value); } + } + + // Array + const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/); + if (match) { + const subtype = match[1]; + const length = parseInt(match[3]); + if (length >= 0 && value.length !== length) { + logger.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value); + } + return value.map((v: any) => this._visit(subtype, v, callback)); + } + + // Struct + const fields = this.types[type]; + if (fields) { + return fields.reduce((accum, { name, type }) => { + accum[name] = this._visit(type, value[name], callback); + return accum; + }, >{}); + } + + return logger.throwArgumentError(`unknown type: ${ type }`, "type", type); + } + + visit(value: Record, callback: (type: string, data: any) => any): any { + return this._visit(this.primaryType, value, callback); + } + + static from(types: Record>): TypedDataEncoder { + return new TypedDataEncoder(types); + } + + static getPrimaryType(types: Record>): string { + return TypedDataEncoder.from(types).primaryType; + } + + static hashStruct(name: string, types: Record>, value: Record): string { + return TypedDataEncoder.from(types).hashStruct(name, value); + } + + static hashDomain(domain: TypedDataDomain): string { + const domainFields: Array = [ ]; + for (const name in domain) { + const type = domainFieldTypes[name]; + if (!type) { + logger.throwArgumentError(`invalid typed-data domain key: ${ JSON.stringify(name) }`, "domain", domain); + } + domainFields.push({ name, type }); + } + + domainFields.sort((a, b) => { + return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name); + }); + + return TypedDataEncoder.hashStruct("EIP712Domain", { EIP712Domain: domainFields }, domain); + } + + static encode(domain: TypedDataDomain, types: Record>, value: Record): string { + return concat([ + "0x1901", + TypedDataEncoder.hashDomain(domain), + TypedDataEncoder.from(types).hash(value) + ]); + } + + static hash(domain: TypedDataDomain, types: Record>, value: Record): string { + return keccak256(TypedDataEncoder.encode(domain, types, value)); + } + + // Replaces all address types with ENS names with their looked up address + static async resolveNames(domain: TypedDataDomain, types: Record>, value: Record, resolveName: (name: string) => Promise): Promise<{ domain: TypedDataDomain, value: any }> { + // Make a copy to isolate it from the object passed in + domain = Object.assign({ }, domain); + + // Look up all ENS names + const ensCache: Record = { }; + + // Do we need to look up the domain's verifyingContract? + if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) { + ensCache[domain.verifyingContract] = "0x"; + } + + // We are going to use the encoder to visit all the base values + const encoder = TypedDataEncoder.from(types); + + // Get a list of all the addresses + encoder.visit(value, (type: string, value: any) => { + if (type === "address" && !isHexString(value, 20)) { + ensCache[value] = "0x"; + } + return value; + }); + + // Lookup each name + for (const name in ensCache) { + ensCache[name] = await resolveName(name); + } + + // Replace the domain verifyingContract if needed + if (domain.verifyingContract && ensCache[domain.verifyingContract]) { + domain.verifyingContract = ensCache[domain.verifyingContract]; + } + + // Replace all ENS names with their address + value = encoder.visit(value, (type: string, value: any) => { + if (type === "address" && ensCache[value]) { return ensCache[value]; } + return value; + }); + + return { domain, value }; + } + + static getPayload(domain: TypedDataDomain, types: Record>, value: Record): any { + // Validate the domain fields + TypedDataEncoder.hashDomain(domain); + + // Derive the EIP712Domain Struct reference type + const domainValues: Record = { }; + const domainTypes: Array<{ name: string, type:string }> = [ ]; + + domainFieldNames.forEach((name) => { + const value = (domain)[name]; + if (value == null) { return; } + domainValues[name] = domainChecks[name](value); + domainTypes.push({ name, type: domainFieldTypes[name] }); + }); + + const encoder = TypedDataEncoder.from(types); + + const typesWithDomain = Object.assign({ }, types); + if (typesWithDomain.EIP712Domain) { + logger.throwArgumentError("types must not contain EIP712Domain type", "types.EIP712Domain", types); + } else { + typesWithDomain.EIP712Domain = domainTypes; + } + + // Validate the data structures and types + encoder.encode(value); + + return { + types: typesWithDomain, + domain: domainValues, + primaryType: encoder.primaryType, + message: encoder.visit(value, (type: string, value: any) => { + + // bytes + if (type.match(/^bytes(\d*)/)) { + return hexlify(logger.getBytes(value)); + } + + // uint or int + if (type.match(/^u?int/)) { + return logger.getBigInt(value).toString(); + } + + switch (type) { + case "address": + return value.toLowerCase(); + case "bool": + return !!value; + case "string": + if (typeof(value) !== "string") { + logger.throwArgumentError(`invalid string`, "value", value); + } + return value; + } + + return logger.throwArgumentError("unsupported type", "type", type); + }) + }; + } +} + diff --git a/packages/hash/tsconfig.json b/packages/hash/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/hash/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/logger/.npmignore b/packages/logger/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/logger/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/logger/LICENSE.md b/packages/logger/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/logger/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/logger/package.json b/packages/logger/package.json new file mode 100644 index 000000000..4298d5151 --- /dev/null +++ b/packages/logger/package.json @@ -0,0 +1,36 @@ +{ + "author": "Richard Moore ", + "dependencies": {}, + "description": "Logger utility functions for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/logger", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/logger", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "reticulate": { + "typeDependencies": { + "@ethersproject/providers": "~6.0.0-beta.1", + "@ethersproject/transactions": "~6.0.0-beta.1" + } + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/logger/src.ts/_version.ts b/packages/logger/src.ts/_version.ts new file mode 100644 index 000000000..56f7e679e --- /dev/null +++ b/packages/logger/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/logger@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/logger/src.ts/errors.ts b/packages/logger/src.ts/errors.ts new file mode 100644 index 000000000..219209dde --- /dev/null +++ b/packages/logger/src.ts/errors.ts @@ -0,0 +1,277 @@ + +//export type TransactionReceipt { +//} + +export type ErrorSignature = { + r: string; + s: string; + yParity: 0 | 1; + networkV: bigint; +}; + +export type ErrorAccessList = Array<{ address: string, storageKeys: Array }>; + +/* +export interface ErrorTransaction { + type?: number; + + to?: string; + from?: string; + + nonce?: number; + + gasLimit?: bigint; + gasPrice?: bigint; + + maxPriorityFeePerGas?: bigint; + maxFeePerGas?: bigint; + + data?: string; + value?: bigint; + chainId?: bigint; + + hash?: string; + + signature?: ErrorSignature; + + accessList?: ErrorAccessList; +} +*/ + +export interface ErrorFetchRequestWithBody extends ErrorFetchRequest { + body: Readonly; +} + +export interface ErrorFetchRequest { + url: string; + method: string; + headers: Readonly>; + getHeader(key: string): string; + body: null | Readonly; + hasBody(): this is ErrorFetchRequestWithBody; +} + + +export interface ErrorFetchResponseWithBody extends ErrorFetchResponse { + body: Readonly; +} + +export interface ErrorFetchResponse { + statusCode: number; + statusMessage: string; + headers: Readonly>; + getHeader(key: string): string; + body: null | Readonly; + hasBody(): this is ErrorFetchResponseWithBody; +} + + +export type ErrorCode = + + // Generic Errors + "UNKNOWN_ERROR" | "NOT_IMPLEMENTED" | "UNSUPPORTED_OPERATION" | + "NETWORK_ERROR" | "SERVER_ERROR" | "TIMEOUT" | "BAD_DATA" | + + // Operational Errors + "BUFFER_OVERRUN" | "NUMERIC_FAULT" | + + // Argument Errors + "INVALID_ARGUMENT" | "MISSING_ARGUMENT" | "UNEXPECTED_ARGUMENT" | + "VALUE_MISMATCH" | + + // Blockchain Errors + "CALL_EXCEPTION" | "INSUFFICIENT_FUNDS" | "NONCE_EXPIRED" | + "REPLACEMENT_UNDERPRICED" | "TRANSACTION_REPLACED" | + "UNPREDICTABLE_GAS_LIMIT" | + "UNCONFIGURED_NAME" | "OFFCHAIN_FAULT" +; + +export interface EthersError extends Error { + code: ErrorCode; +// recover?: (...args: Array) => any; + info?: Record; + error?: Error; +} + +// Generic Errors + +export interface UnknownError extends EthersError<"UNKNOWN_ERROR"> { + [ key: string ]: any; +} + +export interface NotImplementedError extends EthersError<"NOT_IMPLEMENTED"> { + operation: string; +} + +export interface UnsupportedOperationError extends EthersError<"UNSUPPORTED_OPERATION"> { + operation: string; +} + +export interface NetworkError extends EthersError<"NETWORK_ERROR"> { + event: string; +} + +export interface ServerError extends EthersError<"SERVER_ERROR"> { + request: ErrorFetchRequest | string; + response?: ErrorFetchResponse; +} + +export interface TimeoutError extends EthersError<"TIMEOUT"> { + operation: string; + request: ErrorFetchRequest; +} + +export interface BadDataError extends EthersError<"BAD_DATA"> { + value: any; +} + + +// Operational Errors + +export interface BufferOverrunError extends EthersError<"BUFFER_OVERRUN"> { + buffer: Uint8Array; + length: number; + offset: number; +} + +export interface NumericFaultError extends EthersError<"NUMERIC_FAULT"> { + operation: string; + fault: string; + value: any; +} + + +// Argument Errors + +export interface InvalidArgumentError extends EthersError<"INVALID_ARGUMENT"> { + argument: string; + value: any; + info?: Record +} + +export interface MissingArgumentError extends EthersError<"MISSING_ARGUMENT"> { + count: number; + expectedCount: number; +} + +export interface UnexpectedArgumentError extends EthersError<"UNEXPECTED_ARGUMENT"> { + count: number; + expectedCount: number; +} + +//export interface ValueMismatchError extends EthersError { +// count: number; +// expectedCount: number; +//} + + +// Blockchain Errors + +export interface CallExceptionError extends EthersError<"CALL_EXCEPTION"> { + // The revert data + data: string; + + // The transaction that triggered the exception + transaction?: any; + + // The Contract, method and args used during invocation + method?: string; + signature?: string; + args?: ReadonlyArray; + + // The Solidity custom revert error + errorSignature?: string; + errorName?: string; + errorArgs?: ReadonlyArray; + reason?: string; +} + +//export interface ContractCallExceptionError extends CallExceptionError { + // The transaction call +// transaction: any;//ErrorTransaction; +//} + +export interface InsufficientFundsError extends EthersError<"INSUFFICIENT_FUNDS"> { + transaction: any;//ErrorTransaction; +} + +export interface NonceExpiredError extends EthersError<"NONCE_EXPIRED"> { + transaction: any; //ErrorTransaction; +} + +export interface OffchainFaultError extends EthersError<"OFFCHAIN_FAULT"> { + transaction?: any; + reason: string; +} + +export interface ReplacementUnderpricedError extends EthersError<"REPLACEMENT_UNDERPRICED"> { + transaction: any; //ErrorTransaction; +} + +export interface TransactionReplacedError extends EthersError<"TRANSACTION_REPLACED"> { + cancelled: boolean; + reason: "repriced" | "cancelled" | "replaced"; + hash: string; + replacement: any; //TransactionResponse; + receipt: any; //TransactionReceipt; +} + +export interface UnconfiguredNameError extends EthersError<"UNCONFIGURED_NAME"> { + value: string; +} + +export interface UnpredictableGasLimitError extends EthersError<"UNPREDICTABLE_GAS_LIMIT"> { + transaction: any; //ErrorTransaction; +} + + +// Coding; converts an ErrorCode its Typed Error + +export type CodedEthersError = + T extends "UNKNOWN_ERROR" ? UnknownError: + T extends "NOT_IMPLEMENTED" ? NotImplementedError: + T extends "UNSUPPORTED_OPERATION" ? UnsupportedOperationError: + T extends "NETWORK_ERROR" ? NetworkError: + T extends "SERVER_ERROR" ? ServerError: + T extends "TIMEOUT" ? TimeoutError: + T extends "BAD_DATA" ? BadDataError: + + T extends "BUFFER_OVERRUN" ? BufferOverrunError: + T extends "NUMERIC_FAULT" ? NumericFaultError: + + T extends "INVALID_ARGUMENT" ? InvalidArgumentError: + T extends "MISSING_ARGUMENT" ? MissingArgumentError: + T extends "UNEXPECTED_ARGUMENT" ? UnexpectedArgumentError: + + T extends "CALL_EXCEPTION" ? CallExceptionError: + T extends "INSUFFICIENT_FUNDS" ? InsufficientFundsError: + T extends "NONCE_EXPIRED" ? NonceExpiredError: + T extends "OFFCHAIN_FAULT" ? OffchainFaultError: + T extends "REPLACEMENT_UNDERPRICED" ? ReplacementUnderpricedError: + T extends "TRANSACTION_REPLACED" ? TransactionReplacedError: + T extends "UNCONFIGURED_NAME" ? UnconfiguredNameError: + T extends "UNPREDICTABLE_GAS_LIMIT" ? UnpredictableGasLimitError: + + never; + +/** + * try { + * // code.... + * } catch (e) { + * if (isError(e, errors.CALL_EXCEPTION)) { + * console.log(e.data); + * } + * } + */ +export function isError>(error: any, code: K): error is T { + return (error && (error).code === code); +} + +export function isCallException(error: any): error is CallExceptionError { + return isError(error, "CALL_EXCEPTION"); +} +/* +export function isContractCallException(error: any): error is ContractCallExceptionError { + return isError(error, "CALL_EXCEPTION") && (error).method; +} +*/ diff --git a/packages/logger/src.ts/index.ts b/packages/logger/src.ts/index.ts new file mode 100644 index 000000000..be9305a4c --- /dev/null +++ b/packages/logger/src.ts/index.ts @@ -0,0 +1,41 @@ +export { + ErrorCode, + + isError, + isCallException, +// isContractCallException +} from "./errors.js"; + +export { Logger } from "./logger.js"; + +// Types + +export type { + EthersError, + UnknownError, + NotImplementedError, + UnsupportedOperationError, + NetworkError, + ServerError, + TimeoutError, + BufferOverrunError, + NumericFaultError, + InvalidArgumentError, + MissingArgumentError, + UnexpectedArgumentError, + CallExceptionError, + //ContractCallExceptionError, + InsufficientFundsError, + NonceExpiredError, + ReplacementUnderpricedError, + TransactionReplacedError, + UnconfiguredNameError, + UnpredictableGasLimitError, + CodedEthersError +} from "./errors.js"; + +export type { + BytesLike, + BigNumberish, + Numeric +} from "./logger.js"; diff --git a/packages/logger/src.ts/logger.ts b/packages/logger/src.ts/logger.ts new file mode 100644 index 000000000..d415b9af0 --- /dev/null +++ b/packages/logger/src.ts/logger.ts @@ -0,0 +1,400 @@ +import { ErrorCode } from "./errors.js"; + +import type { CodedEthersError } from "./errors.js"; + +import { version } from "./_version.js"; + +export type BytesLike = string | Uint8Array; +export type BigNumberish = string | number | bigint; +export type Numeric = number | bigint; + + +export type ErrorInfo = Omit; + +export enum LogLevel { + DEBUG = "DEBUG", + INFO = "INFO", + WARNING = "WARNING", + ERROR = "ERROR", + OFF = "OFF" +}; + +const LogLevels: Record = { debug: 1, "default": 2, info: 2, warning: 3, error: 4, off: 5 }; + +let _logLevel = LogLevels["default"]; +let _globalLogger: null | Logger = null; + +const _normalizeForms = ["NFD", "NFC", "NFKD", "NFKC"].reduce((accum, form) => { + try { + // General test for normalize + /* c8 ignore start */ + if ("test".normalize(form) !== "test") { throw new Error("bad"); }; + /* c8 ignore stop */ + + if (form === "NFD") { + const check = String.fromCharCode(0xe9).normalize("NFD"); + const expected = String.fromCharCode(0x65, 0x0301) + /* c8 ignore start */ + if (check !== expected) { throw new Error("broken") } + /* c8 ignore stop */ + } + + accum.push(form); + } catch(error) { } + + return accum; +}, >[]); + +function defineReadOnly(object: T, name: P, value: T[P]): void { + Object.defineProperty(object, name, { + enumerable: true, writable: false, value, + }); +} +/* +enum Censor { + OFF = 0, + ON = 1, + PERMANENT = 2 +}; +let _censor = Censor.OFF; +*/ + +// IEEE 754 support 53-bits of mantissa +const maxValue = 0x1fffffffffffff; + +// The type of error to use for various error codes +const ErrorConstructors: Record): Error }> = { }; +ErrorConstructors.INVALID_ARGUMENT = TypeError; +ErrorConstructors.NUMERIC_FAULT = RangeError; +ErrorConstructors.BUFFER_OVERRUN = RangeError; + +export class Logger { + readonly version!: string; + + //static readonly Errors = ErrorCode; + static readonly LogLevels = LogLevel; + + constructor(version?: string) { + defineReadOnly(this, "version", version || "_"); + } + + makeError>(message: string, code: K, info?: ErrorInfo): T { + // Errors are being censored + //if (_censor === Censor.ON || _censor === Censor.PERMANENT) { + // return this.makeError("censored error", code, { }); + //} + + { + const details: Array = []; + if (info) { + for (const key in info) { + const value = (info[>key]); + try { + details.push(key + "=" + JSON.stringify(value)); + } catch (error) { + details.push(key + "=[could not serialize object]"); + } + } + } + details.push(`code=${ code }`); + details.push(`version=${ this.version }`); + + if (details.length) { + message += " (" + details.join(", ") + ")"; + } + } + + const create = ErrorConstructors[code] || Error; + const error = (new create(message)); + defineReadOnly(error, "code", code); + if (info) { + for (const key in info) { + defineReadOnly(error, key, (info[>key])); + } + } + return error; + } + + throwError>(message: string, code: K, info?: ErrorInfo): never { + throw this.makeError(message, code, info); + } + + throwArgumentError(message: string, name: string, value: any): never { + return this.throwError(message, "INVALID_ARGUMENT", { + argument: name, + value: value + }); + } + + assert>(condition: any, message: string, code: K, info?: ErrorInfo): void { + if (!!condition) { return; } + this.throwError(message, code || "UNKNOWN_ERROR", info); + } + + assertArgument(condition: any, message: string, name: string, value: any): void { + return this.assert(condition, message, "INVALID_ARGUMENT", { + argument: name, + value + }); + } + + assertIntegerArgument(name: string, value: any, lower?: number, upper?: number) { + let message: null | string = null; + if (typeof(value) !== "number") { + message = "expected a number"; + } else if (!Number.isInteger(value)) { + message = "invalid integer"; + } else if ((lower != null && value < lower) || (upper != null && value > upper)) { + message = "value is out of range"; + } + + if (message) { + this.throwArgumentError(message, name, value); + } + } + + assertSafeUint53(value: number, message?: string): void { + this.assertArgument((typeof(value) === "number"), "invalid number", "value", value); + + if (message == null) { message = "value not safe"; } + const operation = "assertSafeInteger"; + + this.assert((value >= 0 && value < 0x1fffffffffffff), message, "NUMERIC_FAULT", { + operation, fault: "out-of-safe-range", value + }); + + this.assert((value % 1) === 0, message, "NUMERIC_FAULT", { + operation, fault: "non-integer", value + }); + } + + assertNormalize(form: string): void { + if (_normalizeForms.indexOf(form) === -1) { + this.throwError("platform missing String.prototype.normalize", "UNSUPPORTED_OPERATION", { + operation: "String.prototype.normalize", info: { form } + }); + } + } + + assertPrivate(givenGuard: any, guard: any, className = ""): void { + if (givenGuard !== guard) { + let method = className, operation = "new"; + if (className) { + method += "."; + operation += " " + className; + } + this.throwError(`private constructor; use ${ method }from* methods`, "UNSUPPORTED_OPERATION", { + operation + }); + } + } + + assertArgumentCount(count: number, expectedCount: number, message: string = ""): void { + if (message) { message = ": " + message; } + + this.assert((count >= expectedCount), "missing arguemnt" + message, "MISSING_ARGUMENT", { + count: count, + expectedCount: expectedCount + }); + + this.assert((count >= expectedCount), "too many arguemnts" + message, "UNEXPECTED_ARGUMENT", { + count: count, + expectedCount: expectedCount + }); + } +/* + See: #2860 + assertNew(target: any, kind: any): void { + this.assert((target !== Object && target != null), "cannot use constructor as function; use new operator", "UNSUPPORTED_OPERATION", { + operation: `${ JSON.stringify(kind.name) }(...)` + }); + } +*/ + /* + assertAbstract(target: any, kind: any): void { + this.assert((target !== kind), `cannot instantiate abstract class ${ JSON.stringify(kind.name) } directly; use ${ JSON.stringify(target.name) } `, ErrorCode.UNSUPPORTED_OPERATION, { + operation: "new" + }); + + this.assert(target !== Object && target != null, "missing new", ErrorCode.MISSING_NEW, { + name: kind.name + }); + } + */ + #assertIntRange(name: string, value: number, operation: string, minValue: number): void { + if (typeof(value) !== "number" || isNaN(value)) { + this.throwArgumentError(`invalid ${ name }`, "INVALID_ARGUMENT", { + name: "value", value + }); + } + + let message: string = `invalid ${ name } value`; + let fault: null | string = null; + + if (isNaN(value)) { + fault = "not-a-number"; + } else if (value < minValue || value > maxValue) { + message = `unsafe ${ name } value`; + fault = "overflow"; + } else if (Math.floor(value) !== value) { + fault = "underflow"; + } + + if (fault) { + this.throwError(message, "NUMERIC_FAULT", { + operation, fault, value + }); + } + } + + assertInt53(value: number, operation?: string): void { + this.#assertIntRange("Int53", value, operation || "unknown", -maxValue); + } + + assertUint53(value: number, operation?: string): void { + this.#assertIntRange("Int53", value, operation || "unknown", 0); + } + + assertInteger(value: number, operation: string = "unknown", min: number = 0, max: number = maxValue): void { + //this.#assertIntRange("Int53", value, operation || "unknown", 0); + } + + #getBytes(value: BytesLike, name?: string, copy?: boolean): Uint8Array { + if (value instanceof Uint8Array) { + if (copy) { return new Uint8Array(value); } + return value; + } + + if (typeof(value) === "string" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) { + const result = new Uint8Array((value.length - 2) / 2); + let offset = 2; + for (let i = 0; i < result.length; i++) { + result[i] = parseInt(value.substring(offset, offset + 2), 16); + offset += 2; + } + return result; + } + + return this.throwArgumentError("invalid BytesLike value", name || "value", value); + } + + getBytes(value: BytesLike, name?: string): Uint8Array { + return this.#getBytes(value, name, false); + } + + getBytesCopy(value: BytesLike, name?: string): Uint8Array { + return this.#getBytes(value, name, true); + } + + getNumber(value: BigNumberish, name?: string): number { + switch (typeof(value)) { + case "bigint": + if (value < -maxValue || value > maxValue) { + this.throwArgumentError("overflow", name || "value", value); + } + return Number(value); + case "number": + if (!Number.isInteger(value)) { + this.throwArgumentError("underflow", name || "value", value); + } else if (value < -maxValue || value > maxValue) { + this.throwArgumentError("overflow", name || "value", value); + } + return value; + case "string": + try { + return this.getNumber(BigInt(value), name); + } catch(e: any) { + this.throwArgumentError(`invalid numeric string: ${ e.message }`, name || "value", value); + } + } + return this.throwArgumentError("invalid numeric value", name || "value", value); + } + + getBigInt(value: BigNumberish, name?: string): bigint { + switch (typeof(value)) { + case "bigint": return value; + case "number": + if (!Number.isInteger(value)) { + this.throwArgumentError("underflow", name || "value", value); + } else if (value < -maxValue || value > maxValue) { + this.throwArgumentError("overflow", name || "value", value); + } + return BigInt(value); + case "string": + try { + return BigInt(value); + } catch(e: any) { + this.throwArgumentError(`invalid BigNumberish string: ${ e.message }`, name || "value", value); + } + } + return this.throwArgumentError("invalid BigNumberish value", name || "value", value); + } + + #log(logLevel: LogLevel, args: Array): void { + const level = logLevel.toLowerCase(); + if (LogLevels[level] == null) { + this.throwArgumentError("invalid log level name", "logLevel", logLevel); + } + if (_logLevel > LogLevels[level]) { return; } + console.log.apply(console, args); + } + + debug(...args: Array): void { + this.#log(LogLevel.DEBUG, args); + } + + info(...args: Array): void { + this.#log(LogLevel.INFO, args); + } + + warn(...args: Array): void { + this.#log(LogLevel.WARNING, args); + } + + static globalLogger(): Logger { + if (!_globalLogger) { _globalLogger = new Logger(version); } + return _globalLogger; + } + + static setLogLevel(logLevel: LogLevel): void { + const level = LogLevels[logLevel.toLowerCase()]; + if (level == null) { + Logger.globalLogger().warn("invalid log level - " + logLevel); + return; + } + _logLevel = level; + } + /* + // @TODO: Should I get rid of censorship? + static setCensorship(censorship: boolean, permanent?: boolean): void { + // Do not allow permanently disabling censorship + Logger.globalLogger().assert((censorship || !permanent), "cannot permanently disable censorship", ErrorCode.UNSUPPORTED_OPERATION, { + operation: "setCensorship" + }); + + // New target censorship + let censor = Censor.OFF; + if (censorship) { + censor = (permanent ? Censor.PERMANENT: Censor.ON); + } + + // No change, no need to do anything + if (censor === _censor) { return; } + + // Do not allow changing state is permanent is set + this.globalLogger().assert(_censor !== Censor.PERMANENT, "error censorship is permanently enabled", ErrorCode.UNSUPPORTED_OPERATION, { + operation: "setCensorship" + }); + + _censor = censor + } + */ +} + +//const l = new Logger(); +//l.makeError("foo", Logger.Errors.NUMERIC_FAULT, { fault: "foo", operation: "bar", value: 3 }); +//l.makeError("foo", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { transaction: null }); +//l.makeError("foo", ErrorCode.NUMERIC_FAULT, { fault: "foo", operation: "bar" }); +//l.makeError("foo", ErrorCode.NUMERIC_FAULT, { fault: "foo", operation: "bar", gii: "5" }); + +//console.log(LogLevel); diff --git a/packages/logger/src.ts/tests/test-logger.ts b/packages/logger/src.ts/tests/test-logger.ts new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/packages/logger/src.ts/tests/test-logger.ts @@ -0,0 +1 @@ + diff --git a/packages/logger/tsconfig.json b/packages/logger/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/logger/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/math/.npmignore b/packages/math/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/math/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/math/LICENSE.md b/packages/math/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/math/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/math/package.json b/packages/math/package.json new file mode 100644 index 000000000..a1d556e48 --- /dev/null +++ b/packages/math/package.json @@ -0,0 +1,35 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1" + }, + "description": "Ethers math utilities and operations.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "bignumber", + "math", + "bn" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/math", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/math", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/math/src.ts/_version.ts b/packages/math/src.ts/_version.ts new file mode 100644 index 000000000..4d9ab4dee --- /dev/null +++ b/packages/math/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/math@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/math/src.ts/base58.ts b/packages/math/src.ts/base58.ts new file mode 100644 index 000000000..ac20cf978 --- /dev/null +++ b/packages/math/src.ts/base58.ts @@ -0,0 +1,47 @@ + +import { toBigInt, toHex } from "./convert.js"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + + +const Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +let Lookup: null | Record = null; + +function getAlpha(letter: string): bigint { + if (Lookup == null) { + Lookup = { }; + for (let i = 0; i < Alphabet.length; i++) { + Lookup[Alphabet[i]] = BigInt(i); + } + } + const result = Lookup[letter]; + if (result == null) { + logger.throwArgumentError(`invalid base58 value`, "letter", letter); + } + return result; +} + + +const BN_0 = BigInt(0); +const BN_58 = BigInt(58); + +export function encodeBase58(_value: BytesLike): string { + let value = toBigInt(logger.getBytes(_value)); + let result = ""; + while (value) { + result = Alphabet[Number(value % BN_58)] + result; + value /= BN_58; + } + return result; +} + +export function decodeBase58(value: string): string { + let result = BN_0; + for (let i = 0; i < value.length; i++) { + result *= BN_58; + result += getAlpha(value[i]); + } + return toHex(result); +} + diff --git a/packages/math/src.ts/convert.ts b/packages/math/src.ts/convert.ts new file mode 100644 index 000000000..4f1d2ed80 --- /dev/null +++ b/packages/math/src.ts/convert.ts @@ -0,0 +1,73 @@ +import { logger } from "./logger.js"; + +import type { BigNumberish, Numeric } from "@ethersproject/logger"; + + +// IEEE 754 support 53-bits of mantissa +const maxValue = 0x1fffffffffffff; + +const nibbles = "0123456789abcdef"; + +const BN_0 = BigInt(0); + + +// Converts a value to a BigInt, including big endian data +export function toBigInt(_value: BigNumberish | Uint8Array): bigint { + if (_value instanceof Uint8Array) { + let result = "0x0"; + for (const v of _value) { + result += nibbles[v >> 4]; + result += nibbles[v & 0x0f]; + } + return BigInt(result); + } + return logger.getBigInt(_value, "value"); +} + +export function toNumber(_value: BigNumberish | Uint8Array): number { + const value = toBigInt(_value); + if (value < -maxValue || value > maxValue) { + logger.throwArgumentError("overflow", "value", _value); + } + return Number(value); +} + +// Converts value to hex, optionally padding on the left to width bytes +export function toHex(_value: BigNumberish, _width?: Numeric): string { + const value = logger.getBigInt(_value, "value"); + if (value < 0) { throw new Error("cannot convert negative value to hex"); } + + let result = value.toString(16); + + if (_width == null) { + // Ensure the value is of even length + if (result.length % 2) { result = "0" + result; } + } else { + const width = logger.getNumber(_width, "width"); + if (width * 2 < result.length) { throw new Error(`value ${ value } exceeds width ${ width }`); } + + // Pad the value to the required width + while (result.length < (width * 2)) { result = "0" + result; } + + } + + return "0x" + result; +} + +export function toArray(_value: BigNumberish): Uint8Array { + const value = logger.getBigInt(_value, "value"); + if (value < 0) { throw new Error("cannot convert negative value to hex"); } + + if (value === BN_0) { return new Uint8Array([ ]); } + + let hex = value.toString(16); + if (hex.length % 2) { hex = "0" + hex; } + + const result = new Uint8Array(hex.length / 2); + for (let i = 0; i < result.length; i++) { + const offset = i * 2; + result[i] = parseInt(hex.substring(offset, offset + 2), 16); + } + + return result; +} diff --git a/packages/math/src.ts/fixednumber.ts b/packages/math/src.ts/fixednumber.ts new file mode 100644 index 000000000..5a217b1af --- /dev/null +++ b/packages/math/src.ts/fixednumber.ts @@ -0,0 +1,397 @@ + +import { toBigInt, toHex } from "./convert.js"; +import { logger } from "./logger.js"; +import { fromTwos, toTwos } from "./maths.js"; + +import type { BigNumberish, BytesLike, Numeric } from "@ethersproject/logger"; + + +const _constructorGuard = { }; + +//const Zero = BigInt(0); +const NegativeOne = BigInt(-1); + +function throwFault(message: string, fault: string, operation: string, value?: any): never { + const params: any = { fault: fault, operation: operation }; + if (value !== undefined) { params.value = value; } + return logger.throwError(message, "NUMERIC_FAULT", params); +} + +// Constant to pull zeros from for multipliers +let zeros = "0"; +while (zeros.length < 256) { zeros += zeros; } + +// Returns a string "1" followed by decimal "0"s +function getMultiplier(decimals: number): bigint { + + if (typeof(decimals) !== "number" || decimals < 0 || decimals > 256 || decimals % 1 ) { + logger.throwArgumentError("invalid decimal length", "decimals", decimals); + } + + return BigInt("1" + zeros.substring(0, decimals)); +} + +export function formatFixed(_value: BigNumberish, _decimals = 0): string { + let value = logger.getBigInt(_value, "value"); + const decimals = logger.getNumber(_decimals, "decimals"); + + const multiplier = getMultiplier(decimals); + const multiplierStr = String(multiplier); + + const negative = (value < 0); + if (negative) { value *= NegativeOne; } + + let fraction = String(value % multiplier); + + // Make sure there are enough place-holders + while (fraction.length < multiplierStr.length - 1) { fraction = "0" + fraction; } + + // Strip training 0 + while (fraction.length > 1 && fraction.substring(fraction.length - 1) === "0") { + fraction = fraction.substring(0, fraction.length - 1); + } + + let result = String(value / multiplier); + if (multiplierStr.length !== 1) { result += "." + fraction; } + + if (negative) { result = "-" + result; } + + return result; +} + +export function parseFixed(value: string, _decimals: Numeric = 0): bigint { + const decimals = logger.getNumber(_decimals, "decimals"); + + const multiplier = getMultiplier(decimals); + + if (typeof(value) !== "string" || !value.match(/^-?[0-9.]+$/)) { + logger.throwArgumentError("invalid decimal value", "value", value); + } + + // Is it negative? + const negative = (value.substring(0, 1) === "-"); + if (negative) { value = value.substring(1); } + + if (value === ".") { + logger.throwArgumentError("missing value", "value", value); + } + + // Split it into a whole and fractional part + const comps = value.split("."); + if (comps.length > 2) { + logger.throwArgumentError("too many decimal points", "value", value); + } + + let whole = (comps[0] || "0"), fraction = (comps[1] || "0"); + + // Trim trialing zeros + while (fraction[fraction.length - 1] === "0") { + fraction = fraction.substring(0, fraction.length - 1); + } + + // Check the fraction doesn't exceed our decimals size + if (fraction.length > String(multiplier).length - 1) { + throwFault("fractional component exceeds decimals", "underflow", "parseFixed"); + } + + // If decimals is 0, we have an empty string for fraction + if (fraction === "") { fraction = "0"; } + + // Fully pad the string with zeros to get to wei + while (fraction.length < String(multiplier).length - 1) { fraction += "0"; } + + const wholeValue = BigInt(whole); + const fractionValue = BigInt(fraction); + + let wei = (wholeValue * multiplier) + fractionValue; + + if (negative) { wei *= NegativeOne; } + + return wei; +} + + +export class FixedFormat { + readonly signed: boolean; + readonly width: number; + readonly decimals: number; + readonly name: string; + + readonly _multiplier: bigint; + + constructor(constructorGuard: any, signed: boolean, width: number, decimals: number) { + if (constructorGuard !== _constructorGuard) { + logger.throwError("cannot use FixedFormat constructor; use FixedFormat.from", "UNSUPPORTED_OPERATION", { + operation: "new FixedFormat" + }); + } + + this.signed = signed; + this.width = width; + this.decimals = decimals; + + this.name = (signed ? "": "u") + "fixed" + String(width) + "x" + String(decimals); + + this._multiplier = getMultiplier(decimals); + + Object.freeze(this); + } + + static from(value: any): FixedFormat { + if (value instanceof FixedFormat) { return value; } + + if (typeof(value) === "number") { + value = `fixed128x${value}` + } + + let signed = true; + let width = 128; + let decimals = 18; + + if (typeof(value) === "string") { + if (value === "fixed") { + // defaults... + } else if (value === "ufixed") { + signed = false; + } else { + const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/); + if (!match) { + return logger.throwArgumentError("invalid fixed format", "format", value); + } + signed = (match[1] !== "u"); + width = parseInt(match[2]); + decimals = parseInt(match[3]); + } + } else if (value) { + const check = (key: string, type: string, defaultValue: any): any => { + if (value[key] == null) { return defaultValue; } + if (typeof(value[key]) !== type) { + logger.throwArgumentError("invalid fixed format (" + key + " not " + type +")", "format." + key, value[key]); + } + return value[key]; + } + signed = check("signed", "boolean", signed); + width = check("width", "number", width); + decimals = check("decimals", "number", decimals); + } + + if (width % 8) { + logger.throwArgumentError("invalid fixed format width (not byte aligned)", "format.width", width); + } + + if (decimals > 80) { + logger.throwArgumentError("invalid fixed format (decimals too large)", "format.decimals", decimals); + } + + return new FixedFormat(_constructorGuard, signed, width, decimals); + } +} + +export class FixedNumber { + readonly format: FixedFormat; + + readonly _isFixedNumber: boolean; + + //#hex: string; + #value: string; + + constructor(constructorGuard: any, hex: string, value: string, format?: FixedFormat) { + if (constructorGuard !== _constructorGuard) { + logger.throwError("cannot use FixedNumber constructor; use FixedNumber.from", "UNSUPPORTED_OPERATION", { + operation: "new FixedFormat" + }); + } + + this.format = FixedFormat.from(format); + //this.#hex = hex; + this.#value = value; + + this._isFixedNumber = true; + + Object.freeze(this); + } + + #checkFormat(other: FixedNumber): void { + if (this.format.name !== other.format.name) { + logger.throwArgumentError("incompatible format; use fixedNumber.toFormat", "other", other); + } + } + + addUnsafe(other: FixedNumber): FixedNumber { + this.#checkFormat(other); + const a = parseFixed(this.#value, this.format.decimals); + const b = parseFixed(other.#value, other.format.decimals); + return FixedNumber.fromValue(a + b, this.format.decimals, this.format); + } + + subUnsafe(other: FixedNumber): FixedNumber { + this.#checkFormat(other); + const a = parseFixed(this.#value, this.format.decimals); + const b = parseFixed(other.#value, other.format.decimals); + return FixedNumber.fromValue(a - b, this.format.decimals, this.format); + } + + mulUnsafe(other: FixedNumber): FixedNumber { + this.#checkFormat(other); + const a = parseFixed(this.#value, this.format.decimals); + const b = parseFixed(other.#value, other.format.decimals); + return FixedNumber.fromValue((a * b) / this.format._multiplier, this.format.decimals, this.format); + } + + divUnsafe(other: FixedNumber): FixedNumber { + this.#checkFormat(other); + const a = parseFixed(this.#value, this.format.decimals); + const b = parseFixed(other.#value, other.format.decimals); + return FixedNumber.fromValue((a * this.format._multiplier) / b, this.format.decimals, this.format); + } + + floor(): FixedNumber { + const comps = this.toString().split("."); + if (comps.length === 1) { comps.push("0"); } + + let result = FixedNumber.from(comps[0], this.format); + + const hasFraction = !comps[1].match(/^(0*)$/); + if (this.isNegative() && hasFraction) { + result = result.subUnsafe(ONE.toFormat(result.format)); + } + + return result; + } + + ceiling(): FixedNumber { + const comps = this.toString().split("."); + if (comps.length === 1) { comps.push("0"); } + + let result = FixedNumber.from(comps[0], this.format); + + const hasFraction = !comps[1].match(/^(0*)$/); + if (!this.isNegative() && hasFraction) { + result = result.addUnsafe(ONE.toFormat(result.format)); + } + + return result; + } + + // @TODO: Support other rounding algorithms + round(decimals?: number): FixedNumber { + if (decimals == null) { decimals = 0; } + + // If we are already in range, we're done + const comps = this.toString().split("."); + if (comps.length === 1) { comps.push("0"); } + + if (decimals < 0 || decimals > 80 || (decimals % 1)) { + logger.throwArgumentError("invalid decimal count", "decimals", decimals); + } + + if (comps[1].length <= decimals) { return this; } + + const factor = FixedNumber.from("1" + zeros.substring(0, decimals), this.format); + const bump = BUMP.toFormat(this.format); + + return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor); + } + + isZero(): boolean { + return (this.#value === "0.0" || this.#value === "0"); + } + + isNegative(): boolean { + return (this.#value[0] === "-"); + } + + toString(): string { return this.#value; } + + toHexString(_width: Numeric): string { + throw new Error("TODO"); + /* + return toHex(); + if (width == null) { return this.#hex; } + + const width = logger.getNumeric(_width); + if (width % 8) { logger.throwArgumentError("invalid byte width", "width", width); } + + const hex = BigNumber.from(this.#hex).fromTwos(this.format.width).toTwos(width).toHexString(); + return zeroPadLeft(hex, width / 8); + */ + } + + toUnsafeFloat(): number { return parseFloat(this.toString()); } + + toFormat(format: FixedFormat | string): FixedNumber { + return FixedNumber.fromString(this.#value, format); + } + + + static fromValue(value: BigNumberish, decimals = 0, format: FixedFormat | string | number = "fixed"): FixedNumber { + return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format)); + } + + + static fromString(value: string, format: FixedFormat | string | number = "fixed"): FixedNumber { + const fixedFormat = FixedFormat.from(format); + const numeric = parseFixed(value, fixedFormat.decimals); + + if (!fixedFormat.signed && numeric < 0) { + throwFault("unsigned value cannot be negative", "overflow", "value", value); + } + + const hex = (function() { + if (fixedFormat.signed) { + return toHex(toTwos(numeric, fixedFormat.width)); + } + return toHex(numeric, fixedFormat.width / 8); + })(); + + const decimal = formatFixed(numeric, fixedFormat.decimals); + + return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat); + } + + static fromBytes(_value: BytesLike, format: FixedFormat | string | number = "fixed"): FixedNumber { + const value = logger.getBytes(_value, "value"); + const fixedFormat = FixedFormat.from(format); + + if (value.length > fixedFormat.width / 8) { + throw new Error("overflow"); + } + + let numeric = toBigInt(value); + if (fixedFormat.signed) { numeric = fromTwos(numeric, fixedFormat.width); } + + const hex = toHex(toTwos(numeric, (fixedFormat.signed ? 0: 1) + fixedFormat.width)); + const decimal = formatFixed(numeric, fixedFormat.decimals); + + return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat); + } + + static from(value: any, format?: FixedFormat | string | number) { + if (typeof(value) === "string") { + return FixedNumber.fromString(value, format); + } + + if (value instanceof Uint8Array) { + return FixedNumber.fromBytes(value, format); + } + + try { + return FixedNumber.fromValue(value, 0, format); + } catch (error: any) { + // Allow NUMERIC_FAULT to bubble up + if (error.code !== "INVALID_ARGUMENT") { + throw error; + } + } + + return logger.throwArgumentError("invalid FixedNumber value", "value", value); + } + + static isFixedNumber(value: any): value is FixedNumber { + return !!(value && value._isFixedNumber); + } +} + +const ONE = FixedNumber.from(1); +const BUMP = FixedNumber.from("0.5"); + diff --git a/packages/math/src.ts/index.ts b/packages/math/src.ts/index.ts new file mode 100644 index 000000000..2073af8c5 --- /dev/null +++ b/packages/math/src.ts/index.ts @@ -0,0 +1,5 @@ + +export { FixedFormat, FixedNumber, formatFixed, parseFixed } from "./fixednumber.js"; +export { fromTwos, toTwos, mask } from "./maths.js"; +export { toArray, toBigInt, toHex, toNumber } from "./convert.js"; +export { decodeBase58, encodeBase58 } from "./base58.js"; diff --git a/packages/math/src.ts/logger.ts b/packages/math/src.ts/logger.ts new file mode 100644 index 000000000..f7860a559 --- /dev/null +++ b/packages/math/src.ts/logger.ts @@ -0,0 +1,4 @@ + +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/math/src.ts/maths.ts b/packages/math/src.ts/maths.ts new file mode 100644 index 000000000..0f647b514 --- /dev/null +++ b/packages/math/src.ts/maths.ts @@ -0,0 +1,42 @@ + +import { logger } from "./logger.js"; + +import type { BigNumberish, Numeric } from "@ethersproject/logger"; + + + +const BN_0 = BigInt(0); +const BN_1 = BigInt(1); + +// Convert a value from a twos-compliment value +export function fromTwos(_value: BigNumberish, _width: Numeric): bigint { + const value = logger.getBigInt(_value, "value"); + const width = BigInt(logger.getNumber(_width, "width")); + + // Top bit set; treat as a negative value + if (value >> (width - BN_1)) { + const mask = (BN_1 << width) - BN_1; + return -(((~value) & mask) + BN_1); + } + + return value; +} + +// Convert value to a twos-compliment value +export function toTwos(_value: BigNumberish, _width: Numeric): bigint { + const value = logger.getBigInt(_value, "value"); + const width = BigInt(logger.getNumber(_width, "width")); + + if (value < BN_0) { + const mask = (BN_1 << width) - BN_1; + return ((~(-value)) & mask) + BN_1; + } + + return value; +} + +export function mask(_value: BigNumberish, _bits: Numeric): bigint { + const value = logger.getBigInt(_value, "value"); + const bits = logger.getBigInt(_bits, "bits"); + return value & ((BN_1 << bits) - BN_1); +} diff --git a/packages/math/tsconfig.json b/packages/math/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/math/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/properties/.npmignore b/packages/properties/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/properties/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/properties/LICENSE.md b/packages/properties/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/properties/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/properties/package.json b/packages/properties/package.json new file mode 100644 index 000000000..93d6a74fc --- /dev/null +++ b/packages/properties/package.json @@ -0,0 +1,32 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/logger": "^6.0.0-beta.1" + }, + "description": "Properties utility functions for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/properties", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/properties", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/properties/src.ts/_version.ts b/packages/properties/src.ts/_version.ts new file mode 100644 index 000000000..4933907d0 --- /dev/null +++ b/packages/properties/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/properties@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/properties/src.ts/copy.ts b/packages/properties/src.ts/copy.ts new file mode 100644 index 000000000..6c3ed1f7e --- /dev/null +++ b/packages/properties/src.ts/copy.ts @@ -0,0 +1,68 @@ +/* +const immutable = Symbol.for("_ethersInternalImmutable"); +const valueImmutable = "immutable"; + +export function markImmutable(value: any): void { + value[immutable] = valueImmutable; +} + +export function unmarkImmutable(value: any): void { + value[immutable] = ""; +} + +class WrappedAddress { + #promise: Promise; + + constructor(promise: Promise) { + this.#promise = promise; + } + + async getAddress(): Promise { + return this.#promise; + } +} + +const primitives = "bigint,boolean,function,number,string,symbol".split(/,/); +function _deepCopy(value: any): any { + // null or something primitive and therefore immutable + if (value == null) { return null; } + if (primitives.indexOf(typeof(value)) >= 0) { return value; } + + if (typeof(value) === "object") { + // We internally marked this object as safe enough + if (immutable in value && value[immutable] === valueImmutable) { + return value; + } + + // Promises are safe enough + if ("then" in value && typeof(value.then) === "function") { + return value; + } + + // The result of the getAddress is what we are after + if ("getAddress" in value && typeof(value.getAddress) === "function") { + return new WrappedAddress(value.getAddress()); + } + + // Copy all the array elements + if (Array.isArray(value)) { + return value.map((v) => _deepCopy(v)); + } + + // Create a copy of the object + const result: Record = { }; + for (const key in result) { + result[key] = value[key]; + } + } + + throw new Error("failure to copy"); +} + +// Deep copy is used by overrides and situations where we need a copy +// of a generic object that won't change by normal usage. It is not +// generally useful outside the scope of this library. +export function deepCopy(value: T): T { + return _deepCopy(value); +} +*/ diff --git a/packages/properties/src.ts/events.ts b/packages/properties/src.ts/events.ts new file mode 100644 index 000000000..6c2a57e9f --- /dev/null +++ b/packages/properties/src.ts/events.ts @@ -0,0 +1,36 @@ +import { defineProperties } from "./properties.js"; + +export type Listener = (...args: Array) => void; + +export interface EventEmitterable { + on(event: T, listener: Listener): Promise; + once(event: T, listener: Listener): Promise; + emit(event: T, ...args: Array): Promise; + listenerCount(event?: T): Promise; + listeners(event?: T): Promise>; + off(event: T, listener?: Listener): Promise; + removeAllListeners(event?: T): Promise; + + // Alias for "on" + addListener(event: T, listener: Listener): Promise; + + // Alias for "off" + removeListener(event: T, listener: Listener): Promise; +} + +export class EventPayload { + readonly filter!: T; + + readonly emitter!: EventEmitterable; + readonly #listener: null | Listener; + + constructor(emitter: EventEmitterable, listener: null | Listener, filter: T) { + this.#listener = listener; + defineProperties>(this, { emitter, filter }); + } + + async removeListener(): Promise { + if (this.#listener == null) { return; } + await this.emitter.off(this.filter, this.#listener); + } +} diff --git a/packages/properties/src.ts/freezable.ts b/packages/properties/src.ts/freezable.ts new file mode 100644 index 000000000..43c3da5ee --- /dev/null +++ b/packages/properties/src.ts/freezable.ts @@ -0,0 +1,12 @@ + +export interface Freezable { + clone(): T; + freeze(): Frozen; + isFrozen(): boolean; +} + +export type Frozen = Readonly<{ + [ P in keyof T ]: T[P] extends (...args: Array) => any ? T[P]: + T[P] extends Freezable ? Frozen: + Readonly; +}>; diff --git a/packages/properties/src.ts/index.ts b/packages/properties/src.ts/index.ts new file mode 100644 index 000000000..d4365b08c --- /dev/null +++ b/packages/properties/src.ts/index.ts @@ -0,0 +1,7 @@ +//export { deepCopy, markImmutable, unmarkImmutable } from "./copy.js"; +export { EventPayload } from "./events.js"; +export { defineProperties, resolveProperties} from "./properties.js"; +export { getStore, setStore } from "./storage.js"; + +export type { EventEmitterable, Listener } from "./events.js"; +export type { Frozen, Freezable } from "./freezable.js"; diff --git a/packages/properties/src.ts/promise.ts b/packages/properties/src.ts/promise.ts new file mode 100644 index 000000000..c178e3299 --- /dev/null +++ b/packages/properties/src.ts/promise.ts @@ -0,0 +1,5 @@ +/* +export async function resolveProperties(props: Record>): Promise> { + throw new Error(); +} +*/ diff --git a/packages/properties/src.ts/properties.ts b/packages/properties/src.ts/properties.ts new file mode 100644 index 000000000..5dd0994dc --- /dev/null +++ b/packages/properties/src.ts/properties.ts @@ -0,0 +1,229 @@ +//import type { BigNumber, BigNumberish } from "./big-number"; +//import type { Bytes, BytesLike } from "./bytes"; +//import type { Signature, SignatureLike } from "./signature"; +/* +export type Loose = T extends BigNumber ? BigNumberish: + T extends number ? BigNumberish: + T extends Bytes ? BytesLike: + T extends Signature ? SignatureLike: + T; +export type LooseObject = { [P in keyof T]?: Loose; }; +*/ + +//export type Deferrable = T | Promise; +/* +export type DeferrableObject = { + [ P in keyof T ]: Deferrable +}; +*/ +/* +export type Frozen = Readonly<{ + [ P in keyof T ]: T[P] extends Freezable ? Frozen: T[P]; +}>; + +export interface Freezable { + clone(): T; + freeze(): Frozen; + isFrozen(): boolean; +} +*/ +/* +const _data: WeakMap = new WeakMap(); + +export class Data implements Freezable { + #props: { + data: Uint8Array + }; + + [ index: number ]: number; + + constructor(lengthOrData: number | Uint8Array) { + if (typeof(lengthOrData) === "number") { + _data[this] = new Uint8Array(lengthOrData); + } else { + _data[this] = lengthOrData; + } + + return new Proxy(this, { + get: (target, prop, receiver) => { + const index = parseInt(String(prop)); + if (String(index) !== prop) { return Reflect.get(target, prop, receiver); } + + const data = _data[this]; + if (index < 0 || index > data.length || index % 1) { + throw new Error(""); + } + return data[index]; + }, + + set: (target, prop, value, receiver) => { + const index = parseInt(String(prop)); + if (String(index) !== prop) { return false; } + + if (value < 0 || value > 255 || value % 1) { return false; } + + const data = _data[this]; + if (index < 0 || index > data.length || index % 1) { + return false; + } + + data[index] = value; + + return true; + }, + }); + } + + toString(): string { + return this.slice().toString(); + } + + slice(): Uint8Array { + return _data.get(this).slice(); + } + + clone(): Data { + return new Data(this.slice()); + } + + freeze(): Frozen { + //Object.freeze(this.#props); + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } +} +const d = new Data(4); +console.log(d.toString()); +d[0] = 45; +console.log(d.toString()); +*/ +/* +export type DeferrableObject = { + [ P in keyof T ]: Deferrable +}; +*/ + +export async function resolveProperties(value: { [ P in keyof T ]: T[P] | Promise}): Promise { + const keys = Object.keys(value); + const results = await Promise.all(keys.map((k) => Promise.resolve(value[k]))); + return results.reduce((accum: any, v, index) => { + accum[keys[index]] = v; + return accum; + }, <{ [ P in keyof T]: T[P] }>{ }); +} + +export function defineReadOnly(object: T, name: P, value: T[P]): void { + Object.defineProperty(object, name, { + enumerable: true, + value: value, + writable: false, + }); +} +/* +export function getStore(store: T, key: P): T[P] { + return store[key]; +} + +export function setStore(store: T, key: P, value: T[P]): void { + if (Object.isFrozen(store)) { + throw new Error("frozen object is immuatable; cannot set " + key); + } + store[key] = value; +} +*/ +export interface CancellablePromise extends Promise { + cancel(): Promise; +} +/* +export type IsCancelled = () => Promise; + +export function createPromise(resolve: (isCancelled: IsCancelled, (result: T) => void) => void, reject: (error: Error) => void, isCancelled: IsCancelled): CancellablePromise { + let cancelled = false; + + const promise = new Promise((resolve, reject) => { + + }); + + (>promise).cancel = function() { + cancelled = true; + }; + + return (>promise); +} +*/ +/* +export class A implements Freezable { + foo: number; + constructor(foo: number) { + this.foo = foo; + } + freeze(): Frozen { + Object.freeze(this); + return this; + } + clone(): A { + return new A(this.foo); + } +} + +export class B implements Freezable { + a: A; + constructor(a: A) { + this.a = a; + } + freeze(): Frozen { + this.a.freeze(); + Object.freeze(this); + return this; + } + clone(): B { + return new B(this.a); + } +} + +export function test() { + const a = new A(123); + const b = new B(a); + b.a = new A(234); + const b2 = b.freeze(); + b2.a.foo = 123; // = a; +} +*/ + +function checkType(value: any, type: string): void { + const types = type.split("|").map(t => t.trim()); + for (let i = 0; i < types.length; i++) { + switch (type) { + case "any": + return; + case "boolean": + case "number": + case "string": + if (typeof(value) === type) { return; } + } + } + throw new Error("invalid value for type"); +} + +export function defineProperties( + target: T, + values: { [ K in keyof T ]?: undefined | T[K] }, + types?: { [ K in keyof T ]?: string }, + defaults?: { [ K in keyof T ]?: T[K] }): void { + + for (let key in values) { + let value = values[key]; + + const fallback = (defaults ? defaults[key]: undefined); + if (fallback !== undefined) { + value = fallback; + } else { + const type = (types ? types[key]: null); + if (type) { checkType(value, type); } + } + Object.defineProperty(target, key, { enumerable: true, value, writable: false }); + } +} diff --git a/packages/properties/src.ts/storage.ts b/packages/properties/src.ts/storage.ts new file mode 100644 index 000000000..fec807071 --- /dev/null +++ b/packages/properties/src.ts/storage.ts @@ -0,0 +1,10 @@ +export function getStore(store: T, key: P): T[P] { + return store[key]; +} + +export function setStore(store: T, key: P, value: T[P]): void { + if (Object.isFrozen(store)) { + throw new Error("frozen object is immuatable; cannot set " + key); + } + store[key] = value; +} diff --git a/packages/properties/tsconfig.json b/packages/properties/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/properties/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/providers/.env b/packages/providers/.env new file mode 100644 index 000000000..4343b4656 --- /dev/null +++ b/packages/providers/.env @@ -0,0 +1,4 @@ +{ + "privateKey": "", + "test-server-secret": "0x62ba8656ec75098813a0" +} diff --git a/packages/providers/.npmignore b/packages/providers/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/providers/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/providers/LICENSE.md b/packages/providers/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/providers/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/providers/package.json b/packages/providers/package.json new file mode 100644 index 000000000..f6c383755 --- /dev/null +++ b/packages/providers/package.json @@ -0,0 +1,56 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/hash": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/signing-key": "^6.0.0-beta.1", + "@ethersproject/transactions": "^6.0.0-beta.1", + "@ethersproject/web": "^6.0.0-beta.1", + "ws": "8.5.0" + }, + "dummy": { + "@ethersproject/abstract-provider": "^6.0.0-beta.1", + "@ethersproject/abstract-signer": "^6.0.0-beta.1", + "@ethersproject/basex": "^6.0.0-beta.1", + "@ethersproject/constants": "^6.0.0-beta.1", + "@ethersproject/hash": "^6.0.0-beta.1", + "@ethersproject/networks": "^6.0.0-beta.1", + "@ethersproject/random": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/rlp": "^6.0.0-beta.1", + "@ethersproject/sha2": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1", + "@ethersproject/transactions": "^6.0.0-beta.1", + "@ethersproject/web": "^5.4.0" + }, + "description": "Ethereum Providers for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/providers", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/providers", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/providers/src.ts/_version.ts b/packages/providers/src.ts/_version.ts new file mode 100644 index 000000000..ad3cce9d8 --- /dev/null +++ b/packages/providers/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/providers@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/providers/src.ts/abstract-provider.ts b/packages/providers/src.ts/abstract-provider.ts new file mode 100644 index 000000000..91cf31341 --- /dev/null +++ b/packages/providers/src.ts/abstract-provider.ts @@ -0,0 +1,1240 @@ +// @TODO +// Event coalescence +// When we register an event with an async value (e.g. address is a Signer +// or ENS name), we need to add it immeidately for the Event API, but also +// need time to resolve the address. Upon resolving the address, we need to +// migrate the listener to the static event. We also need to maintain a map +// of Signer/ENS name to address so we can sync respond to listenerCount. + +import { resolveAddress } from "@ethersproject/address"; +import { concat, dataLength, dataSlice, hexlify, isHexString } from "@ethersproject/bytes"; +import { isCallException } from "@ethersproject/logger"; +import { toArray } from "@ethersproject/math"; +import { defineProperties, EventPayload, resolveProperties } from "@ethersproject/properties"; +import { toUtf8String } from "@ethersproject/strings"; +import { fetchData, FetchRequest } from "@ethersproject/web"; + +import { EnsResolver } from "./ens-resolver.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { Block, FeeData, Log, TransactionReceipt, TransactionResponse } from "./provider.js"; +import { + PollingBlockSubscriber, PollingEventSubscriber, PollingOrphanSubscriber, PollingTransactionSubscriber +} from "./subscriber-polling.js"; + +import type { Addressable } from "@ethersproject/address"; +import type { BigNumberish, BytesLike } from "@ethersproject/logger"; +import type { Frozen, Listener } from "@ethersproject/properties"; +import type { AccessList } from "@ethersproject/transactions"; + +import type { Networkish } from "./network.js"; +import type { MaxPriorityFeePlugin } from "./plugins-network.js"; +import type { + BlockTag, CallRequest, EventFilter, Filter, FilterByBlockHash, + LogParams, OrphanFilter, Provider, ProviderEvent, TransactionRequest, +} from "./provider.js"; + + +// Constants +const BN_2 = BigInt(2); + +const MAX_CCIP_REDIRECTS = 10; + + +function getTag(prefix: string, value: any): string { + return prefix + ":" + JSON.stringify(value, (k, v) => { + if (typeof(v) === "bigint") { return `bigint:${ v.toString() }`} + if (typeof(v) === "string") { return v.toLowerCase(); } + + // Sort object keys + if (typeof(v) === "object" && !Array.isArray(v)) { + const keys = Object.keys(v); + keys.sort(); + return keys.reduce((accum, key) => { + accum[key] = v[key]; + return accum; + }, { }); + } + + return v; + }); +} + +// Only sub-classes overriding the _getSubscription method will care about this +export type Subscription = { + type: "block" | "close" | "debug" | "network" | "pending", + tag: string +} | { + type: "transaction", + tag: string, + hash: string +} | { + type: "event", + tag: string, + filter: EventFilter +} | { + type: "orphan", + tag: string, + filter: OrphanFilter +}; + +export interface Subscriber { + start(): void; + stop(): void; + + pause(dropWhilePaused?: boolean): void; + resume(): void; + + // Subscribers which use polling should implement this to allow + // Providers the ability to update underlying polling intervals + // If not supported, accessing this property should return undefined + pollingInterval?: number; +} + +export class UnmanagedSubscriber implements Subscriber { + name!: string; + + constructor(name: string) { defineProperties(this, { name }); } + + start(): void { } + stop(): void { } + + pause(dropWhilePaused?: boolean): void { } + resume(): void { } +} + +type Sub = { + tag: string; + nameMap: Map + addressableMap: WeakMap; + listeners: Array<{ listener: Listener, once: boolean }>; + started: boolean; + subscriber: Subscriber; +}; + +function copy(value: T): T { + return JSON.parse(JSON.stringify(value)); +} + +function concisify(items: Array): Array { + items = Array.from((new Set(items)).values()) + items.sort(); + return items; +} + +// Normalize a ProviderEvent into a Subscription +// @TODO: Make events sync if possible; like block +//function getSyncSubscription(_event: ProviderEvent): Subscription { +//} + +async function getSubscription(_event: ProviderEvent, provider: AbstractProvider): Promise { + if (_event == null) { throw new Error("invalid event"); } + + // Normalize topic array info an EventFilter + if (Array.isArray(_event)) { _event = { topics: _event }; } + + if (typeof(_event) === "string") { + switch (_event) { + case "block": case "pending": case "debug": case "network": { + return { type: _event, tag: _event }; + } + } + } + + if (isHexString(_event, 32)) { + const hash = _event.toLowerCase(); + return { type: "transaction", tag: getTag("tx", { hash }), hash }; + } + + if ((_event).orphan) { + const event = _event; + // @TODO: Should lowercase and whatnot things here instead of copy... + return { type: "orphan", tag: getTag("orphan", event), filter: copy(event) }; + } + + if (((_event).address || (_event).topics)) { + const event = _event; + + const filter: any = { + topics: ((event.topics || []).map((t) => { + if (t == null) { return null; } + if (Array.isArray(t)) { + return concisify(t.map((t) => t.toLowerCase())); + } + return t.toLowerCase(); + })) + }; + + if (event.address) { + const addresses: Array = [ ]; + const promises: Array> = [ ]; + + const addAddress = (addr: string | Addressable) => { + if (isHexString(addr)) { + addresses.push(addr); + } else { + promises.push((async () => { + addresses.push(await resolveAddress(addr, provider)); + })()); + } + } + + + if (Array.isArray(event.address)) { + event.address.forEach(addAddress); + } else { + addAddress(event.address); + } + if (promises.length) { await Promise.all(promises); } + filter.address = concisify(addresses.map((a) => a.toLowerCase())); + } + + return { filter, tag: getTag("event", filter), type: "event" }; + } + + return logger.throwArgumentError("unknown ProviderEvent", "event", _event); +} + +function getTime(): number { return (new Date()).getTime(); } + +export interface ProviderPlugin { + readonly name: string; + validate(provider: Provider): ProviderPlugin; +} + +export type PerformActionFilter = { + address?: string | Array; + topics?: Array>; + fromBlock?: BlockTag; + toBlock?: BlockTag; + blockHash?: string; +}; + +export type PerformActionTransaction = { + type?: number; + + to?: string; + from?: string; + + nonce?: number; + + gasLimit?: bigint; + gasPrice?: bigint; + + maxPriorityFeePerGas?: bigint; + maxFeePerGas?: bigint; + + data?: string; + value?: bigint; + chainId?: bigint; + + accessList?: AccessList; +}; + +export function copyRequest(tx: T): T { + // @TODO: copy the copy from contracts and use it from this + return tx; +} + +export type PerformActionRequest = { + method: "call", + transaction: PerformActionTransaction, blockTag: BlockTag +} | { + method: "chainId" +} | { + method: "estimateGas", + transaction: PerformActionTransaction +} | { + method: "getBalance", + address: string, blockTag: BlockTag +} | { + method: "getBlock", + blockTag: BlockTag, includeTransactions: boolean +} | { + method: "getBlock", + blockHash: string, includeTransactions: boolean +} | { + method: "getBlockNumber" +} | { + method: "getCode", + address: string, blockTag: BlockTag +} | { + method: "getGasPrice" +} | { + method: "getLogs", + filter: PerformActionFilter +} | { + method: "getStorageAt", + address: string, position: bigint, blockTag: BlockTag +} | { + method: "getTransaction", + hash: string +} | { + method: "getTransactionCount", + address: string, blockTag: BlockTag +} | { + method: "getTransactionReceipt", + hash: string +} | { + method: "sendTransaction", // @TODO: rename to broadcast + signedTransaction: string +}; + + +type CcipArgs = { + sender: string; + urls: Array; + calldata: string; + selector: string; + extraData: string; + errorArgs: Array +}; + + + +export class AbstractProvider implements Provider { + + #subs: Map; + #plugins: Map; + + // null=unpaused, true=paused+dropWhilePaused, false=paused + #pausedState: null | boolean; + + #networkPromise: null | Promise>; + readonly #anyNetwork: boolean; + + #performCache: Map>; + + #nextTimer: number; + #timers: Map void, time: number }>; + + #disableCcipRead: boolean; + + // @TODO: This should be a () => Promise so network can be + // done when needed; or rely entirely on _detectNetwork? + constructor(_network?: "any" | Networkish) { + if (_network === "any") { + this.#anyNetwork = true; + this.#networkPromise = null; + } else if (_network) { + const network = Network.from(_network); + this.#anyNetwork = false; + this.#networkPromise = Promise.resolve(network); + setTimeout(() => { this.emit("network", network, null); }, 0); + } else { + this.#anyNetwork = false; + this.#networkPromise = null; + } + + //this.#approxNumber = -2; + //this.#approxNumberT0 = 0; + this.#performCache = new Map(); + + this.#subs = new Map(); + this.#plugins = new Map(); + this.#pausedState = null; + + this.#nextTimer = 0; + this.#timers = new Map(); + + this.#disableCcipRead = false; + } + + get plugins(): Array { + return Array.from(this.#plugins.values()); + } + + attachPlugin(plugin: ProviderPlugin): this { + if (this.#plugins.get(plugin.name)) { + throw new Error(`cannot replace existing plugin: ${ plugin.name } `); + } + this.#plugins.set(plugin.name, plugin.validate(this)); + return this; + } + + getPlugin(name: string): null | T { + return (this.#plugins.get(name)) || null; + } + + set disableCcipRead(value: boolean) { this.#disableCcipRead = !!value; } + get disableCcipRead(): boolean { return this.#disableCcipRead; } + + // Shares multiple identical requests made during the same 250ms + async #perform(req: PerformActionRequest): Promise { + // Create a tag + const tag = getTag(req.method, req); + + let perform = this.#performCache.get(tag); + if (!perform) { + perform = this._perform(req); + this.#performCache.set(tag, perform); + + setTimeout(() => { + if (this.#performCache.get(tag) === perform) { + this.#performCache.delete(tag); + } + }, 250); + } + + return await perform; + } + + async ccipReadFetch(tx: PerformActionTransaction, calldata: string, urls: Array): Promise { + if (this.disableCcipRead || urls.length === 0 || tx.to == null) { return null; } + + const sender = tx.to.toLowerCase(); + const data = calldata.toLowerCase(); + + const errorMessages: Array = [ ]; + + for (let i = 0; i < urls.length; i++) { + const url = urls[i]; + + // URL expansion + const href = url.replace("{sender}", sender).replace("{data}", data); + + // If no {data} is present, use POST; otherwise GET + //const json: string | null = (url.indexOf("{data}") >= 0) ? null: JSON.stringify({ data, sender }); + + //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => { + // value.status = response.statusCode; + // return value; + //}); + const request = new FetchRequest(href); + if (url.indexOf("{data}") === -1) { + request.body = { data, sender }; + } + + let errorMessage = "unknown error"; + + const resp = await fetchData(request); + try { + const result = resp.bodyJson; + if (result.data) { return result.data; } + if (result.message) { errorMessage = result.message; } + } catch (error) { } + + // 4xx indicates the result is not present; stop + if (resp.statusCode >= 400 && resp.statusCode < 500) { + return logger.throwError(`response not found during CCIP fetch: ${ errorMessage }`, "OFFCHAIN_FAULT", { + reason: "404_MISSING_RESOURCE", + transaction: tx, info: { url, errorMessage } + }); + } + + // 5xx indicates server issue; try the next url + errorMessages.push(errorMessage); + } + + return logger.throwError(`error encountered during CCIP fetch: ${ errorMessages.map((m) => JSON.stringify(m)).join(", ") }`, "OFFCHAIN_FAULT", { + reason: "500_SERVER_ERROR", + transaction: tx, info: { urls, errorMessages } + }); + } + + _wrapTransaction(tx: TransactionResponse, hash: string, blockNumber: number): TransactionResponse { + return tx; + } + + _detectNetwork(): Promise> { + return logger.throwError("sub-classes must implement this", "UNSUPPORTED_OPERATION", { + operation: "_detectNetwork" + }); + } + + async _perform(req: PerformActionRequest): Promise { + return logger.throwError(`unsupported method: ${ req.method }`, "UNSUPPORTED_OPERATION", { + operation: req.method, + info: req + }); + } + + // State + async getBlockNumber() { + return logger.getNumber(await this.#perform({ method: "getBlockNumber" }), "%response"); + } + + async _getAddress(address: string | Addressable): Promise { + if (typeof(address) === "string") { return address; } + return await address.getAddress(); + } + + async _getBlockTag(blockTag?: BlockTag): Promise { + const network = await this.getNetwork(); + + if (typeof(blockTag) === "number" && Number.isSafeInteger(blockTag) && blockTag < 0) { + //let blockNumber = await this._getApproxBlockNumber(500); + let blockNumber = await this.getBlockNumber(); + blockNumber += blockTag; + if (blockNumber < 0) { blockNumber = 0; } + return network.formatter.blockTag(blockNumber) + } + + return network.formatter.blockTag(blockTag); + } + + async getNetwork(): Promise> { + + // No explicit network was set and this is our first time + if (this.#networkPromise == null) { + + // Detect the current network (shared with all calls) + const detectNetwork = this._detectNetwork().then((network) => { + this.emit("network", network, null); + return network; + }, (error) => { + // Reset the networkPromise on failure, so we will try again + if (this.#networkPromise === detectNetwork) { + this.#networkPromise = null; + } + throw error; + }); + + this.#networkPromise = detectNetwork; + return await detectNetwork; + } + + const networkPromise = this.#networkPromise; + + const [ expected, actual ] = await Promise.all([ + networkPromise, // Possibly an explicit Network + this._detectNetwork() // The actual connected network + ]); + + if (expected.chainId !== actual.chainId) { + if (this.#anyNetwork) { + // The "any" network can change, so notify listeners + this.emit("network", actual, expected); + + // Update the network if something else hasn't already changed it + if (this.#networkPromise === networkPromise) { + this.#networkPromise = Promise.resolve(actual); + } + } else { + // Otherwise, we do not allow changes to the underlying network + logger.throwError(`network changed: ${ expected.chainId } => ${ actual.chainId } `, "NETWORK_ERROR", { + event: "changed" + }); + } + } + + return expected.clone().freeze(); + } + + async getFeeData(): Promise { + const { block, gasPrice } = await resolveProperties({ + block: this.getBlock("latest"), + gasPrice: ((async () => { + try { + const gasPrice = await this.#perform({ method: "getGasPrice" }); + return logger.getBigInt(gasPrice, "%response"); + } catch (error) { } + return null + })()) + }); + + let maxFeePerGas = null, maxPriorityFeePerGas = null; + + if (block && block.baseFeePerGas) { + // We may want to compute this more accurately in the future, + // using the formula "check if the base fee is correct". + // See: https://eips.ethereum.org/EIPS/eip-1559 + maxPriorityFeePerGas = BigInt("1500000000"); + + // Allow a network to override their maximum priority fee per gas + const priorityFeePlugin = (await this.getNetwork()).getPlugin("org.ethers.plugins.max-priority-fee"); + if (priorityFeePlugin) { + maxPriorityFeePerGas = await priorityFeePlugin.getPriorityFee(this); + } + maxFeePerGas = (block.baseFeePerGas * BN_2) + maxPriorityFeePerGas; + } + + return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas); + } + + async _getTransaction(_request: CallRequest): Promise { + const network = await this.getNetwork(); + + // Fill in any addresses + const request = Object.assign({}, _request, await resolveProperties({ + to: (_request.to ? resolveAddress(_request.to, this): undefined), + from: (_request.from ? resolveAddress(_request.from, this): undefined), + })); + + return network.formatter.transactionRequest(request); + } + + async estimateGas(_tx: TransactionRequest) { + const transaction = await this._getTransaction(_tx); + return logger.getBigInt(await this.#perform({ + method: "estimateGas", transaction + }), "%response"); + } + + async #call(tx: PerformActionTransaction, blockTag: string, attempt: number): Promise { + if (attempt >= MAX_CCIP_REDIRECTS) { + logger.throwError("CCIP read exceeded maximum redirections", "OFFCHAIN_FAULT", { + reason: "TOO_MANY_REDIRECTS", + transaction: Object.assign({ }, tx, { blockTag, enableCcipRead: true }) + }); + } + + const transaction = copyRequest(tx); + + try { + return hexlify(await this._perform({ method: "call", transaction, blockTag })); + + } catch (error) { + // CCIP Read OffchainLookup + if (!this.disableCcipRead && isCallException(error) && attempt >= 0 && blockTag === "latest" && transaction.to != null && dataSlice(error.data, 0, 4) === "0x556f1830") { + const data = error.data; + + const txSender = await resolveAddress(transaction.to, this); + + // Parse the CCIP Read Arguments + let ccipArgs: CcipArgs; + try { + ccipArgs = parseOffchainLookup(dataSlice(error.data, 4)); + } catch (error: any) { + return logger.throwError(error.message, "OFFCHAIN_FAULT", { + reason: "BAD_DATA", + transaction, info: { data } + }); + } + + // Check the sender of the OffchainLookup matches the transaction + if (ccipArgs.sender.toLowerCase() !== txSender.toLowerCase()) { + return logger.throwError("CCIP Read sender mismatch", "CALL_EXCEPTION", { + data, transaction, + errorSignature: "OffchainLookup(address,string[],bytes,bytes4,bytes)", + errorName: "OffchainLookup", + errorArgs: ccipArgs.errorArgs + }); + } + + const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls); + if (ccipResult == null) { + return logger.throwError("CCIP Read failed to fetch data", "OFFCHAIN_FAULT", { + reason: "FETCH_FAILED", + transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs } + }); + } + + return this.#call({ + to: txSender, + data: concat([ + ccipArgs.selector, encodeBytes([ ccipResult, ccipArgs.extraData ]) + ]), + }, blockTag, attempt + 1); + } + + throw error; + } + } + + async call(_tx: CallRequest) { + const { tx, blockTag } = await resolveProperties({ + tx: this._getTransaction(_tx), + blockTag: this._getBlockTag(_tx.blockTag) + }); + return this.#call(tx, blockTag, _tx.enableCcipRead ? 0: -1); + } + + // Account + async getBalanceOf(_address: string | Addressable, _blockTag?: BlockTag) { + const { address, blockTag} = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + + return logger.getBigInt(await this.#perform({ + method: "getBalance", address, blockTag + }), "%response"); + } + + async getTransactionCountOf(_address: string | Addressable, _blockTag?: BlockTag) { + const { address, blockTag} = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + + return logger.getNumber(await this.#perform({ + method: "getTransactionCount", address, blockTag + }), "%response"); + } + + async getCode(_address: string | Addressable, _blockTag?: BlockTag) { + const { address, blockTag} = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + + return hexlify(await this.#perform({ + method: "getCode", address, blockTag + })); + } + + async getStorageAt(_address: string | Addressable, _position: BigNumberish, _blockTag?: BlockTag) { + const position = logger.getBigInt(_position); + const { address, blockTag} = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + return hexlify(await this.#perform({ + method: "getStorageAt", address, position, blockTag + })); + } + + // Write + async broadcastTransaction(signedTx: string) { + throw new Error(); + return { }; + } + + async #getBlock(block: BlockTag | string, includeTransactions: boolean): Promise { + const format = (await this.getNetwork()).formatter; + + if (isHexString(block, 32)) { + return await this.#perform({ + method: "getBlock", blockHash: block, includeTransactions + }); + } + + return await this.#perform({ + method: "getBlock", blockTag: format.blockTag(block), includeTransactions + }); + } + + // Queries + async getBlock(block: BlockTag | string): Promise> { + const format = (await this.getNetwork()).formatter; + + const params = await this.#getBlock(block, false); + if (params == null) { return null; } + + return format.block(params, this); + } + + async getBlockWithTransactions(block: BlockTag | string): Promise> { + const format = (await this.getNetwork()).formatter; + + const params = this.#getBlock(block, true); + if (params == null) { return null; } + + return format.blockWithTransactions(params, this); + } + + async getTransaction(hash: string): Promise { + const format = (await this.getNetwork()).formatter; + const params = await this.#perform({ method: "getTransaction", hash }); + return format.transactionResponse(params, this); + } + + async getTransactionReceipt(hash: string): Promise { + const format = (await this.getNetwork()).formatter; + + const receipt = await this.#perform({ method: "getTransactionReceipt", hash }); + if (receipt == null) { return null; } + + // Some backends did not backfill the effectiveGasPrice into old transactions + // in the receipt, so we look it up manually and inject it. + if (receipt.gasPrice == null && receipt.effectiveGasPrice == null) { + const tx = await this.#perform({ method: "getTransaction", hash }); + receipt.effectiveGasPrice = tx.gasPrice; + } + + return format.receipt(receipt, this); + } + + async _getFilter(filter: Filter | FilterByBlockHash): Promise { + const lookup: { [K in keyof PerformActionFilter]: Promise } = { }; + + if (filter.address) { + if (Array.isArray(filter.address)) { + lookup.address = Promise.all(filter.address.map((a) => resolveAddress(a, this))); + } else { + lookup.address = resolveAddress(filter.address, this); + } + } + + const addBlockTag = (key: "fromBlock" | "toBlock") => { + if ((filter)[key] == null) { return; } + lookup[key] = this._getBlockTag((filter)[key]); + } + addBlockTag("fromBlock"); + addBlockTag("toBlock"); + + const result = await resolveProperties(lookup); + if (Array.isArray(result.address)) { result.address.sort(); } + + if ((filter).blockHash) { + if ((filter).fromBlock || (filter).toBlock) { + throw new Error("invalid filter"); + } + result.blockHash = (filter).blockHash; + } + + return result; + } + + // Bloom-filter Queries + async getLogs(_filter: Filter | FilterByBlockHash): Promise> { + const { network, filter } = await resolveProperties({ + network: this.getNetwork(), + filter: this._getFilter(_filter) + }); + + return (await this.#perform>({ method: "getLogs", filter })).map((l) => { + return network.formatter.log(l, this); + }); + } + + // ENS + _getProvider(chainId: number): AbstractProvider { + return logger.throwError("provider cannot connect to target network", "UNSUPPORTED_OPERATION", { + operation: "_getProvider()" + }); + } + + async getResolver(name: string): Promise { + return await EnsResolver.fromName(this, name); + } + + async getAvatar(name: string): Promise { + const resolver = await this.getResolver(name); + if (resolver) { return await resolver.getAvatar(); } + return null; + } + + async resolveName(name: string | Addressable): Promise{ + if (typeof(name) === "string") { + const resolver = await this.getResolver(name); + if (resolver) { return await resolver.getAddress(); } + } else { + const address = await name.getAddress(); + if (address == null) { + return logger.throwArgumentError("Addressable returned no address", "name", name); + } + return address; + } + return null; + } + + async lookupAddress(address: string): Promise { + throw new Error(); + //return "TODO"; + } + + async waitForTransaction(hash: string, confirms: number = 1, timeout?: number): Promise { + if (confirms === 0) { return this.getTransactionReceipt(hash); } + + return new Promise(async (resolve, reject) => { + let timer: null | NodeJS.Timer = null; + + const listener = (async (blockNumber: number) => { + try { + const receipt = await this.getTransactionReceipt(hash); + if (receipt != null) { + if (blockNumber - receipt.blockNumber + 1 >= confirms) { + resolve(receipt); + this.off("block", listener); + if (timer) { + clearTimeout(timer); + timer = null; + } + return; + } + } + } catch (error) { + console.log("EEE", error); + } + this.once("block", listener); + }); + + if (timeout != null) { + timer = setTimeout(() => { + if (timer == null) { return; } + timer = null; + this.off("block", listener); + reject(logger.makeError("timeout", "TIMEOUT", { })); + }, timeout); + } + + listener(await this.getBlockNumber()); + }); + } + + async waitForBlock(blockTag?: BlockTag): Promise> { + throw new Error(); + //return new Block({ }, this); + } + + _clearTimeout(timerId: number): void { + const timer = this.#timers.get(timerId); + if (!timer) { return; } + if (timer.timer) { clearTimeout(timer.timer); } + this.#timers.delete(timerId); + } + + _setTimeout(_func: () => void, timeout: number = 0): number { + const timerId = this.#nextTimer++; + const func = () => { + this.#timers.delete(timerId); + _func(); + }; + + if (this.paused) { + this.#timers.set(timerId, { timer: null, func, time: timeout }); + } else { + const timer = setTimeout(func, timeout); + this.#timers.set(timerId, { timer, func, time: getTime() }); + } + + return timerId; + } + + _forEachSubscriber(func: (s: Subscriber) => void): void { + for (const sub of this.#subs.values()) { + func(sub.subscriber); + } + } + + // Event API; sub-classes should override this; any supported + // event filter will have been munged into an EventFilter + _getSubscriber(sub: Subscription): Subscriber { + switch (sub.type) { + case "debug": + case "network": + return new UnmanagedSubscriber(sub.type); + case "block": + return new PollingBlockSubscriber(this); + case "event": + return new PollingEventSubscriber(this, sub.filter); + case "transaction": + return new PollingTransactionSubscriber(this, sub.hash); + case "orphan": + return new PollingOrphanSubscriber(this, sub.filter); + } + + throw new Error(`unsupported event: ${ sub.type }`); + } + + _recoverSubscriber(oldSub: Subscriber, newSub: Subscriber): void { + for (const sub of this.#subs.values()) { + if (sub.subscriber === oldSub) { + if (sub.started) { sub.subscriber.stop(); } + sub.subscriber = newSub; + if (sub.started) { newSub.start(); } + if (this.#pausedState != null) { newSub.pause(this.#pausedState); } + break; + } + } + } + + async #hasSub(event: ProviderEvent, emitArgs?: Array): Promise { + let sub = await getSubscription(event, this); + // This is a log that is removing an existing log; we actually want + // to emit an orphan event for the removed log + if (sub.type === "event" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) { + sub = await getSubscription({ orphan: "drop-log", log: emitArgs[0] }, this); + } + return this.#subs.get(sub.tag) || null; + } + + async #getSub(event: ProviderEvent): Promise { + const subscription = await getSubscription(event, this); + + // Prevent tampering with our tag in any subclass' _getSubscriber + const tag = subscription.tag; + + let sub = this.#subs.get(tag); + if (!sub) { + const subscriber = this._getSubscriber(subscription); + const addressableMap = new WeakMap(); + const nameMap = new Map(); + sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [ ] }; + this.#subs.set(tag, sub); + } + return sub; + } + + async on(event: ProviderEvent, listener: Listener): Promise { + const sub = await this.#getSub(event); + sub.listeners.push({ listener, once: false }); + if (!sub.started) { + sub.subscriber.start(); + sub.started = true; + if (this.#pausedState != null) { sub.subscriber.pause(this.#pausedState); } + } + return this; + } + + async once(event: ProviderEvent, listener: Listener): Promise { + const sub = await this.#getSub(event); + sub.listeners.push({ listener, once: true }); + if (!sub.started) { + sub.subscriber.start(); + sub.started = true; + if (this.#pausedState != null) { sub.subscriber.pause(this.#pausedState); } + } + return this; + } + + async emit(event: ProviderEvent, ...args: Array): Promise { + const sub = await this.#hasSub(event, args); + if (!sub) { return false; }; + + const count = sub.listeners.length; + sub.listeners = sub.listeners.filter(({ listener, once }) => { + const payload = new EventPayload(this, (once ? null: listener), event); + setTimeout(() => { listener.call(this, ...args, payload); }, 0); + return !once; + }); + + return (count > 0); + } + + async listenerCount(event?: ProviderEvent): Promise { + if (event) { + const sub = await this.#hasSub(event); + if (!sub) { return 0; } + return sub.listeners.length; + } + + let total = 0; + for (const { listeners } of this.#subs.values()) { + total += listeners.length; + } + return total; + } + + async listeners(event?: ProviderEvent): Promise> { + if (event) { + const sub = await this.#hasSub(event); + if (!sub) { return [ ]; } + return sub.listeners.map(({ listener }) => listener); + } + let result: Array = [ ]; + for (const { listeners } of this.#subs.values()) { + result = result.concat(listeners.map(({ listener }) => listener)); + } + return result; + } + + async off(event: ProviderEvent, listener?: Listener): Promise { + const sub = await this.#hasSub(event); + if (!sub) { return this; } + + if (listener) { + const index = sub.listeners.map(({ listener }) => listener).indexOf(listener); + if (index >= 0) { sub.listeners.splice(index, 1); } + } + + if (!listener || sub.listeners.length === 0) { + if (sub.started) { sub.subscriber.stop(); } + this.#subs.delete(sub.tag); + } + + return this; + } + + async removeAllListeners(event?: ProviderEvent): Promise { + if (event) { + const { tag, started, subscriber } = await this.#getSub(event); + if (started) { subscriber.stop(); } + this.#subs.delete(tag); + } else { + for (const [ tag, { started, subscriber } ] of this.#subs) { + if (started) { subscriber.stop(); } + this.#subs.delete(tag); + } + } + return this; + } + + // Alias for "on" + async addListener(event: ProviderEvent, listener: Listener): Promise { + return await this.on(event, listener); + } + + // Alias for "off" + async removeListener(event: ProviderEvent, listener: Listener): Promise { + return this.off(event, listener); + } + + // Sub-classes should override this to shutdown any sockets, etc. + // but MUST call this super.shutdown. + async shutdown(): Promise { + // Stop all listeners + this.removeAllListeners(); + + // Shut down all tiemrs + for (const timerId of this.#timers.keys()) { + this._clearTimeout(timerId); + } + } + + get paused(): boolean { return (this.#pausedState != null); } + + pause(dropWhilePaused?: boolean): void { + if (this.#pausedState != null) { + if (this.#pausedState == !!dropWhilePaused) { return; } + return logger.throwError("cannot change pause type; resume first", "UNSUPPORTED_OPERATION", { + operation: "pause" + }); + } + + this._forEachSubscriber((s) => s.pause(dropWhilePaused)); + this.#pausedState = !!dropWhilePaused; + + for (const timer of this.#timers.values()) { + // Clear the timer + if (timer.timer) { clearTimeout(timer.timer); } + + // Remaining time needed for when we become unpaused + timer.time = getTime() - timer.time; + } + } + + resume(): void { + if (this.#pausedState == null) { return; } + + this._forEachSubscriber((s) => s.resume()); + this.#pausedState = null; + for (const timer of this.#timers.values()) { + // Remaining time when we were paused + let timeout = timer.time; + if (timeout < 0) { timeout = 0; } + + // Start time (in cause paused, so we con compute remaininf time) + timer.time = getTime(); + + // Start the timer + setTimeout(timer.func, timeout); + } + } +} + + +function _parseString(result: string, start: number): null | string { + try { + const bytes = _parseBytes(result, start); + if (bytes) { return toUtf8String(bytes); } + } catch(error) { } + return null; +} + +function _parseBytes(result: string, start: number): null | string { + if (result === "0x") { return null; } + try { + const offset = logger.getNumber(dataSlice(result, start, start + 32)); + const length = logger.getNumber(dataSlice(result, offset, offset + 32)); + + return dataSlice(result, offset + 32, offset + 32 + length); + } catch (error) { } + return null; +} + +function numPad(value: number): Uint8Array { + const result = toArray(value); + if (result.length > 32) { throw new Error("internal; should not happen"); } + + const padded = new Uint8Array(32); + padded.set(result, 32 - result.length); + return padded; +} + +function bytesPad(value: Uint8Array): Uint8Array { + if ((value.length % 32) === 0) { return value; } + + const result = new Uint8Array(Math.ceil(value.length / 32) * 32); + result.set(value); + return result; +} + +const empty = new Uint8Array([ ]); + +// ABI Encodes a series of (bytes, bytes, ...) +function encodeBytes(datas: Array) { + const result: Array = [ ]; + + let byteCount = 0; + + // Add place-holders for pointers as we add items + for (let i = 0; i < datas.length; i++) { + result.push(empty); + byteCount += 32; + } + + for (let i = 0; i < datas.length; i++) { + const data = logger.getBytes(datas[i]); + + // Update the bytes offset + result[i] = numPad(byteCount); + + // The length and padded value of data + result.push(numPad(data.length)); + result.push(bytesPad(data)); + byteCount += 32 + Math.ceil(data.length / 32) * 32; + } + + return concat(result); +} + +const zeros = "0x0000000000000000000000000000000000000000000000000000000000000000" +function parseOffchainLookup(data: string): CcipArgs { + const result: CcipArgs = { + sender: "", urls: [ ], calldata: "", selector: "", extraData: "", errorArgs: [ ] + }; + + if (dataLength(data) < 5 * 32) { + throw new Error("insufficient OffchainLookup data"); + } + + const sender = dataSlice(data, 0, 32); + if (dataSlice(sender, 0, 12) !== dataSlice(zeros, 0, 12)) { + throw new Error("corrupt OffchainLookup sender"); + } + result.sender = dataSlice(sender, 12); + + // Read the URLs from the response + try { + const urls: Array = []; + const urlsOffset = logger.getNumber(dataSlice(data, 32, 64)); + const urlsLength = logger.getNumber(dataSlice(data, urlsOffset, urlsOffset + 32)); + const urlsData = dataSlice(data, urlsOffset + 32); + for (let u = 0; u < urlsLength; u++) { + const url = _parseString(urlsData, u * 32); + if (url == null) { throw new Error("abort"); } + urls.push(url); + } + result.urls = urls; + } catch (error) { + throw new Error("corrupt OffchainLookup urls"); + } + + // Get the CCIP calldata to forward + try { + const calldata = _parseBytes(data, 64); + if (calldata == null) { throw new Error("abort"); } + result.calldata = calldata; + } catch (error) { throw new Error("corrupt OffchainLookup calldata"); } + + // Get the callbackSelector (bytes4) + if (dataSlice(data, 100, 128) !== dataSlice(zeros, 0, 28)) { + throw new Error("corrupt OffchainLookup callbaackSelector"); + } + result.selector = dataSlice(data, 96, 100); + + // Get the extra data to send back to the contract as context + try { + const extraData = _parseBytes(data, 128); + if (extraData == null) { throw new Error("abort"); } + result.extraData = extraData; + } catch (error) { throw new Error("corrupt OffchainLookup extraData"); } + + result.errorArgs = "sender,urls,calldata,selector,extraData".split(/,/).map((k) => (result)[k]) + + + return result; +} diff --git a/packages/providers/src.ts/abstract-signer.ts b/packages/providers/src.ts/abstract-signer.ts new file mode 100644 index 000000000..b7b623674 --- /dev/null +++ b/packages/providers/src.ts/abstract-signer.ts @@ -0,0 +1,198 @@ +import { defineProperties, resolveProperties } from "@ethersproject/properties"; +import { Transaction } from "@ethersproject/transactions"; + +import type { Addressable } from "@ethersproject/address"; +import type { TypedDataDomain, TypedDataField } from "@ethersproject/hash"; +import type { TransactionLike } from "@ethersproject/transactions"; + +import type { + BlockTag, CallRequest, Provider, TransactionRequest, TransactionResponse +} from "./provider.js"; +import type { Signer } from "./signer.js"; + +import { logger } from "./logger.js"; + + +export abstract class AbstractSigner implements Signer { + readonly provider!: null | Provider; + + constructor(provider?: null | Provider) { + defineProperties(this, { provider: (provider || null) }); + } + + abstract getAddress(): Promise; + abstract connect(provider: null | Provider): Signer; + + #checkProvider(operation: string): Provider { + if (this.provider) { return this.provider; } + return logger.throwError("missing provider", "UNSUPPORTED_OPERATION", { operation }); + } + + async getBalance(blockTag?: BlockTag): Promise { + return this.#checkProvider("getBalance").getBalanceOf(await this.getAddress(), blockTag); + } + + async getTransactionCount(blockTag?: BlockTag): Promise { + return this.#checkProvider("getTransactionCount").getTransactionCountOf(await this.getAddress(), blockTag); + } + + async #fromify(tx: TransactionRequest): Promise { + tx = Object.assign({ }, tx); + + const actions: Array> = [ ]; + + if (tx.from != null) { + const from = tx.from; + actions.push(Promise.all([ + this.getAddress(), + this.resolveName(from) + ]).then(([ address, from ]) => { + if (!from || address.toLowerCase() !== from.toLowerCase()) { + logger.throwArgumentError("transaction from mismatch", "tx.from", from); + } + tx.from = address; + })); + } + + await Promise.all(actions); + + return tx; + } + + async estimateGas(tx: CallRequest): Promise { + return this.#checkProvider("estimateGas").estimateGas(await this.#fromify(tx)); + } + + async call(tx: CallRequest): Promise { + return this.#checkProvider("call").call(await this.#fromify(tx)); + } + + async populateTransaction(tx: TransactionRequest): Promise> { + const provider = this.#checkProvider("populateTransaction"); + + //let pop: Deferrable = Object.assign({ }, tx); + let pop: any = Object.assign({ }, tx); + + if (pop.to != null) { + pop.to = provider.resolveName(pop.to).then((to) => { + if (to == null) { + return logger.throwArgumentError("transaction to ENS name not configured", "tx.to", pop.to); + } + return to; + }); + } + + if (pop.from != null) { + const from = pop.from; + pop.from = Promise.all([ + this.getAddress(), + this.resolveName(from) + ]).then(([ address, from ]) => { + if (!from || address.toLowerCase() !== from.toLowerCase()) { + return logger.throwArgumentError("transaction from mismatch", "tx.from", from); + } + return address; + }); + } + + if (pop.nonce == null) { + pop.nonce = this.getTransactionCount(); + } + + pop = resolveProperties(pop); + + if (pop.gasLimit == null) { + pop.gasLimit = provider.estimateGas(pop); + } + + pop = resolveProperties(pop); + + //@TODO: Copy logic from AbstractSigner in v5 + + return await resolveProperties(pop); + } + + async resolveName(name: string | Addressable): Promise { + const provider = this.#checkProvider("resolveName"); + return await provider.resolveName(name); + } + + async sendTransaction(tx: TransactionRequest): Promise { + const provider = this.#checkProvider("sendTransaction"); + + const txObj = Transaction.from(await this.populateTransaction(tx)); + return await provider.broadcastTransaction(await this.signTransaction(txObj)); + } + + abstract signTransaction(tx: TransactionRequest): Promise; + abstract signMessage(message: string | Uint8Array): Promise; + abstract signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise; +} + +export class VoidSigner extends AbstractSigner { + readonly address!: string; + + constructor(address: string, provider?: null | Provider) { + super(provider); + defineProperties(this, { address }); + } + + async getAddress(): Promise { return this.address; } + + connect(provider: null | Provider): VoidSigner { + return new VoidSigner(this.address, provider); + } + + #throwUnsupported(suffix: string, operation: string): never { + return logger.throwError(`VoidSigner cannot sign ${ suffix }`, "UNSUPPORTED_OPERATION", { + operation + }); + } + + async signTransaction(tx: TransactionRequest): Promise { + this.#throwUnsupported("transactions", "signTransaction"); + } + + async signMessage(message: string | Uint8Array): Promise { + this.#throwUnsupported("messages", "signMessage"); + } + + async signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise { + this.#throwUnsupported("typed-data", "signTypedData"); + } +} + +export class WrappedSigner extends AbstractSigner { + #signer: Signer; + + //get provider(): null | Provider { return this.#signer.provider; } + + constructor(signer: Signer) { + super(signer.provider); + this.#signer = signer; + } + + async getAddress(): Promise { + return await this.#signer.getAddress(); + } + + connect(provider: null | Provider): WrappedSigner { + return new WrappedSigner(this.#signer.connect(provider)); + } + + async signTransaction(tx: TransactionRequest): Promise { + return await this.#signer.signTransaction(tx); + } + + async sendTransaction(tx: TransactionRequest): Promise { + return await this.#signer.sendTransaction(tx); + } + + async signMessage(message: string | Uint8Array): Promise { + return await this.#signer.signMessage(message); + } + + async signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise { + return await this.#signer.signTypedData(domain, types, value); + } +} diff --git a/packages/providers/src.ts/common-networks.ts b/packages/providers/src.ts/common-networks.ts new file mode 100644 index 000000000..3aafcb7de --- /dev/null +++ b/packages/providers/src.ts/common-networks.ts @@ -0,0 +1,98 @@ + +import { EnsPlugin, GasCostPlugin, MaxPriorityFeePlugin } from "./plugins-network.js"; +import { EtherscanPlugin } from "./provider-etherscan.js"; + +import { Network as _Network } from "./network.js"; + +type Options = { + ensNetwork?: number; + priorityFee?: number + altNames?: Array; + etherscan?: { url: string, apiKey: string }; +}; + +// See: https://chainlist.org +function injectCommonNetworks(Network: typeof _Network): typeof _Network { + + /// Register popular Ethereum networks + function registerEth(name: string, chainId: number, options: Options): void { + const func = function() { + const network = new Network(name, chainId); + + // We use 0 to disable ENS + if (options.ensNetwork != null) { + network.attachPlugin(new EnsPlugin(null, options.ensNetwork)); + } + + if (options.priorityFee) { + network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee)); + } + + if (options.etherscan) { + const { url, apiKey } = options.etherscan; + network.attachPlugin(new EtherscanPlugin(url, apiKey)); + } + + network.attachPlugin(new GasCostPlugin()); + + return network; + }; + + // Register the network by name and chain ID + Network.register(name, func); + Network.register(chainId, func); + + if (options.altNames) { + options.altNames.forEach((name) => { + Network.register(name, func); + }); + } + } + + registerEth("homestead", 1, { ensNetwork: 1, altNames: [ "mainnet" ] }); + registerEth("ropsten", 3, { ensNetwork: 3 }); + registerEth("rinkeby", 4, { ensNetwork: 4 }); + registerEth("goerli", 5, { ensNetwork: 5 }); + registerEth("kovan", 42, { ensNetwork: 42 }); + + registerEth("classic", 61, { }); + registerEth("classicKotti", 6, { }); + + registerEth("xdai", 100, { ensNetwork: 1 }); + + // Polygon has a 35 gwei maxPriorityFee requirement + registerEth("matic", 137, { + ensNetwork: 1, + priorityFee: 35000000000, + etherscan: { + apiKey: "W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7", + url: "https:/\/api.polygonscan.com/" + } + }); + registerEth("maticMumbai", 80001, { + priorityFee: 35000000000, + etherscan: { + apiKey: "W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7", + url: "https:/\/api-testnet.polygonscan.com/" + } + }); + + registerEth("bnb", 56, { + ensNetwork: 1, + etherscan: { + apiKey: "EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9", + url: "http:/\/api.bscscan.com" + } + }); + registerEth("bnbt", 97, { + etherscan: { + apiKey: "EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9", + url: "http:/\/api-testnet.bscscan.com" + } + }); + + return Network; +} + +const Network = injectCommonNetworks(_Network); +export { Network } diff --git a/packages/providers/src.ts/community.ts b/packages/providers/src.ts/community.ts new file mode 100644 index 000000000..dddd1a21a --- /dev/null +++ b/packages/providers/src.ts/community.ts @@ -0,0 +1,24 @@ + +export interface CommunityResourcable { + isCommunityResource(): boolean; +} + +// Show the throttle message only once +const shown: Set = new Set(); +export function showThrottleMessage(service: string) { + if (shown.has(service)) { return; } + shown.add(service); + + console.log("========= NOTICE =========") + console.log(`Request-Rate Exceeded for ${ service } (this message will not be repeated)`); + console.log(""); + console.log("The default API keys for each service are provided as a highly-throttled,"); + console.log("community resource for low-traffic projects and early prototyping."); + console.log(""); + console.log("While your application will continue to function, we highly recommended"); + console.log("signing up for your own API keys to improve performance, increase your"); + console.log("request rate/limit and enable other perks, such as metrics and advanced APIs."); + console.log(""); + console.log("For more details: https:/\/docs.ethers.io/api-keys/"); + console.log("=========================="); +} diff --git a/packages/providers/src.ts/default-provider.ts b/packages/providers/src.ts/default-provider.ts new file mode 100644 index 000000000..a6be873cc --- /dev/null +++ b/packages/providers/src.ts/default-provider.ts @@ -0,0 +1,89 @@ + +import { AnkrProvider } from "./provider-ankr.js"; +import { AlchemyProvider } from "./provider-alchemy.js"; +import { CloudflareProvider } from "./provider-cloudflare.js"; +import { EtherscanProvider } from "./provider-etherscan.js"; +import { InfuraProvider } from "./provider-infura.js"; +import { PocketProvider } from "./provider-pocket.js"; + +import { FallbackProvider } from "./provider-fallback.js"; +import { JsonRpcProvider } from "./provider-jsonrpc.js"; +import { WebSocketProvider } from "./provider-websocket.js"; + +import type { AbstractProvider } from "./abstract-provider.js"; +import type { Networkish } from "./network.js"; +import { WebSocketLike } from "./provider-websocket.js"; + +function isWebSocketLike(value: any): value is WebSocketLike { + return (value && typeof(value.send) === "function" && + typeof(value.close) === "function"); +} + +export function getDefaultProvider(network: string | Networkish | WebSocketLike, options?: any): AbstractProvider { + if (options == null) { options = { }; } + + if (typeof(network) === "string" && network.match(/^https?:/)) { + return new JsonRpcProvider(network); + } + + if (typeof(network) === "string" && network.match(/^wss?:/) || isWebSocketLike(network)) { + return new WebSocketProvider(network); + } + + const providers: Array = [ ]; + + if (options.alchemy !== "-") { + try { + providers.push(new AlchemyProvider(network, options.alchemy)); + } catch (error) { console.log(error); } + } + + if (options.ankr !== "-") { + try { + providers.push(new AnkrProvider(network, options.ankr)); + } catch (error) { console.log(error); } + } + + if (options.cloudflare !== "-") { + try { + providers.push(new CloudflareProvider(network)); + } catch (error) { console.log(error); } + } + + if (options.etherscan !== "-") { + try { + providers.push(new EtherscanProvider(network, options.etherscan)); + } catch (error) { console.log(error); } + } + + if (options.infura !== "-") { + try { + let projectId = options.infura; + let projectSecret: undefined | string = undefined; + if (typeof(projectId) === "object") { + projectSecret = projectId.projectSecret; + projectId = projectId.projectId; + } + providers.push(new InfuraProvider(network, projectId, projectSecret)); + } catch (error) { console.log(error); } + } + + if (options.pocket !== "-") { + try { + let appId = options.pocket; + let secretKey: undefined | string = undefined; + let loadBalancer: undefined | boolean = undefined; + if (typeof(appId) === "object") { + loadBalancer = !!appId.loadBalancer; + secretKey = appId.secretKey; + appId = appId.appId; + } + providers.push(new PocketProvider(network, appId, secretKey, loadBalancer)); + } catch (error) { console.log(error); } + } + + if (providers.length === 0) { throw new Error("TODO"); } + if (providers.length === 1) { return providers[0]; } + + return new FallbackProvider(providers); +} diff --git a/packages/providers/src.ts/ens-resolver.ts b/packages/providers/src.ts/ens-resolver.ts new file mode 100644 index 000000000..2ddc5c47c --- /dev/null +++ b/packages/providers/src.ts/ens-resolver.ts @@ -0,0 +1,536 @@ +import { concat, dataSlice, hexlify, zeroPadLeft } from "@ethersproject/bytes"; +import { dnsEncode, namehash } from "@ethersproject/hash"; +import { defineProperties } from "@ethersproject/properties"; +import { encodeBase58, toArray, toNumber } from "@ethersproject/math"; +import { toUtf8Bytes, toUtf8String } from "@ethersproject/strings"; +import { fetchData } from "@ethersproject/web"; + +import { logger } from "./logger.js"; + +import type { BigNumberish, BytesLike, EthersError } from "@ethersproject/logger"; + +import type { AbstractProvider, ProviderPlugin } from "./abstract-provider.js"; +import type { EnsPlugin } from "./plugins-network.js"; +import type { CallRequest, Provider } from "./provider.js"; + +const BN_1 = BigInt(1); + +const Empty = new Uint8Array([ ]); +const HashZero = "0x0000000000000000000000000000000000000000000000000000000000000000"; + +function parseBytes(result: string, start: number): null | string { + if (result === "0x") { return null; } + + const offset = toNumber(dataSlice(result, start, start + 32)); + const length = toNumber(dataSlice(result, offset, offset + 32)); + + return dataSlice(result, offset + 32, offset + 32 + length); +} + +function parseString(result: string, start: number): null | string { + try { + const bytes = parseBytes(result, start); + if (bytes != null) { return toUtf8String(bytes); } + } catch(error) { } + return null; +} + +function numPad(value: BigNumberish): Uint8Array { + const result = toArray(value); + if (result.length > 32) { throw new Error("internal; should not happen"); } + + const padded = new Uint8Array(32); + padded.set(result, 32 - result.length); + return padded; +} + +function bytesPad(value: Uint8Array): Uint8Array { + if ((value.length % 32) === 0) { return value; } + + const result = new Uint8Array(Math.ceil(value.length / 32) * 32); + result.set(value); + return result; +} + +// ABI Encodes a series of (bytes, bytes, ...) +function encodeBytes(datas: Array) { + const result: Array = [ ]; + + let byteCount = 0; + + // Add place-holders for pointers as we add items + for (let i = 0; i < datas.length; i++) { + result.push(Empty); + byteCount += 32; + } + + for (let i = 0; i < datas.length; i++) { + const data = logger.getBytes(datas[i]); + + // Update the bytes offset + result[i] = numPad(byteCount); + + // The length and padded value of data + result.push(numPad(data.length)); + result.push(bytesPad(data)); + byteCount += 32 + Math.ceil(data.length / 32) * 32; + } + + return concat(result); +} + +// @TODO: This should use the fetch-data:ipfs gateway +// Trim off the ipfs:// prefix and return the default gateway URL +function getIpfsLink(link: string): string { + if (link.match(/^ipfs:\/\/ipfs\//i)) { + link = link.substring(12); + } else if (link.match(/^ipfs:\/\//i)) { + link = link.substring(7); + } else { + logger.throwArgumentError("unsupported IPFS format", "link", link); + } + + return `https:/\/gateway.ipfs.io/ipfs/${ link }`; +} + +export type AvatarLinkageType = "name" | "avatar" | "!avatar" | "url" | "data" | "ipfs" | + "erc721" | "erc1155" | "!erc721-caip" | "!erc1155-caip" | + "!owner" | "owner" | "!balance" | "balance" | + "metadata-url-base" | "metadata-url-expanded" | "metadata-url" | "!metadata-url" | + "!metadata" | "metadata" | + "!imageUrl" | "imageUrl-ipfs" | "imageUrl" | "!imageUrl-ipfs"; + +export interface AvatarLinkage { + type: AvatarLinkageType; + value: string; +}; + +export interface AvatarResult { + linkage: Array; + url: null | string; +}; + +export abstract class MulticoinProviderPlugin implements ProviderPlugin { + readonly name!: string; + + constructor(name: string) { + defineProperties(this, { name }); + } + + validate(proivder: Provider): ProviderPlugin { + return this; + } + + supportsCoinType(coinType: number): boolean { + return false; + } + + async encodeAddress(coinType: number, address: string): Promise { + throw new Error("unsupported coin"); + } + + async decodeAddress(coinType: number, data: BytesLike): Promise { + throw new Error("unsupported coin"); + } +} + +const BasicMulticoinPluginId = "org.ethers.provider-prugins.basicmulticoin"; + +export class BasicMulticoinProviderPlugin extends MulticoinProviderPlugin { + constructor() { + super(BasicMulticoinPluginId); + } +} + +const matcherIpfs = new RegExp("^(ipfs):/\/(.*)$", "i"); +const matchers = [ + new RegExp("^(https):/\/(.*)$", "i"), + new RegExp("^(data):(.*)$", "i"), + matcherIpfs, + new RegExp("^eip155:[0-9]+/(erc[0-9]+):(.*)$", "i"), +]; + +export class EnsResolver { + provider!: AbstractProvider; + address!: string; + + name!: string; + + // For EIP-2544 names, the ancestor that provided the resolver + #supports2544: null | Promise; + + constructor(provider: AbstractProvider, address: string, name: string) { + defineProperties(this, { provider, address, name }); + this.#supports2544 = null; + } + + async supportsWildcard(): Promise { + if (!this.#supports2544) { + // supportsInterface(bytes4 = selector("resolve(bytes,bytes)")) + this.#supports2544 = this.provider.call({ + to: this.address, + data: "0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000" + }).then((result) => { + return (logger.getBigInt(result) === BN_1); + }).catch((error) => { + if (error.code === "CALL_EXCEPTION") { return false; } + // Rethrow the error: link is down, etc. Let future attempts retry. + this.#supports2544 = null; + throw error; + }); + } + + return await this.#supports2544; + } + + async _fetch(selector: string, parameters: BytesLike = "0x"): Promise { + + // e.g. keccak256("addr(bytes32,uint256)") + const addrData = concat([ selector, namehash(this.name), parameters ]); + const tx: CallRequest = { + to: this.address, + enableCcipRead: true, + data: addrData + }; + + // Wildcard support; use EIP-2544 to resolve the request + let wrapped = false; + if (await this.supportsWildcard()) { + wrapped = true; + + // selector("resolve(bytes,bytes)") + tx.data = concat([ "0x9061b923", encodeBytes([ dnsEncode(this.name), addrData ]) ]); + } + + try { + let data = await this.provider.call(tx); + if ((logger.getBytes(data).length % 32) === 4) { + return logger.throwError("resolver threw error", "CALL_EXCEPTION", { + transaction: tx, data + }); + } + if (wrapped) { return parseBytes(data, 0); } + return data; + } catch (error: any) { + if ((error as EthersError).code !== "CALL_EXCEPTION") { throw error; } + } + + return null; + } + + async getAddress(coinType: number = 60): Promise { + if (coinType === 60) { + try { + // keccak256("addr(bytes32)") + const result = await this._fetch("0x3b3b57de"); + + // No address + if (result === "0x" || result === HashZero) { return null; } + + const network = await this.provider.getNetwork(); + return network.formatter.callAddress(result); + } catch (error: any) { + if ((error as EthersError).code === "CALL_EXCEPTION") { return null; } + throw error; + } + } + + let coinPlugin: null | MulticoinProviderPlugin = null; + for (const plugin of this.provider.plugins) { + if (!(plugin instanceof MulticoinProviderPlugin)) { continue; } + if (plugin.supportsCoinType(coinType)) { + coinPlugin = plugin; + break; + } + } + + if (coinPlugin == null) { return null; } + + // keccak256("addr(bytes32,uint256") + const data = parseBytes((await this._fetch("0xf1cb7e06", numPad(coinType))) || "0x", 0); + + // No address + if (data == null || data === "0x") { return null; } + + // Compute the address + const address = await coinPlugin.encodeAddress(coinType, data); + + if (address != null) { return address; } + + return logger.throwError(`invalid coin data`, "UNSUPPORTED_OPERATION", { + operation: `getAddress(${ coinType })`, + info: { coinType, data } + }); + } + + async getText(key: string): Promise { + // The key encoded as parameter to fetchBytes + let keyBytes = toUtf8Bytes(key); + + // The nodehash consumes the first slot, so the string pointer targets + // offset 64, with the length at offset 64 and data starting at offset 96 + const calldata = logger.getBytes(concat([ numPad(64), numPad(keyBytes.length), keyBytes ])); + + const hexBytes = parseBytes((await this._fetch("0x59d1d43c", bytesPad(calldata))) || "0x", 0); + if (hexBytes == null || hexBytes === "0x") { return null; } + + return toUtf8String(hexBytes); + } + + async getContentHash(): Promise { + // keccak256("contenthash()") + const hexBytes = parseBytes((await this._fetch("0xbc1c58d1")) || "0x", 0); + + // No contenthash + if (hexBytes == null || hexBytes === "0x") { return null; } + + // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key) + const ipfs = hexBytes.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/); + if (ipfs) { + const scheme = (ipfs[1] === "e3010170") ? "ipfs": "ipns"; + const length = parseInt(ipfs[4], 16); + if (ipfs[5].length === length * 2) { + return `${ scheme }:/\/${ encodeBase58("0x" + ipfs[2])}`; + } + } + + // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32) + const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/) + if (swarm && swarm[1].length === 64) { + return `bzz:/\/${ swarm[1] }`; + } + + return logger.throwError(`invalid or unsupported content hash data`, "UNSUPPORTED_OPERATION", { + operation: "getContentHash()", + info: { data: hexBytes } + }); + } + + async getAvatar(): Promise { + return (await this._getAvatar()).url; + } + + async _getAvatar(): Promise { + const linkage: Array = [ { type: "name", value: this.name } ]; + try { + // test data for ricmoo.eth + //const avatar = "eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233"; + const avatar = await this.getText("avatar"); + if (avatar == null) { + linkage.push({ type: "!avatar", value: "" }); + throw new Error("!avatar"); + } + linkage.push({ type: "avatar", value: avatar }); + + for (let i = 0; i < matchers.length; i++) { + const match = avatar.match(matchers[i]); + if (match == null) { continue; } + + const scheme = match[1].toLowerCase(); + + switch (scheme) { + case "https": + case "data": + linkage.push({ type: "url", value: avatar }); + return { linkage, url: avatar }; + case "ipfs": { + const url = getIpfsLink(avatar); + linkage.push({ type: "ipfs", value: avatar }); + linkage.push({ type: "url", value: url }); + return { linkage, url }; + } + + case "erc721": + case "erc1155": { + // Depending on the ERC type, use tokenURI(uint256) or url(uint256) + const selector = (scheme === "erc721") ? "0xc87b56dd": "0x0e89341c"; + linkage.push({ type: scheme, value: avatar }); + + // The owner of this name + const owner = await this.getAddress(); + if (owner == null) { + linkage.push({ type: "!owner", value: "" }); + throw new Error("!owner"); + } + + const comps = (match[2] || "").split("/"); + if (comps.length !== 2) { + linkage.push({ type: `!${ scheme }caip`, value: (match[2] || "") }); + throw new Error("!caip"); + } + + const formatter = (await this.provider.getNetwork()).formatter; + + const addr = formatter.address(comps[0]); + const tokenId = numPad(comps[1]); + + // Check that this account owns the token + if (scheme === "erc721") { + // ownerOf(uint256 tokenId) + const tokenOwner = formatter.callAddress(await this.provider.call({ + to: addr, data: concat([ "0x6352211e", tokenId ]) + })); + if (owner !== tokenOwner) { + linkage.push({ type: "!owner", value: tokenOwner }); + throw new Error("!owner"); + } + linkage.push({ type: "owner", value: tokenOwner }); + + } else if (scheme === "erc1155") { + // balanceOf(address owner, uint256 tokenId) + const balance = logger.getBigInt(await this.provider.call({ + to: addr, data: concat([ "0x00fdd58e", zeroPadLeft(owner, 32), tokenId ]) + })); + if (!balance) { + linkage.push({ type: "!balance", value: "0" }); + throw new Error("!balance"); + } + linkage.push({ type: "balance", value: balance.toString() }); + } + + // Call the token contract for the metadata URL + const tx = { + to: comps[0], + data: concat([ selector, tokenId ]) + }; + + let metadataUrl = parseString(await this.provider.call(tx), 0); + if (metadataUrl == null) { + linkage.push({ type: "!metadata-url", value: "" }); + throw new Error("!metadata-url"); + } + + linkage.push({ type: "metadata-url-base", value: metadataUrl }); + + // ERC-1155 allows a generic {id} in the URL + if (scheme === "erc1155") { + metadataUrl = metadataUrl.replace("{id}", hexlify(tokenId).substring(2)); + linkage.push({ type: "metadata-url-expanded", value: metadataUrl }); + } + + // Transform IPFS metadata links + if (metadataUrl.match(/^ipfs:/i)) { + metadataUrl = getIpfsLink(metadataUrl); + } + linkage.push({ type: "metadata-url", value: metadataUrl }); + + // Get the token metadata + let metadata: any = { }; + const response = await fetchData(metadataUrl); + response.assertOk(); + + try { + metadata = response.bodyJson; + } catch (error) { + try { + linkage.push({ type: "!metadata", value: response.bodyText }); + } catch (error) { + const bytes = response.body; + if (bytes) { + linkage.push({ type: "!metadata", value: hexlify(bytes) }); + } + throw error; + } + throw error; + } + + if (!metadata) { + linkage.push({ type: "!metadata", value: "" }); + throw new Error("!metadata"); + } + + linkage.push({ type: "metadata", value: JSON.stringify(metadata) }); + + // Pull the image URL out + let imageUrl = metadata.image; + if (typeof(imageUrl) !== "string") { + linkage.push({ type: "!imageUrl", value: "" }); + throw new Error("!imageUrl"); + } + + if (imageUrl.match(/^(https:\/\/|data:)/i)) { + // Allow + } else { + // Transform IPFS link to gateway + const ipfs = imageUrl.match(matcherIpfs); + if (ipfs == null) { + linkage.push({ type: "!imageUrl-ipfs", value: imageUrl }); + throw new Error("!imageUrl-ipfs"); + } + + linkage.push({ type: "imageUrl-ipfs", value: imageUrl }); + imageUrl = getIpfsLink(imageUrl); + } + + linkage.push({ type: "url", value: imageUrl }); + + return { linkage, url: imageUrl }; + } + } + } + } catch (error) { console.log("EE", error); } + + return { linkage, url: null }; + } + + static async #getResolver(provider: Provider, name: string): Promise { + const network = await provider.getNetwork(); + + const ensPlugin = network.getPlugin("org.ethers.plugins.ens"); + + // No ENS... + if (!ensPlugin) { + return logger.throwError("network does not support ENS", "UNSUPPORTED_OPERATION", { + operation: "getResolver", info: { network: network.name } + }); + } + + try { + // keccak256("resolver(bytes32)") + const addrData = await provider.call({ + to: ensPlugin.address, + data: concat([ "0x0178b8bf", namehash(name) ]), + enableCcipRead: true + }); + + const addr = network.formatter.callAddress(addrData); + if (addr === dataSlice(HashZero, 0, 20)) { return null; } + return addr; + + } catch (error) { + // ENS registry cannot throw errors on resolver(bytes32), + // so probably a link error + throw error; + } + + return null; + } + + static async fromName(provider: AbstractProvider, name: string): Promise { + + let currentName = name; + while (true) { + if (currentName === "" || currentName === ".") { return null; } + + // Optimization since the eth node cannot change and does + // not have a wildcar resolver + if (name !== "eth" && currentName === "eth") { return null; } + + // Check the current node for a resolver + const addr = await EnsResolver.#getResolver(provider, currentName); + + // Found a resolver! + if (addr != null) { + const resolver = new EnsResolver(provider, addr, name); + + // Legacy resolver found, using EIP-2544 so it isn't safe to use + if (currentName !== name && !(await resolver.supportsWildcard())) { return null; } + + return resolver; + } + + // Get the parent node + currentName = currentName.split(".").slice(1).join("."); + } + } +} diff --git a/packages/providers/src.ts/formatter.ts b/packages/providers/src.ts/formatter.ts new file mode 100644 index 000000000..1473df826 --- /dev/null +++ b/packages/providers/src.ts/formatter.ts @@ -0,0 +1,447 @@ +// Belongs to Networks; requires abstract-provider +// provider requires abstract-provider and network + +/** + * Formatter + * + * This is responsibile for converting much of the various + * loose network values into a concrete ethers-ready value. + * + * For example, converting addresses to checksum addresses, + * validating a hash is 32 bytes, and so on. + * + * By sub-classing this class and providing it in a custom + * Network object this allows exotic (non-Ethereum) networks + * to be fairly simple to adapt to ethers. + */ + +import { getAddress, getCreateAddress } from "@ethersproject/address"; +import { dataLength, dataSlice, isHexString, quantity } from "@ethersproject/bytes"; +import { toHex } from "@ethersproject/math"; +import { Signature } from "@ethersproject/signing-key"; +import { accessListify } from "@ethersproject/transactions"; + +import { Block, Log, TransactionReceipt, TransactionResponse } from "./provider.js"; +import { logger } from "./logger.js"; + +import type { AccessList } from "@ethersproject/transactions"; + +import type { PerformActionTransaction } from "./abstract-provider.js"; +import type { Filter, Provider } from "./provider.js"; + + +const BN_MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + +export type FormatFunc = (value: any) => any; + +//export type AccessListSet = { address: string, storageKeys: Array }; +//export type AccessList = Array; + +//export type AccessListish = AccessList | +// Array<[ string, Array ]> | +// Record>; + +function stringify(value: any): string { + if (typeof(value) !== "string") { throw new Error("invalid string"); } + return value; +} + +export class Formatter { + #format: { + address: FormatFunc, + bigNumber: FormatFunc, + blockTag: FormatFunc, + data: FormatFunc, + filter: FormatFunc, + hash: FormatFunc, + number: FormatFunc, + topics: FormatFunc, + transactionRequest: FormatFunc, + transactionResponse: FormatFunc, + uint256: FormatFunc, + }; + + #baseBlock: FormatFunc; + + constructor() { + const address = this.address.bind(this); + const bigNumber = this.bigNumber.bind(this); + const blockTag = this.blockTag.bind(this); + const data = this.data.bind(this); + const hash = this.hash.bind(this); + const number = this.number.bind(this); + const uint256 = this.uint256.bind(this); + + const topics = this.arrayOf(hash); + + this.#format = { + address, + bigNumber, + blockTag, + data, + hash, + number, + uint256, + + topics, + + filter: this.object({ + fromBlock: this.allowNull(blockTag, undefined), + toBlock: this.allowNull(blockTag, undefined), + blockHash: this.allowNull(hash, undefined), + address: this.allowNull(address, undefined), + topics: this.allowNull(topics, undefined) + }), + + transactionRequest: this.object({ + from: this.allowNull(address), + type: this.allowNull(number), + to: this.allowNull(address), + nonce: this.allowNull(number), + gasLimit: this.allowNull(uint256), + gasPrice: this.allowNull(uint256), + maxFeePerGas: this.allowNull(uint256), + maxPriorityFeePerGas: this.allowNull(uint256), + data: this.allowNull(data), + value: this.allowNull(uint256), + }), + + transactionResponse: this.object({ + hash: hash, + index: number, + + type: this.allowNull(number, 0), + + // These can be null for pending blocks + blockHash: this.allowNull(hash), + blockNumber: this.allowNull(number), + + // For Legacy transactions, this comes from the v + chainId: this.allowNull(number), + + from: address, + to: this.address, + + gasLimit: bigNumber, + + gasPrice: this.allowNull(bigNumber), + maxFeePerGas: this.allowNull(bigNumber), + maxPriorityFeePerGas: this.allowNull(bigNumber), + + value: bigNumber, + data: data, + nonce: number, + r: hash, + s: hash, + v: number, + accessList: this.allowNull(this.accessList) + }, { + index: [ "transactionIndex" ] + }), + }; + + this.#baseBlock = this.object({ + number: number, + hash: this.allowNull(hash, null), + timestamp: number, + + parentHash: hash, + + nonce: this.allowNull(stringify, "0x0000000000000000"), + difficulty: bigNumber, + + gasLimit: bigNumber, + gasUsed: bigNumber, + miner: this.allowNull(address, "0x0000000000000000000000000000000000000000"), + extraData: stringify, + + baseFeePerGas: this.allowNull(bigNumber), + }); + + } + + // An address + address(value: any): string { + return getAddress(value); + } + + // An address from a call result; may be zero-padded + callAddress(value: any): string { + if (dataLength(value) !== 32 || dataSlice(value, 0, 12) !== "0x000000000000000000000000") { + logger.throwArgumentError("invalid call address", "value", value); + } + return this.address(dataSlice(value, 12)); + } + + // An address from a transaction (e.g. { from: string, nonce: number }) + contractAddress(value: any): string { + return getCreateAddress({ + from: this.address(value.from), + nonce: logger.getNumber(value.nonce, "value.nonce") + }); + } + + // Block Tag + blockTag(value?: any): string { + if (value == null) { return "latest"; } + + switch (value) { + case "earliest": + return "0x0"; + case "latest": case "pending": + return value; + } + + if (typeof(value) === "number" || (isHexString(value) && dataLength(value) < 32)) { + return quantity(value); + } + + return logger.throwArgumentError("invalid blockTag", "value", value); + } + + // Block objects + block(value: any, provider?: Provider): Block { + const params = this.#baseBlock(value); + params.transactions = value.transactions.map((t: any) => this.hash(t)); + return new Block(params, provider); + } + blockWithTransactions(value: any, provider?: Provider): Block { + throw new Error(); + } + + // Transactions + transactionRequest(value: any, provider?: Provider): PerformActionTransaction { + return this.#format.transactionRequest(value); + } + + transactionResponse(value: any, provider?: Provider): TransactionResponse { + value = Object.assign({ }, value); + + // @TODO: Use the remap feature + if (value.data == null && value.input != null) { value.data = value.input; } + if (value.gasLimit == null && value.gas) { value.gasLimit = value.gas; } + + value = this.#format.transactionResponse(value); + + const sig = Signature.fromTransaction(value.r, value.s, value.v); + value.signature = sig; + if (value.chainId == null) { value.chainId = sig.legacyChainId; } + + return new TransactionResponse(value, provider); + } + + // Receipts + log(value: any, provider?: Provider): Log { + const log = this.object({ + address: this.address, + blockHash: this.hash, + blockNumber: this.number, + data: this.data, + index: this.number, + removed: this.boolean, + topics: this.topics, + transactionHash: this.hash, + transactionIndex: this.number, + }, { + index: [ "logIndex" ] + })(value); + return new Log(log, provider); + } + + receipt(value: any, provider?: Provider): TransactionReceipt { + const receipt = this.object({ + blockHash: this.hash, + blockNumber: this.number, + contractAddress: this.allowNull(this.address), + cumulativeGasUsed: this.bigNumber, + from: this.address, + gasUsed: this.bigNumber, + logs: this.arrayOf((v: any) => (this.log(v, provider))), + logsBloom: this.data, + root: this.allowNull(this.data), + status: this.allowNull(this.number), + to: this.address, + gasPrice: this.allowNull(this.bigNumber), + hash: this.hash, + index: this.number, + type: this.allowNull(this.number, 0), + }, { + hash: [ "transactionHash" ], + gasPrice: [ "effectiveGasPrice" ], + index: [ "transactionIndex" ] + })(value); + + // RSK incorrectly implemented EIP-658, so we munge things a bit here for it + if (receipt.root != null) { + if (receipt.root.length <= 4) { + // Could be 0x00, 0x0, 0x01 or 0x1 + const value = parseInt(receipt.root); + if (value === 0 || value === 1) { + // Make sure if both are specified, they match + if (receipt.status != null && receipt.status !== value) { + return logger.throwError("alt-root-status/status mismatch", "BAD_DATA", { + value: { root: receipt.root, status: receipt.status } + }); + } + receipt.status = value; + delete receipt.root; + } else { + return logger.throwError("invalid alt-root-status", "BAD_DATA", { + value: receipt.root + }); + } + } else if (!isHexString(receipt.root, 32)) { + // Must be a valid bytes32 + return logger.throwError("invalid receipt root hash", "BAD_DATA", { + value: receipt.root + }); + } + } + + //receipt.byzantium = (receipt.root == null); + + return new TransactionReceipt(receipt, provider); + } + + // Fitlers + topics(value: any): Array { + return this.#format.topics(value); + } + + filter(value: any): Filter { + return this.#format.filter(value); + } + + filterLog(value: any): any { + console.log("ME", value); + return null; + } + + // Converts a serialized transaction to a TransactionResponse + transaction(value: any): TransactionResponse { + throw new Error(); + } + + // Useful utility formatters functions, which if need be use the + // methods within the formatter to ensure internal compatibility + + // Access List; converts an AccessListish to an AccessList + accessList(value: any): AccessList { + return accessListify(value); + } + + // Converts falsish values to a specific value, otherwise use the formatter. Calls preserve `this`. + allowFalsish(format: FormatFunc, ifFalse: any): FormatFunc { + return ((value: any) => { + if (!value) { return ifFalse; } + return format.call(this, value); + }); + } + + // Allows null, optionally replacing it with a default value. Calls preserve `this`. + allowNull(format: FormatFunc, ifNull?: any): FormatFunc { + return ((value: any) => { + if (value == null) { return ifNull; } + return format.call(this, value); + }); + } + + // Requires an Array satisfying the formatter. Calls preserves `this`. + arrayOf(format: FormatFunc): FormatFunc { + return ((array: any) => { + if (!Array.isArray(array)) { throw new Error("not an array"); } + return array.map((i) => format.call(this, i)); + }); + } + + // Requires a value which is a value BigNumber + bigNumber(value: any): bigint { + return logger.getBigInt(value, "value"); + } + + uint256(value: any): bigint { + const result = this.bigNumber(value); + if (result < 0 || result > BN_MAX_UINT256) { + logger.throwArgumentError("invalid uint256", "value", value); + } + return result; + } + + // Requires a value which is a value boolean or string equivalent + boolean(value: any): boolean { + switch (value) { + case true: case "true": + return true; + case false: case "false": + return false; + } + return logger.throwArgumentError(`invalid boolean; ${ JSON.stringify(value) }`, "value", value); + } + + // Requires a value which is a valid hexstring. If dataOrLength is true, + // the length must be even (i.e. a datahexstring) or if it is a number, + // specifies teh number of bytes value must represent + _hexstring(dataOrLength?: boolean | number): FormatFunc { + if (dataOrLength == null) { dataOrLength = false; } + return (function(value: any) { + if (isHexString(value, dataOrLength)) { + return value.toLowerCase(); + } + throw new Error("bad hexstring"); + }); + } + + data(value: string): string { + if (dataLength(value) == null) { + logger.throwArgumentError("", "value", value); + } + return value; + } + + // Requires a network-native hash + hash(value: any): string { + if (dataLength(value) !== 32) { + logger.throwArgumentError("", "value", value); + } + return this.#format.data(value); + } + + // Requires a valid number, within the IEEE 754 safe range + number(value: any): number { + return logger.getNumber(value); + } + + // Requires an object which matches a fleet of other formatters + // Any FormatFunc may return `undefined` to have the value omitted + // from the result object. Calls preserve `this`. + object(format: Record, altNames?: Record>): FormatFunc { + return ((value: any) => { + const result: any = { }; + for (const key in format) { + let srcKey = key; + if (altNames && key in altNames && !(srcKey in value)) { + for (const altKey of altNames[key]) { + if (altKey in value) { + srcKey = altKey; + break; + } + } + } + + try { + const nv = format[key].call(this, value[srcKey]); + if (nv !== undefined) { result[key] = nv; } + } catch (error) { + const message = (error instanceof Error) ? error.message: "not-an-error"; + logger.throwError(`invalid value for value.${ key } (${ message })`, "BAD_DATA", { value }) + } + } + return result; + }); + } + + // Requires a value which matches a network-native storage slot + storageSlot(value: any): string { + return toHex(logger.getBigInt(value), 32); + } +} diff --git a/packages/providers/src.ts/index.ts b/packages/providers/src.ts/index.ts new file mode 100644 index 000000000..bab210850 --- /dev/null +++ b/packages/providers/src.ts/index.ts @@ -0,0 +1,87 @@ +export { + AbstractProvider, UnmanagedSubscriber +} from "./abstract-provider.js"; + +export { + AbstractSigner, + VoidSigner, + WrappedSigner +} from "./abstract-signer.js"; + +export { + showThrottleMessage +} from "./community.js"; + +export { getDefaultProvider } from "./default-provider.js"; + +export { EnsResolver } from "./ens-resolver.js"; + +export { Formatter } from "./formatter.js"; + +export { Network } from "./common-networks.js"; + +export { + NetworkPlugin, + GasCostPlugin, + EnsPlugin, + //LayerOneConnectionPlugin, + MaxPriorityFeePlugin, + //PriceOraclePlugin, +} from "./plugins-network.js"; + +export { + Block, + FeeData, + Log, + TransactionReceipt, + TransactionResponse, + + dummyProvider, + + copyRequest, + //resolveTransactionRequest, +} from "./provider.js"; + +export { FallbackProvider } from "./provider-fallback.js"; +export { JsonRpcProvider, JsonRpcSigner, StaticJsonRpcProvider } from "./provider-jsonrpc.js" + +export { AlchemyProvider } from "./provider-alchemy.js"; +export { AnkrProvider } from "./provider-ankr.js"; +export { CloudflareProvider } from "./provider-cloudflare.js"; +export { EtherscanProvider } from "./provider-etherscan.js"; +export { InfuraProvider } from "./provider-infura.js"; +export { PocketProvider } from "./provider-pocket.js"; + +import { IpcSocketProvider } from "./provider-ipcsocket.js"; /*-browser*/ +export { IpcSocketProvider }; +export { SocketProvider } from "./provider-socket.js"; +export { WebSocketProvider } from "./provider-websocket.js"; + + + +export type { + ProviderPlugin, Subscriber, Subscription +} from "./abstract-provider.js" + +export type { + CommunityResourcable +} from "./community.js"; + +export type { + AvatarLinkageType, AvatarLinkage, AvatarResult +} from "./ens-resolver.js"; + +export type { FormatFunc } from "./formatter.js"; + +export type { Networkish } from "./network.js"; + +export type { GasCostParameters } from "./plugins-network.js"; + +export type { + BlockTag, + CallRequest, TransactionRequest, PreparedRequest, + EventFilter, Filter, FilterByBlockHash, OrphanFilter, ProviderEvent, TopicFilter, + Provider, +} from "./provider.js"; + +export type { Signer } from "./signer.js"; diff --git a/packages/providers/src.ts/logger.ts b/packages/providers/src.ts/logger.ts new file mode 100644 index 000000000..cdf258d2c --- /dev/null +++ b/packages/providers/src.ts/logger.ts @@ -0,0 +1,4 @@ +import { Logger } from "@ethersproject/logger"; + +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/providers/src.ts/network.ts b/packages/providers/src.ts/network.ts new file mode 100644 index 000000000..3ffcc533f --- /dev/null +++ b/packages/providers/src.ts/network.ts @@ -0,0 +1,230 @@ +import { getStore, setStore } from "@ethersproject/properties"; + +import { Formatter } from "./formatter.js"; +import { logger } from "./logger.js"; +import { EnsPlugin, GasCostPlugin } from "./plugins-network.js"; + +import type { BigNumberish } from "@ethersproject/logger"; +import type { Freezable, Frozen } from "@ethersproject/properties"; +import type { TransactionLike } from "@ethersproject/transactions"; + +import type { NetworkPlugin } from "./plugins-network.js"; + + +export type Networkish = Network | number | bigint | string | { + name?: string, + chainId?: number, + //layerOneConnection?: Provider, + ensAddress?: string, + ensNetwork?: number +}; + + + + +/* * * * +// Networks which operation against an L2 can use this plugin to +// specify how to access L1, for the purpose of resolving ENS, +// for example. +export class LayerOneConnectionPlugin extends NetworkPlugin { + readonly provider!: Provider; +// @TODO: Rename to ChainAccess and allow for connecting to any chain + constructor(provider: Provider) { + super("org.ethers.plugins.layer-one-connection"); + defineProperties(this, { provider }); + } + + clone(): LayerOneConnectionPlugin { + return new LayerOneConnectionPlugin(this.provider); + } +} +*/ + +/* * * * +export class PriceOraclePlugin extends NetworkPlugin { + readonly address!: string; + + constructor(address: string) { + super("org.ethers.plugins.price-oracle"); + defineProperties(this, { address }); + } + + clone(): PriceOraclePlugin { + return new PriceOraclePlugin(this.address); + } +} +*/ + +// Networks or clients with a higher need for security (such as clients +// that may automatically make CCIP requests without user interaction) +// can use this plugin to anonymize requests or intercept CCIP requests +// to notify and/or receive authorization from the user +/* * * * +export type FetchDataFunc = (req: Frozen) => Promise; +export class CcipPreflightPlugin extends NetworkPlugin { + readonly fetchData!: FetchDataFunc; + + constructor(fetchData: FetchDataFunc) { + super("org.ethers.plugins.ccip-preflight"); + defineProperties(this, { fetchData }); + } + + clone(): CcipPreflightPlugin { + return new CcipPreflightPlugin(this.fetchData); + } +} +*/ + +const Networks: Map Network> = new Map(); + +const defaultFormatter = new Formatter(); + +export class Network implements Freezable { + #props: { + name: string, + chainId: bigint, + + formatter: Formatter, + + plugins: Map + }; + + constructor(name: string, _chainId: BigNumberish, formatter?: Formatter) { + const chainId = logger.getBigInt(_chainId); + if (formatter == null) { formatter = defaultFormatter; } + const plugins = new Map(); + this.#props = { name, chainId, formatter, plugins }; + } + + toJSON(): any { + return { name: this.name, chainId: this.chainId }; + } + + get name(): string { return getStore(this.#props, "name"); } + set name(value: string) { setStore(this.#props, "name", value); } + + get chainId(): bigint { return getStore(this.#props, "chainId"); } + set chainId(value: BigNumberish) { setStore(this.#props, "chainId", logger.getBigInt(value, "chainId")); } + + get formatter(): Formatter { return getStore(this.#props, "formatter"); } + set formatter(value: Formatter) { setStore(this.#props, "formatter", value); } + + get plugins(): Array { + return Array.from(this.#props.plugins.values()); + } + + attachPlugin(plugin: NetworkPlugin): this { + if (this.isFrozen()) { throw new Error("frozen"); } + if (this.#props.plugins.get(plugin.name)) { + throw new Error(`cannot replace existing plugin: ${ plugin.name } `); + } + this.#props.plugins.set(plugin.name, plugin.validate(this)); + return this; + } + + getPlugin(name: string): null | T { + return (this.#props.plugins.get(name)) || null; + } + + // Gets a list of Plugins which match basename, ignoring any fragment + getPlugins(basename: string): Array { + return >(this.plugins.filter((p) => (p.name.split("#")[0] === basename))); + } + + clone(): Network { + const clone = new Network(this.name, this.chainId, this.formatter); + this.plugins.forEach((plugin) => { + clone.attachPlugin(plugin.clone()); + }); + return clone; + } + + freeze(): Frozen { + Object.freeze(this.#props); + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } + + computeIntrinsicGas(tx: TransactionLike): number { + const costs = this.getPlugin("org.ethers.gas-cost") || (new GasCostPlugin()); + + let gas = costs.txBase; + if (tx.to == null) { gas += costs.txCreate; } + if (tx.data) { + for (let i = 2; i < tx.data.length; i += 2) { + if (tx.data.substring(i, i + 2) === "00") { + gas += costs.txDataZero; + } else { + gas += costs.txDataNonzero; + } + } + } + + if (tx.accessList) { + const accessList = this.formatter.accessList(tx.accessList); + for (const addr in accessList) { + gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length; + } + } + + return gas; + } + + static from(network?: Networkish): Network { + // Default network + if (network == null) { return Network.from("homestead"); } + + // Canonical name or chain ID + if (typeof(network) === "number") { network = BigInt(network); } + if (typeof(network) === "string" || typeof(network) === "bigint") { + const networkFunc = Networks.get(network); + if (networkFunc) { return networkFunc(); } + if (typeof(network) === "bigint") { + return new Network("unknown", network); + } + + logger.throwArgumentError("unknown network", "network", network); + } + + // Clonable with network-like abilities + if (typeof((network).clone) === "function") { + const clone = (network).clone(); + //if (typeof(network.name) !== "string" || typeof(network.chainId) !== "number") { + //} + return clone; + } + + // Networkish + if (typeof(network) === "object") { + if (typeof(network.name) !== "string" || typeof(network.chainId) !== "number") { + logger.throwArgumentError("invalid network object name or chainId", "network", network); + } + + const custom = new Network((network.name), (network.chainId)); + + if ((network).ensAddress || (network).ensNetwork != null) { + custom.attachPlugin(new EnsPlugin((network).ensAddress, (network).ensNetwork)); + } + + //if ((network).layerOneConnection) { + // custom.attachPlugin(new LayerOneConnectionPlugin((network).layerOneConnection)); + //} + + return custom; + } + + return logger.throwArgumentError("invalid network", "network", network); + } + + static register(nameOrChainId: string | number | bigint, networkFunc: () => Network): void { + if (typeof(nameOrChainId) === "number") { nameOrChainId = BigInt(nameOrChainId); } + const existing = Networks.get(nameOrChainId); + if (existing) { + logger.throwArgumentError(`conflicting network for ${ JSON.stringify(existing.name) }`, "nameOrChainId", nameOrChainId); + } + Networks.set(nameOrChainId, networkFunc); + } +} diff --git a/packages/providers/src.ts/pagination.ts b/packages/providers/src.ts/pagination.ts new file mode 100644 index 000000000..022688c03 --- /dev/null +++ b/packages/providers/src.ts/pagination.ts @@ -0,0 +1,8 @@ +export interface PaginationResult extends Array { + next(): Promise>; + + // The total number of results available or null if unknown + totalResults: null | number; + + done: boolean; +} diff --git a/packages/providers/src.ts/plugins-network.ts b/packages/providers/src.ts/plugins-network.ts new file mode 100644 index 000000000..ecc63093c --- /dev/null +++ b/packages/providers/src.ts/plugins-network.ts @@ -0,0 +1,124 @@ +import { defineProperties } from "@ethersproject/properties"; + +import { logger } from "./logger.js"; + +import { BigNumberish } from "@ethersproject/logger"; + +import type { Network } from "./network.js"; +import type { Provider } from "./provider.js"; + + +const EnsAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; + +export class NetworkPlugin { + readonly name!: string; + + constructor(name: string) { + defineProperties(this, { name }); + } + + clone(): NetworkPlugin { + return new NetworkPlugin(this.name); + } + + validate(network: Network): NetworkPlugin { + return this; + } +} + +// Networks can use this plugin to override calculations for the +// intrinsic gas cost of a transaction for networks that differ +// from the latest hardfork on Ethereum mainnet. +export type GasCostParameters = { + txBase?: number; + txCreate?: number; + txDataZero?: number; + txDataNonzero?: number; + txAccessListStorageKey?: number; + txAccessListAddress?: number; +}; + +export class GasCostPlugin extends NetworkPlugin { + readonly effectiveBlock!: number; + + readonly txBase!: number; + readonly txCreate!: number; + readonly txDataZero!: number; + readonly txDataNonzero!: number; + readonly txAccessListStorageKey!: number; + readonly txAccessListAddress!: number; + + constructor(effectiveBlock: number = 0, costs?: GasCostParameters) { + super(`org.ethers.plugins.gas-cost#${ (effectiveBlock || 0) }`); + + const props: Record = { effectiveBlock }; + function set(name: keyof GasCostParameters, nullish: number): void { + let value = (costs || { })[name]; + if (value == null) { value = nullish; } + if (typeof(value) !== "number") { + logger.throwArgumentError(`invalud value for ${ name }`, "costs", costs); + } + props[name] = value; + } + + set("txBase", 21000); + set("txCreate", 32000); + set("txDataZero", 4); + set("txDataNonzero", 16); + set("txAccessListStorageKey", 1900); + set("txAccessListAddress", 2400); + + defineProperties(this, props); + } + + clone(): GasCostPlugin { + return new GasCostPlugin(this.effectiveBlock, this); + } +} + +// Networks shoudl use this plugin to specify the contract address +// and network necessary to resolve ENS names. +export class EnsPlugin extends NetworkPlugin { + + // The ENS contract address + readonly address!: string; + + // The network ID that the ENS contract lives on + readonly targetNetwork!: number; + + constructor(address?: null | string, targetNetwork?: null | number) { + super("org.ethers.plugins.ens"); + defineProperties(this, { + address: (address || EnsAddress), + targetNetwork: ((targetNetwork == null) ? 1: targetNetwork) + }); + } + + clone(): EnsPlugin { + return new EnsPlugin(this.address, this.targetNetwork); + } + + validate(network: Network): this { + network.formatter.address(this.address); + return this; + } +} + +export class MaxPriorityFeePlugin extends NetworkPlugin { + readonly priorityFee!: bigint; + + constructor(priorityFee: BigNumberish) { + super("org.ethers.plugins.max-priority-fee"); + defineProperties(this, { + priorityFee: logger.getBigInt(priorityFee) + }); + } + + async getPriorityFee(provider: Provider): Promise { + return this.priorityFee; + } + + clone(): MaxPriorityFeePlugin { + return new MaxPriorityFeePlugin(this.priorityFee); + } +} diff --git a/packages/providers/src.ts/provider-alchemy.ts b/packages/providers/src.ts/provider-alchemy.ts new file mode 100644 index 000000000..225e82478 --- /dev/null +++ b/packages/providers/src.ts/provider-alchemy.ts @@ -0,0 +1,82 @@ + +import { defineProperties } from "@ethersproject/properties"; +import { FetchRequest } from "@ethersproject/web"; + +import { showThrottleMessage } from "./community.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { StaticJsonRpcProvider } from "./provider-jsonrpc.js"; + +import type { ConnectionInfo, ThrottleRetryFunc } from "@ethersproject/web"; + +import type { AbstractProvider } from "./abstract-provider.js"; +import type { CommunityResourcable } from "./community.js"; +import type { Networkish } from "./network.js"; + + +const defaultApiKey = "_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC" + +function getHost(name: string): string { + switch(name) { + case "homestead": + return "eth-mainnet.alchemyapi.io"; + case "ropsten": + return "eth-ropsten.alchemyapi.io"; + case "rinkeby": + return "eth-rinkeby.alchemyapi.io"; + case "goerli": + return "eth-goerli.alchemyapi.io"; + case "kovan": + return "eth-kovan.alchemyapi.io"; + case "matic": + return "polygon-mainnet.g.alchemy.com"; + case "maticmum": + return "polygon-mumbai.g.alchemy.com"; + case "arbitrum": + return "arb-mainnet.g.alchemy.com"; + case "arbitrum-rinkeby": + return "arb-rinkeby.g.alchemy.com"; + case "optimism": + return "opt-mainnet.g.alchemy.com"; + case "optimism-kovan": + return "opt-kovan.g.alchemy.com"; + } + + return logger.throwArgumentError("unsupported network", "network", name); +} + +export class AlchemyProvider extends StaticJsonRpcProvider implements CommunityResourcable { + readonly apiKey!: string; + + constructor(_network: Networkish = "homestead", apiKey?: null | string) { + const network = Network.from(_network); + if (apiKey == null) { apiKey = defaultApiKey; } + super(AlchemyProvider.getConnection(network, apiKey), network); + defineProperties(this, { apiKey }); + } + + _getProvider(chainId: number): AbstractProvider { + try { + return new AlchemyProvider(chainId, this.apiKey); + } catch (error) { } + return super._getProvider(chainId); + } + + isCommunityResource(): boolean { + return (this.apiKey === defaultApiKey); + } + + static getConnection(network: Network, apiKey?: string): ConnectionInfo { + if (apiKey == null) { apiKey = defaultApiKey; } + + const request = new FetchRequest(`https:/\/${ getHost(network.name) }/v2/${ apiKey }`); + request.allowGzip = true; + + const throttleRetry: ThrottleRetryFunc = async (request, response, attempt) => { + if (apiKey === defaultApiKey) { showThrottleMessage("alchemy"); } + return true; + } + + return { request, throttleRetry }; + } +} diff --git a/packages/providers/src.ts/provider-ankr.ts b/packages/providers/src.ts/provider-ankr.ts new file mode 100644 index 000000000..362b722de --- /dev/null +++ b/packages/providers/src.ts/provider-ankr.ts @@ -0,0 +1,71 @@ +import { defineProperties } from "@ethersproject/properties"; +import { FetchRequest } from "@ethersproject/web"; + +import { AbstractProvider } from "./abstract-provider.js"; +import { showThrottleMessage } from "./community.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { StaticJsonRpcProvider } from "./provider-jsonrpc.js"; + +import type { ConnectionInfo, ThrottleRetryFunc } from "@ethersproject/web"; + +import type { CommunityResourcable } from "./community.js"; +import type { Networkish } from "./network.js"; + + +const defaultApiKey = "9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972"; + +function getHost(name: string): string { + switch (name) { + case "homestead": + return "rpc.ankr.com/eth"; + case "matic": + return "rpc.ankr.com/polygon"; + case "arbitrum": + return "rpc.ankr.com/arbitrum"; + } + return logger.throwArgumentError("unsupported network", "network", name); +} + + +export class AnkrProvider extends StaticJsonRpcProvider implements CommunityResourcable { + readonly apiKey!: string; + + constructor(_network: Networkish = "homestead", apiKey?: null | string) { + const network = Network.from(_network); + if (apiKey == null) { apiKey = defaultApiKey; } + + const connection = AnkrProvider.getConnection(network, apiKey); + super(connection, network); + + defineProperties(this, { apiKey }); + + // Ankr does not support filterId, so we force polling + super._setOptions({ polling: true }); + } + + _getProvider(chainId: number): AbstractProvider { + try { + return new AnkrProvider(chainId, this.apiKey); + } catch (error) { } + return super._getProvider(chainId); + } + + static getConnection(network: Network, apiKey?: null | string): ConnectionInfo { + if (apiKey == null) { apiKey = defaultApiKey; } + + const request = new FetchRequest(`https:/\/${ getHost(network.name) }/${ apiKey }`); + request.allowGzip = true; + + const throttleRetry: ThrottleRetryFunc = async (request, response, attempt) => { + if (apiKey === defaultApiKey) { showThrottleMessage("AnkrProvider"); } + return true; + }; + + return { request, throttleRetry }; + } + + isCommunityResource(): boolean { + return (this.apiKey === defaultApiKey); + } +} diff --git a/packages/providers/src.ts/provider-cloudflare.ts b/packages/providers/src.ts/provider-cloudflare.ts new file mode 100644 index 000000000..56a5b2465 --- /dev/null +++ b/packages/providers/src.ts/provider-cloudflare.ts @@ -0,0 +1,17 @@ + +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { StaticJsonRpcProvider } from "./provider-jsonrpc.js"; + +import type { Networkish } from "./network.js"; + + +export class CloudflareProvider extends StaticJsonRpcProvider { + constructor(_network: Networkish = "homestead") { + const network = Network.from(_network); + if (network.name !== "homestead") { + return logger.throwArgumentError("unsupported network", "network", _network); + } + super("https:/\/cloudflare-eth.com/", network); + } +} diff --git a/packages/providers/src.ts/provider-etherscan.ts b/packages/providers/src.ts/provider-etherscan.ts new file mode 100644 index 000000000..24794a5d8 --- /dev/null +++ b/packages/providers/src.ts/provider-etherscan.ts @@ -0,0 +1,511 @@ +import { hexlify, isHexString, quantity } from "@ethersproject/bytes"; +import { isError } from "@ethersproject/logger"; +import { defineProperties } from "@ethersproject/properties"; +import { toUtf8String } from "@ethersproject/strings"; +import { fetchData, FetchRequest } from "@ethersproject/web"; + +if (false) { console.log(isHexString, isError); } // @TODO + +import { AbstractProvider } from "./abstract-provider.js"; +import { Network } from "./network.js"; +import { NetworkPlugin } from "./plugins-network.js"; + +import type { ConnectionInfo } from "@ethersproject/web"; + +import { PerformActionRequest } from "./abstract-provider.js"; +import type { Networkish } from "./network.js"; +//import type { } from "./pagination"; +import type { TransactionRequest } from "./provider"; + +import { logger } from "./logger.js"; + + +const defaultApiKey = "9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB"; + + + +const EtherscanPluginId = "org.ethers.plugins.etherscan"; +export class EtherscanPlugin extends NetworkPlugin { + readonly baseUrl!: string; + readonly communityApiKey!: string; + + constructor(baseUrl: string, communityApiKey: string) { + super(EtherscanPluginId); + //if (communityApiKey == null) { communityApiKey = null; } + defineProperties(this, { baseUrl, communityApiKey }); + } + + clone(): EtherscanPlugin { + return new EtherscanPlugin(this.baseUrl, this.communityApiKey); + } +} + + +export class EtherscanProvider extends AbstractProvider { + readonly network!: Network; + readonly apiKey!: string; + + constructor(_network?: Networkish, apiKey?: string) { + super(); + + const network = Network.from(_network); + if (apiKey == null) { + const plugin = network.getPlugin(EtherscanPluginId); + if (plugin) { + apiKey = plugin.communityApiKey; + } else { + apiKey = defaultApiKey; + } + } + + defineProperties(this, { apiKey, network }); + + // Test that the network is supported by Etherscan + this.getBaseUrl(); + } + + getBaseUrl(): string { + const plugin = this.network.getPlugin(EtherscanPluginId); + if (plugin) { return plugin.baseUrl; } + + switch(this.network.name) { + case "homestead": + return "https:/\/api.etherscan.io"; + case "ropsten": + return "https:/\/api-ropsten.etherscan.io"; + case "rinkeby": + return "https:/\/api-rinkeby.etherscan.io"; + case "kovan": + return "https:/\/api-kovan.etherscan.io"; + case "goerli": + return "https:/\/api-goerli.etherscan.io"; + default: + } + + return logger.throwArgumentError("unsupported network", "network", this.network); + } + + getUrl(module: string, params: Record): string { + const query = Object.keys(params).reduce((accum, key) => { + const value = params[key]; + if (value != null) { + accum += `&${ key }=${ value }` + } + return accum + }, ""); + const apiKey = ((this.apiKey) ? `&apikey=${ this.apiKey }`: ""); + return `${ this.getBaseUrl() }/api?module=${ module }${ query }${ apiKey }`; + } + + getPostUrl(): string { + return `${ this.getBaseUrl() }/api`; + } + + getPostData(module: string, params: Record): Record { + params.module = module; + params.apikey = this.apiKey; + return params; + } + + async detectNetwork(): Promise { + return this.network; + } + + async fetch(module: string, params: Record, post?: boolean): Promise { + const url = (post ? this.getPostUrl(): this.getUrl(module, params)); + const payload = (post ? this.getPostData(module, params): null); + + /* + this.emit("debug", { + action: "request", + request: url, + provider: this + }); + */ + const request = new FetchRequest(url); + + const connection: ConnectionInfo = { + request, + throttleSlotInterval: 1000, + processResponse: async (request, response) => { + const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)): { }; + const throttle = ((typeof(result.result) === "string") ? result.result: "").toLowerCase().indexOf("rate limit") >= 0; + if (module === "proxy") { + // This JSON response indicates we are being throttled + if (result && result.status == 0 && result.message == "NOTOK" && throttle) { + response.throwThrottleError(result.result); + } + } else { + if (throttle) { + response.throwThrottleError(result.result); + } + } + return response; + }, + }; + + if (payload) { + request.setHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8"); + request.body = Object.keys(payload).map((k) => `${ k }=${ payload[k] }`).join("&"); + } + + const response = await fetchData(connection); + response.assertOk(); + + if (!response.hasBody()) { + throw new Error(); + } + + /* + this.emit("debug", { + action: "response", + request: url, + response: deepCopy(result), + provider: this + }); + */ + + const result = JSON.parse(toUtf8String(response.body)); + + if (module === "proxy") { + if (result.jsonrpc != "2.0") { + // @TODO: not any + const error: any = new Error("invalid response"); + error.result = JSON.stringify(result); + throw error; + } + + if (result.error) { + // @TODO: not any + const error: any = new Error(result.error.message || "unknown error"); + if (result.error.code) { error.code = result.error.code; } + if (result.error.data) { error.data = result.error.data; } + throw error; + } + + return result.result; + + } else { + // getLogs, getHistory have weird success responses + if (result.status == 0 && (result.message === "No records found" || result.message === "No transactions found")) { + return result.result; + } + + if (result.status != 1 || result.message != "OK") { + const error: any = new Error("invalid response"); + error.result = JSON.stringify(result); + // if ((result.result || "").toLowerCase().indexOf("rate limit") >= 0) { + // error.throttleRetry = true; + // } + throw error; + } + + return result.result; + } + } + + // The transaction has already been sanitized by the calls in Provider + _getTransactionPostData(transaction: TransactionRequest): Record { + const result: Record = { }; + for (let key in transaction) { + if ((transaction)[key] == null) { continue; } + let value = (transaction)[key]; + if (key === "type" && value === 0) { continue; } + + // Quantity-types require no leading zero, unless 0 + if (({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true })[key]) { + value = quantity(hexlify(value)); + } else if (key === "accessList") { + value = "[" + this.network.formatter.accessList(value).map((set) => { + return `{address:"${ set.address }",storageKeys:["${ set.storageKeys.join('","') }"]}`; + }).join(",") + "]"; + } else { + value = hexlify(value); + } + result[key] = value; + } + return result; + } + + + _checkError(req: PerformActionRequest, error: Error, transaction: any): never { + /* + let body = ""; + if (isError(error, Logger.Errors.SERVER_ERROR) && error.response && error.response.hasBody()) { + body = toUtf8String(error.response.body); + } + console.log(body); + + // Undo the "convenience" some nodes are attempting to prevent backwards + // incompatibility; maybe for v6 consider forwarding reverts as errors + if (method === "call" && body) { + + // Etherscan keeps changing their string + if (body.match(/reverted/i) || body.match(/VM execution error/i)) { + + // Etherscan prefixes the data like "Reverted 0x1234" + let data = e.data; + if (data) { data = "0x" + data.replace(/^.*0x/i, ""); } + if (!isHexString(data)) { data = "0x"; } + + logger.throwError("call exception", Logger.Errors.CALL_EXCEPTION, { + error, data + }); + } + } + + // Get the message from any nested error structure + let message = error.message; + if (isError(error, Logger.Errors.SERVER_ERROR)) { + if (error.error && typeof(error.error.message) === "string") { + message = error.error.message; + } else if (typeof(error.body) === "string") { + message = error.body; + } else if (typeof(error.responseText) === "string") { + message = error.responseText; + } + } + message = (message || "").toLowerCase(); + + // "Insufficient funds. The account you tried to send transaction from + // does not have enough funds. Required 21464000000000 and got: 0" + if (message.match(/insufficient funds/)) { + logger.throwError("insufficient funds for intrinsic transaction cost", Logger.Errors.INSUFFICIENT_FUNDS, { + error, transaction, info: { method } + }); + } + + // "Transaction with the same hash was already imported." + if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) { + logger.throwError("nonce has already been used", Logger.Errors.NONCE_EXPIRED, { + error, transaction, info: { method } + }); + } + + // "Transaction gas price is too low. There is another transaction with + // same nonce in the queue. Try increasing the gas price or incrementing the nonce." + if (message.match(/another transaction with same nonce/)) { + logger.throwError("replacement fee too low", Logger.Errors.REPLACEMENT_UNDERPRICED, { + error, transaction, info: { method } + }); + } + + if (message.match(/execution failed due to an exception|execution reverted/)) { + logger.throwError("cannot estimate gas; transaction may fail or may require manual gas limit", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { + error, transaction, info: { method } + }); + } +*/ + throw error; + } + + async _detectNetwork(): Promise { + return this.network; + } + + async _perform(req: PerformActionRequest): Promise { + switch (req.method) { + case "chainId": + return this.network.chainId; + + case "getBlockNumber": + return this.fetch("proxy", { action: "eth_blockNumber" }); + + case "getGasPrice": + return this.fetch("proxy", { action: "eth_gasPrice" }); + + case "getBalance": + // Returns base-10 result + return this.fetch("account", { + action: "balance", + address: req.address, + tag: req.blockTag + }); + + case "getTransactionCount": + return this.fetch("proxy", { + action: "eth_getTransactionCount", + address: req.address, + tag: req.blockTag + }); + + case "getCode": + return this.fetch("proxy", { + action: "eth_getCode", + address: req.address, + tag: req.blockTag + }); + + case "getStorageAt": + return this.fetch("proxy", { + action: "eth_getStorageAt", + address: req.address, + position: req.position, + tag: req.blockTag + }); + + case "sendTransaction": + return this.fetch("proxy", { + action: "eth_sendRawTransaction", + hex: req.signedTransaction + }, true).catch((error) => { + return this._checkError(req, error, req.signedTransaction); + }); + + case "getBlock": + if ("blockTag" in req) { + return this.fetch("proxy", { + action: "eth_getBlockByNumber", + tag: req.blockTag, + boolean: (req.includeTransactions ? "true": "false") + }); + } + + return logger.throwError("getBlock by blockHash not supported by Etherscan", "UNSUPPORTED_OPERATION", { + operation: "getBlock(blockHash)" + }); + + case "getTransaction": + return this.fetch("proxy", { + action: "eth_getTransactionByHash", + txhash: req.hash + }); + + case "getTransactionReceipt": + return this.fetch("proxy", { + action: "eth_getTransactionReceipt", + txhash: req.hash + }); + + case "call": { + if (req.blockTag !== "latest") { + throw new Error("EtherscanProvider does not support blockTag for call"); + } + + const postData = this._getTransactionPostData(req.transaction); + postData.module = "proxy"; + postData.action = "eth_call"; + + try { + return await this.fetch("proxy", postData, true); + } catch (error) { + return this._checkError(req, error, req.transaction); + } + } + + case "estimateGas": { + const postData = this._getTransactionPostData(req.transaction); + postData.module = "proxy"; + postData.action = "eth_estimateGas"; + + try { + return await this.fetch("proxy", postData, true); + } catch (error) { + return this._checkError(req, error, req.transaction); + } + } +/* + case "getLogs": { + // Needs to complain if more than one address is passed in + const args: Record = { action: "getLogs" } + + if (params.filter.fromBlock) { + args.fromBlock = checkLogTag(params.filter.fromBlock); + } + + if (params.filter.toBlock) { + args.toBlock = checkLogTag(params.filter.toBlock); + } + + if (params.filter.address) { + args.address = params.filter.address; + } + + // @TODO: We can handle slightly more complicated logs using the logs API + if (params.filter.topics && params.filter.topics.length > 0) { + if (params.filter.topics.length > 1) { + logger.throwError("unsupported topic count", Logger.Errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics }); + } + if (params.filter.topics.length === 1) { + const topic0 = params.filter.topics[0]; + if (typeof(topic0) !== "string" || topic0.length !== 66) { + logger.throwError("unsupported topic format", Logger.Errors.UNSUPPORTED_OPERATION, { topic0: topic0 }); + } + args.topic0 = topic0; + } + } + + const logs: Array = await this.fetch("logs", args); + + // Cache txHash => blockHash + let blocks: { [tag: string]: string } = {}; + + // Add any missing blockHash to the logs + for (let i = 0; i < logs.length; i++) { + const log = logs[i]; + if (log.blockHash != null) { continue; } + if (blocks[log.blockNumber] == null) { + const block = await this.getBlock(log.blockNumber); + if (block) { + blocks[log.blockNumber] = block.hash; + } + } + + log.blockHash = blocks[log.blockNumber]; + } + + return logs; + } +*/ + default: + break; + } + + return super._perform(req); + } + + async getNetwork(): Promise { + return this.network; + } + + async getEtherPrice(): Promise { + if (this.network.name !== "homestead") { return 0.0; } + return parseFloat((await this.fetch("stats", { action: "ethprice" })).ethusd); + } + + isCommunityResource(): boolean { + const plugin = this.network.getPlugin(EtherscanPluginId); + if (plugin) { return (plugin.communityApiKey === this.apiKey); } + + return (defaultApiKey === this.apiKey); + } +} +/* +(async function() { + const provider = new EtherscanProvider(); + console.log(provider); + console.log(await provider.getBlockNumber()); + / * + provider.on("block", (b) => { + console.log("BB", b); + }); + console.log(await provider.getTransactionReceipt("0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e")); + + provider.once("0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e", (tx) => { + console.log("TT", tx); + }); + * / + try { + console.log(await provider.getBlock(100)); + } catch (error) { + console.log(error); + } + + try { + console.log(await provider.getBlock(13821768)); + } catch (error) { + console.log(error); + } + +})(); +*/ diff --git a/packages/providers/src.ts/provider-fallback.ts b/packages/providers/src.ts/provider-fallback.ts new file mode 100644 index 000000000..b34527ba6 --- /dev/null +++ b/packages/providers/src.ts/provider-fallback.ts @@ -0,0 +1,492 @@ + +import { hexlify } from "@ethersproject/bytes"; + +import { AbstractProvider } from "./abstract-provider.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js" +import { shuffle } from "./shuffle.js"; + +import type { Frozen } from "@ethersproject/properties"; + +import type { PerformActionRequest, Subscriber, Subscription } from "./abstract-provider.js"; +import type { Networkish } from "./network.js" + +//const BN_0 = BigInt("0"); +const BN_1 = BigInt("1"); +const BN_2 = BigInt("2"); + +function stall(duration: number) { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} + +function getTime(): number { return (new Date()).getTime(); } + +export interface FallbackProviderConfig { + + // The provider + provider: AbstractProvider; + + // How long to wait for a response before getting impatient + // and ispatching the next provider + stallTimeout?: number; + + // Lower values are dispatched first + priority?: number; + + // How much this provider contributes to the quorum + weight?: number; +}; + +const defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 }; + +// We track a bunch of extra stuff that might help debug problems or +// optimize infrastructure later on. +export interface FallbackProviderState extends Required { + + // The most recent blockNumber this provider has reported (-2 if none) + blockNumber: number; + + // The number of total requests ever sent to this provider + requests: number; + + // The number of responses that errored + errorResponses: number; + + // The number of responses that occured after the result resolved + lateResponses: number; + + // How many times syncing was required to catch up the expected block + outOfSync: number; + + // The number of requests which reported unsupported operation + unsupportedEvents: number; + + // A rolling average (5% current duration) for response time + rollingDuration: number; + + // The ratio of quorum-agreed results to total + score: number; +} + +interface Config extends FallbackProviderState { + _updateNumber: null | Promise; + _network: null | Frozen; + _totalTime: number; +} + +const defaultState = { + blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0, + outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0, + _network: null, _updateNumber: null, _totalTime: 0 +}; + + +async function waitForSync(config: Config, blockNumber: number): Promise { + while (config.blockNumber < 0 || config.blockNumber < blockNumber) { + if (!config._updateNumber) { + config._updateNumber = (async () => { + const blockNumber = await config.provider.getBlockNumber(); + if (blockNumber > config.blockNumber) { + config.blockNumber = blockNumber; + } + config._updateNumber = null; + })(); + } + await config._updateNumber; + config.outOfSync++; + } +} + +export type FallbackProviderOptions = { + // How many providers must agree on a value before reporting + // back the response + quorum: number; + + // How many providers must have reported the same event + // for it to be emitted + eventQuorum: number; + + // How many providers to dispatch each event to simultaneously. + // Set this to 0 to use getLog polling, which implies eventQuorum + // is equal to quorum. + eventWorkers: number; +}; + +type RunningState = { + config: Config; + staller: null | Promise; + didBump: boolean; + perform: null | Promise; + done: boolean; + result: { result: any } | { error: Error } +} + +// Normalizes a result to a string that can be used to compare against +// other results using normal string equality +function normalize(network: Frozen, value: any, req: PerformActionRequest): string { + switch (req.method) { + case "chainId": + return logger.getBigInt(value).toString(); + case "getBlockNumber": + return logger.getNumber(value).toString(); + case "getGasPrice": + return logger.getBigInt(value).toString(); + case "getBalance": + return logger.getBigInt(value).toString(); + case "getTransactionCount": + return logger.getNumber(value).toString(); + case "getCode": + return hexlify(value); + case "getStorageAt": + return hexlify(value); + case "getBlock": + if (req.includeTransactions) { + return JSON.stringify(network.formatter.blockWithTransactions(value)); + } + return JSON.stringify(network.formatter.block(value)); + case "getTransaction": + return JSON.stringify(network.formatter.transactionResponse(value)); + case "getTransactionReceipt": + return JSON.stringify(network.formatter.receipt(value)); + case "call": + return hexlify(value); + case "estimateGas": + return logger.getBigInt(value).toString(); + case "getLogs": + return JSON.stringify(value.map((v: any) => network.formatter.log(v))); + } + + return logger.throwError("unsupported method", "UNSUPPORTED_OPERATION", { + operation: `_perform(${ JSON.stringify(req.method) })` + }); +} + +type TallyResult = { + result: any; + normal: string; + weight: number; +}; + +// This strategy picks the highest wieght result, as long as the weight is +// equal to or greater than quorum +function checkQuorum(quorum: number, results: Array): any { + const tally: Map = new Map(); + for (const { result, normal, weight } of results) { + const t = tally.get(normal) || { result, weight: 0 }; + t.weight += weight; + tally.set(normal, t); + } + + let bestWeight = 0; + let bestResult = undefined; + + for (const { weight, result } of tally.values()) { + if (weight >= quorum && weight > bestWeight) { + bestWeight = weight; + bestResult = result; + } + } + + return bestResult; +} + +/* +function getMean(results: Array): bigint { + const total = results.reduce((a, r) => (a + BigInt(r.result)), BN_0); + return total / BigInt(results.length); +} +*/ + +function getMedian(results: Array): bigint { + // Get the sorted values + const values = results.map((r) => BigInt(r.result)); + values.sort((a, b) => ((a < b) ? -1: (b > a) ? 1: 0)); + + const mid = values.length / 2; + + // Odd-length; take the middle value + if (values.length % 2) { return values[mid]; } + + // Even length; take the ceiling of the mean of the center two values + return (values[mid - 1] + values[mid] + BN_1) / BN_2; +} + +export class FallbackProvider extends AbstractProvider { + //readonly providerConfigs!: ReadonlyArray>>; + + readonly quorum: number; + readonly eventQuorum: number; + readonly eventWorkers: number; + + readonly #configs: Array; + + #initialSyncPromise: null | Promise; + + constructor(providers: Array, network?: Networkish) { + super(network); + this.#configs = providers.map((p) => { + if (p instanceof AbstractProvider) { + return Object.assign({ provider: p }, defaultConfig, defaultState ); + } else { + return Object.assign({ }, defaultConfig, p, defaultState ); + } + }); + this.#initialSyncPromise = null; + + this.quorum = 2; //Math.ceil(providers.length / 2); + this.eventQuorum = 1; + this.eventWorkers = 1; + + if (this.quorum > this.#configs.reduce((a, c) => (a + c.weight), 0)) { + logger.throwArgumentError("quorum exceed provider wieght", "quorum", this.quorum); + } + } + + async _detectNetwork() { + return Network.from(logger.getBigInt(await this._perform({ method: "chainId" }))).freeze(); + } + + _getSubscriber(sub: Subscription): Subscriber { + throw new Error("@TODO"); + } + + // Grab the next (random) config that is not already part of configs + #getNextConfig(configs: Array): null | Config { + // Shuffle the states, sorted by priority + const allConfigs = this.#configs.slice(); + shuffle(allConfigs); + allConfigs.sort((a, b) => (b.priority - a.priority)); + + for (const config of allConfigs) { + if (configs.indexOf(config) === -1) { return config; } + } + + return null; + } + + // Adds a new runner (if available) to running. + #addRunner(running: Set, req: PerformActionRequest): null | RunningState { + const config = this.#getNextConfig(Array.from(running).map((r) => r.config)); + if (config == null) { + return null; + } + + const result: any = { }; + + const runner: RunningState = { + config, result, didBump: false, done: false, + perform: null, staller: null + }; + + const now = getTime(); + + runner.perform = (async () => { + try { + config.requests++; + result.result = await config.provider._perform(req); + } catch (error) { + config.errorResponses++; + result.error = error; + } + + if (runner.done) { config.lateResponses++; } + + const dt = (getTime() - now); + config._totalTime += dt; + + config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt; + + runner.perform = null; + })(); + + runner.staller = (async () => { + await stall(config.stallTimeout); + runner.staller = null; + })(); + + running.add(runner); + return runner; + } + + // Initializes the blockNumber and network for each runner and + // blocks until initialized + async #initialSync(): Promise { + let initialSync = this.#initialSyncPromise; + if (!initialSync) { + const promises: Array> = [ ]; + this.#configs.forEach((config) => { + promises.push(waitForSync(config, 0)); + promises.push((async () => { + config._network = await config.provider.getNetwork(); + })()); + }); + + this.#initialSyncPromise = initialSync = (async () => { + // Wait for all providers to have a block number and network + await Promise.all(promises); + + // Check all the networks match + let chainId: null | bigint = null; + for (const config of this.#configs) { + const network = >(config._network); + if (chainId == null) { + chainId = network.chainId; + } else if (network.chainId !== chainId) { + logger.throwError("cannot mix providers on different networks", "UNSUPPORTED_OPERATION", { + operation: "new FallbackProvider" + }); + } + } + })(); + } + + await initialSync + } + + + async #checkQuorum(running: Set, req: PerformActionRequest): Promise { + // Get all the result objects + const results: Array = [ ]; + for (const runner of running) { + if ("result" in runner.result) { + const result = runner.result.result; + results.push({ + result, + normal: normalize(>(runner.config._network), result, req), + weight: runner.config.weight + }); + } + } + + // Are there enough results to event meet quorum? + if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) { + return undefined; + } + + switch (req.method) { + case "getBlockNumber": { + throw new Error("TODO"); + } + + case "getGasPrice": + case "estimateGas": + return getMedian(results); + + case "getBlock": + // Pending blocks are mempool dependant and already + // quite untrustworthy + if ("blockTag" in req && req.blockTag === "pending") { + return results[0].result; + } + return checkQuorum(this.quorum, results); + + case "chainId": + case "getBalance": + case "getTransactionCount": + case "getCode": + case "getStorageAt": + case "getTransaction": + case "getTransactionReceipt": + case "getLogs": + return checkQuorum(this.quorum, results); + + case "call": + // @TODO: Check errors + return checkQuorum(this.quorum, results); + + case "sendTransaction": + throw new Error("TODO"); + } + + return logger.throwError("unsupported method", "UNSUPPORTED_OPERATION", { + operation: `_perform(${ JSON.stringify((req).method) })` + }); + } + + async #waitForQuorum(running: Set, req: PerformActionRequest): Promise { + if (running.size === 0) { throw new Error("no runners?!"); } + + // Any promises that are interesting to watch for; an expired stall + // or a successful perform + const interesting: Array> = [ ]; + + //const results: Array = [ ]; + //const errors: Array = [ ]; + let newRunners = 0; + for (const runner of running) { +// @TODO: use runner.perfom != null + /* + if ("result" in runner.result) { + results.push(runner.result.result); + } else if ("error" in runner.result) { + errors.push(runner.result.error); + } +*/ + // No responses, yet; keep an eye on it + if (runner.perform) { + interesting.push(runner.perform); + } + + // Still stalling... + if (runner.staller) { + interesting.push(runner.staller); + continue; + } + + // This runner has already triggered another runner + if (runner.didBump) { continue; } + + // Got a response (result or error) or stalled; kick off another runner + runner.didBump = true; + newRunners++; + } + + // Check for quorum + /* + console.log({ results, errors } ); + if (results.length >= this.quorum) { + return results[0]; + } + + if (errors.length >= this.quorum) { + return errors[0]; + } + */ + const value = await this.#checkQuorum(running, req); + if (value !== undefined) { + if (value instanceof Error) { throw value; } + return value; + } + + // Add any new runners, because a staller timed out or a result + // or error response came in. + for (let i = 0; i < newRunners; i++) { + this.#addRunner(running, req) + } + + if (interesting.length === 0) { + throw new Error("quorum not met"); +// return logger.throwError("failed to meet quorum", "", { +// }); + } + + // Wait for someone to either complete its perform or trigger a stall + await Promise.race(interesting); + + return await this.#waitForQuorum(running, req); + } + + async _perform(req: PerformActionRequest): Promise { + await this.#initialSync(); + + // Bootstrap enough to meet quorum + const running: Set = new Set(); + for (let i = 0; i < this.quorum; i++) { + this.#addRunner(running, req); + } + + const result = this.#waitForQuorum(running, req); + for (const runner of running) { runner.done = true; } + return result; + } +} diff --git a/packages/providers/src.ts/provider-infura.ts b/packages/providers/src.ts/provider-infura.ts new file mode 100644 index 000000000..bb5bed00e --- /dev/null +++ b/packages/providers/src.ts/provider-infura.ts @@ -0,0 +1,89 @@ +import { defineProperties } from "@ethersproject/properties"; +import { FetchRequest } from "@ethersproject/web"; + +import { showThrottleMessage } from "./community.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { StaticJsonRpcProvider } from "./provider-jsonrpc.js"; + +import type { ConnectionInfo, ThrottleRetryFunc } from "@ethersproject/web"; + +import type { AbstractProvider } from "./abstract-provider.js"; +import type { CommunityResourcable } from "./community.js"; +import type { Networkish } from "./network.js"; + + +const defaultProjectId = "84842078b09946638c03157f83405213"; + +function getHost(name: string): string { + switch(name) { + case "homestead": + return "mainnet.infura.io"; + case "ropsten": + return "ropsten.infura.io"; + case "rinkeby": + return "rinkeby.infura.io"; + case "kovan": + return "kovan.infura.io"; + case "goerli": + return "goerli.infura.io"; + case "matic": + return "polygon-mainnet.infura.io"; + case "maticmum": + return "polygon-mumbai.infura.io"; + case "optimism": + return "optimism-mainnet.infura.io"; + case "optimism-kovan": + return "optimism-kovan.infura.io"; + case "arbitrum": + return "arbitrum-mainnet.infura.io"; + case "arbitrum-rinkeby": + return "arbitrum-rinkeby.infura.io"; + } + + return logger.throwArgumentError("unsupported network", "network", name); +} + + +export class InfuraProvider extends StaticJsonRpcProvider implements CommunityResourcable { + readonly projectId!: string; + readonly projectSecret!: null | string; + + constructor(_network: Networkish = "homestead", projectId?: null | string, projectSecret?: null | string) { + const network = Network.from(_network); + if (projectId == null) { projectId = defaultProjectId; } + if (projectSecret == null) { projectSecret = null; } + + const connection = InfuraProvider.getConnection(network, projectId, projectSecret); + super(connection, network); + + defineProperties(this, { projectId, projectSecret }); + } + + _getProvider(chainId: number): AbstractProvider { + try { + return new InfuraProvider(chainId, this.projectId, this.projectSecret); + } catch (error) { } + return super._getProvider(chainId); + } + + static getConnection(network: Network, projectId?: null | string, projectSecret?: null | string): ConnectionInfo { + if (projectId == null) { projectId = defaultProjectId; } + if (projectSecret == null) { projectSecret = null; } + + const request = new FetchRequest(`https:/\/${ getHost(network.name) }/v3/${ projectId }`); + request.allowGzip = true; + if (projectSecret) { request.setCredentials("", projectSecret); } + + const throttleRetry: ThrottleRetryFunc = async (request, response, attempt) => { + if (projectId === defaultProjectId) { showThrottleMessage("InfuraProvider"); } + return true; + }; + + return { request, throttleRetry }; + } + + isCommunityResource(): boolean { + return (this.projectId === defaultProjectId); + } +} diff --git a/packages/providers/src.ts/provider-ipcsocket-browser.ts b/packages/providers/src.ts/provider-ipcsocket-browser.ts new file mode 100644 index 000000000..4f11ba6a5 --- /dev/null +++ b/packages/providers/src.ts/provider-ipcsocket-browser.ts @@ -0,0 +1,3 @@ +const IpcSocketProvider = undefined; + +export { IpcSocketProvider }; diff --git a/packages/providers/src.ts/provider-ipcsocket.ts b/packages/providers/src.ts/provider-ipcsocket.ts new file mode 100644 index 000000000..3461d2a1a --- /dev/null +++ b/packages/providers/src.ts/provider-ipcsocket.ts @@ -0,0 +1,98 @@ + +import { connect } from "net"; +import { SocketProvider } from "./provider-socket.js"; + +import type { Socket } from "net"; +import type { Networkish } from "./network.js"; + + +// @TODO: Is this sufficient? Is this robust? Will newlines occur between +// all payloads and only between payloads? +function splitBuffer(data: Buffer): { messages: Array, remaining: Buffer } { + const messages: Array = [ ]; + + let lastStart = 0; + while (true) { + const nl = data.indexOf(10, lastStart); + if (nl === -1) { break; } + messages.push(data.subarray(lastStart, nl).toString().trim()); + lastStart = nl + 1; + } + + return { messages, remaining: data.subarray(lastStart) }; +} + +export class IpcSocketProvider extends SocketProvider { + #socket: Socket; + get socket(): Socket { return this.#socket; } + + constructor(path: string, network?: Networkish) { + super(network); + this.#socket = connect(path); + + this.socket.on("ready", () => { this._start(); }); + + let response = Buffer.alloc(0); + this.socket.on("data", (data) => { + response = Buffer.concat([ response, data ]); + const { messages, remaining } = splitBuffer(response); + messages.forEach((message) => { + this._processMessage(message); + }); + response = remaining; + }); + + this.socket.on("end", () => { + this.emit("close"); + this.socket.destroy(); + this.socket.end(); + }); + } + + stop(): void { + this.socket.destroy(); + this.socket.end(); + } + + async _write(message: string): Promise { + console.log(">>>", message); + this.socket.write(message); + } +} +/* + +import { defineProperties } from "@ethersproject/properties"; + +import { SocketLike, SocketProvider } from "./provider-socket.js"; + +import type { Socket } from "net"; + +export class SocketWrapper implements SocketLike { + #socket: Socket; + + constructor(path: string) { + this.#socket = connect(path); + } + + send(data: string): void { + this.#socket.write(data, () => { }); + } + + addEventListener(event: string, listener: (data: string) => void): void { + //this.#socket.on(event, (value: ) => { + //}); + } + + close(): void { + } +} + +export class IpcProvider extends SocketProvider { + readonly path!: string; + + constructor(path: string) { + super(new SocketWrapper(path)); + defineProperties(this, { path }); + } +} +*/ diff --git a/packages/providers/src.ts/provider-jsonrpc.ts b/packages/providers/src.ts/provider-jsonrpc.ts new file mode 100644 index 000000000..fa0ab82e6 --- /dev/null +++ b/packages/providers/src.ts/provider-jsonrpc.ts @@ -0,0 +1,747 @@ +// @TODO: +// - Add the batching API + +// https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=true&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false + +import { resolveAddress } from "@ethersproject/address"; +import { hexlify, isHexString, quantity } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; +import { TypedDataEncoder } from "@ethersproject/hash"; +import { toUtf8Bytes } from "@ethersproject/strings"; +import { accessListify } from "@ethersproject/transactions"; +import { fetchData, FetchRequest } from "@ethersproject/web"; + +import { AbstractProvider, UnmanagedSubscriber } from "./abstract-provider.js"; +import { Network } from "./network.js"; +import { FeeData } from "./provider.js"; +import { FilterIdEventSubscriber, FilterIdPendingSubscriber } from "./subscriber-filterid.js"; + +import type { Addressable } from "@ethersproject/address"; +import type { TypedDataDomain, TypedDataField } from "@ethersproject/hash"; +import type { Frozen } from "@ethersproject/properties"; +import type { ConnectionInfo } from "@ethersproject/web"; + +import type { PerformActionRequest, Subscriber, Subscription } from "./abstract-provider.js"; +import type { Networkish } from "./network.js"; +import type { BlockTag, Provider, TransactionRequest, TransactionResponse } from "./provider.js"; +import type { Signer } from "./signer.js"; + +import { logger } from "./logger.js"; + + +function copy(value: T): T { + return JSON.parse(JSON.stringify(value)); +} + +const Primitive = "bigint,boolean,function,number,string,symbol".split(/,/g); +//const Methods = "getAddress,then".split(/,/g); +function deepCopy(value: T): T { + if (value == null || Primitive.indexOf(typeof(value)) >= 0) { + return value; + } + + // Keep any Addressable + if (typeof((value).getAddress) === "function") { + return value; + } + + if (Array.isArray(value)) { return (value.map(deepCopy)); } + + if (typeof(value) === "object") { + return Object.keys(value).reduce((accum, key) => { + accum[key] = (value)[key]; + return accum; + }, { }); + } + + throw new Error(`should not happen: ${ value } (${ typeof(value) })`); +} + +function getLowerCase(value: string): string { + if (value) { return value.toLowerCase(); } + return value; +} + +interface Pollable { + pollingInterval: number; +} + +function isPollable(value: any): value is Pollable { + return (value && typeof(value.pollingInterval) === "number"); +} + +export type JsonRpcPayload = { + id: number; + method: string; + params: any; + jsonrpc: "2.0"; +}; + +export type JsonRpcResult = { + id: number; + result: any; +} | { + id: number; + error: { + code: number; + message?: string; + data?: any; + } +}; + +export type JsonRpcIncomingMessage = JsonRpcResult | { + method: string; + params: any; +}; + +export type JsonRpcOptions = { + polling?: boolean; + + batchStallTime?: number; + batchMaxSize?: number; + batchMaxCount?: number; +}; + +const defaultOptions = { + // Default to use filter ID (the FilterIdSubscriber will + // fallback onto polling if subscription fails) + polling: false, + + // Maximum batch size (in bytes) + batchMaxSize: (1 << 20), + + // How long to wait before dispatching a new batch + batchStallTime: 250, +} + +export interface JsonRpcTransactionRequest { + from?: string; + to?: string; + data?: string; + + chainId?: string; + type?: string; + gas?: string; + + gasPrice?: string; + maxFeePerGas?: string; + maxPriorityFeePerGas?: string; + + nonce?: string; + value?: string; + + accessList?: Array<{ address: string, storageKeys: Array }>; +} + +// @TODO: Unchecked Signers + +export class JsonRpcSigner implements Signer { + provider!: JsonRpcApiProvider; + address!: string; + + constructor(provider: JsonRpcApiProvider, address: string) { + defineProperties(this, { provider, address }); + } + + connect(provider: null | Provider): Signer { + return logger.throwError("cannot reconnect JsonRpcSigner", "UNSUPPORTED_OPERATION", { + operation: "signer.connect" + }); + } + + async getAddress(): Promise { + return this.address; + } + + async getNetwork(): Promise> { + return await this.provider.getNetwork(); + } + + async getFeeData(): Promise { + return await this.provider.getFeeData(); + } + + async estimateGas(tx: TransactionRequest): Promise { + return await this.provider.estimateGas(tx); + } + + async call(tx: TransactionRequest): Promise { + return await this.provider.call(tx); + } + + async resolveName(name: string | Addressable): Promise { + return await this.provider.resolveName(name); + } + + async getBalance(blockTag?: BlockTag): Promise { + return await this.provider.getBalanceOf(this.address); + } + + async getTransactionCount(blockTag?: BlockTag): Promise { + return await this.provider.getTransactionCountOf(this.address); + } + + // Returns just the hash of the transaction after sent, which is what + // the bare JSON-RPC API does; + async sendUncheckedTransaction(_tx: TransactionRequest): Promise { + const tx = deepCopy(_tx); + + const promises: Array> = []; + + // Make sure the from matches the sender + if (tx.from) { + const _from = tx.from; + promises.push((async () => { + const from = await resolveAddress(_from, this.provider); + if (from == null || from.toLowerCase() !== this.address.toLowerCase()) { + logger.throwArgumentError("from address mismatch", "transaction", _tx); + } + tx.from = from; + })()); + } else { + tx.from = this.address; + } + + // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user + // wishes to use this, it is easy to specify explicitly, otherwise + // we look it up for them. + if (tx.gasLimit == null) { + promises.push((async () => { + tx.gasLimit = await this.provider.estimateGas({ ...tx, from: this.address}); + })()); + } + + // The address may be an ENS name or Addressable + if (tx.to != null) { + const _to = tx.to; + promises.push((async () => { + tx.to = await resolveAddress(_to, this.provider); + })()); + } + + // Wait until all of our properties are filled in + if (promises.length) { await Promise.all(promises); } + + const hexTx = this.provider.getRpcTransaction(tx); + + return this.provider.send("eth_sendTransaction", [ hexTx ]); + } + + async sendTransaction(tx: TransactionRequest): Promise { + // This cannot be mined any earlier than any recent block + const blockNumber = await this.provider.getBlockNumber(); + + // Send the transaction + const hash = await this.sendUncheckedTransaction(tx); + + // Unfortunately, JSON-RPC only provides and opaque transaction hash + // for a response, and we need the actual transaction, so we poll + // for it; it should show up very quickly + return await (new Promise((resolve, reject) => { + const checkTx = async (duration: number) => { + // Try getting the transaction + const tx = await this.provider.getTransaction(hash); + if (tx != null) { + resolve(this.provider._wrapTransaction(tx, hash, blockNumber)); + return; + } + + // Wait another 4 seconds + this.provider._setTimeout(() => { checkTx(4000); }, duration); + }; + checkTx(1000); + })); + } + + async signTransaction(_tx: TransactionRequest): Promise { + const tx = deepCopy(_tx); + + // Make sure the from matches the sender + if (tx.from) { + const from = await resolveAddress(tx.from, this.provider); + if (from == null || from.toLowerCase() !== this.address.toLowerCase()) { + return logger.throwArgumentError("from address mismatch", "transaction", _tx); + } + tx.from = from; + } else { + tx.from = this.address; + } + + const hexTx = this.provider.getRpcTransaction(tx); + return await this.provider.send("eth_sign_Transaction", [ hexTx ]); + } + + + async signMessage(_message: string | Uint8Array): Promise { + const message = ((typeof(_message) === "string") ? toUtf8Bytes(_message): _message); + return await this.provider.send("personal_sign", [ + hexlify(message), this.address.toLowerCase() ]); + } + + async signTypedData(domain: TypedDataDomain, types: Record>, _value: Record): Promise { + const value = deepCopy(_value); + + // Populate any ENS names (in-place) + const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value: string) => { + const address = await resolveAddress(value); + if (address == null) { + return logger.throwArgumentError("TypedData does not support null address", "value", value); + } + return address; + }); + + return await this.provider.send("eth_signTypedData_v4", [ + this.address.toLowerCase(), + JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value)) + ]); + } + + async unlock(password: string): Promise { + return this.provider.send("personal_unlockAccount", [ + this.address.toLowerCase(), password, null ]); + } + + // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign + async _legacySignMessage(_message: string | Uint8Array): Promise { + const message = ((typeof(_message) === "string") ? toUtf8Bytes(_message): _message); + return await this.provider.send("eth_sign", [ + this.address.toLowerCase(), hexlify(message) ]); + } +} + +export class JsonRpcApiProvider extends AbstractProvider { + #nextId: number; + + #options: JsonRpcOptions; + + constructor(network?: Networkish) { + super(network); + + this.#nextId = 1; + this.#options = Object.assign({ }, defaultOptions); + } + + _getOptions(key: K): JsonRpcOptions[K] { + return this.#options[key]; + } + + _setOptions(options: JsonRpcOptions): void { + // Validate all the options + for (const _key in options) { + const key = _key; + const value = options[key]; + if (typeof(value) !== typeof(this.#options[key])) { + return logger.throwArgumentError("invalid option value", `options.${ key }`, value); + } + } + + // Update the values + for (const _key in options) { + const key = _key; + this.#options[key] = (options[key]); + } + } + + prepareRequest(method: string, params: Array): JsonRpcPayload { + return { + method, params, id: (this.#nextId++), jsonrpc: "2.0" + }; + } + + // Sends the payload to the backend + //async sendPayload(payload: any): Promise { + // throw new Error("sub-class must implement this"); + //} + + async send(method: string, params: Array): Promise { + // @TODO: This should construct and queue the payload + throw new Error("sub-class must implement this"); + } + + async getSigner(address: number | string = 0): Promise { + const network = await this.getNetwork(); + + const accounts = await this.send>("eth_accounts", [ ]); + + // Account index + if (typeof(address) === "number") { + if (address > accounts.length) { throw new Error("no such account"); } + return new JsonRpcSigner(this, accounts[address]); + } + + // Account address + address = network.formatter.address(address); + for (const account of accounts) { + if (network.formatter.address(account) === account) { + return new JsonRpcSigner(this, account); + } + } + + throw new Error("invalid account"); + } + + // Sub-classes can override this; it detects the *actual* network we + // are connected to + async _detectNetwork(): Promise { + return Network.from(logger.getBigInt(await this._perform({ method: "chainId" }))); + } + + _getSubscriber(sub: Subscription): Subscriber { + // Pending Filters aren't availble via polling + if (sub.type === "pending") { return new FilterIdPendingSubscriber(this); } + + if (sub.type === "event") { + return new FilterIdEventSubscriber(this, sub.filter); + } + + // Orphaned Logs are handled automatically, by the filter, since + // logs with removed are emitted by it + if (sub.type === "orphan" && sub.filter.orphan === "drop-log") { + return new UnmanagedSubscriber("orphan"); + } + + return super._getSubscriber(sub); + } + + getRpcTransaction(tx: TransactionRequest): JsonRpcTransactionRequest { + const result: JsonRpcTransactionRequest = {}; + + // JSON-RPC now requires numeric values to be "quantity" values + ["chainId", "gasLimit", "gasPrice", "type", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "value"].forEach((key) => { + if ((tx)[key] == null) { return; } + let dstKey = key; + if (key === "gasLimit") { dstKey = "gas"; } + (result)[dstKey] = quantity((tx)[key]); + }); + + // Make sure addresses and data are lowercase + ["from", "to", "data"].forEach((key) => { + if ((tx)[key] == null) { return; } + (result)[key] = hexlify((tx)[key]); + }); + + // Normalize the access list object + if (tx.accessList) { + result["accessList"] = accessListify(tx.accessList); + } + + return result; + } + + getRpcRequest(req: PerformActionRequest): null | { method: string, args: Array } { + switch (req.method) { + case "chainId": + return { method: "eth_chainId", args: [ ] }; + + case "getBlockNumber": + return { method: "eth_blockNumber", args: [ ] }; + + case "getGasPrice": + return { method: "eth_gasPrice", args: [] }; + + case "getBalance": + return { + method: "eth_getBalance", + args: [ getLowerCase(req.address), req.blockTag ] + }; + + case "getTransactionCount": + return { + method: "eth_getTransactionCount", + args: [ getLowerCase(req.address), req.blockTag ] + }; + + case "getCode": + return { + method: "eth_getCode", + args: [ getLowerCase(req.address), req.blockTag ] + }; + + case "getStorageAt": + return { + method: "eth_getStorageAt", + args: [ + getLowerCase(req.address), + ("0x" + req.position.toString(16)), + req.blockTag + ] + }; + + case "sendTransaction": + return { + method: "eth_sendRawTransaction", + args: [ req.signedTransaction ] + }; + + case "getBlock": + if ("blockTag" in req) { + return { + method: "eth_getBlockByNumber", + args: [ req.blockTag, !!req.includeTransactions ] + }; + } else if ("blockHash" in req) { + return { + method: "eth_getBlockByHash", + args: [ req.blockHash, !!req.includeTransactions ] + }; + } + break; + + case "getTransaction": + return { + method: "eth_getTransactionByHash", + args: [ req.hash ] + }; + + case "getTransactionReceipt": + return { + method: "eth_getTransactionReceipt", + args: [ req.hash ] + }; + + case "call": + return { + method: "eth_call", + args: [ this.getRpcTransaction(req.transaction), req.blockTag ] + }; + + case "estimateGas": { + return { + method: "eth_estimateGas", + args: [ this.getRpcTransaction(req.transaction) ] + }; + } + + case "getLogs": + if (req.filter && req.filter.address != null) { + if (Array.isArray(req.filter.address)) { + req.filter.address = req.filter.address.map(getLowerCase); + } else { + req.filter.address = getLowerCase(req.filter.address); + } + } + return { method: "eth_getLogs", args: [ req.filter ] }; + } + + return null; + } + + getRpcError(method: string, args: Array, error: Error): Error { + if (method === "eth_call") { + const result = spelunkData(error); + if (result) { + // @TODO: Extract errorSignature, errorName, errorArgs, reason if + // it is Error(string) or Panic(uint25) + return logger.makeError("execution reverted during JSON-RPC call", "CALL_EXCEPTION", { + data: result.data, + transaction: args[0] + }); + } + + return logger.makeError("missing revert data during JSON-RPC call", "CALL_EXCEPTION", { + data: "0x", transaction: args[0], info: { error } + }); + } + + if (method === "eth_estimateGas") { + } + + const message = JSON.stringify(spelunkMessage(error)); + + if (message.match(/insufficient funds|base fee exceeds gas limit/)) { + return logger.makeError("insufficient funds for intrinsic transaction cost", "INSUFFICIENT_FUNDS", { + transaction: args[0] + }); + } + + if (message.match(/nonce/) && message.match(/too low/)) { + return logger.makeError("nonce has already been used", "NONCE_EXPIRED", { + transaction: args[0] + }); + } + + // "replacement transaction underpriced" + if (message.match(/replacement transaction/) && message.match(/underpriced/)) { + return logger.makeError("replacement fee too low", "REPLACEMENT_UNDERPRICED", { + transaction: args[0] + }); + } + + if (message.match(/only replay-protected/)) { + return logger.makeError("legacy pre-eip-155 transactions not supported", "UNSUPPORTED_OPERATION", { + operation: method, info: { transaction: args[0] } + }); + } + + if (method === "estimateGas" && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) { + return logger.makeError("cannot estimate gas; transaction may fail or may require manual gas limit", "UNPREDICTABLE_GAS_LIMIT", { + transaction: args[0] + }); + } + + return error; + } + + async _perform(req: PerformActionRequest): Promise { + // Legacy networks do not like the type field being passed along (which + // is fair), so we delete type if it is 0 and a non-EIP-1559 network + if (req.method === "call" || req.method === "estimateGas") { + let tx = req.transaction; + if (tx && tx.type != null && logger.getBigInt(tx.type)) { + // If there are no EIP-1559 properties, it might be non-EIP-a559 + if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) { + const feeData = await this.getFeeData(); + if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) { + // Network doesn't know about EIP-1559 (and hence type) + req = Object.assign({ }, req, { + transaction: Object.assign({ }, tx, { type: undefined }) + }); + } + } + } + } + + const request = this.getRpcRequest(req); + + if (request != null) { + this.emit("debug", { type: "sendRequest", request }); + + try { + const result = await this.send(request.method, request.args); + //console.log("RR", result); + this.emit("debug", { type: "getResponse", result }); + return result; + } catch (error) { + this.emit("debug", { type: "getError", error }); + throw this.getRpcError(request.method, request.args, error); + } + } + + return super._perform(req); + } +} + +export class JsonRpcProvider extends JsonRpcApiProvider { + #connect: ConnectionInfo; + + #pollingInterval: number; + + constructor(url?: string | ConnectionInfo, network?: Networkish) { + if (url == null) { url = "http:/\/localhost:8545"; } + super(network); + + if (typeof(url) === "string") { + this.#connect = { request: new FetchRequest(url) }; + } else { + this.#connect = Object.assign({ }, url); + this.#connect.request = this.#connect.request.clone(); + } + + this.#pollingInterval = 4000; + } + + async send(method: string, params: Array): Promise { + params = copy>(params); + + // Configure a POST connection for the requested method + const connection = Object.assign({ }, this.#connect); + connection.request = connection.request.clone(); + connection.request.body = this.prepareRequest(method, params); + + const response = await fetchData(connection); + response.assertOk(); + + const result: JsonRpcResult = response.bodyJson; + if ("error" in result) { + return logger.throwError("error from JSON-RPC", "UNKNOWN_ERROR", { + result + }); + } + return result.result; + } + + get pollingInterval(): number { return this.#pollingInterval; } + set pollingInterval(value: number) { + if (!Number.isInteger(value) || value < 0) { throw new Error("invalid interval"); } + this.#pollingInterval = value; + this._forEachSubscriber((sub) => { + if (isPollable(sub)) { + sub.pollingInterval = this.#pollingInterval; + } + }); + } +} + +// This class should only be used when it is not possible for the +// underlying network to change, such as with INFURA. If you are +// using MetaMask or some other client which allows users to change +// their network DO NOT USE THIS. Bad things will happen. +export class StaticJsonRpcProvider extends JsonRpcProvider { + readonly network!: Network; + + constructor(url: string | ConnectionInfo, network?: Network) { + super(url, network); + defineProperties(this, { network }); + } + + async _detectNetwork(): Promise { + return this.network; + } +} + + +function spelunkData(value: any): null | { message: string, data: string } { + if (value == null) { return null; } + + // These *are* the droids we're looking for. + if (typeof(value.message) === "string" && value.message.match("reverted") && isHexString(value.data)) { + return { message: value.message, data: value.data }; + } + + // Spelunk further... + if (typeof(value) === "object") { + for (const key in value) { + const result = spelunkData(value[key]); + if (result) { return result; } + } + return null; + } + + // Might be a JSON string we can further descend... + if (typeof(value) === "string") { + try { + return spelunkData(JSON.parse(value)); + } catch (error) { } + } + + return null; +} + +function _spelunkMessage(value: any, result: Array): void { + if (value == null) { return; } + + // These *are* the droids we're looking for. + if (typeof(value.message) === "string") { + result.push(value.message); + } + + // Spelunk further... + if (typeof(value) === "object") { + for (const key in value) { + _spelunkMessage(value[key], result); + } + } + + // Might be a JSON string we can further descend... + if (typeof(value) === "string") { + try { + return _spelunkMessage(JSON.parse(value), result); + } catch (error) { } + } +} + +function spelunkMessage(value: any): Array { + const result: Array = [ ]; + _spelunkMessage(value, result); + return result; +} diff --git a/packages/providers/src.ts/provider-pocket.ts b/packages/providers/src.ts/provider-pocket.ts new file mode 100644 index 000000000..5426966d8 --- /dev/null +++ b/packages/providers/src.ts/provider-pocket.ts @@ -0,0 +1,97 @@ +import { defineProperties } from "@ethersproject/properties"; +import { FetchRequest } from "@ethersproject/web"; + +import { showThrottleMessage } from "./community.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { StaticJsonRpcProvider } from "./provider-jsonrpc.js"; + +import type { ConnectionInfo, ThrottleRetryFunc } from "@ethersproject/web"; + +import type { CommunityResourcable } from "./community.js"; +import type { Networkish } from "./network.js"; + + + +// These are load-balancer-based application IDs +const defaultAppIds: Record = { + homestead: "6004bcd10040261633ade990", + ropsten: "6004bd4d0040261633ade991", + rinkeby: "6004bda20040261633ade994", + goerli: "6004bd860040261633ade992", +}; + +function getHost(name: string): string { + switch(name) { + case "homestead": + return "eth-mainnet.gateway.pokt.network"; + case "ropsten": + return "eth-ropsten.gateway.pokt.network"; + case "rinkeby": + return "eth-rinkeby.gateway.pokt.network"; + case "goerli": + return "eth-goerli.gateway.pokt.network"; + } + + return logger.throwArgumentError("unsupported network", "network", name); +} + +function normalizeApiKey(network: Network, _appId?: null | string, applicationSecretKey?: null | string, loadBalancer?: boolean): { applicationId: string, applicationSecretKey: null | string, loadBalancer: boolean, community: boolean } { + loadBalancer = !!loadBalancer; + + let community = false; + let applicationId = _appId; + if (applicationId == null) { + applicationId = defaultAppIds[network.name]; + if (applicationId == null) { + logger.throwArgumentError("network does not support default applicationId", "applicationId", _appId); + } + loadBalancer = true; + community = true; + } else if (applicationId === defaultAppIds[network.name]) { + loadBalancer = true; + community = true; + } + if (applicationSecretKey == null) { applicationSecretKey = null; } + + return { applicationId, applicationSecretKey, community, loadBalancer }; +} + +export class PocketProvider extends StaticJsonRpcProvider implements CommunityResourcable { + readonly applicationId!: string; + readonly applicationSecretKey!: null | string; + readonly loadBalancer!: boolean; + + constructor(_network: Networkish = "homestead", _appId?: null | string, _secretKey?: null | string, _loadBalancer?: boolean) { + const network = Network.from(_network); + const { applicationId, applicationSecretKey, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer); + + const connection = PocketProvider.getConnection(network, applicationId, applicationSecretKey, loadBalancer); + super(connection, network); + + defineProperties(this, { applicationId, applicationSecretKey, loadBalancer }); + } + + static getConnection(network: Network, _appId?: null | string, _secretKey?: null | string, _loadBalancer?: boolean): ConnectionInfo { + const { applicationId, applicationSecretKey, community, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer); + + let url = `https:/\/${ getHost(network.name) }/v1/`; + if (loadBalancer) { url += "lb/"; } + url += applicationId; + + const request = new FetchRequest(url); + request.allowGzip = true; + if (applicationSecretKey) { request.setCredentials("", applicationSecretKey); } + + const throttleRetry: ThrottleRetryFunc = async (request, response, attempt) => { + if (community) { showThrottleMessage("PocketProvider"); } + return true; + }; + + return { request, throttleRetry }; + } + + isCommunityResource(): boolean { + return (this.applicationId === defaultAppIds[this.network.name]); + } +} diff --git a/packages/providers/src.ts/provider-socket.ts b/packages/providers/src.ts/provider-socket.ts new file mode 100644 index 000000000..d69a3947b --- /dev/null +++ b/packages/providers/src.ts/provider-socket.ts @@ -0,0 +1,247 @@ +/** + * SocketProvider + * + * Generic long-lived socket provider. + * + * Sub-classing notes + * - a sub-class MUST call the `_start()` method once connected + * - a sub-class MUST override the `_write(string)` method + * - a sub-class MUST call `_processMessage(string)` for each message + */ + +import { UnmanagedSubscriber } from "./abstract-provider.js"; +import { logger } from "./logger.js"; +import { JsonRpcApiProvider } from "./provider-jsonrpc.js"; + +import type { Subscriber, Subscription } from "./abstract-provider.js"; +import type { Formatter } from "./formatter"; +import type { EventFilter } from "./provider.js"; +import type { JsonRpcIncomingMessage, JsonRpcPayload } from "./provider-jsonrpc.js"; +import type { Networkish } from "./network.js"; + +export class SocketSubscriber implements Subscriber { + #provider: SocketProvider; + + #filter: string; + get filter(): Array { return JSON.parse(this.#filter); } + + #filterId: null | Promise; + #paused: null | boolean; + + #emitPromise: null | Promise; + + constructor(provider: SocketProvider, filter: Array) { + this.#provider = provider; + this.#filter = JSON.stringify(filter); + this.#filterId = null; + this.#paused = null; + this.#emitPromise = null; + } + + start(): void { + this.#filterId = this.#provider.send("eth_subscribe", this.filter).then((filterId) => {; + this.#provider._register(filterId, this); + return filterId; + }); + } + + stop(): void { + (>(this.#filterId)).then((filterId) => { + this.#provider.send("eth_unsubscribe", [ filterId ]); + }); + this.#filterId = null; + } + + // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs + // and resume + pause(dropWhilePaused?: boolean): void { + if (!dropWhilePaused) { + logger.throwError("preserve logs while paused not supported by SocketSubscriber yet", "UNSUPPORTED_OPERATION", { + operation: "pause(false)" + }); + } + this.#paused = !!dropWhilePaused; + } + + resume(): void { + this.#paused = null; + } + + _handleMessage(message: any): void { + if (this.#filterId == null) { return; } + if (this.#paused === null) { + let emitPromise: null | Promise = this.#emitPromise; + if (emitPromise == null) { + emitPromise = this._emit(this.#provider, message); + } else { + emitPromise = emitPromise.then(async () => { + await this._emit(this.#provider, message); + }); + } + this.#emitPromise = emitPromise.then(() => { + if (this.#emitPromise === emitPromise) { + this.#emitPromise = null; + } + }); + } + } + + async _emit(provider: SocketProvider, message: any): Promise { + throw new Error("sub-classes must implemente this; _emit"); + } +} + +export class SocketBlockSubscriber extends SocketSubscriber { + constructor(provider: SocketProvider) { + super(provider, [ "newHeads" ]); + } + + async _emit(provider: SocketProvider, message: any): Promise { + provider.emit("block", parseInt(message.number)); + } +} + +export class SocketPendingSubscriber extends SocketSubscriber { + constructor(provider: SocketProvider) { + super(provider, [ "newPendingTransactions" ]); + } + + async _emit(provider: SocketProvider, message: any): Promise { + provider.emit("pending", message); + } +} + +export class SocketEventSubscriber extends SocketSubscriber { + #logFilter: string; + get logFilter(): EventFilter { return JSON.parse(this.#logFilter); } + + #formatter: Promise>; + + constructor(provider: SocketProvider, filter: EventFilter) { + super(provider, [ "logs", filter ]); + this.#logFilter = JSON.stringify(filter); + this.#formatter = provider.getNetwork().then((network) => network.formatter); + } + + async _emit(provider: SocketProvider, message: any): Promise { + const formatter = await this.#formatter; + provider.emit(this.#logFilter, formatter.log(message, provider)); + } +} + +export class SocketProvider extends JsonRpcApiProvider { + #callbacks: Map void, reject: (e: Error) => void }>; + + #ready: boolean; + + // Maps each filterId to its subscriber + #subs: Map; + + // If any events come in before a subscriber has finished + // registering, queue them + #pending: Map>; + + constructor(network?: Networkish) { + super(network); + this.#callbacks = new Map(); + this.#ready = false; + this.#subs = new Map(); + this.#pending = new Map(); + } + + _getSubscriber(sub: Subscription): Subscriber { + switch (sub.type) { + case "close": + return new UnmanagedSubscriber("close"); + case "block": + return new SocketBlockSubscriber(this); + case "pending": + return new SocketPendingSubscriber(this); + case "event": + return new SocketEventSubscriber(this, sub.filter); + case "orphan": + // Handled auto-matically within AbstractProvider + // when the log.removed = true + if (sub.filter.orphan === "drop-log") { + return new UnmanagedSubscriber("drop-log"); + } + } + return super._getSubscriber(sub); + } + + _register(filterId: number | string, subscriber: SocketSubscriber): void { + this.#subs.set(filterId, subscriber); + const pending = this.#pending.get(filterId); + if (pending) { + for (const message of pending) { + subscriber._handleMessage(message); + } + this.#pending.delete(filterId); + } + } + + async send(method: string, params: Array): Promise { + const payload = this.prepareRequest(method, params); + + const promise = new Promise((resolve, reject) => { + this.#callbacks.set(payload.id, { payload, resolve, reject }); + }); + + if (this.#ready) { + await this._write(JSON.stringify(payload)); + } + + return await promise; + } + + // Sub-classes must call this once they are connected + async _start(): Promise { + if (this.#ready) { return; } + this.#ready = true; + for (const { payload } of this.#callbacks.values()) { + await this._write(JSON.stringify(payload)); + } + } + + // Sub-classes must call this for each message + async _processMessage(message: string): Promise { + const result: JsonRpcIncomingMessage = JSON.parse(message); + if ("id" in result) { + const promise = this.#callbacks.get(result.id); + if (!promise) { + console.log("Weird... Response for not a thing we sent"); + return; + } + this.#callbacks.delete(result.id); + + if ("error" in result) { + const { message, code, data } = result.error; + const error = logger.makeError(message || "unkonwn error", "SERVER_ERROR", { + request: `ws:${ JSON.stringify(promise.payload) }`, + info: { code, data } + }); + promise.reject(error); + } else { + promise.resolve(result.result); + } + + } else if (result.method === "eth_subscription") { + const filterId = result.params.subscription; + const subscriber = this.#subs.get(filterId); + if (subscriber) { + subscriber._handleMessage(result.params.result); + } else { + let pending = this.#pending.get(filterId); + if (pending == null) { + pending = [ ]; + this.#pending.set(filterId, pending); + } + pending.push(result.params.result); + } + } + } + + async _write(message: string): Promise { + throw new Error("sub-classes must override this"); + } +} diff --git a/packages/providers/src.ts/provider-websocket.ts b/packages/providers/src.ts/provider-websocket.ts new file mode 100644 index 000000000..26c848909 --- /dev/null +++ b/packages/providers/src.ts/provider-websocket.ts @@ -0,0 +1,45 @@ + +import { WebSocket } from "ws"; /*-browser*/ + +import { SocketProvider } from "./provider-socket.js"; + +import type { Networkish } from "./network.js"; + +export interface WebSocketLike { + onopen: null | ((...args: Array) => any); + onmessage: null | ((...args: Array) => any); + onerror: null | ((...args: Array) => any); + + readyState: number; + + send(payload: any): void; + close(code?: number, reason?: string): void; +} + +export class WebSocketProvider extends SocketProvider { + url!: string; + + #websocket: WebSocketLike; + get websocket(): WebSocketLike { return this.#websocket; } + + constructor(url: string | WebSocketLike, network?: Networkish) { + super(network); + if (typeof(url) === "string") { + this.#websocket = new WebSocket(url); + } else { + this.#websocket = url; + } + + this.websocket.onopen = () => { + this._start(); + }; + + this.websocket.onmessage = (message: { data: string }) => { + this._processMessage(message.data); + }; + } + + async _write(message: string): Promise { + this.websocket.send(message); + } +} diff --git a/packages/providers/src.ts/provider.ts b/packages/providers/src.ts/provider.ts new file mode 100644 index 000000000..0532d0a5f --- /dev/null +++ b/packages/providers/src.ts/provider.ts @@ -0,0 +1,1001 @@ +//import { resolveAddress } from "@ethersproject/address"; +import { hexlify } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; +import { accessListify } from "@ethersproject/transactions"; + +import { logger } from "./logger.js"; + +import type { Addressable, NameResolver } from "@ethersproject/address"; +import type { BigNumberish } from "@ethersproject/logger"; +import type { EventEmitterable, Frozen, Listener } from "@ethersproject/properties"; +import type { Signature } from "@ethersproject/signing-key"; +import type { AccessList, AccessListish, TransactionLike } from "@ethersproject/transactions"; + +import type { Network } from "./network.js"; + + +export type BlockTag = number | string; + +// ----------------------- + +function getValue(value: undefined | null | T): null | T { + if (value == null) { return null; } + return value; +} + +function toJson(value: null | bigint): null | string { + if (value == null) { return null; } + return value.toString(); +} + +// @TODO? implements Required +export class FeeData { + readonly gasPrice!: null | bigint; + readonly maxFeePerGas!: null | bigint; + readonly maxPriorityFeePerGas!: null | bigint; + + constructor(gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint) { + defineProperties(this, { + gasPrice: getValue(gasPrice), + maxFeePerGas: getValue(maxFeePerGas), + maxPriorityFeePerGas: getValue(maxPriorityFeePerGas) + }); + } + + toJSON(): any { + const { + gasPrice, maxFeePerGas, maxPriorityFeePerGas + } = this; + return { + _type: "FeeData", + gasPrice: toJson(gasPrice), + maxFeePerGas: toJson(maxFeePerGas), + maxPriorityFeePerGas: toJson(maxPriorityFeePerGas), + }; + } +} + + + +export interface TransactionRequest { + type?: null | number; + + to?: null | string | Addressable; + from?: null | string | Addressable; + + nonce?: null | number; + + gasLimit?: null | BigNumberish; + gasPrice?: null | BigNumberish; + + maxPriorityFeePerGas?: null | BigNumberish; + maxFeePerGas?: null | BigNumberish; + + data?: null | string; + value?: null | BigNumberish; + chainId?: null | BigNumberish; + + accessList?: null | AccessListish; + + customData?: any; + + // Todo? + //gasMultiplier?: number; +}; + + +export interface CallRequest extends TransactionRequest { + blockTag?: BlockTag; + enableCcipRead?: boolean; +} + +export interface PreparedRequest { + type?: number; + + to?: string | Addressable; + from?: string | Addressable; + + nonce?: number; + + gasLimit?: bigint; + gasPrice?: bigint; + + maxPriorityFeePerGas?: bigint; + maxFeePerGas?: bigint; + + data?: string; + value?: bigint; + chainId?: bigint; + + accessList?: AccessList; + + customData?: any; + + blockTag?: BlockTag; + enableCcipRead?: boolean; +} + +export function copyRequest(req: CallRequest): PreparedRequest { + const result: any = { }; + + // These could be addresses, ENS names or Addressables + if (req.to) { result.to = req.to; } + if (req.from) { result.from = req.from; } + + if (req.data) { result.data = hexlify(req.data); } + + const bigIntKeys = "chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value".split(/,/); + for (const key in bigIntKeys) { + if (!(key in req) || (req)[key] == null) { continue; } + result[key] = logger.getBigInt((req)[key], `request.${ key }`); + } + + const numberKeys = "type,nonce".split(/,/); + for (const key in numberKeys) { + if (!(key in req) || (req)[key] == null) { continue; } + result[key] = logger.getNumber((req)[key], `request.${ key }`); + } + + if (req.accessList) { + result.accessList = accessListify(req.accessList); + } + + if ("blockTag" in req) { result.blockTag = req.blockTag; } + + if ("enableCcipRead" in req) { + result.enableCcipReadEnabled = !!req.enableCcipRead + } + + if ("customData" in req) { + result.customData = req.customData; + } + + return result; +} + +//Omit, "hash" | "signature">; +/* +export async function resolveTransactionRequest(tx: TransactionRequest, provider?: Provider): Promise { + // A pending transaction with items that may require resolving + const ptx: any = Object.assign({ }, tx); //await resolveProperties(await tx)); + //if (tx.hash != null || tx.signature != null) { + // throw new Error(); + // @TODO: Check for bad keys? + //} + // @TODO: Why does TS not think that to and from are reoslved and require the cast to string + if (ptx.to != null) { ptx.to = resolveAddress((ptx.to), provider); } + if (ptx.from != null) { ptx.from = resolveAddress((ptx.from), provider); } + return await resolveProperties(ptx); +} +*/ + +//function canConnect(value: any): value is T { +// return (value && typeof(value.connect) === "function"); +//} + + +////////////////////// +// Block + +export interface BlockParams { + hash?: null | string; + + number: number; + timestamp: number; + + parentHash: string; + + nonce: string; + difficulty: bigint; + + gasLimit: bigint; + gasUsed: bigint; + + miner: string; + extraData: string; + + baseFeePerGas: null | bigint; + + transactions: ReadonlyArray; +}; + +export interface MinedBlock extends Block { + readonly number: number; + readonly hash: string; + readonly timestamp: number; + readonly date: Date; + readonly miner: string; +} + +export interface LondonBlock extends Block { + readonly baseFeePerGas: bigint; +} + +export class Block implements BlockParams, Iterable { + readonly provider!: Provider; + + readonly number!: number; + readonly hash!: null | string; + readonly timestamp!: number; + + readonly parentHash!: string; + + readonly nonce!: string; + readonly difficulty!: bigint; + + readonly gasLimit!: bigint; + readonly gasUsed!: bigint; + + readonly miner!: string; + readonly extraData!: string; + + readonly baseFeePerGas!: null | bigint; + + readonly #transactions: ReadonlyArray; + + constructor(block: BlockParams, provider?: null | Provider) { + if (provider == null) { provider = dummyProvider; } + + this.#transactions = Object.freeze(block.transactions.map((tx) => { + if (typeof(tx) !== "string" && tx.provider !== provider) { + throw new Error("provider mismatch"); + } + return tx; + }));; + + defineProperties>(this, { + provider, + + hash: getValue(block.hash), + + number: block.number, + timestamp: block.timestamp, + + parentHash: block.parentHash, + + nonce: block.nonce, + difficulty: block.difficulty, + + gasLimit: block.gasLimit, + gasUsed: block.gasUsed, + miner: block.miner, + extraData: block.extraData, + + baseFeePerGas: getValue(block.baseFeePerGas) + }); + } + + get transactions(): ReadonlyArray { return this.#transactions; } + + //connect(provider: Provider): Block { + // return new Block(this, provider); + //} + + toJSON(): any { + const { + baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, + miner, nonce, number, parentHash, timestamp, transactions + } = this; + + return { + _type: "Block", + baseFeePerGas: toJson(baseFeePerGas), + difficulty: toJson(difficulty), + extraData, + gasLimit: toJson(gasLimit), + gasUsed: toJson(gasUsed), + hash, miner, nonce, number, parentHash, timestamp, + transactions, + }; + } + + [Symbol.iterator](): Iterator { + let index = 0; + return { + next: () => { + if (index < this.length) { + return { + value: this.transactions[index++], done: false + } + } + return { value: undefined, done: true }; + } + }; + } + + get length(): number { return this.transactions.length; } + + get date(): null | Date { + if (this.timestamp == null) { return null; } + return new Date(this.timestamp * 1000); + } + + async getTransaction(index: number): Promise { + const tx = this.transactions[index]; + if (tx == null) { throw new Error("no such tx"); } + if (typeof(tx) === "string") { + return (await this.provider.getTransaction(tx)); + } else { + return tx; + } + } + + isMined(): this is MinedBlock { return !!this.hash; } + isLondon(): this is LondonBlock { return !!this.baseFeePerGas; } + + orphanedEvent(): OrphanFilter { + if (!this.isMined()) { throw new Error(""); } + return createOrphanedBlockFilter(this); + } +} + +////////////////////// +// Log + +export interface LogParams { + transactionHash: string; + blockHash: string; + blockNumber: number; + + removed: boolean; + + address: string; + data: string; + + topics: ReadonlyArray; + + index: number; + transactionIndex: number; +} + +export class Log implements LogParams { + readonly provider: Provider; + + readonly transactionHash!: string; + readonly blockHash!: string; + readonly blockNumber!: number; + + readonly removed!: boolean; + + readonly address!: string; + readonly data!: string; + + readonly topics!: ReadonlyArray; + + readonly index!: number; + readonly transactionIndex!: number; + + + constructor(log: LogParams, provider?: null | Provider) { + if (provider == null) { provider = dummyProvider; } + this.provider = provider; + + const topics = Object.freeze(log.topics.slice()); + defineProperties(this, { + transactionHash: log.transactionHash, + blockHash: log.blockHash, + blockNumber: log.blockNumber, + + removed: log.removed, + + address: log.address, + data: log.data, + + topics, + + index: log.index, + transactionIndex: log.transactionIndex, + }); + } + + //connect(provider: Provider): Log { + // return new Log(this, provider); + //} + + toJSON(): any { + const { + address, blockHash, blockNumber, data, index, + removed, topics, transactionHash, transactionIndex + } = this; + + return { + _type: "log", + address, blockHash, blockNumber, data, index, + removed, topics, transactionHash, transactionIndex + }; + } + + async getBlock(): Promise> { + return >(await this.provider.getBlock(this.blockHash)); + } + + async getTransaction(): Promise { + return (await this.provider.getTransaction(this.transactionHash)); + } + + async getTransactionReceipt(): Promise { + return (await this.provider.getTransactionReceipt(this.transactionHash)); + } + + removedEvent(): OrphanFilter { + return createRemovedLogFilter(this); + } +} + + +////////////////////// +// Transaction Receipt + +export interface TransactionReceiptParams { + to: null | string; + from: string; + contractAddress: null | string; + + hash: string; + index: number; + + blockHash: string; + blockNumber: number; + + logsBloom: string; + logs: ReadonlyArray; + + gasUsed: bigint; + cumulativeGasUsed: bigint; + gasPrice?: null | bigint; + effectiveGasPrice?: null | bigint; + + byzantium: boolean; + status: null | number; + root: null | string; +} + +export interface LegacyTransactionReceipt { + byzantium: false; + status: null; + root: string; +} + +export interface ByzantiumTransactionReceipt { + byzantium: true; + status: number; + root: null; +} + +export class TransactionReceipt implements TransactionReceiptParams, Iterable { + readonly provider!: Provider; + + readonly to!: null | string; + readonly from!: string; + readonly contractAddress!: null | string; + + readonly hash!: string; + readonly index!: number; + + readonly blockHash!: string; + readonly blockNumber!: number; + + readonly logsBloom!: string; + + readonly gasUsed!: bigint; + readonly cumulativeGasUsed!: bigint; + readonly gasPrice!: bigint; + + readonly byzantium!: boolean; + readonly status!: null | number; + readonly root!: null | string; + + readonly #logs: ReadonlyArray; + + constructor(tx: TransactionReceiptParams, provider?: null | Provider) { + if (provider == null) { provider = dummyProvider; } + this.#logs = Object.freeze(tx.logs.map((log) => { + if (provider !== log.provider) { + //return log.connect(provider); + throw new Error("provider mismatch"); + } + return log; + })); + + defineProperties(this, { + provider, + + to: tx.to, + from: tx.from, + contractAddress: tx.contractAddress, + + hash: tx.hash, + index: tx.index, + + blockHash: tx.blockHash, + blockNumber: tx.blockNumber, + + logsBloom: tx.logsBloom, + + gasUsed: tx.gasUsed, + cumulativeGasUsed: tx.cumulativeGasUsed, + gasPrice: ((tx.effectiveGasPrice || tx.gasPrice) as bigint), + + byzantium: tx.byzantium, + status: tx.status, + root: tx.root + }); + } + + get logs(): ReadonlyArray { return this.#logs; } + + //connect(provider: Provider): TransactionReceipt { + // return new TransactionReceipt(this, provider); + //} + + toJSON(): any { + const { + to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, + logs, byzantium, status, root + } = this; + + return { + _type: "TransactionReceipt", + blockHash, blockNumber, byzantium, contractAddress, + cumulativeGasUsed: toJson(this.cumulativeGasUsed), + from, + gasPrice: toJson(this.gasPrice), + gasUsed: toJson(this.gasUsed), + hash, index, logs, logsBloom, root, status, to + }; + } + + get length(): number { return this.logs.length; } + + [Symbol.iterator](): Iterator { + let index = 0; + return { + next: () => { + if (index < this.length) { + return { value: this.logs[index++], done: false } + } + return { value: undefined, done: true }; + } + }; + } + + get fee(): bigint { + return this.gasUsed * this.gasPrice; + } + + async getBlock(): Promise> { + const block = await this.provider.getBlock(this.blockHash); + if (block == null) { throw new Error("TODO"); } + return block; + } + + async getTransaction(): Promise { + const tx = await this.provider.getTransaction(this.hash); + if (tx == null) { throw new Error("TODO"); } + return tx; + } + + async confirmations(): Promise { + return (await this.provider.getBlockNumber()) - this.blockNumber + 1; + } + + removedEvent(): OrphanFilter { + return createRemovedTransactionFilter(this); + } + + reorderedEvent(other?: TransactionResponse): OrphanFilter { + if (other && !other.isMined()) { + return logger.throwError("unmined 'other' transction cannot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "reorderedEvent(other)" }); + } + return createReorderedTransactionFilter(this, other); + } +} + + +////////////////////// +// Transaction Response + +export interface TransactionResponseParams { + blockNumber: null | number; + blockHash: null | string; + + hash: string; + index: number; + + type: number; + + to: null | string; + from: string; + + nonce: number; + + gasLimit: bigint; + + gasPrice: bigint; + + maxPriorityFeePerGas: null | bigint; + maxFeePerGas: null | bigint; + + data: string; + value: bigint; + chainId: bigint; + + signature: Signature; + + accessList: null | AccessList; +}; + +export interface MinedTransactionResponse extends TransactionResponse { + blockNumber: number; + blockHash: string; + date: Date; +} + +export interface LegacyTransactionResponse extends TransactionResponse { + accessList: null; + maxFeePerGas: null; + maxPriorityFeePerGas: null; +} + +export interface BerlinTransactionResponse extends TransactionResponse { + accessList: AccessList; + maxFeePerGas: null; + maxPriorityFeePerGas: null; +} + +export interface LondonTransactionResponse extends TransactionResponse { + accessList: AccessList; + maxFeePerGas: bigint; + maxPriorityFeePerGas: bigint; +} + +export class TransactionResponse implements TransactionLike, TransactionResponseParams { + readonly provider: Provider; + + readonly blockNumber: null | number; + readonly blockHash: null | string; + + readonly index!: number; + + readonly hash!: string; + + readonly type!: number; + + readonly to!: null | string; + readonly from!: string; + + readonly nonce!: number; + + readonly gasLimit!: bigint; + + readonly gasPrice!: bigint; + + readonly maxPriorityFeePerGas!: null | bigint; + readonly maxFeePerGas!: null | bigint; + + readonly data!: string; + readonly value!: bigint; + readonly chainId!: bigint; + + readonly signature!: Signature; + + readonly accessList!: null | AccessList; + + constructor(tx: TransactionResponseParams, provider?: null | Provider) { + if (provider == null) { provider = dummyProvider; } + this.provider = provider; + + this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber: null; + this.blockHash = (tx.blockHash != null) ? tx.blockHash: null; + + this.hash = tx.hash; + this.index = tx.index; + + this.type = tx.type; + + this.from = tx.from; + this.to = tx.to || null; + + this.gasLimit = tx.gasLimit; + this.nonce = tx.nonce; + this.data = tx.data; + this.value = tx.value; + + this.gasPrice = tx.gasPrice; + this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas: null; + this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas: null; + + this.chainId = tx.chainId; + this.signature = tx.signature; + + this.accessList = (tx.accessList != null) ? tx.accessList: null; + } + + //connect(provider: Provider): TransactionResponse { + // return new TransactionResponse(this, provider); + //} + + toJSON(): any { + const { + blockNumber, blockHash, index, hash, type, to, from, nonce, + data, signature, accessList + } = this; + + return { + _type: "TransactionReceipt", + accessList, blockNumber, blockHash, + chainId: toJson(this.chainId), + data, from, + gasLimit: toJson(this.gasLimit), + gasPrice: toJson(this.gasPrice), + hash, + maxFeePerGas: toJson(this.maxFeePerGas), + maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas), + nonce, signature, to, index, type, + value: toJson(this.value), + }; + } + + async getBlock(): Promise> { + let blockNumber = this.blockNumber; + if (blockNumber == null) { + const tx = await this.getTransaction(); + if (tx) { blockNumber = tx.blockNumber; } + } + if (blockNumber == null) { return null; } + const block = this.provider.getBlock(blockNumber); + if (block == null) { throw new Error("TODO"); } + return block; + } + + async getTransaction(): Promise { + return this.provider.getTransaction(this.hash); + } + + async wait(confirms?: number): Promise { + return this.provider.waitForTransaction(this.hash, confirms); + } + + isMined(): this is MinedTransactionResponse { + return (this.blockHash != null); + } + + isLegacy(): this is LegacyTransactionResponse { + return (this.type === 0) + } + + isBerlin(): this is BerlinTransactionResponse { + return (this.type === 1); + } + + isLondon(): this is LondonTransactionResponse { + return (this.type === 2); + } + + removedEvent(): OrphanFilter { + if (!this.isMined()) { + return logger.throwError("unmined transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" }); + } + return createRemovedTransactionFilter(this); + } + + reorderedEvent(other?: TransactionResponse): OrphanFilter { + if (!this.isMined()) { + return logger.throwError("unmined transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" }); + } + if (other && !other.isMined()) { + return logger.throwError("unmined 'other' transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" }); + } + return createReorderedTransactionFilter(this, other); + } +} + + +////////////////////// +// OrphanFilter + +export type OrphanFilter = { + orphan: "drop-block", + hash: string, + number: number +} | { + orphan: "drop-transaction", + tx: { hash: string, blockHash: string, blockNumber: number }, + other?: { hash: string, blockHash: string, blockNumber: number } +} | { + orphan: "reorder-transaction", + tx: { hash: string, blockHash: string, blockNumber: number }, + other?: { hash: string, blockHash: string, blockNumber: number } +} | { + orphan: "drop-log", + log: { + transactionHash: string, + blockHash: string, + blockNumber: number, + address: string, + data: string, + topics: ReadonlyArray, + index: number + } +}; + +function createOrphanedBlockFilter(block: { hash: string, number: number }): OrphanFilter { + return { orphan: "drop-block", hash: block.hash, number: block.number }; +} + +function createReorderedTransactionFilter(tx: { hash: string, blockHash: string, blockNumber: number }, other?: { hash: string, blockHash: string, blockNumber: number }): OrphanFilter { + return { orphan: "reorder-transaction", tx, other }; +} + +function createRemovedTransactionFilter(tx: { hash: string, blockHash: string, blockNumber: number }): OrphanFilter { + return { orphan: "drop-transaction", tx }; +} + +function createRemovedLogFilter(log: { blockHash: string, transactionHash: string, blockNumber: number, address: string, data: string, topics: ReadonlyArray, index: number }): OrphanFilter { + return { orphan: "drop-log", log: { + transactionHash: log.transactionHash, + blockHash: log.blockHash, + blockNumber: log.blockNumber, + address: log.address, + data: log.data, + topics: Object.freeze(log.topics.slice()), + index: log.index + } }; +} + +////////////////////// +// EventFilter + +export type TopicFilter = Array>; + +// @TODO: +//export type DeferableTopicFilter = Array | Array>>; + +export interface EventFilter { + address?: string | Addressable | Array; + topics?: TopicFilter; +} + +export interface Filter extends EventFilter { + fromBlock?: BlockTag; + toBlock?: BlockTag; +} + +export interface FilterByBlockHash extends EventFilter { + blockHash?: string; +} + + +////////////////////// +// ProviderEvent + +export type ProviderEvent = string | Array> | EventFilter | OrphanFilter; + + +////////////////////// +// Provider + +export interface Provider extends EventEmitterable, NameResolver { + + // State + getBlockNumber(): Promise; + getNetwork(): Promise>; + getFeeData(): Promise; + + // Account + getBalanceOf(address: string | Addressable, blockTag?: BlockTag): Promise; + getTransactionCountOf(address: string | Addressable, blockTag?: BlockTag): Promise; + + getCode(address: string | Addressable, blockTag?: BlockTag): Promise + getStorageAt(address: string | Addressable, position: BigNumberish, blockTag?: BlockTag): Promise + + // Execution + estimateGas(tx: TransactionRequest): Promise; + // If call fails, throws CALL_EXCEPTION { data: string, error, errorString?, panicReason? } + call(tx: CallRequest): Promise + broadcastTransaction(signedTx: string): Promise; + + // Queries + getBlock(blockHashOrBlockTag: BlockTag | string): Promise>; + getBlockWithTransactions(blockHashOrBlockTag: BlockTag | string): Promise> + getTransaction(hash: string): Promise; + getTransactionReceipt(hash: string): Promise; + + // Bloom-filter Queries + getLogs(filter: Filter | FilterByBlockHash): Promise>; + + // ENS + resolveName(name: string | Addressable): Promise; + lookupAddress(address: string): Promise; + + waitForTransaction(hash: string, confirms?: number, timeout?: number): Promise; + waitForBlock(blockTag?: BlockTag): Promise>; +} + + +function fail(): T { + throw new Error("this provider should not be used"); +} + +class DummyProvider implements Provider { + async getNetwork() { return fail>(); } + async getFeeData() { return fail(); } + + async estimateGas(tx: TransactionRequest) { return fail(); } + async call(tx: CallRequest) { return fail(); } + + async resolveName(name: string | Addressable) { return fail(); } + + // State + async getBlockNumber() { return fail(); } + + // Account + async getBalanceOf(address: string | Addressable, blockTag?: BlockTag) { + return fail(); + } + async getTransactionCountOf(address: string | Addressable, blockTag?: BlockTag) { + return fail(); + } + + async getCode(address: string | Addressable, blockTag?: BlockTag) { + return fail(); + } + async getStorageAt(address: string | Addressable, position: BigNumberish, blockTag?: BlockTag) { + return fail(); + } + + // Write + async broadcastTransaction(signedTx: string) { return fail(); } + + // Queries + async getBlock(blockHashOrBlockTag: BlockTag | string){ + return fail>(); + } + async getBlockWithTransactions(blockHashOrBlockTag: BlockTag | string) { + return fail>(); + } + async getTransaction(hash: string) { + return fail(); + } + async getTransactionReceipt(hash: string) { + return fail(); + } + + // Bloom-filter Queries + async getLogs(filter: Filter | FilterByBlockHash) { + return fail>(); + } + + // ENS + async lookupAddress(address: string) { + return fail(); + } + + async waitForTransaction(hash: string, confirms?: number, timeout?: number) { + return fail(); + } + + async waitForBlock(blockTag?: BlockTag) { + return fail>(); + } + + // EventEmitterable + async on(event: ProviderEvent, listener: Listener): Promise { return fail(); } + async once(event: ProviderEvent, listener: Listener): Promise { return fail(); } + async emit(event: ProviderEvent, ...args: Array): Promise { return fail(); } + async listenerCount(event?: ProviderEvent): Promise { return fail(); } + async listeners(event?: ProviderEvent): Promise> { return fail(); } + async off(event: ProviderEvent, listener?: Listener): Promise { return fail(); } + async removeAllListeners(event?: ProviderEvent): Promise { return fail(); } + + async addListener(event: ProviderEvent, listener: Listener): Promise { return fail(); } + async removeListener(event: ProviderEvent, listener: Listener): Promise { return fail(); } +} + +// A singleton provider instance that can be used as a placeholder. This +// allows API that have a Provider added later to not require a null check. +export const dummyProvider: Provider = new DummyProvider(); diff --git a/packages/providers/src.ts/shuffle.ts b/packages/providers/src.ts/shuffle.ts new file mode 100644 index 000000000..f5da56a91 --- /dev/null +++ b/packages/providers/src.ts/shuffle.ts @@ -0,0 +1,9 @@ + +export function shuffle(array: Array): void { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + const tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + } +} diff --git a/packages/providers/src.ts/signer.ts b/packages/providers/src.ts/signer.ts new file mode 100644 index 000000000..fed84ee57 --- /dev/null +++ b/packages/providers/src.ts/signer.ts @@ -0,0 +1,22 @@ + +import type { Addressable, NameResolver } from "@ethersproject/address"; +import type { TypedDataDomain, TypedDataField } from "@ethersproject/hash"; + +import type { CallRequest, Provider, TransactionRequest, TransactionResponse } from "./provider.js"; + + +export interface Signer extends Addressable, NameResolver { + provider: null | Provider; + connect(provider: null | Provider): Signer; + + // Execution + estimateGas(tx: CallRequest): Promise; + call(tx: CallRequest): Promise; + resolveName(name: string | Addressable): Promise; + + // Signing + signTransaction(tx: TransactionRequest): Promise; + sendTransaction(tx: TransactionRequest): Promise; + signMessage(message: string | Uint8Array): Promise; + signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise; +} diff --git a/packages/providers/src.ts/subscriber-connection.ts b/packages/providers/src.ts/subscriber-connection.ts new file mode 100644 index 000000000..33a4825a4 --- /dev/null +++ b/packages/providers/src.ts/subscriber-connection.ts @@ -0,0 +1,53 @@ + +import type { Subscriber } from "./abstract-provider.js"; +import { logger } from "./logger.js"; + + +//#TODO: Temp +import type { Provider } from "./provider.js"; +export interface ConnectionRpcProvider extends Provider { + //send(method: string, params: Array): Promise; + _subscribe(param: Array, processFunc: (result: any) => void): number; + _unsubscribe(filterId: number): void; +} + +export class BlockConnectionSubscriber implements Subscriber { + #provider: ConnectionRpcProvider; + #blockNumber: number; + + #filterId: null | number; + + constructor(provider: ConnectionRpcProvider) { + this.#provider = provider; + this.#blockNumber = -2; + this.#filterId = null; + } + + start(): void { + this.#filterId = this.#provider._subscribe([ "newHeads" ], (result: any) => { + const blockNumber = logger.getNumber(result.number); + const initial = (this.#blockNumber === -2) ? blockNumber: (this.#blockNumber + 1) + for (let b = initial; b <= blockNumber; b++) { + this.#provider.emit("block", b); + } + this.#blockNumber = blockNumber; + }); + } + + stop(): void { + if (this.#filterId != null) { + this.#provider._unsubscribe(this.#filterId); + this.#filterId = null; + } + } + + pause(dropWhilePaused?: boolean): void { + if (dropWhilePaused) { this.#blockNumber = -2; } + this.stop(); + } + + resume(): void { + this.start(); + } +} + diff --git a/packages/providers/src.ts/subscriber-filterid.ts b/packages/providers/src.ts/subscriber-filterid.ts new file mode 100644 index 000000000..00cc2a04e --- /dev/null +++ b/packages/providers/src.ts/subscriber-filterid.ts @@ -0,0 +1,133 @@ +import { PollingEventSubscriber } from "./subscriber-polling.js"; + +import type { Frozen } from "@ethersproject/properties"; + +import type { Subscriber } from "./abstract-provider.js"; +import type { Network } from "./network.js"; +import type { EventFilter, Provider } from "./provider.js"; +import type { JsonRpcApiProvider } from "./provider-jsonrpc.js"; + + +function copy(obj: any): any { + return JSON.parse(JSON.stringify(obj)); +} + +export class FilterIdSubscriber implements Subscriber { + #provider: JsonRpcApiProvider; + + #filterIdPromise: null | Promise; + #poller: (b: number) => Promise; + + #network: null | Frozen; + + constructor(provider: JsonRpcApiProvider) { + this.#provider = provider; + + this.#filterIdPromise = null; + this.#poller = this.#poll.bind(this); + + this.#network = null; + } + + _subscribe(provider: JsonRpcApiProvider): Promise { + throw new Error("subclasses must override this"); + } + + _emitResults(provider: Provider, result: Array): Promise { + throw new Error("subclasses must override this"); + } + + _recover(provider: Provider): Subscriber { + throw new Error("subclasses must override this"); + } + + async #poll(blockNumber: number): Promise { + try { + if (this.#filterIdPromise == null) { + this.#filterIdPromise = this._subscribe(this.#provider); + } + + const filterId = await this.#filterIdPromise; + if (filterId == null) { + this.#provider._recoverSubscriber(this, this._recover(this.#provider)); + return; + } + + const network = await this.#provider.getNetwork(); + if (!this.#network) { this.#network = network; } + + if ((this.#network as Network).chainId !== network.chainId) { + throw new Error("chaid changed"); + } + + const result = await this.#provider.send("eth_getFilterChanges", [ filterId ]); + await this._emitResults(this.#provider, result); + } catch (error) { console.log("@TODO", error); } + + this.#provider.once("block", this.#poller); + } + + #teardown(): void { + const filterIdPromise = this.#filterIdPromise; + if (filterIdPromise) { + this.#filterIdPromise = null; + filterIdPromise.then((filterId) => { + this.#provider.send("eth_uninstallFilter", [ filterId ]); + }); + } + } + + start(): void { this.#poll(-2); } + + stop(): void { + this.#teardown(); + this.#provider.off("block", this.#poller); + } + + pause(dropWhilePaused?: boolean): void { + if (dropWhilePaused){ this.#teardown(); } + this.#provider.off("block", this.#poller); + } + + resume(): void { this.start(); } +} + +export class FilterIdEventSubscriber extends FilterIdSubscriber { + #event: EventFilter; + + constructor(provider: JsonRpcApiProvider, filter: EventFilter) { + super(provider); + this.#event = copy(filter); + } + + _recover(provider: Provider): Subscriber { + return new PollingEventSubscriber(provider, this.#event); + } + + async _subscribe(provider: JsonRpcApiProvider): Promise { + const filterId = await provider.send("eth_newFilter", [ this.#event ]); + console.log("____SUB", filterId); + return filterId; + } + + async _emitResults(provider: JsonRpcApiProvider, results: Array): Promise { + const network = await provider.getNetwork(); + for (const result of results) { + const log = network.formatter.log(result, provider); + provider.emit(this.#event, log); + } + } +} + +export class FilterIdPendingSubscriber extends FilterIdSubscriber { + async _subscribe(provider: JsonRpcApiProvider): Promise { + return await provider.send("eth_newPendingTransactionFilter", [ ]); + } + + async _emitResults(provider: JsonRpcApiProvider, results: Array): Promise { + const network = await provider.getNetwork(); + for (const result of results) { + provider.emit("pending", network.formatter.hash(result)); + } + } +} diff --git a/packages/providers/src.ts/subscriber-hotswap.ts b/packages/providers/src.ts/subscriber-hotswap.ts new file mode 100644 index 000000000..7a897352d --- /dev/null +++ b/packages/providers/src.ts/subscriber-hotswap.ts @@ -0,0 +1,41 @@ +/* +import { Subscriber } from "./abstract-provider.js"; + +export class HotSwapSubscriber implements Subscriber { + #target?: Subscriber; + + _switchSubscriber(subscriber: Subscriber): void { + this.#target = subscriber; + } + + start(): void { + if (this.#target) { return this.#target.start(); } + return super.start(); + } + + stop(): void { + if (this.#target) { return this.#target.stop(); } + return super.stop(); + } + + pause(dropWhilePaused?: boolean): void { + if (this.#target) { return this.#target.pause(dropWhilePaused); } + return super.pause(dropWhilePaused); + } + + resume(): void { + if (this.#target) { return this.#target.resume(); } + return super.resume(); + } + + set pollingInterval(value: number) { + if (this.#target) { return this.#target.pollingInterval = value; } + return super.pollingInterval = value; + } + + get pollingInterval(): number { + if (this.#target) { return this.#target.pollingInterval; } + return super.pollingInterval; + } +} +*/ diff --git a/packages/providers/src.ts/subscriber-polling.ts b/packages/providers/src.ts/subscriber-polling.ts new file mode 100644 index 000000000..35f67da08 --- /dev/null +++ b/packages/providers/src.ts/subscriber-polling.ts @@ -0,0 +1,195 @@ +import { isHexString } from "@ethersproject/bytes"; + +import type { Subscriber } from "./abstract-provider.js"; +import type { EventFilter, OrphanFilter, Provider, ProviderEvent } from "./provider.js"; + +import { logger } from "./logger.js"; + +function copy(obj: any): any { + return JSON.parse(JSON.stringify(obj)); +} + +export function getPollingSubscriber(provider: Provider, event: ProviderEvent): Subscriber { + if (event === "block") { return new PollingBlockSubscriber(provider); } + if (isHexString(event, 32)) { return new PollingTransactionSubscriber(provider, event); } + + return logger.throwError("unsupported polling event", "UNSUPPORTED_OPERATION", { + operation: "getPollingSubscriber", info: { event } + }); +} + +// @TODO: refactor this + +export class PollingBlockSubscriber implements Subscriber{ + #provider: Provider; + #poller: null | NodeJS.Timer; + + #interval: number; + + // The most recent block we have scanned for events. The value -2 + // indicates we still need to fetch an initial block number + #blockNumber: number; + + constructor(provider: Provider) { + this.#provider = provider; + this.#poller = null; + this.#interval = 4000; + + this.#blockNumber = -2; + } + + get pollingInterval(): number { return this.#interval; } + set pollingInterval(value: number) { this.#interval = value; } + + async #poll(): Promise { + const blockNumber = await this.#provider.getBlockNumber(); + if (this.#blockNumber === -2) { + this.#blockNumber = blockNumber; + return; + } + + // @TODO: Put a cap on the maximum number of events per loop? + + if (blockNumber !== this.#blockNumber) { + for (let b = this.#blockNumber + 1; b <= blockNumber; b++) { + this.#provider.emit("block", b); + } + + this.#blockNumber = blockNumber; + } + + this.#poller = setTimeout(this.#poll.bind(this), this.#interval); + } + + start(): void { + if (this.#poller) { throw new Error("subscriber already running"); } + this.#poll(); + this.#poller = setTimeout(this.#poll.bind(this), this.#interval); + } + + stop(): void { + if (!this.#poller) { throw new Error("subscriber not running"); } + clearTimeout(this.#poller); + this.#poller = null; + } + + pause(dropWhilePaused?: boolean): void { + this.stop(); + if (dropWhilePaused) { this.#blockNumber = -2; } + } + + resume(): void { + this.start(); + } +} + +export class OnBlockSubscriber implements Subscriber { + #provider: Provider; + #poll: (b: number) => void; + + constructor(provider: Provider) { + this.#provider = provider; + this.#poll = (blockNumber: number) => { + this._poll(blockNumber, this.#provider); + } + } + + async _poll(blockNumber: number, provider: Provider): Promise { + throw new Error("sub-classes must override this"); + } + + start(): void { + this.#poll(-2); + this.#provider.on("block", this.#poll); + } + + stop(): void { + this.#provider.off("block", this.#poll); + } + + pause(dropWhilePaused?: boolean): void { this.stop(); } + resume(): void { this.start(); } +} + +export class PollingOrphanSubscriber extends OnBlockSubscriber { + #filter: OrphanFilter; + + constructor(provider: Provider, filter: OrphanFilter) { + super(provider); + this.#filter = copy(filter); + } + + async _poll(blockNumber: number, provider: Provider): Promise { + console.log(this.#filter); + throw new Error("@TODO"); + } +} + +export class PollingTransactionSubscriber extends OnBlockSubscriber { + #hash: string; + + constructor(provider: Provider, hash: string) { + super(provider); + this.#hash = hash; + } + + async _poll(blockNumber: number, provider: Provider): Promise { + const tx = await provider.getTransactionReceipt(this.#hash); + if (tx) { provider.emit(this.#hash, tx); } + } +} + +export class PollingEventSubscriber implements Subscriber { + #provider: Provider; + #filter: EventFilter; + #poller: (b: number) => void; + + // The most recent block we have scanned for events. The value -2 + // indicates we still need to fetch an initial block number + #blockNumber: number; + + constructor(provider: Provider, filter: EventFilter) { + this.#provider = provider; + this.#filter = copy(filter); + this.#poller = this.#poll.bind(this); + this.#blockNumber = -2; + } + + async #poll(blockNumber: number): Promise { + // The initial block hasn't been determined yet + if (this.#blockNumber === -2) { return; } + + const filter = copy(this.#filter); + filter.fromBlock = this.#blockNumber + 1; + filter.toBlock = blockNumber; + + this.#blockNumber = blockNumber; + const logs = await this.#provider.getLogs(filter); + + for (const log of logs) { + this.#provider.emit(this.#filter, log); + } + } + + start(): void { + if (this.#blockNumber === -2) { + this.#provider.getBlockNumber().then((blockNumber) => { + this.#blockNumber = blockNumber; + }); + } + this.#provider.on("block", this.#poller); + } + + stop(): void { + this.#provider.off("block", this.#poller); + } + + pause(dropWhilePaused?: boolean): void { + this.stop(); + if (dropWhilePaused) { this.#blockNumber = -2; } + } + + resume(): void { + this.start(); + } +} diff --git a/packages/providers/src.ts/subscriber.ts b/packages/providers/src.ts/subscriber.ts new file mode 100644 index 000000000..6b200387f --- /dev/null +++ b/packages/providers/src.ts/subscriber.ts @@ -0,0 +1,56 @@ + +/* +import { defineProperties } from "@ethersproject/properties"; +export type EventCommon = "block" | "debug" | "blockObject"; + +export type Event = EventCommon | string | { address?: string, topics: Array> } + +export type EventLike = Event | Array; + +export function getTag(eventName: Event): string { + if (typeof(eventName) === "string") { return eventName; } + + if (typeof(eventName) === "object") { + return (eventName.address || "*") + (eventName.topics || []).map((topic) => { + if (typeof(topic) === "string") { return topic; } + return topic.join("|"); + }).join("&"); + } + + throw new Error("FOO"); +} + +export function getEvent(tag: string): Event { +} + +let nextId = 1; + +export class Subscriber { + readonly id!: number; + readonly tag!: string; + + #paused: boolean; + #blockNumber: number; + + constructor(tag: string) { + this.#paused = false; + this.#blockNumber = -1; + defineProperties(this, { id: nextId++, tag }); + } + + get blockNumber(): number { + return this.#blockNumber; + } + _setBlockNumber(blockNumber: number): void { this.#blockNumber = blockNumber; } + + setup(): void { } + teardown(): void { } + + isPaused(): boolean { return this.#paused; } + pause(): void { this.#paused = true; } + resume(): void { this.#paused = false; } + + resubscribeInfo(): string { return this.tag; } + resubscribe(info: string): boolean { return true; } +} +*/ diff --git a/packages/providers/src.ts/tests/blockchain-data.ts b/packages/providers/src.ts/tests/blockchain-data.ts new file mode 100644 index 000000000..04cf5f92e --- /dev/null +++ b/packages/providers/src.ts/tests/blockchain-data.ts @@ -0,0 +1,306 @@ + +export interface TestCaseBlockchainAddress { + address: string; + code?: string; + name?: string; + balance?: bigint; + storage?: Record; +} + +export interface TestCaseBlockchainBlock { + hash: string; + parentHash: string; + number: number; + timestamp: number; + nonce: string; + difficulty: bigint; + gasLimit: bigint; + gasUsed: bigint; + miner: string; + extraData: string; + transactions: Array; + + baseFeePerGas?: bigint; +} + +export interface TestCaseBlockchainTransaction { + hash: string; + blockHash: string; + blockNumber: number; + index: number; + type: number; + from: string; + gasPrice?: bigint; + maxFeePerGas?: bigint; + maxPriorityFeePerGas?: bigint; + gasLimit: bigint; + to: null | string; + value: bigint; + nonce: number; + data: string; + signature: { + r: string; + s: string; + yParity: number; + v: number; + }; + creates: null | string; + chainId: number; + accessList?: Array<{ + address: string, + storageKeys: Array + }>; +} + +export interface TestCaseBlockchainLog { + address: string; + blockHash: string; + blockNumber: number; + data: string; + index: number; + topics: Array; + transactionHash: string; + transactionIndex: number; +} + +export interface TestCaseBlockchainReceipt { + blockHash: string; + blockNumber: number; + type: number; + contractAddress: null | string; + cumulativeGasUsed: bigint; + from: string; + gasUsed: bigint; + gasPrice: bigint; + logs: Array + logsBloom: string; + root: null | string; + status: null | number, + //byzantium: boolean; + to: string; + hash: string; + index: number; +} + +export interface TestCaseBlockchain { + addresses: Array; + blocks: Array; + transactions: Array; + receipts: Array +} + +const homestead: TestCaseBlockchain = { + addresses: [ + { + address: "0xAC1639CF97a3A46D431e6d1216f576622894cBB5", + balance: BigInt("4813414100000000"), + code: "0x" + }, + // Splitter contract + { + address: "0x3474627D4F63A678266BC17171D87f8570936622", + code: "0x606060405260e060020a60003504630b3ed5368114602e57806337b0574a14605257806356fa47f0146062575b005b602c6004356000546101009004600160a060020a03908116339091161460bb575b50565b60005460ff166060908152602090f35b602c60043560005460ff1615609657600160a060020a038116600034606082818181858883f193505050501515604f576002565b33600160a060020a0316600034606082818181858883f193505050501515604f576002565b600080546101009004600160a060020a03169082606082818181858883f193505050501515604f57600256", + storage: { + "0": "0x0000000000000000000000b2682160c482eb985ec9f3e364eec0a904c44c2300" + } + }, + { + address: "0x8ba1f109551bD432803012645Ac136ddd64DBA72", + name: "ricmoo.firefly.eth" + }, + ], + blocks: [ + { // Ancient Homestead Block + hash: "0x3d6122660cc824376f11ee842f83addc3525e2dd6756b9bcf0affa6aa88cf741", + parentHash: "0xb495a1d7e6663152ae92708da4843337b958146015a2802f4193a410044698c9", + number: 3, + timestamp: 1438270048, + nonce: "0x2e9344e0cbde83ce", + difficulty: BigInt(17154715646), + gasLimit: BigInt("0x1388"), + gasUsed: BigInt("0"), + miner: "0x5088D623ba0fcf0131E0897a91734A4D83596AA0", + extraData: "0x476574682f76312e302e302d66633739643332642f6c696e75782f676f312e34", + transactions: [ ] + }, + { // Modern London Block + number: 14413999, + hash: "0x6c79356d40ebb6ed63dc19f5d407f8f1c876047b59dc1a4598cce0e64dcabec5", + parentHash: "0xbf09b0e215f247a5066d19ece5b4c66960771d45fae62985e8d751fb1adcfe2f", + timestamp: 1647654576, + nonce: "0xb4bc9979af5369fe", + difficulty: BigInt("12841513359509721"), + gasLimit: BigInt("30087914"), + gasUsed: BigInt("2008910"), + miner: "0x2A20380DcA5bC24D052acfbf79ba23e988ad0050", + extraData: "0x706f6f6c696e2e636f6d21f7092f019bb92a76", + baseFeePerGas: BigInt("40911884304"), + transactions: [ + "0x1c3a398933db10634631f54b435c40c8805c13f12bbac7c3dab858ca44213fa2", + "0xd98947cbdd892cc7f679c903903e6d18a5c5afb19e94437beba79372ad71c347", + "0x4d66190deb55b5820cb0ce9adb972f646fa0f3e64eaeee674bbf3d054bf3d883", + "0x9db7bd5f4c91d6103c714bcbc35df3dc708daa668aaef7449b589dbd3be24dac", + "0x126a43ae4ade4b7fc5c8ac9ebd3dbcf7314f63c60f2804fb49aa25b5c7d80bb1", + "0x82a90aa4b3b1b7873b117c3ff1ca7165ae34b2fc0788cc0cbfd41805d588590d", + "0x7f694a6a9972457753ed3dec164f17272b1c8b1da4eab149df95e31a3e72f606", + "0xdce1cba1ff33f0c23881087d49de3b34fe84c8a6883f3edd75b04fc23e458aac", + "0xbe1c69f825279cebef42d1f0e07397dcddef7fb278b0195e295ede3e156836c4", + "0x1d2f007b3c0f894403973a30e5ffaa78589f873d963e9554c6bb1bd7a3127245", + "0x9c8c78191cf4ae9ae8eee1165153eabe24dbd8b9509b83d5f0caeea85251bb2f", + "0x42e956f4b3dd6535359b272a0d2dab995c364cb48baaf8d0a1981995f3f8c808", + "0xdc2c2e99393e24d5dc66e38665fa1d1ff007d92088ef3fd2549545fdbe862ef6", + "0xaad7be28fffd2e77e8e40bf57f2ac140aa8283ec93c7f3f61a82c79405602f53", + "0x4735f1421b7b30283e87e0799e82e54307d3e5ba14cd54ad8420b57577489a71", + "0x0b9d6aa23aa439b41e86595f2ad91f498adffa3e6e7cb26ac7d73252e59fd3de", + "0xcd93e19bd5d5c5a834fec613116fa01f46eddfd2faa20ef302271b874b9d812a", + "0x5bf1976574a637f5ac0b8bda1a792fa16cc7ce9624d32e9bd6bd9aa6a8f19d2f", + "0x2e778da4f66f10f7b681b605635c6599cdbeea167fc1c4396a097aef5d06de61", + "0xd5fd68eebc4c870ccda081786a74c75c250e9e2d8269b8935edb3adb11b80bb2", + "0x2aec42a11c1d8c1e5198d54aacbc6bebb09bcd5e78f6af81ea09d65c9064734a", + "0xbea2e364ea4959ec438d9ccc2d2f7120c7eaba3b177cc0d7df8ff65d866ef89f", + "0xf48bbb0f838353060da4126a555ce532abf497a9d1108001afffaac513a59ddf", + "0xf5664e4372cce62733a6610efb7701a4a0e552d81f8caa764d8474b3070c6617", + "0x9d3732ddbd20610008ff737da2f61120734a1cbfa864374bcbcf10051e6048cb", + "0xc4d0df5bc6fa51b34ac3c898866d779d4e51a6be4d13be1ec3084b7229b03b47", + "0x90c86ec98b8ad98049b4ee54cb3aa72c5ae743077b830e8a294aa5dc47a1fb18" + ] + } + ], + transactions: [ + { + hash: "0xccc90ab97a74c952fb3376c4a3efb566a58a10df62eb4d44a61e106fcf10ec61", + blockHash: "0x9653f180a5720f3634816eb945a6d722adee52cc47526f6357ac10adaf368135", + blockNumber: 4097745, + index: 18, + type: 0, + from: "0x32DEF047DeFd076DB21A2D759aff2A591c972248", + gasPrice: BigInt("0x4a817c800"), + gasLimit: BigInt("0x3d090"), + to: "0x6fC21092DA55B392b045eD78F4732bff3C580e2c", + value: BigInt("0x186cc6acd4b0000"), + nonce: 0, + data: "0xf2c298be000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000067269636d6f6f0000000000000000000000000000000000000000000000000000", + signature: { + r: "0x1e5605197a03e3f0a168f14749168dfeefc44c9228312dacbffdcbbb13263265", + s: "0x269c3e5b3558267ad91b0a887d51f9f10098771c67b82ea6cb74f29638754f54", + yParity: 1, + v: 38, + }, + creates: null, + chainId: 1 + }, + { + hash: "0x8ff41d0ba5d239acc8c123ff12451a2c15721c838f657e583d355999af4a4349", + blockHash: '0x9d4c3bef68e119841281105da96beb1c7252f357340d7a3355236b3332b197b0', + blockNumber: 12966000, + index: 185, + type: 2, + from: '0x5afFBa12E9332bbc0E221c8E7BEf7CB7cfB3F281', + to: '0x2258CcD34ae29E6B199b6CD64eb2aEF157df7CdE', + gasLimit: BigInt("21000"), + nonce: 2, + data: '0x', + value: BigInt("1100000000000000"), + gasPrice: BigInt("70578812137"), + maxPriorityFeePerGas: BigInt("1000000000"), + maxFeePerGas: BigInt("131115411100"), + chainId: 1, + signature: { + r: "0xdd26e5478d0aa84e334a0393d335ab24b83de8ecae9290305f15ab884ded246c", + s: "0x6494b4f61b0d9a5a82ecb86d72b301f859f404f0bec9682bbfff619903ecfbe2", + yParity: 1, + v: 1 + }, + creates: null, + accessList: [ ] + } + ], + receipts: [ + { + //byzantium: false, + blockHash: "0x36b4af7f0538559e581c8588f16477df0f676439ea67fe8d7a2ae4abb20e2566", + blockNumber: 0x3c92b5, + type: 0, + contractAddress: null, + cumulativeGasUsed: BigInt(0x1cca2e), + from: "0x18C6045651826824FEBBD39d8560584078d1b247", + gasUsed: BigInt(0x14bb7), + gasPrice: BigInt(4100000000), + logs: [ + { + address: "0x314159265dD8dbb310642f98f50C066173C1259b", + blockHash: "0x36b4af7f0538559e581c8588f16477df0f676439ea67fe8d7a2ae4abb20e2566", + blockNumber: 0x3c92b5, + data: "0x00000000000000000000000018c6045651826824febbd39d8560584078d1b247", + index: 0x1a, + topics: [ + "0xce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e82", + "0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae", + "0xf0106919d12469348e14ad6a051d0656227e1aba2fefed41737fdf78421b20e1" + ], + transactionHash: "0xc6fcb7d00d536e659a4559d2de29afa9e364094438fef3e72ba80728ce1cb616", + transactionIndex: 0x39, + }, + { + address: "0x6090A6e47849629b7245Dfa1Ca21D94cd15878Ef", + blockHash: "0x36b4af7f0538559e581c8588f16477df0f676439ea67fe8d7a2ae4abb20e2566", + blockNumber: 0x3c92b5, + data: "0x000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000595a32ce", + index: 0x1b, + topics: [ + "0x0f0c27adfd84b60b6f456b0e87cdccb1e5fb9603991588d87fa99f5b6b61e670", + "0xf0106919d12469348e14ad6a051d0656227e1aba2fefed41737fdf78421b20e1", + "0x00000000000000000000000018c6045651826824febbd39d8560584078d1b247" + ], + transactionHash: "0xc6fcb7d00d536e659a4559d2de29afa9e364094438fef3e72ba80728ce1cb616", + transactionIndex: 0x39, + } + ], + logsBloom: "0x00000000000000040000000000100000010000000000000040000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000200000010000000004000000000000000000000000000000000002000000000000000000000000400000000020000000000000000000000000000000000000004000000000000000000000000000000000000000000000000801000000000000000000000020000000000040000000040000000000000000002000000004000000000000000000000000000000000000000000000010000000000000000000000000000000000200000000000000000", + root: "0x9b550a9a640ce50331b64504ef87aaa7e2aaf97344acb6ff111f879b319d2590", + // Should be null for pre-byzantium, but some nodes have backfilled it + status: 1, + to: "0x6090A6e47849629b7245Dfa1Ca21D94cd15878Ef", + hash: "0xc6fcb7d00d536e659a4559d2de29afa9e364094438fef3e72ba80728ce1cb616", + index: 0x39 + }, + + // Byzantium block + { + //byzantium: true, + blockHash: "0x34e5a6cfbdbb84f7625df1de69d218ade4da72f4a2558064a156674e72e976c9", + blockNumber: 0x444f76, + type: 0, + contractAddress: null, + cumulativeGasUsed: BigInt(0x15bfe7), + from: "0x18C6045651826824FEBBD39d8560584078d1b247", + gasUsed: BigInt(0x1b968), + gasPrice: BigInt(1000000000), + logs: [ + { + address: "0xb90E64082D00437e65A76d4c8187596BC213480a", + blockHash: "0x34e5a6cfbdbb84f7625df1de69d218ade4da72f4a2558064a156674e72e976c9", + blockNumber: 0x444f76, + data: "0x", + index: 0x10, + topics: [ + "0x748d071d1992ee1bfe7a39058114d0a50d5798fe8eb3a9bfb4687f024629a2ce", + "0x5574aa58f7191ccab6de6cf75fe2ea0484f010b852fdd8c6b7ae151d6c2f4b83" + ], + transactionHash: "0x7f1c6a58dc880438236d0b0a4ae166e9e9a038dbea8ec074149bd8b176332cac", + transactionIndex: 0x1e, + } + ], + logsBloom: "0x00000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000200000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000800000000000000000800000000000000000000000000000000000000", + root: null, + status: 1, + to: "0xb90E64082D00437e65A76d4c8187596BC213480a", + hash: "0x7f1c6a58dc880438236d0b0a4ae166e9e9a038dbea8ec074149bd8b176332cac", + index: 0x1e + } + ] +}; + +export const BlockchainData: Record = { + homestead +}; diff --git a/packages/providers/src.ts/tests/create-provider.ts b/packages/providers/src.ts/tests/create-provider.ts new file mode 100644 index 000000000..f498c3f9a --- /dev/null +++ b/packages/providers/src.ts/tests/create-provider.ts @@ -0,0 +1,114 @@ + +import { + AlchemyProvider, + AnkrProvider, + CloudflareProvider, + EtherscanProvider, + InfuraProvider, + PocketProvider, + + FallbackProvider, +} from "../index.js"; + +import type { AbstractProvider } from "../index.js"; + +interface ProviderCreator { + name: string; + networks: Array; + create: (network: string) => null | AbstractProvider; +}; + +const allNetworks = [ "default", "homestead" ]; + +const ProviderCreators: Array = [ + { + name: "AlchemyProvider", + networks: allNetworks, + create: function(network: string) { + return new AlchemyProvider(network, "YrPw6SWb20vJDRFkhWq8aKnTQ8JRNRHM"); + } + }, + { + name: "AnkrProvider", + networks: [ "homestead", "matic", "arbitrum" ], + create: function(network: string) { + return new AnkrProvider(network); + } + }, + { + name: "CloudflareProvider", + networks: [ "default", "homestead" ], + create: function(network: string) { + return new CloudflareProvider(network); + } + }, + { + name: "EtherscanProvider", + networks: allNetworks, + create: function(network: string) { + return new EtherscanProvider(network, "FPFGK6JSW2UHJJ2666FG93KP7WC999MNW7"); + } + }, + { + name: "InfuraProvider", + networks: allNetworks, + create: function(network: string) { + return new InfuraProvider(network, "49a0efa3aaee4fd99797bfa94d8ce2f1"); + } + }, + { + name: "PocketProvider", + networks: allNetworks, + create: function(network: string) { + const apiKeys: Record = { + homestead: "6004bcd10040261633ade990", + ropsten: "6004bd4d0040261633ade991", + rinkeby: "6004bda20040261633ade994", + goerli: "6004bd860040261633ade992", + }; + return new PocketProvider(network, apiKeys[network]); + } + }, + + { + name: "FallbackProvider", + networks: allNetworks, + create: function(network: string) { + const providers: Array = []; + for (const creator of ProviderCreators) { + if (creator.name === "FallbackProvider") { continue; } + if (creator.networks.indexOf(network) >= 0) { + const provider = creator.create(network); + if (provider) { providers.push(provider); } + } + } + return new FallbackProvider(providers); + } + }, +]; + +export const providerNames = Object.freeze(ProviderCreators.map((c) => (c.name))); + +function getCreator(provider: string): null | ProviderCreator { + const creators = ProviderCreators.filter((c) => (c.name === provider)); + if (creators.length === 1) { return creators[0]; } + return null; +} + +export function getProviderNetworks(provider: string): Array { + const creator = getCreator(provider); + if (creator) { return creator.networks; } + return [ ]; +} + +export function getProvider(provider: string, network: string): null | AbstractProvider { + const creator = getCreator(provider); + if (creator) { return creator.create(network); } + return null; +} + +export function connect(network: string): AbstractProvider { + const provider = getProvider("InfuraProvider", network); + if (provider == null) { throw new Error(`could not connect to ${ network }`); } + return provider; +} diff --git a/packages/providers/src.ts/tests/test-avatar.ts b/packages/providers/src.ts/tests/test-avatar.ts new file mode 100644 index 000000000..5bf7768d8 --- /dev/null +++ b/packages/providers/src.ts/tests/test-avatar.ts @@ -0,0 +1,30 @@ +import assert from "assert"; + +import { connect } from "./create-provider.js"; + +describe("Resolve ENS avatar", function() { + [ + { title: "data", name: "data-avatar.tests.eth", value: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAMAAACeL25MAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ4OCwgMjAyMC8wNy8xMC0yMjowNjo1MyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjAgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUQ4NTEyNUIyOEIwMTFFQzg0NTBDNTU2RDk1NTA5NzgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUQ4NTEyNUMyOEIwMTFFQzg0NTBDNTU2RDk1NTA5NzgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1RDg1MTI1OTI4QjAxMUVDODQ1MEM1NTZEOTU1MDk3OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1RDg1MTI1QTI4QjAxMUVDODQ1MEM1NTZEOTU1MDk3OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkbM0uMAAAAGUExURQAA/wAAAHtivz4AAAAOSURBVHjaYmDABAABBgAAFAABaEkyYwAAAABJRU5ErkJggg==" }, + { title: "ipfs", name: "ipfs-avatar.tests.eth", value: "https:/\/gateway.ipfs.io/ipfs/QmQsQgpda6JAYkFoeVcj5iPbwV3xRcvaiXv3bhp1VuYUqw" }, + { title: "url", name: "url-avatar.tests.eth", value: "https:/\/ethers.org/static/logo.png" }, + ].forEach((test) => { + it(`Resolves avatar for ${ test.title }`, async function() { + this.timeout(60000); + const provider = connect("ropsten"); + const avatar = await provider.getAvatar(test.name); + assert.equal(test.value, avatar, "avatar url"); + }); + }); + + [ + { title: "ERC-1155", name: "nick.eth", value: "https:/\/lh3.googleusercontent.com/hKHZTZSTmcznonu8I6xcVZio1IF76fq0XmcxnvUykC-FGuVJ75UPdLDlKJsfgVXH9wOSmkyHw0C39VAYtsGyxT7WNybjQ6s3fM3macE" }, + { title: "ERC-721", name: "brantly.eth", value: "https:/\/api.wrappedpunks.com/images/punks/2430.png" } + ].forEach((test) => { + it(`Resolves avatar for ${ test.title }`, async function() { + this.timeout(60000); + const provider = connect("homestead"); + const avatar = await provider.getAvatar(test.name); + assert.equal(avatar, test.value, "avatar url"); + }); + }); +}); diff --git a/packages/providers/src.ts/tests/test-blockchain-data.ts b/packages/providers/src.ts/tests/test-blockchain-data.ts new file mode 100644 index 000000000..05e3b8861 --- /dev/null +++ b/packages/providers/src.ts/tests/test-blockchain-data.ts @@ -0,0 +1,238 @@ +import assert from "assert"; + +import { retryIt, stats } from "./utils.js"; + +import { providerNames, getProvider } from "./create-provider.js"; + +import { BlockchainData } from "./blockchain-data.js"; +import type { + TestCaseBlockchainBlock, + TestCaseBlockchainLog, + TestCaseBlockchainTransaction, + TestCaseBlockchainReceipt, +} from "./blockchain-data.js"; + + +function sumhash(hash: string): string { + return `${ hash.substring(0, 6) }..${ hash.substring(hash.length - 4) }`; +} + +function checkBlock(actual: any, test: TestCaseBlockchainBlock): void { + assert.equal(actual.hash, test.hash, "hash"); + assert.equal(actual.parentHash, test.parentHash, "parentHash"); + assert.equal(actual.number, test.number, "number"); + assert.equal(actual.timestamp, test.timestamp, "timestamp"); + assert.equal(actual.nonce, test.nonce, "nonce"); + assert.equal(actual.difficulty, test.difficulty, "difficulty"); + assert.equal(actual.gasLimit, test.gasLimit, "gasLimit"); + assert.equal(actual.gasUsed, test.gasUsed, "gasUsed"); + assert.equal(actual.miner, test.miner, "miner"); + assert.equal(actual.extraData, test.extraData, "extraData"); + + if (test.baseFeePerGas != null) { + assert.equal(actual.baseFeePerGas, test.baseFeePerGas, "baseFeePerGas"); + } + + assert.ok(!!actual.transactions, "hasTxs"); + assert.equal(actual.transactions.length, test.transactions.length, "txs.length"); + for (let i = 0; i < actual.transactions.length; i++) { + const atx = actual.transactions[i]; + const ttx = test.transactions[i]; + assert.equal(atx, ttx, `txs[${ i }]`); + } +} + +function checkTransaction(actual: any, test: TestCaseBlockchainTransaction): void { + assert.equal(actual.hash, test.hash, "hash"); + assert.equal(actual.blockHash, test.blockHash, "blockHash"); + assert.equal(actual.blockNumber, test.blockNumber, "blockNumber"); + assert.equal(actual.type, test.type, "type"); + assert.equal(actual.index, test.index, "index"); + assert.equal(actual.from, test.from, "from"); + assert.equal(actual.to, test.to, "to"); + + assert.equal(actual.gasLimit, test.gasLimit, "gasLimit"); + + assert.equal(actual.gasPrice, test.gasPrice, "gasPrice"); + if (test.type === 2) { + assert.equal(actual.maxFeePerGas, test.maxFeePerGas, "maxFeePerGas"); + assert.equal(actual.maxPriorityFeePerGas, test.maxPriorityFeePerGas, "maxPriorityFeePerGas"); + } else { + assert.equal(actual.maxFeePerGas, null, "maxFeePerGas:null"); + assert.equal(actual.maxPriorityFeePerGas, null, "maxPriorityFeePerGas:null"); + } + + assert.equal(actual.value, test.value, "value"); + assert.equal(actual.nonce, test.nonce, "nonce"); + assert.equal(actual.data, test.data, "data"); + + assert.equal(actual.creates, test.creates, "creates"); + assert.equal(actual.signature.r, test.signature.r, "signature.r"); + assert.equal(actual.signature.s, test.signature.s, "signature.s"); + assert.equal(actual.signature.networkV, test.signature.v, "signature.v"); +} + +function checkLog(actual: any, test: TestCaseBlockchainLog): void { + assert.equal(actual.address, test.address, "address"); + assert.equal(actual.blockHash, test.blockHash, "blockHash"); + assert.equal(actual.blockNumber, test.blockNumber, "blockNumber"); + assert.equal(actual.data, test.data, "data"); + assert.equal(actual.index, test.index, "logIndex"); + assert.equal(actual.topics.join(","), test.topics.join(","), "topics"); + assert.equal(actual.transactionHash, test.transactionHash, "transactionHash"); + assert.equal(actual.transactionIndex, test.transactionIndex, "transactionIndex"); +} + +function checkTransactionReceipt(actual: any, test: TestCaseBlockchainReceipt): void { + assert.equal(actual.hash, test.hash, "hash"); + assert.equal(actual.index, test.index, "index"); + + assert.equal(actual.to, test.to, "to"); + assert.equal(actual.from, test.from, "from"); + assert.equal(actual.contractAddress, test.contractAddress, "contractAddress"); + + assert.equal(actual.blockHash, test.blockHash, "blockHash"); + assert.equal(actual.blockNumber, test.blockNumber, "blockNumber"); + + assert.equal(actual.logsBloom, test.logsBloom, "logsBloom"); + + // @TODO: Logs + assert.ok(actual.logs != null, "logs != null"); + assert.equal(actual.logs.length, test.logs.length, "logs.length"); + for (let i = 0; i < actual.logs.length; i++) { + checkLog(actual.logs[i], test.logs[i]); + } + + assert.equal(actual.gasUsed, test.gasUsed, "gasUsed"); + assert.equal(actual.cumulativeGasUsed, test.cumulativeGasUsed, "cumulativeGasUsed"); + assert.equal(actual.gasPrice, test.gasPrice, "gasPrice"); + + // Some nodes add status to pre-byzantium nodes, so don't include it at all + if (actual.status != null) { + assert.equal(actual.status, test.status, `status: ${ actual.status } != ${ test.status }`); + } + + // Some nodes dropped root, event on pre-byzantium blocks + if (actual.root != null) { + assert.equal(actual.root, test.root, `root ${ actual.root } != ${ test.root }`); + } +} + +function stall(duration: number) { + return new Promise((resolve) => { + setTimeout(resolve, duration); + }); +} + +describe("Test Provider Methods", function() { + before(function() { + stats.start("Test Provider Methods"); + }); + + // Wait before each testcase so the backends don't throttle + // use as much + beforeEach(async function() { + await stall(1000); + }); + + after(function() { + stats.end(); + }); + + // Etherscan does not support this + const skipGetBlockByBlockHash = [ "EtherscanProvider" ]; + + for (const providerName of providerNames) { + for (const network in BlockchainData) { + const provider = getProvider(providerName, network); + if (provider == null || providerName === "CloudflareProvider") { + console.log(`Skipping ${providerName}:${ network }...`); + continue; + } + + const tests = BlockchainData[network]; + for (const test of tests.addresses) { + const address = test.address; + + if (test.balance != null) { + retryIt(`fetches address balance: ${ providerName }.${ network }.${ sumhash(address) }`, async function() { + assert.equal(await provider.getBalanceOf(address), test.balance, "balance"); + }); + } + + if (test.code != null) { + retryIt(`fetches address code: ${ providerName }.${ network }.${ sumhash(address) }`, async function() { + assert.equal(await provider.getCode(address), test.code, "code"); + }); + } + + if (test.name != null) { + retryIt(`fetches address reverse record: ${ providerName }.${ network }.${ sumhash(address) }`, async function() { + this.skip(); + assert.equal(await provider.lookupAddress(address), test.name, "name"); + }); + } + + if (test.storage != null) { + retryIt(`fetches address storage: ${ providerName }.${ network }.${ sumhash(address) }`, async function() { + for (const slot in test.storage) { + const value = test.storage[slot]; + assert.equal(await provider.getStorageAt(address, slot), value, `storage:${ slot }`); + } + }); + } + } + + for (const test of tests.blocks) { + retryIt(`fetches block by number: ${ providerName }.${ network }.${ test.number }`, async function() { + checkBlock(await provider.getBlock(test.number), test); + }); + + if (skipGetBlockByBlockHash.indexOf(providerName) === -1) { + retryIt(`fetches block by hash: ${ providerName }.${ network }.${ sumhash(test.hash) }`, async function() { + checkBlock(await provider.getBlock(test.hash), test); + }); + + } else { + retryIt(`throws unsupported operation for fetching block by hash: ${ providerName }.${ network }.${ sumhash(test.hash) }`, async function() { + await assert.rejects( + provider.getBlock(test.hash), + (error) => { + return (error.code === "UNSUPPORTED_OPERATION" && + error.operation === "getBlock(blockHash)"); + } + ); + }); + } + } + + for (const test of tests.transactions) { + retryIt(`fetches transaction: ${ providerName }.${ network }.${ sumhash(test.hash) }`, async function() { + checkTransaction(await provider.getTransaction(test.hash), test); + }); + } + + for (const test of tests.receipts) { + retryIt(`fetches transaction receipt: ${ providerName }.${ network }.${ sumhash(test.hash) }`, async function() { + checkTransactionReceipt(await provider.getTransactionReceipt(test.hash), test); + }); + } + } + + it(`fetches a pending block: ${ providerName }`, async function() { + this.timeout(15000); + + const provider = getProvider(providerName, "homestead"); + assert.ok(provider, "provider"); + + const block = await provider.getBlock("pending"); + assert.ok(!!block, "block"); + + assert.equal(block.hash, null, "hash"); + assert.ok(typeof(block.number) === "number", "number"); + assert.ok(typeof(block.timestamp) === "number", "timestamp"); + }); + } + +}); + diff --git a/packages/providers/src.ts/tests/test-ccip-read.ts b/packages/providers/src.ts/tests/test-ccip-read.ts new file mode 100644 index 000000000..68339a16f --- /dev/null +++ b/packages/providers/src.ts/tests/test-ccip-read.ts @@ -0,0 +1,177 @@ +import assert from "assert"; + +import { concat, dataLength } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { toArray } from "@ethersproject/math"; +import { isCallException, isError } from "@ethersproject/logger"; + +import { connect } from "./create-provider.js"; + +describe("Test CCIP execution", function() { + + // This matches the verify method in the Solidity contract against the + // processed data from the endpoint + const verify = function(sender: string, data: string, result: string): void { + const check = concat([ + toArray(dataLength(sender)), sender, + toArray(dataLength(data)), data + ]); + assert.equal(result, keccak256(check), "response is equal"); + } + + const address = "0xAe375B05A08204C809b3cA67C680765661998886"; + const calldata = "0x1234"; + + it("testGet passes under normal operation", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGet(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0xa5f3271e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + const result = await provider.call(tx); + verify(address, calldata, result); + }); + + it("testGet should fail with CCIP not explicitly enabled by overrides", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGet(bytes callData = "0x1234") + const tx = { + to: address, + data: "0xa5f3271e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + await assert.rejects(async function() { + const result = await provider.call(tx); + console.log(result); + }, (error: unknown) => { + const offchainErrorData = "0x556f1830000000000000000000000000ae375b05a08204c809b3ca67c68076566199888600000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140b1494be100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f6574686572732e7269636d6f6f2e776f726b6572732e6465762f746573742d636369702d726561642f7b73656e6465727d2f7b646174617d00000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d79206578747261206461746100000000000000000000000000000000000000"; + return (isCallException(error) && error.data === offchainErrorData); + }); + }); + + it("testGet should fail with CCIP explicitly disabled on provider", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + provider.disableCcipRead = true; + + // testGetFail(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0xa5f3271e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + await assert.rejects(async function() { + const result = await provider.call(tx); + console.log(result); + }, (error: unknown) => { + const offchainErrorData = "0x556f1830000000000000000000000000ae375b05a08204c809b3ca67c68076566199888600000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140b1494be100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f6574686572732e7269636d6f6f2e776f726b6572732e6465762f746573742d636369702d726561642f7b73656e6465727d2f7b646174617d00000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d79206578747261206461746100000000000000000000000000000000000000"; + return (isCallException(error) && error.data === offchainErrorData); + }); + }); + + it("testGetFail should fail if all URLs 5xx", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGetFail(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0x36f9cea6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + await assert.rejects(async function() { + const result = await provider.call(tx); + console.log(result); + }, (error: unknown) => { + const infoJson = '{"urls":["https:/\/ethers.ricmoo.workers.dev/status/500/{sender}/{data}"],"errorMessages":["hello world"]}'; + return (isError(error, "OFFCHAIN_FAULT") && error.reason === "500_SERVER_ERROR" && + JSON.stringify(error.info) === infoJson); + }); + }); + + it("testGetSenderFail should fail if sender does not match", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGetSenderFail(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0x64bff6d1000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000", + } + + await assert.rejects(async function() { + const result = await provider.call(tx); + console.log(result); + }, (error: unknown) => { + const errorArgsJson = '["0x0000000000000000000000000000000000000000",["https://ethers.ricmoo.workers.dev/test-ccip-read/{sender}/{data}"],"0x1234","0xb1494be1","0x4d792065787472612064617461"]'; + const offchainErrorData = "0x556f1830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140b1494be100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f6574686572732e7269636d6f6f2e776f726b6572732e6465762f746573742d636369702d726561642f7b73656e6465727d2f7b646174617d00000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d79206578747261206461746100000000000000000000000000000000000000"; + return (isCallException(error) && error.data === offchainErrorData && + error.errorSignature === "OffchainLookup(address,string[],bytes,bytes4,bytes)" && + JSON.stringify(error.errorArgs) === errorArgsJson); + }); + }); + + + it("testGetMissing should fail if early URL 4xx", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGetMissing(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0x4ece8d7d000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + await assert.rejects(async function() { + const result = await provider.call(tx); + console.log(result); + }, (error: unknown) => { + const infoJson = '{"url":"https:/\/ethers.ricmoo.workers.dev/status/404/{sender}/{data}","errorMessage":"hello world"}'; + return (isError(error, "OFFCHAIN_FAULT") && error.reason === "404_MISSING_RESOURCE" && + JSON.stringify(error.info || "") === infoJson); + }); + }); + + + it("testGetFallback passes if any URL returns correctly", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGetFallback(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0xedf4a021000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + const result = await provider.call(tx); + verify(address, calldata, result); + }); + + it("testPost passes under normal operation", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testPost(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0x66cab49d000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + const result = await provider.call(tx); + verify(address, calldata, result); + }); +}) diff --git a/packages/providers/src.ts/tests/test-events.ts b/packages/providers/src.ts/tests/test-events.ts new file mode 100644 index 000000000..8be21d2f0 --- /dev/null +++ b/packages/providers/src.ts/tests/test-events.ts @@ -0,0 +1,59 @@ +import assert from "assert"; + +import { getProvider } from "./create-provider.js"; + +import type { + AbstractProvider +} from "../index.js"; + + +async function testBlockEvent(provider: AbstractProvider, startBlock: number): Promise { + const blockEvents: Array = await new Promise((resolve, reject) => { + const result: Array = [ ]; + const callback = (blockNumber: number) => { + result.push(blockNumber); + if (result.length >= 2) { + provider.off("block", callback); + resolve(result); + } + }; + provider.on("block", callback); + }); + + assert.ok(blockEvents.length >= 2, "blockEvents.length >= 2"); + + for (let i = 0; i < blockEvents.length; i++) { + assert.equal(blockEvents[i], startBlock + i + 1, `blockNumber + ${ i }`); + } + + assert.equal(await provider.listenerCount("block"), 0, "listenerCount"); +} + +//async function testFilterEvent(provider: AbstractProvider): Promise { +//} + +describe("Tests Events", function() { + // These providers cover all possible + const Providers = [ "EtherscanProvider", "InfuraProvider" ]; + + for (const providerName of Providers) { + it(`responds to block events: ${ providerName }`, async function() { + this.timeout(120000); + const provider = getProvider(providerName, "goerli"); + if (provider == null) { throw new Error("internal; should not happen"); } + await testBlockEvent(provider, await provider.getBlockNumber()); + }); + } + + for (const providerName of Providers) { + it(`responds to filter events: ${ providerName }`, async function() { + this.skip(); +/* + this.timeout(120000); + const provider = getProvider(providerName, "goerli"); + if (provider == null) { throw new Error("internal; should not happen"); } + await testFilterEvent(provider); +*/ + }); + } +}); diff --git a/packages/providers/src.ts/tests/test-wildcard.ts b/packages/providers/src.ts/tests/test-wildcard.ts new file mode 100644 index 000000000..636be0c22 --- /dev/null +++ b/packages/providers/src.ts/tests/test-wildcard.ts @@ -0,0 +1,20 @@ +import assert from "assert"; + +import { connect } from "./create-provider.js"; + +describe("Test EIP-2544 ENS wildcards", function() { + const provider = connect("ropsten"); + + it("Resolves recursively", async function() { + const resolver = await provider.getResolver("ricmoose.hatch.eth"); + assert.ok(resolver, "failed to get resolver"); + + assert.equal(resolver.address, "0x8fc4C380c5d539aE631daF3Ca9182b40FB21D1ae", "address"); + assert.equal(await resolver.supportsWildcard(), true, "supportsWildcard()"); + + // Test pass-through avatar + assert.equal(await resolver.getAvatar(), "https:/\/static.ricmoo.com/uploads/profile-06cb9c3031c9.jpg", "getAvatar()"); + + assert.equal(await resolver.getAddress(), "0x4FaBE0A3a4DDd9968A7b4565184Ad0eFA7BE5411", "getAddress()"); + }); +}); diff --git a/packages/providers/src.ts/tests/utils.ts b/packages/providers/src.ts/tests/utils.ts new file mode 100644 index 000000000..ed43a4e56 --- /dev/null +++ b/packages/providers/src.ts/tests/utils.ts @@ -0,0 +1,114 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + +async function stall(duration: number): Promise { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} + +export interface MochaRunnable { + timeout: (value: number) => void; + skip: () => void; +} + +const ATTEMPTS = 5; +export async function retryIt(name: string, func: (this: MochaRunnable) => Promise): Promise { + it(name, async function() { + this.timeout(ATTEMPTS * 5000); + + for (let i = 0; i < ATTEMPTS; i++) { + try { + await func.call(this); + return; + } catch (error: any) { + if (error.message === "sync skip; aborting execution") { + // Skipping a test; let mocha handle it + throw error; + } else if (error.code === "ERR_ASSERTION") { + // Assertion error; let mocha scold us + throw error; + } else { + if (i === ATTEMPTS - 1) { + stats.pushRetry(i, name, error); + } else { + await stall(500 * (1 << i)); + stats.pushRetry(i, name, null); + } + } + } + } + + // All hope is lost. + throw new Error(`Failed after ${ ATTEMPTS } attempts; ${ name }`); + }); +} + +export interface StatSet { + name: string; + retries: Array<{ message: string, error: null | Error }>; +} + +const _guard = { }; + +export class Stats { + #stats: Array; + + constructor(guard: any) { + if (guard !== _guard) { throw new Error("private constructor"); } + this.#stats = [ ]; + } + + #currentStats(): StatSet { + if (this.#stats.length === 0) { throw new Error("no active stats"); } + return this.#stats[this.#stats.length - 1]; + } + + pushRetry(attempt: number, line: string, error: null | Error): void { + const { retries } = this.#currentStats(); + + if (attempt > 0) { retries.pop(); } + if (retries.length < 100) { + retries.push({ + message: `${ attempt + 1 } failures: ${ line }`, + error + }); + } + } + + start(name: string): void { + this.#stats.push({ name, retries: [ ] }); + } + + end(): void { + const { name, retries } = this.#currentStats(); + if (retries.length === 0) { return; } + console.log(`Warning: The following tests required retries (${ name })`); + retries.forEach(({ error, message }) => { + console.log(" " + message); + if (error) { console.log(error); } + }); + } +} + +export const stats = new Stats(_guard); diff --git a/packages/providers/src.ts/ws-browser.ts b/packages/providers/src.ts/ws-browser.ts new file mode 100644 index 000000000..4512bb7c3 --- /dev/null +++ b/packages/providers/src.ts/ws-browser.ts @@ -0,0 +1,17 @@ + +declare global { + interface Window { } + const window: Window; + const self: Window; +} + +function getGlobal(): any { + if (typeof self !== 'undefined') { return self; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + throw new Error('unable to locate global object'); +}; + +const _WebSocket = getGlobal().WebSocket; + +export { _WebSocket as WebSocket }; diff --git a/packages/providers/tsconfig.json b/packages/providers/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/providers/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/rlp/.npmignore b/packages/rlp/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/rlp/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/rlp/LICENSE.md b/packages/rlp/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/rlp/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/rlp/package.json b/packages/rlp/package.json new file mode 100644 index 000000000..d0d1e44f7 --- /dev/null +++ b/packages/rlp/package.json @@ -0,0 +1,34 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1" + }, + "description": "Recursive-Length Prefix (RLP) coder.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers", + "rlp" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/rlp", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/rlp", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/rlp/src.ts/_version.ts b/packages/rlp/src.ts/_version.ts new file mode 100644 index 000000000..72a0d0c72 --- /dev/null +++ b/packages/rlp/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/rlp@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/rlp/src.ts/decode.ts b/packages/rlp/src.ts/decode.ts new file mode 100644 index 000000000..c3ce480fe --- /dev/null +++ b/packages/rlp/src.ts/decode.ts @@ -0,0 +1,111 @@ +//See: https://github.com/ethereum/wiki/wiki/RLP + +import { hexlify } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/bytes"; + +import type { RlpStructuredData } from "./types.js"; + + +function hexlifyByte(value: number): string { + let result = value.toString(16); + while (result.length < 2) { result = "0" + result; } + return "0x" + result; +} + +function unarrayifyInteger(data: Uint8Array, offset: number, length: number): number { + let result = 0; + for (let i = 0; i < length; i++) { + result = (result * 256) + data[offset + i]; + } + return result; +} + +type Decoded = { + result: any; + consumed: number; +}; + +function _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded { + const result = []; + + while (childOffset < offset + 1 + length) { + const decoded = _decode(data, childOffset); + + result.push(decoded.result); + + childOffset += decoded.consumed; + if (childOffset > offset + 1 + length) { + logger.throwError("child data too short", "BUFFER_OVERRUN", { + buffer: data, length, offset + }); + } + } + + return {consumed: (1 + length), result: result}; +} + +// returns { consumed: number, result: Object } +function _decode(data: Uint8Array, offset: number): { consumed: number, result: any } { + if (data.length === 0) { + logger.throwError("data too short", "BUFFER_OVERRUN", { + buffer: data, length: 0, offset: 1 + }); + } + + const checkOffset = (offset: number) => { + if (offset > data.length) { + logger.throwError("data short segment too short", "BUFFER_OVERRUN", { + buffer: data, length: data.length, offset + }); + } + }; + + // Array with extra length prefix + if (data[offset] >= 0xf8) { + const lengthLength = data[offset] - 0xf7; + checkOffset(offset + 1 + lengthLength); + + const length = unarrayifyInteger(data, offset + 1, lengthLength); + checkOffset(offset + 1 + lengthLength + length); + + return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length); + + } else if (data[offset] >= 0xc0) { + const length = data[offset] - 0xc0; + checkOffset(offset + 1 + length); + + return _decodeChildren(data, offset, offset + 1, length); + + } else if (data[offset] >= 0xb8) { + const lengthLength = data[offset] - 0xb7; + checkOffset(offset + 1 + lengthLength); + + const length = unarrayifyInteger(data, offset + 1, lengthLength); + checkOffset(offset + 1 + lengthLength + length); + + const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length)); + return { consumed: (1 + lengthLength + length), result: result } + + } else if (data[offset] >= 0x80) { + const length = data[offset] - 0x80; + checkOffset(offset + 1 + length); + + const result = hexlify(data.slice(offset + 1, offset + 1 + length)); + return { consumed: (1 + length), result: result } + } + + return { consumed: 1, result: hexlifyByte(data[offset]) }; +} + +export function decodeRlp(_data: BytesLike): RlpStructuredData { + const data = logger.getBytes(_data, "data"); + const decoded = _decode(data, 0); + if (decoded.consumed !== data.length) { + logger.throwArgumentError("unexpected junk after rlp payload", "data", _data); + } + return decoded.result; +} + diff --git a/packages/rlp/src.ts/encode.ts b/packages/rlp/src.ts/encode.ts new file mode 100644 index 000000000..a70ba5a59 --- /dev/null +++ b/packages/rlp/src.ts/encode.ts @@ -0,0 +1,61 @@ +//See: https://github.com/ethereum/wiki/wiki/RLP + +import { logger } from "./logger.js"; + +import type { RlpStructuredData } from "./types.js"; + + +function arrayifyInteger(value: number): Array { + const result = []; + while (value) { + result.unshift(value & 0xff); + value >>= 8; + } + return result; +} + +function _encode(object: Array | string): Array { + if (Array.isArray(object)) { + let payload: Array = []; + object.forEach(function(child) { + payload = payload.concat(_encode(child)); + }); + + if (payload.length <= 55) { + payload.unshift(0xc0 + payload.length) + return payload; + } + + const length = arrayifyInteger(payload.length); + length.unshift(0xf7 + length.length); + + return length.concat(payload); + + } + + const data: Array = Array.prototype.slice.call(logger.getBytes(object, "object")); + + if (data.length === 1 && data[0] <= 0x7f) { + return data; + + } else if (data.length <= 55) { + data.unshift(0x80 + data.length); + return data; + } + + const length = arrayifyInteger(data.length); + length.unshift(0xb7 + length.length); + + return length.concat(data); +} + +const nibbles = "0123456789abcdef"; + +export function encodeRlp(object: RlpStructuredData): string { + let result = "0x"; + for (const v of _encode(object)) { + result += nibbles[v >> 4]; + result += nibbles[v & 0xf]; + } + return result; +} diff --git a/packages/rlp/src.ts/index.ts b/packages/rlp/src.ts/index.ts new file mode 100644 index 000000000..fe681db35 --- /dev/null +++ b/packages/rlp/src.ts/index.ts @@ -0,0 +1,4 @@ +export { encodeRlp } from "./encode.js"; +export { decodeRlp } from "./decode.js"; + +export type { RlpStructuredData } from "./types.js"; diff --git a/packages/rlp/src.ts/logger.ts b/packages/rlp/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/rlp/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/rlp/src.ts/tests/test-rlp.ts b/packages/rlp/src.ts/tests/test-rlp.ts new file mode 100644 index 000000000..132da22c5 --- /dev/null +++ b/packages/rlp/src.ts/tests/test-rlp.ts @@ -0,0 +1,101 @@ +import assert from "assert"; + +import { loadTests } from "./utils.js"; + +import { decodeRlp, encodeRlp } from "../index.js"; + +import type { TestCaseRlp } from "./types.js"; + +describe("Test RLP Coder", function() { + + const tests = loadTests("rlp"); + + tests.forEach(({ name, encoded, decoded }) => { + it(`encodes ${ name }`, function() { + assert.equal(encodeRlp(decoded), encoded); + }); + }); + + tests.forEach(({ name, encoded, decoded }) => { + it(`decodes ${ name }`, function() { + assert.deepStrictEqual(decodeRlp(encoded), decoded); + }); + }); +}); + +describe("Test bad RLP Data", function() { + it("fails encoding data with invalid values", function() { + assert.throws(() => { + encodeRlp([ "0x1234", 1234 ]); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.argument === "object" && + error.value === 1234) + }); + }); + + it("fails decoding data with trailing junk", function() { + assert.throws(() => { + // Zeros_1 + decodeRlp("0x0042"); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^unexpected junk after rlp payload/) && + error.argument === "data" && + error.value === "0x0042") + }); + }); + + it ("fails decoding short data", function() { + assert.throws(() => { + decodeRlp("0x"); + }, (error) => { + return (error.code === "BUFFER_OVERRUN" && + error.message.match(/^data too short/) && + Buffer.from(error.buffer).toString("hex") === "" && + error.offset === 1 && + error.length === 0) + }); + }); + + it ("fails decoding short data in child", function() { + assert.throws(() => { + decodeRlp("0xc8880102030405060708"); + }, (error) => { + return (error.code === "BUFFER_OVERRUN" && + error.message.match(/^child data too short/) && + Buffer.from(error.buffer).toString("hex") === "c8880102030405060708" && + error.offset === 0 && + error.length === 8) + }); + }); + + it ("fails decoding short segment data", function() { + assert.throws(() => { + // [["0x4243"], ["0x3145"]] = 0xc8 c3 82 4243 c3 82 3145 + // XXXX + decodeRlp("0xc8c382c3823145"); + }, (error) => { + return (error.code === "BUFFER_OVERRUN" && + error.message.match(/^data short segment too short/) && + Buffer.from(error.buffer).toString("hex") === "c8c382c3823145" && + error.offset === 9 && + error.length === 7) + }); + }); +}); + +/* + utils.RLP.encode([["0x4243"], ["0x3145"]]) + + 0xc8 c3 82 4243 c3 82 3145 + + { + "name": "arrayShort2", + "decoded": [ + "0x48656c6c6f20576f726c64", + "0x48656c6c6f20576f726c64" + ], + "encoded": "0xd8 8b 48656c6c6f20576f726c64 8b 48656c6c6f20576f726c64" + }, +*/ diff --git a/packages/rlp/src.ts/tests/types.ts b/packages/rlp/src.ts/tests/types.ts new file mode 100644 index 000000000..25196c5c3 --- /dev/null +++ b/packages/rlp/src.ts/tests/types.ts @@ -0,0 +1,7 @@ +export type NestedHexString = string | Array; + +export interface TestCaseRlp { + name: string; + encoded: string; + decoded: NestedHexString; +} diff --git a/packages/rlp/src.ts/tests/utils.ts b/packages/rlp/src.ts/tests/utils.ts new file mode 100644 index 000000000..b40517e1b --- /dev/null +++ b/packages/rlp/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/rlp/src.ts/types.ts b/packages/rlp/src.ts/types.ts new file mode 100644 index 000000000..fd1e2c3bd --- /dev/null +++ b/packages/rlp/src.ts/types.ts @@ -0,0 +1 @@ +export type RlpStructuredData = string | Array; diff --git a/packages/rlp/tsconfig.json b/packages/rlp/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/rlp/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/signing-key/.npmignore b/packages/signing-key/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/signing-key/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/signing-key/LICENSE.md b/packages/signing-key/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/signing-key/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/signing-key/package.json b/packages/signing-key/package.json new file mode 100644 index 000000000..e0d7b8ee7 --- /dev/null +++ b/packages/signing-key/package.json @@ -0,0 +1,40 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@noble/secp256k1": "1.5.5" + }, + "dummy": { + "hash.js": "1.1.7" + }, + "description": "Elliptic curve library functions for the secp256k1 curve.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/signing-key", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/signing-key", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/signing-key/src.ts/_version.ts b/packages/signing-key/src.ts/_version.ts new file mode 100644 index 000000000..e63f0a14e --- /dev/null +++ b/packages/signing-key/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/signing-key@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/signing-key/src.ts/index.ts b/packages/signing-key/src.ts/index.ts new file mode 100644 index 000000000..edcab570a --- /dev/null +++ b/packages/signing-key/src.ts/index.ts @@ -0,0 +1,5 @@ + +export { Signature } from "./signature.js"; +export { SigningKey } from "./signing-key.js"; + +export type { SignatureLike } from "./signature.js"; diff --git a/packages/signing-key/src.ts/logger.ts b/packages/signing-key/src.ts/logger.ts new file mode 100644 index 000000000..a1bfc739b --- /dev/null +++ b/packages/signing-key/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { version } from "./_version.js"; +import { Logger } from "@ethersproject/logger"; +export const logger = new Logger(version); diff --git a/packages/signing-key/src.ts/signature.ts b/packages/signing-key/src.ts/signature.ts new file mode 100644 index 000000000..9a8e0a5cb --- /dev/null +++ b/packages/signing-key/src.ts/signature.ts @@ -0,0 +1,283 @@ +import { getStore, setStore } from "@ethersproject/properties"; + +//import type { BigNumberish } from "@ethersproject/bignumber"; +import type { Freezable, Frozen } from "@ethersproject/properties"; + +import { arrayify, concat, dataLength, hexlify, isHexString } from "@ethersproject/bytes"; + +import type { BytesLike } from "@ethersproject/bytes"; + +import type { BigNumberish } from "@ethersproject/logger"; + +import { logger } from "./logger.js"; + + +// Constants +const BN_0 = BigInt(0); +const BN_1 = BigInt(1); +const BN_2 = BigInt(2); +const BN_27 = BigInt(27); +const BN_28 = BigInt(28); +const BN_35 = BigInt(35); + + +export type SignatureLike = Signature | string | { + r: string; + s: string; + v: BigNumberish; + //chainId?: BigNumberish; + yParity?: 0 | 1; + yParityAndS?: string; +//} | { +// r: string; +// s: string; +// //chainId: BigNumberish; +// v?: BigNumberish; +// yParity?: 0 | 1 +// yParityAndS?: string; +} | { + r: string; + yParityAndS: string; + //chainId?: BigNumberish; + yParity?: 0 | 1; + s?: string; + v?: number; +} | { + r: string; + s: string; + yParity: 0 | 1; + //chainId?: BigNumberish; + v?: BigNumberish; + yParityAndS?: string; +}; + + +const _guard = { }; + +const Zero = "0x0000000000000000000000000000000000000000000000000000000000000000"; + +export class Signature implements Freezable { + #props: { r: string, s: string, v: 27 | 28, networkV: null | bigint }; + + get r(): string { return getStore(this.#props, "r"); } + set r(value: BytesLike) { + if (dataLength(value) !== 32) { + logger.throwArgumentError("invalid r", "value", value); + } + setStore(this.#props, "r", hexlify(value)); + } + + get s(): string { return getStore(this.#props, "s"); } + set s(value: BytesLike) { + if (dataLength(value) !== 32) { + logger.throwArgumentError("invalid r", "value", value); + } else if (arrayify(value)[0] & 0x80) { + logger.throwArgumentError("non-canonical s", "value", value); + } + setStore(this.#props, "s", hexlify(value)); + } + + get v(): 27 | 28 { return getStore(this.#props, "v"); } + set v(value: BigNumberish) { + const v = logger.getNumber(value, "value"); + if (v !== 27 && v !== 28) { throw new Error("@TODO"); } + setStore(this.#props, "v", v); + } + + get networkV(): null | bigint { return getStore(this.#props, "networkV"); } + get legacyChainId(): null | bigint { + const v = this.networkV; + if (v == null) { return null; } + return Signature.getChainId(v); + } + + get yParity(): 0 | 1 { + if (this.v === 27) { return 0; } + return 1; + /* + // When v is 0 or 1 it is the recid directly + if (this.v.isZero()) { return 0; } + if (this.v.eq(1)) { return 1; } + + // Otherwise, odd (e.g. 27) is 0 and even (e.g. 28) is 1 + return this.v.and(1).isZero() ? 1: 0; + */ + } + + get yParityAndS(): string { + // The EIP-2098 compact representation + const yParityAndS = arrayify(this.s); + if (this.yParity) { yParityAndS[0] |= 0x80; } + return hexlify(yParityAndS); + } + + get compactSerialized(): string { + return concat([ this.r, this.yParityAndS ]); + } + + get serialized(): string { + return concat([ this.r, this.s, (this.yParity ? "0x1c": "0x1b") ]); + } + + constructor(guard: any, r: string, s: string, v: 27 | 28) { + logger.assertPrivate(guard, _guard, "Signature"); + this.#props = { r, s, v, networkV: null }; + } + + [Symbol.for('nodejs.util.inspect.custom')]() { + return `Signature { r: "${ this.r }", s: "${ this.s }", yParity: ${ this.yParity }, networkV: ${ this.networkV } }`; + } + + clone(): Signature { + if (getStore(this.#props, "networkV")) { + logger.throwError("cannot clone EIP-155 signatures", "UNSUPPORTED_OPERATION", { + operation: "clone" + }); + } + const { r, s, v } = this.#props; + return new Signature(_guard, r, s, v); + } + + freeze(): Frozen { + Object.freeze(this.#props); + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } + + toJSON(): any { + const { r, s, v, networkV } = this; + return { + _type: "signature", + networkV: ((networkV != null) ? networkV.toString(): null), + r, s, v, + }; + } + + static create(): Signature { + return new Signature(_guard, Zero, Zero, 27); + } + + // Get the chain ID from an EIP-155 v + static getChainId(v: BigNumberish): bigint { + const bv = logger.getBigInt(v, "v"); + + // The v is not an EIP-155 v, so it is the unspecified chain ID + if ((bv == BN_27) || (bv == BN_28)) { return BN_0; } + + // Bad value for an EIP-155 v + if (bv < BN_35) { logger.throwArgumentError("invalid EIP-155 v", "v", v); } + + return (bv - BN_35) / BN_2; + } + + // Get the EIP-155 v transformed for a given chainId + static getChainIdV(chainId: BigNumberish, v: 27 | 28): bigint { + return (logger.getBigInt(chainId) * BN_2) + BigInt(35 + v - 27); + } + + // Convert an EIP-155 v into a normalized v + static getNormalizedV(v: BigNumberish): 27 | 28 { + const bv = logger.getBigInt(v); + + if (bv == BN_0) { return 27; } + if (bv == BN_1) { return 28; } + + // Otherwise, EIP-155 v means odd is 27 and even is 28 + return (bv & BN_1) ? 27: 28; + } + + static fromTransaction(r: string, s: string, _v: BigNumberish): Frozen { + const v = logger.getBigInt(_v, "v"); + const sig = Signature.from({ r, s, v }); + setStore(sig.#props, "networkV", v); + return sig.freeze(); + } + + static from(sig: SignatureLike): Signature { + const throwError = (message: string) => { + return logger.throwArgumentError(message, "signature", sig); + }; + + if (typeof(sig) === "string") { + const bytes = logger.getBytes(sig, "signature"); + if (bytes.length === 64) { + const r = hexlify(bytes.slice(0, 32)); + const s = bytes.slice(32, 64); + const v = (s[0] & 0x80) ? 28: 27; + s[0] &= 0x7f; + return new Signature(_guard, r, hexlify(s), v); + } + + if (dataLength(sig) !== 65) { + const r = hexlify(sig.slice(0, 32)); + const s = bytes.slice(32, 64); + if (s[0] & 0x80) { throwError("non-canonical s"); } + const v = Signature.getNormalizedV(bytes[64]); + return new Signature(_guard, r, hexlify(s), v); + } + + return throwError("invlaid raw signature length"); + } + + if (sig instanceof Signature) { return sig.clone(); } + + // Get r + const r = sig.r; + if (r == null) { throwError("missing r"); } + if (!isHexString(r, 32)) { throwError("invalid r"); } + + // Get s; by any means necessary (we check consistency below) + const s = (function(s?: string, yParityAndS?: string) { + if (s) { + if (!isHexString(s, 32)) { throwError("invalid s"); } + return s; + } + if (yParityAndS) { + if (!isHexString(yParityAndS, 32)) { throwError("invalid yParityAndS"); } + const bytes = arrayify(yParityAndS); + bytes[0] &= 0x7f; + return hexlify(bytes); + } + return throwError("missing s"); + })(sig.s, sig.yParityAndS); + if (arrayify(s)[0] & 0x80) { throwError("non-canonical s"); } + + // Get v; by any means necessary (we check consistency below) + const v = (function(v?: BigNumberish, yParityAndS?: string, yParity?: number) { + if (v) { return Signature.getNormalizedV(v); } + if (yParityAndS) { + if (!isHexString(yParityAndS, 32)) { throwError("invalid yParityAndS"); } + return ((arrayify(yParityAndS)[0] & 0x80) ? 28: 27); + } + if (yParity) { + switch (yParity) { + case 0: return 27; + case 1: return 28; + } + return throwError("invalid yParity"); + } + //if (chainId) { return BigNumber.from(chainId).and(1).sub(27); } // @TODO: check this + return throwError("missing v"); + })(sig.v, sig.yParityAndS, sig.yParity); + + // @TODO: add chainId support + + const result = new Signature(_guard, r, s, v); + + // If multiple of v, yParity, yParityAndS we given, check they match + if ("yParity" in sig && sig.yParity !== result.yParity) { + throwError("yParity mismatch"); + } else if ("yParityAndS" in sig && sig.yParityAndS !== result.yParityAndS) { + throwError("yParityAndS mismatch"); + } + + //if (sig.chainId && sig.chainId !== result.chainId) { + //} + + return result; + } +} + diff --git a/packages/signing-key/src.ts/signing-key.ts b/packages/signing-key/src.ts/signing-key.ts new file mode 100644 index 000000000..b8cfda5a1 --- /dev/null +++ b/packages/signing-key/src.ts/signing-key.ts @@ -0,0 +1,124 @@ + +import * as secp256k1 from "@noble/secp256k1"; + +import { arrayify, concat, dataLength, hexlify } from "@ethersproject/bytes"; +import { computeHmac } from "@ethersproject/crypto"; +import { toHex } from "@ethersproject/math"; + +import type { BytesLike } from "@ethersproject/bytes"; +import type { Frozen } from "@ethersproject/properties"; + +import { Signature } from "./signature.js"; +import { logger } from "./logger.js"; + +import type { SignatureLike } from "./signature.js"; + + +// Make noble-secp256k1 sync +secp256k1.utils.hmacSha256Sync = function(key: Uint8Array, ...messages: Array): Uint8Array { + return arrayify(computeHmac("sha256", key, concat(messages))); +} + +export class SigningKey { + #privateKey: string; + + constructor(privateKey: BytesLike) { + logger.assertArgument((dataLength(privateKey) === 32), "invalid private key length", "privateKey", "[REDACTED]"); + this.#privateKey = hexlify(privateKey); + } + + get privateKey(): string { return this.#privateKey; } + get publicKey(): string { return SigningKey.computePublicKey(this.#privateKey); } + get compressedPublicKey(): string { return SigningKey.computePublicKey(this.#privateKey, true); } + + sign(digest: BytesLike): Frozen { + logger.assertArgument((dataLength(digest) === 32), "invalid digest length", "digest", digest); + + const [ sigDer, recid ] = secp256k1.signSync(arrayify(digest), arrayify(this.#privateKey), { + recovered: true, + canonical: true + }); + + const sig = secp256k1.Signature.fromHex(sigDer); + + return Signature.from({ + r: toHex("0x" + sig.r.toString(16), 32), + s: toHex("0x" + sig.s.toString(16), 32), + v: (recid ? 0x1c: 0x1b) + }).freeze(); + } + + computeShardSecret(other: BytesLike): string { + const pubKey = SigningKey.computePublicKey(other); + return hexlify(secp256k1.getSharedSecret(arrayify(this.#privateKey), pubKey)); + } + + static computePublicKey(key: BytesLike, compressed?: boolean): string { + let bytes = logger.getBytes(key, "key"); + + if (bytes.length === 32) { + const pubKey = secp256k1.getPublicKey(bytes, !!compressed); + return hexlify(pubKey); + } + + if (bytes.length === 64) { + const pub = new Uint8Array(65); + pub[0] = 0x04; + pub.set(bytes, 1); + bytes = pub; + } + + const point = secp256k1.Point.fromHex(bytes); + return hexlify(point.toRawBytes(compressed)); + } + + static recoverPublicKey(digest: BytesLike, signature: SignatureLike): string { + const sig = Signature.from(signature); + const der = secp256k1.Signature.fromCompact(arrayify(concat([ sig.r, sig.s ]))).toDERRawBytes(); + + const pubKey = secp256k1.recoverPublicKey(arrayify(digest), der, sig.yParity); + if (pubKey != null) { return hexlify(pubKey); } + + return logger.throwArgumentError("invalid signautre for digest", "signature", signature); + } + + static _addPoints(p0: BytesLike, p1: BytesLike, compressed?: boolean): string { + const pub0 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p0).substring(2)); + const pub1 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p1).substring(2)); + return "0x" + pub0.add(pub1).toHex(!!compressed) + } +} + +/* +const key = new SigningKey("0x1234567890123456789012345678901234567890123456789012345678901234"); +console.log(key); +console.log(key.sign("0x1234567890123456789012345678901234567890123456789012345678901234")); +{ + const privKey = "0x1234567812345678123456781234567812345678123456781234567812345678"; + const signingKey = new SigningKey(privKey); + console.log("0", signingKey, signingKey.publicKey, signingKey.publicKeyCompressed); + + let pubKey = SigningKey.computePublicKey(privKey); + let pubKeyComp = SigningKey.computePublicKey(privKey, true); + let pubKeyRaw = "0x" + SigningKey.computePublicKey(privKey).substring(4); + console.log("A", pubKey, pubKeyComp); + + let a = SigningKey.computePublicKey(pubKey); + let b = SigningKey.computePublicKey(pubKey, true); + console.log("B", a, b); + + a = SigningKey.computePublicKey(pubKeyComp); + b = SigningKey.computePublicKey(pubKeyComp, true); + console.log("C", a, b); + + a = SigningKey.computePublicKey(pubKeyRaw); + b = SigningKey.computePublicKey(pubKeyRaw, true); + console.log("D", a, b); + + const digest = "0x1122334411223344112233441122334411223344112233441122334411223344"; + const sig = signingKey.sign(digest); + console.log("SS", sig, sig.r, sig.s, sig.yParity); + + console.log("R", SigningKey.recoverPublicKey(digest, sig)); +} +*/ diff --git a/packages/signing-key/tsconfig.json b/packages/signing-key/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/signing-key/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/strings/.npmignore b/packages/strings/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/strings/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/strings/package.json b/packages/strings/package.json new file mode 100644 index 000000000..975aafad8 --- /dev/null +++ b/packages/strings/package.json @@ -0,0 +1,33 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1" + }, + "description": "String utility functions.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/strings", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/strings", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/strings/src.ts/_version.ts b/packages/strings/src.ts/_version.ts new file mode 100644 index 000000000..10fecd0a7 --- /dev/null +++ b/packages/strings/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/strings@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/strings/src.ts/bytes32.ts b/packages/strings/src.ts/bytes32.ts new file mode 100644 index 000000000..dbb1019e8 --- /dev/null +++ b/packages/strings/src.ts/bytes32.ts @@ -0,0 +1,36 @@ + +import { zeroPadRight } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; +import { toUtf8Bytes, toUtf8String } from "./utf8.js"; + +import type { BytesLike } from "@ethersproject/logger"; + + +export function formatBytes32String(text: string): string { + + // Get the bytes + const bytes = toUtf8Bytes(text); + + // Check we have room for null-termination + if (bytes.length > 31) { throw new Error("bytes32 string must be less than 32 bytes"); } + + // Zero-pad (implicitly null-terminates) + return zeroPadRight(bytes, 32); +} + +export function parseBytes32String(_bytes: BytesLike): string { + const data = logger.getBytes(_bytes, "bytes"); + + // Must be 32 bytes with a null-termination + if (data.length !== 32) { throw new Error("invalid bytes32 - not 32 bytes long"); } + if (data[31] !== 0) { throw new Error("invalid bytes32 string - no null terminator"); } + + // Find the null termination + let length = 31; + while (data[length - 1] === 0) { length--; } + + // Determine the string value + return toUtf8String(data.slice(0, length)); +} + diff --git a/packages/strings/src.ts/idna.ts b/packages/strings/src.ts/idna.ts new file mode 100644 index 000000000..7e5bdbaf2 --- /dev/null +++ b/packages/strings/src.ts/idna.ts @@ -0,0 +1,214 @@ +import { logger } from "./logger.js"; +import { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from "./utf8.js"; + +type Ranged = { + l: number, // Lo value + h: number, // High value (less the lo) + d?: number, // Delta/stride (default: 1) + s?: number, // Shift (default: 1) + e?: Array // Exceptions to skip +}; + +type Table = { [ src: number ]: Array }; + +function bytes2(data: string): Array { + if ((data.length % 4) !== 0) { + throw new Error("should not happen; bad data"); + } + let result = []; + for (let i = 0; i < data.length; i += 4) { + result.push(parseInt(data.substring(i, i + 4), 16)); + } + return result; +} + +function createTable(data: string, _func?: (value: string) => Array): Table { + const func = _func || function(value: string) { return [ parseInt(value, 16) ]; } + + let lo = 0; + + let result: Table = { }; + data.split(",").forEach((pair) => { + let comps = pair.split(":"); + lo += parseInt(comps[0], 16); + result[lo] = func(comps[1]); + }); + + return result; +} + +function createRangeTable(data: string): Array { + let hi = 0; + return data.split(",").map((v) => { + let comps = v.split("-"); + if (comps.length === 1) { + comps[1] = "0"; + } else if (comps[1] === "") { + comps[1] = "1"; + } + + let lo = hi + parseInt(comps[0], 16); + hi = parseInt(comps[1], 16); + return { l: lo, h: hi }; + }); +} + +function matchMap(value: number, ranges: Array): null | Ranged { + let lo = 0; + for (let i = 0; i < ranges.length; i++) { + let range = ranges[i]; + lo += range.l; + if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) { + if (range.e && range.e.indexOf(value - lo) !== -1) { continue; } + return range; + } + } + return null; +} + +const Table_A_1_ranges = createRangeTable("221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d"); + +// @TODO: Make this relative... +const Table_B_1_flags = "ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff".split(",").map((v) => parseInt(v, 16)); + +const Table_B_2_ranges: Array = [ + { h: 25, s: 32, l: 65 }, + { h: 30, s: 32, e: [ 23 ], l: 127 }, + { h: 54, s: 1, e: [ 48 ], l: 64, d: 2 }, + { h: 14, s: 1, l: 57, d: 2 }, + { h: 44, s: 1, l: 17, d: 2 }, + { h: 10, s: 1, e: [ 2, 6, 8 ], l: 61, d: 2 }, + { h: 16, s: 1, l: 68, d: 2 }, + { h: 84, s: 1, e: [ 18, 24, 66 ], l: 19, d: 2 }, + { h: 26, s: 32, e: [ 17 ], l: 435 }, + { h: 22, s: 1, l: 71, d: 2 }, + { h: 15, s: 80, l: 40 }, + { h: 31, s: 32, l: 16 }, + { h: 32, s: 1, l: 80, d: 2 }, + { h: 52, s: 1, l: 42, d: 2 }, + { h: 12, s: 1, l: 55, d: 2 }, + { h: 40, s: 1, e: [ 38 ], l: 15, d: 2 }, + { h: 14, s: 1, l: 48, d: 2 }, + { h: 37, s: 48, l: 49 }, + { h: 148, s: 1, l: 6351, d: 2 }, + { h: 88, s: 1, l: 160, d: 2 }, + { h: 15, s: 16, l: 704 }, + { h: 25, s: 26, l: 854 }, + { h: 25, s: 32, l: 55915 }, + { h: 37, s: 40, l: 1247 }, + { h: 25, s: -119711, l: 53248 }, + { h: 25, s: -119763, l: 52 }, + { h: 25, s: -119815, l: 52 }, + { h: 25, s: -119867, e: [ 1, 4, 5, 7, 8, 11, 12, 17 ], l: 52 }, + { h: 25, s: -119919, l: 52 }, + { h: 24, s: -119971, e: [ 2, 7, 8, 17 ], l: 52 }, + { h: 24, s: -120023, e: [ 2, 7, 13, 15, 16, 17 ], l: 52 }, + { h: 25, s: -120075, l: 52 }, + { h: 25, s: -120127, l: 52 }, + { h: 25, s: -120179, l: 52 }, + { h: 25, s: -120231, l: 52 }, + { h: 25, s: -120283, l: 52 }, + { h: 25, s: -120335, l: 52 }, + { h: 24, s: -119543, e: [ 17 ], l: 56 }, + { h: 24, s: -119601, e: [ 17 ], l: 58 }, + { h: 24, s: -119659, e: [ 17 ], l: 58 }, + { h: 24, s: -119717, e: [ 17 ], l: 58 }, + { h: 24, s: -119775, e: [ 17 ], l: 58 } +]; +const Table_B_2_lut_abs = createTable("b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3"); +const Table_B_2_lut_rel = createTable("179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7"); +const Table_B_2_complex = createTable("df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D", bytes2); + +const Table_C_ranges = createRangeTable("80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001"); + + +function flatten(values: Array>): Array { + return values.reduce((accum, value) => { + value.forEach((value) => { accum.push(value); }); + return accum; + }, [ ]); +} + +export function _nameprepTableA1(codepoint: number): boolean { + return !!matchMap(codepoint, Table_A_1_ranges); +} + +export function _nameprepTableB2(codepoint: number): null | Array { + const range = matchMap(codepoint, Table_B_2_ranges); + if (range) { + if (range.s == null) { throw new Error("should not happenl bad range"); } + return [ codepoint + range.s ]; + } + + const codes = Table_B_2_lut_abs[codepoint]; + if (codes) { return codes; } + + const shift = Table_B_2_lut_rel[codepoint]; + if (shift) { return [ codepoint + shift[0] ]; } + + const complex = Table_B_2_complex[codepoint]; + if (complex) { return complex; } + + return null; +} + +export function _nameprepTableC(codepoint: number): boolean { + return !!matchMap(codepoint, Table_C_ranges); +} + +export function nameprep(value: string): string { + + // This allows platforms with incomplete normalize to bypass + // it for very basic names which the built-in toLowerCase + // will certainly handle correctly + if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) { return value.toLowerCase(); } + + // Get the code points (keeping the current normalization) + let codes = toUtf8CodePoints(value); + + codes = flatten(codes.map((code) => { + // Substitute Table B.1 (Maps to Nothing) + if (Table_B_1_flags.indexOf(code) >= 0) { return [ ]; } + if (code >= 0xfe00 && code <= 0xfe0f) { return [ ]; } + + // Substitute Table B.2 (Case Folding) + let codesTableB2 = _nameprepTableB2(code); + if (codesTableB2) { return codesTableB2; } + + // No Substitution + return [ code ]; + })); + + // Normalize using form KC + codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC); + + // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9 + codes.forEach((code) => { + if (_nameprepTableC(code)) { + logger.throwArgumentError("STRINGPREP_CONTAINS_PROHIBITED", "value", value); + } + }); + + // Prohibit Unassigned Code Points (Table A.1) + codes.forEach((code) => { + if (_nameprepTableA1(code)) { + logger.throwArgumentError("STRINGPREP_CONTAINS_UNASSIGNED", "value", value); + } + }); + + // IDNA extras + let name = _toUtf8String(codes); + + // IDNA: 4.2.3.1 + if (name.substring(0, 1) === "-" || name.substring(2, 4) === "--" || name.substring(name.length - 1) === "-") { + logger.throwArgumentError("invalid hyphen", "value", value); + } + + // IDNA: 4.2.4 + if (name.length > 63) { + logger.throwArgumentError("too long", "value", value); + } + + return name; +} + diff --git a/packages/strings/src.ts/index.ts b/packages/strings/src.ts/index.ts new file mode 100644 index 000000000..b5b3d5221 --- /dev/null +++ b/packages/strings/src.ts/index.ts @@ -0,0 +1,14 @@ +export { formatBytes32String, parseBytes32String } from "./bytes32.js"; +export { nameprep } from "./idna.js"; +export { + _toEscapedUtf8String, + toUtf8Bytes, + toUtf8CodePoints, + toUtf8String, + + UnicodeNormalizationForm, + Utf8ErrorFuncs, + Utf8ErrorReason +} from "./utf8.js"; + +export type { Utf8ErrorFunc } from "./utf8.js"; diff --git a/packages/strings/src.ts/logger.ts b/packages/strings/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/strings/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/strings/src.ts/utf8.ts b/packages/strings/src.ts/utf8.ts new file mode 100644 index 000000000..75e1167a8 --- /dev/null +++ b/packages/strings/src.ts/utf8.ts @@ -0,0 +1,293 @@ + +import type { BytesLike } from "@ethersproject/logger"; + +import { logger } from "./logger.js"; + + +/////////////////////////////// + +export enum UnicodeNormalizationForm { + current = "", + NFC = "NFC", + NFD = "NFD", + NFKC = "NFKC", + NFKD = "NFKD" +}; + +export enum Utf8ErrorReason { + // A continuation byte was present where there was nothing to continue + // - offset = the index the codepoint began in + UNEXPECTED_CONTINUE = "unexpected continuation byte", + + // An invalid (non-continuation) byte to start a UTF-8 codepoint was found + // - offset = the index the codepoint began in + BAD_PREFIX = "bad codepoint prefix", + + // The string is too short to process the expected codepoint + // - offset = the index the codepoint began in + OVERRUN = "string overrun", + + // A missing continuation byte was expected but not found + // - offset = the index the continuation byte was expected at + MISSING_CONTINUE = "missing continuation byte", + + // The computed code point is outside the range for UTF-8 + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; outside the UTF-8 range + OUT_OF_RANGE = "out of UTF-8 range", + + // UTF-8 strings may not contain UTF-16 surrogate pairs + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range + UTF16_SURROGATE = "UTF-16 surrogate", + + // The string is an overlong representation + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; already bounds checked + OVERLONG = "overlong representation", +}; + + +export type Utf8ErrorFunc = (reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number) => number; + +function errorFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number { + return logger.throwArgumentError(`invalid codepoint at offset ${ offset }; ${ reason }`, "bytes", bytes); +} + +function ignoreFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number { + + // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes + if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) { + let i = 0; + for (let o = offset + 1; o < bytes.length; o++) { + if (bytes[o] >> 6 !== 0x02) { break; } + i++; + } + return i; + } + + // This byte runs us past the end of the string, so just jump to the end + // (but the first byte was read already read and therefore skipped) + if (reason === Utf8ErrorReason.OVERRUN) { + return bytes.length - offset - 1; + } + + // Nothing to skip + return 0; +} + +function replaceFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number { + + // Overlong representations are otherwise "valid" code points; just non-deistingtished + if (reason === Utf8ErrorReason.OVERLONG) { + output.push((badCodepoint != null) ? badCodepoint: -1); + return 0; + } + + // Put the replacement character into the output + output.push(0xfffd); + + // Otherwise, process as if ignoring errors + return ignoreFunc(reason, offset, bytes, output, badCodepoint); +} + +// Common error handing strategies +export const Utf8ErrorFuncs: { [ name: string ]: Utf8ErrorFunc } = Object.freeze({ + error: errorFunc, + ignore: ignoreFunc, + replace: replaceFunc +}); + +// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499 +function getUtf8CodePoints(_bytes: BytesLike, onError?: Utf8ErrorFunc): Array { + if (onError == null) { onError = Utf8ErrorFuncs.error; } + + const bytes = logger.getBytes(_bytes, "bytes"); + + const result: Array = []; + let i = 0; + + // Invalid bytes are ignored + while(i < bytes.length) { + + const c = bytes[i++]; + + // 0xxx xxxx + if (c >> 7 === 0) { + result.push(c); + continue; + } + + // Multibyte; how many bytes left for this character? + let extraLength = null; + let overlongMask = null; + + // 110x xxxx 10xx xxxx + if ((c & 0xe0) === 0xc0) { + extraLength = 1; + overlongMask = 0x7f; + + // 1110 xxxx 10xx xxxx 10xx xxxx + } else if ((c & 0xf0) === 0xe0) { + extraLength = 2; + overlongMask = 0x7ff; + + // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx + } else if ((c & 0xf8) === 0xf0) { + extraLength = 3; + overlongMask = 0xffff; + + } else { + if ((c & 0xc0) === 0x80) { + i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result); + } else { + i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result); + } + continue; + } + + // Do we have enough bytes in our data? + if (i - 1 + extraLength >= bytes.length) { + i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result); + continue; + } + + // Remove the length prefix from the char + let res: null | number = c & ((1 << (8 - extraLength - 1)) - 1); + + for (let j = 0; j < extraLength; j++) { + let nextChar = bytes[i]; + + // Invalid continuation byte + if ((nextChar & 0xc0) != 0x80) { + i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result); + res = null; + break; + }; + + res = (res << 6) | (nextChar & 0x3f); + i++; + } + + // See above loop for invalid continuation byte + if (res === null) { continue; } + + // Maximum code point + if (res > 0x10ffff) { + i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res); + continue; + } + + // Reserved for UTF-16 surrogate halves + if (res >= 0xd800 && res <= 0xdfff) { + i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res); + continue; + } + + // Check for overlong sequences (more bytes than needed) + if (res <= overlongMask) { + i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res); + continue; + } + + result.push(res); + } + + return result; +} + +// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array +export function toUtf8Bytes(str: string, form: UnicodeNormalizationForm = UnicodeNormalizationForm.current): Uint8Array { + + if (form != UnicodeNormalizationForm.current) { + logger.assertNormalize(form); + str = str.normalize(form); + } + + let result = []; + for (let i = 0; i < str.length; i++) { + const c = str.charCodeAt(i); + + if (c < 0x80) { + result.push(c); + + } else if (c < 0x800) { + result.push((c >> 6) | 0xc0); + result.push((c & 0x3f) | 0x80); + + } else if ((c & 0xfc00) == 0xd800) { + i++; + const c2 = str.charCodeAt(i); + + if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) { + throw new Error("invalid utf-8 string"); + } + + // Surrogate Pair + const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); + result.push((pair >> 18) | 0xf0); + result.push(((pair >> 12) & 0x3f) | 0x80); + result.push(((pair >> 6) & 0x3f) | 0x80); + result.push((pair & 0x3f) | 0x80); + + } else { + result.push((c >> 12) | 0xe0); + result.push(((c >> 6) & 0x3f) | 0x80); + result.push((c & 0x3f) | 0x80); + } + } + + return new Uint8Array(result); +}; + +function escapeChar(value: number) { + const hex = ("0000" + value.toString(16)); + return "\\u" + hex.substring(hex.length - 4); +} + +export function _toEscapedUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string { + return '"' + getUtf8CodePoints(bytes, onError).map((codePoint) => { + if (codePoint < 256) { + switch (codePoint) { + case 8: return "\\b"; + case 9: return "\\t"; + case 10: return "\\n" + case 13: return "\\r"; + case 34: return "\\\""; + case 92: return "\\\\"; + } + + if (codePoint >= 32 && codePoint < 127) { + return String.fromCharCode(codePoint); + } + } + + if (codePoint <= 0xffff) { + return escapeChar(codePoint); + } + + codePoint -= 0x10000; + return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00); + }).join("") + '"'; +} + +export function _toUtf8String(codePoints: Array): string { + return codePoints.map((codePoint) => { + if (codePoint <= 0xffff) { + return String.fromCharCode(codePoint); + } + codePoint -= 0x10000; + return String.fromCharCode( + (((codePoint >> 10) & 0x3ff) + 0xd800), + ((codePoint & 0x3ff) + 0xdc00) + ); + }).join(""); +} + +export function toUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string { + return _toUtf8String(getUtf8CodePoints(bytes, onError)); +} + +export function toUtf8CodePoints(str: string, form: UnicodeNormalizationForm = UnicodeNormalizationForm.current): Array { + return getUtf8CodePoints(toUtf8Bytes(str, form)); +} diff --git a/packages/strings/tsconfig.json b/packages/strings/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/strings/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/transactions/.npmignore b/packages/transactions/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/transactions/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/transactions/LICENSE.md b/packages/transactions/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/transactions/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/transactions/package.json b/packages/transactions/package.json new file mode 100644 index 000000000..1c1f7bd80 --- /dev/null +++ b/packages/transactions/package.json @@ -0,0 +1,39 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/rlp": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/signing-key": "^6.0.0-beta.1" + }, + "description": "Ethereum Providers for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/transactions", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/providers", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/transactions/src.ts/_version.ts b/packages/transactions/src.ts/_version.ts new file mode 100644 index 000000000..836a568d9 --- /dev/null +++ b/packages/transactions/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/transactions@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/transactions/src.ts/accesslist.ts b/packages/transactions/src.ts/accesslist.ts new file mode 100644 index 000000000..ca3eb2601 --- /dev/null +++ b/packages/transactions/src.ts/accesslist.ts @@ -0,0 +1,47 @@ +import { getAddress } from "@ethersproject/address"; +import { dataLength } from "@ethersproject/bytes"; + +export type AccessListSet = { address: string, storageKeys: Array }; +export type AccessList = Array; + +// Input allows flexibility in describing an access list +export type AccessListish = AccessList | + Array<[ string, Array ]> | + Record>; + +function accessSetify(addr: string, storageKeys: Array): { address: string,storageKeys: Array } { + return { + address: getAddress(addr), + storageKeys: (storageKeys || []).map((storageKey, index) => { + if (dataLength(storageKey) !== 32) { + //logger.throwArgumentError("invalid access list storageKey", `accessList[${ addr }> + throw new Error(""); + } + return storageKey.toLowerCase(); + }) + }; +} + +export function accessListify(value: AccessListish): AccessList { + if (Array.isArray(value)) { + return (] | { address: string, storageKeys: Array}>>value).map((set, index) => { + if (Array.isArray(set)) { + if (set.length > 2) { + //logger.throwArgumentError("access list expected to be [ address, storageKeys[> + throw new Error(""); + } + return accessSetify(set[0], set[1]) + } + return accessSetify(set.address, set.storageKeys); + }); + } + const result: Array<{ address: string, storageKeys: Array }> = Object.keys(value).map((addr) => { + const storageKeys: Record = value[addr].reduce((accum, storageKey) => { + accum[storageKey] = true; + return accum; + }, >{ }); + return accessSetify(addr, Object.keys(storageKeys).sort()) + }); + result.sort((a, b) => (a.address.localeCompare(b.address))); + return result; +} diff --git a/packages/transactions/src.ts/index.ts b/packages/transactions/src.ts/index.ts new file mode 100644 index 000000000..0089cefaa --- /dev/null +++ b/packages/transactions/src.ts/index.ts @@ -0,0 +1,6 @@ +export { accessListify } from "./accesslist.js"; +export { Transaction } from "./transaction.js"; + +export type { AccessList, AccessListSet, AccessListish } from "./accesslist.js"; + +export type { SignedTransaction, TransactionLike } from "./transaction.js"; diff --git a/packages/transactions/src.ts/logger.ts b/packages/transactions/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/transactions/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/transactions/src.ts/tests/test-transactions.ts b/packages/transactions/src.ts/tests/test-transactions.ts new file mode 100644 index 000000000..6ba6cb1e4 --- /dev/null +++ b/packages/transactions/src.ts/tests/test-transactions.ts @@ -0,0 +1,46 @@ +import assert from "assert"; +import { loadTests } from "./utils.js"; +import type { TestCaseTransaction} from "./types.js"; + + +import { Transaction } from "../index.js"; + + +describe("Tests Transaction Serializing", function() { + const tests = loadTests("transactions"); + for (const test of tests) { + it(`serialized unsigned EIP-155 transaction: ${ test.name }`, function() { + const txData = Object.assign({ }, test.transaction, { type: 0, accessList: undefined, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + + // Use the testcase sans the chainId for a legacy test + if (txData.chainId != null && parseInt(txData.chainId) != 0) { txData.chainId = "0x00"; } + + const tx = Transaction.from(txData); + assert.equal(tx.unsignedSerialized, test.unsignedLegacy, "unsignedLegacy"); + }); + + // Unsupported parameters for EIP-155; i.e. unspecified chain ID + if (test.unsignedEip155) { + it(`serialized unsigned EIP-155 transaction: ${ test.name }`, function() { + const txData = Object.assign({ }, test.transaction, { type: 0, accessList: undefined, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + const tx = Transaction.from(txData); + assert.equal(tx.unsignedSerialized, test.unsignedEip155, "unsignedEip155"); + }); + } + + it(`serialized unsigned Berlin transaction: ${ test.name }`, function() { + const txData = Object.assign({ }, test.transaction, { type: 1, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + const tx = Transaction.from(txData); //Object.assign({ }, txData, { type: 1, maxFeePerGas: undefined })); + assert.equal(tx.unsignedSerialized, test.unsignedBerlin, "unsignedBerlin"); + }); + + it(`serialized unsigned London transaction: ${ test.name }`, function() { + const txData = test.transaction; + const tx = Transaction.from({ type: 2, ...txData }); + assert.equal(tx.unsignedSerialized, test.unsignedLondon, "unsignedLondon"); + }); + } +}); + +describe("Tests Transaction Parsing", function() { +}); diff --git a/packages/transactions/src.ts/tests/types.ts b/packages/transactions/src.ts/tests/types.ts new file mode 100644 index 000000000..04bee593e --- /dev/null +++ b/packages/transactions/src.ts/tests/types.ts @@ -0,0 +1,31 @@ +export interface TestCaseTransactionTx { + to?: string; + nonce?: number; + gasLimit?: string; + + gasPrice?: string; + maxFeePerGas?: string; + maxPriorityFeePerGas?: string; + + data?: string; + value?: string; + + accessList?: Array<{ address: string, storageKeys: Array }>; + + chainId?: string; +} + +export interface TestCaseTransaction { + name: string; + transaction: TestCaseTransactionTx; + privateKey: string; + + unsignedLegacy: string; + signedLegacy: string; + unsignedEip155: string; + signedEip155: string; + unsignedBerlin: string; + signedBerlin: string; + unsignedLondon: string; + signedLondon: string; +} diff --git a/packages/transactions/src.ts/tests/utils.ts b/packages/transactions/src.ts/tests/utils.ts new file mode 100644 index 000000000..b40517e1b --- /dev/null +++ b/packages/transactions/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/transactions/src.ts/transaction.ts b/packages/transactions/src.ts/transaction.ts new file mode 100644 index 000000000..78880c85b --- /dev/null +++ b/packages/transactions/src.ts/transaction.ts @@ -0,0 +1,498 @@ + +import { getAddress } from "@ethersproject/address"; +import { arrayify, BytesLike, concat, hexlify } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { toArray } from "@ethersproject/math"; +import { getStore, setStore } from "@ethersproject/properties"; +import { encodeRlp } from "@ethersproject/rlp"; +import { Signature, SignatureLike } from "@ethersproject/signing-key"; + +import { accessListify } from "./accesslist.js"; +import { logger } from "./logger.js"; + +import type { BigNumberish } from "@ethersproject/logger"; +import type { Freezable, Frozen } from "@ethersproject/properties"; + +import type { AccessList, AccessListish } from "./accesslist.js"; + + +const BN_0 = BigInt(0); + +export interface TransactionLike { + type?: null | number; + + to?: null | A; + from?: null | A; + + nonce?: null | number; + + gasLimit?: null | BigNumberish; + gasPrice?: null | BigNumberish; + + maxPriorityFeePerGas?: null | BigNumberish; + maxFeePerGas?: null | BigNumberish; + + data?: null | string; + value?: null | BigNumberish; + chainId?: null | BigNumberish; + + hash?: null | string; + + signature?: null | SignatureLike; + + accessList?: null | AccessListish; +} + +function formatNumber(_value: BigNumberish, name: string): Uint8Array { + const value = logger.getBigInt(_value, "value"); + const result = toArray(value); + if (result.length > 32) { + logger.throwArgumentError(`value too large`, `tx.${ name }`, value); + } + return result; +} + +function formatAccessList(value: AccessListish): Array<[ string, Array ]> { + return accessListify(value).map((set) => [ set.address, set.storageKeys ]); +} + +function _parseLegacy(data: Uint8Array): TransactionLike { + return { }; +} + +function _serializeLegacy(tx: Transaction, sig?: Signature): string { + const fields: Array = [ + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.gasPrice || 0, "gasPrice"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to): "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + ]; + + let chainId = BN_0; + if (tx.chainId != null) { + // A chainId was provided; if non-zero we'll use EIP-155 + chainId = logger.getBigInt(tx.chainId, "tx.chainId"); + + // We have a chainId in the tx and an EIP-155 v in the signature, + // make sure they agree with each other + if (sig && sig.networkV != null && sig.legacyChainId !== chainId) { + logger.throwArgumentError("tx.chainId/sig.v mismatch", "sig", sig); + } + + } else if (sig) { + // No chainId provided, but the signature is signing with EIP-155; derive chainId + const legacy = sig.legacyChainId; + if (legacy != null) { chainId = legacy; } + } + + // Requesting an unsigned transaction + if (!sig) { + // We have an EIP-155 transaction (chainId was specified and non-zero) + if (chainId !== BN_0) { + fields.push(toArray(chainId)); + fields.push("0x"); + fields.push("0x"); + } + + return encodeRlp(fields); + } + + // We pushed a chainId and null r, s on for hashing only; remove those + let v = BigInt(27 + sig.yParity); + if (chainId !== BN_0) { + v = Signature.getChainIdV(chainId, sig.v); + } else if (BigInt(sig.v) !== v) { + logger.throwArgumentError("tx.chainId/sig.v mismatch", "sig", sig); + } + + fields.push(toArray(v)); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + + return encodeRlp(fields); +} + +function _parseEip1559(data: Uint8Array): TransactionLike { + throw new Error("@TODO"); +} + +function _serializeEip1559(tx: Transaction, sig?: Signature): string { + // If there is an explicit gasPrice, make sure it matches the + // EIP-1559 fees; otherwise they may not understand what they + // think they are setting in terms of fee. + //if (tx.gasPrice != null) { + // if (tx.gasPrice !== (tx.maxFeePerGas || BN_0)) { + // logger.throwArgumentError("mismatch EIP-1559 gasPrice != maxFeePerGas", "tx", tx); + // } + //} + const fields: Array = [ + formatNumber(tx.chainId || 0, "chainId"), + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.maxPriorityFeePerGas || 0, "maxPriorityFeePerGas"), + formatNumber(tx.maxFeePerGas || 0, "maxFeePerGas"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to): "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + (formatAccessList(tx.accessList || [])) + ]; + + if (sig) { + fields.push(formatNumber(sig.yParity, "yParity")); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + } + + return concat([ "0x02", encodeRlp(fields)]); +} + +function _parseEip2930(data: Uint8Array): TransactionLike { + throw new Error("@TODO"); +} + +function _serializeEip2930(tx: Transaction, sig?: Signature): string { + const fields: any = [ + formatNumber(tx.chainId || 0, "chainId"), + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.gasPrice || 0, "gasPrice"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to): "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + (formatAccessList(tx.accessList || [])) + ]; + + if (sig) { + fields.push(formatNumber(sig.yParity, "recoveryParam")); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + } + + return concat([ "0x01", encodeRlp(fields)]); +} + +export interface SignedTransaction extends Transaction { + type: number; + typeName: string; + signature: Signature; +} + +export class Transaction implements Freezable, TransactionLike { + #props: { + type: null | number, + to: null | string, + data: string, + nonce: number, + gasLimit: bigint, + gasPrice: null | bigint, + maxPriorityFeePerGas: null | bigint, + maxFeePerGas: null | bigint, + value: bigint, + chainId: bigint, + sig: null | Signature, + accessList: null | AccessList + }; + + // A type of null indicates the type will be populated automatically + get type(): null | number { return getStore(this.#props, "type"); } + get typeName(): null | string { + switch (this.type) { + case 0: return "legacy"; + case 1: return "eip-2930"; + case 2: return "eip-1559"; + } + + return null; + } + set type(value: null | number | string) { + switch (value) { + case null: + setStore(this.#props, "type", null); + break; + case 0: case "legacy": + setStore(this.#props, "type", 0); + break; + case 1: case "berlin": case "eip-2930": + setStore(this.#props, "type", 1); + break; + case 2: case "london": case "eip-1559": + setStore(this.#props, "type", 2); + break; + default: + throw new Error(`unsupported transaction type`); + } + } + + /* + detectType(): number { + const hasFee = (this.maxFeePerGas != null) || (this.maxPriorityFeePerGas != null); + const hasAccessList = (this.accessList != null); + const hasLegacy = (this.gasPrice != null); + + if (hasLegacy) { + if (hasFee) { + throw new Error("cannot mix legacy and london properties"); + } + if (hasAccessList) { return 1; } + return 0; + } + + return 2; + } + */ + + get to(): null | string { return getStore(this.#props, "to"); } + set to(value: null | string) { + setStore(this.#props, "to", (value == null) ? null: getAddress(value)); + } + + get nonce(): number { return getStore(this.#props, "nonce"); } + set nonce(value: BigNumberish) { setStore(this.#props, "nonce", logger.getNumber(value, "value")); } + + get gasLimit(): bigint { return getStore(this.#props, "gasLimit"); } + set gasLimit(value: BigNumberish) { setStore(this.#props, "gasLimit", logger.getBigInt(value)); } + + get gasPrice(): null | bigint { return getStore(this.#props, "gasPrice"); } + set gasPrice(value: null | BigNumberish) { + setStore(this.#props, "gasPrice", (value == null) ? null: logger.getBigInt(value)); + } + + get maxPriorityFeePerGas(): null | bigint { return getStore(this.#props, "maxPriorityFeePerGas"); } + set maxPriorityFeePerGas(value: null | BigNumberish) { + setStore(this.#props, "maxPriorityFeePerGas", (value == null) ? null: logger.getBigInt(value)); + } + + get maxFeePerGas(): null | bigint { return getStore(this.#props, "maxFeePerGas"); } + set maxFeePerGas(value: null | BigNumberish) { + setStore(this.#props, "maxFeePerGas", (value == null) ? null: logger.getBigInt(value)); + } + + get data(): string { return getStore(this.#props, "data"); } + set data(value: BytesLike) { setStore(this.#props, "data", hexlify(value)); } + + get value(): bigint { return getStore(this.#props, "value"); } + set value(value: BigNumberish) { + setStore(this.#props, "value", logger.getBigInt(value)); + } + + get chainId(): bigint { return getStore(this.#props, "chainId"); } + set chainId(value: BigNumberish) { setStore(this.#props, "chainId", logger.getBigInt(value)); } + + get signature(): null | Signature { return getStore(this.#props, "sig") || null; } + set signature(value: null | SignatureLike) { + setStore(this.#props, "sig", (value == null) ? null: Signature.from(value)); + } + + get accessList(): null | AccessList { return getStore(this.#props, "accessList") || null; } + set accessList(value: null | AccessListish) { + setStore(this.#props, "accessList", (value == null) ? null: accessListify(value)); + } + + constructor() { + this.#props = { + type: null, + to: null, + nonce: 0, + gasLimit: BigInt(0), + gasPrice: null, + maxPriorityFeePerGas: null, + maxFeePerGas: null, + data: "0x", + value: BigInt(0), + chainId: BigInt(0), + sig: null, + accessList: null + }; + } + + get hash(): null | string { + if (this.signature == null) { + throw new Error("cannot hash unsigned transaction; maybe you meant .unsignedHash"); + } + return keccak256(this.serialized); + } + + get unsignedHash(): string { + return keccak256(this.unsignedSerialized); + } + + get from(): null | string { + if (this.signature == null) { return null; } + // use ecomputeAddress(this.fromPublicKey); + return ""; + } + + get fromPublicKey(): null | string { + if (this.signature == null) { return null; } + // use ecrecover + return ""; + } + + isSigned(): this is SignedTransaction { + return this.signature != null; + } + + get serialized(): string { + if (this.signature == null) { + throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized"); + } + + const types = this.inferTypes(); + if (types.length !== 1) { + throw new Error("cannot determine transaction type; specify type manually"); + } + + switch (types[0]) { + case 0: + return _serializeLegacy(this, this.signature); + case 1: + return _serializeEip2930(this, this.signature); + case 2: + return _serializeEip1559(this, this.signature); + } + + throw new Error("unsupported type"); + } + + get unsignedSerialized(): string { + if (this.signature != null) { + throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized"); + } + + const types = this.inferTypes(); + if (types.length !== 1) { + throw new Error("cannot determine transaction type; specify type manually"); + } + + switch (types[0]) { + case 0: + return _serializeLegacy(this); + case 1: + return _serializeEip2930(this); + case 2: + return _serializeEip1559(this); + } + + throw new Error("unsupported type"); + } + + // Validates properties and lists possible types this transaction adheres to + inferTypes(): Array { + + // Checks that there are no conflicting properties set + const hasGasPrice = this.gasPrice != null; + const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null); + const hasAccessList = (this.accessList != null); + + //if (hasGasPrice && hasFee) { + // throw new Error("transaction cannot have gasPrice and maxFeePerGas"); + //} + + if (!!this.maxFeePerGas && !!this.maxPriorityFeePerGas) { + if (this.maxFeePerGas < this.maxPriorityFeePerGas) { + throw new Error("priorityFee cannot be more than maxFee"); + } + } + + //if (this.type === 2 && hasGasPrice) { + // throw new Error("eip-1559 transaction cannot have gasPrice"); + //} + + if ((this.type === 0 || this.type === 1) && hasFee) { + throw new Error("transaction type cannot have maxFeePerGas or maxPriorityFeePerGas"); + } + + if (this.type === 0 && hasAccessList) { + throw new Error("legacy transaction cannot have accessList"); + } + + const types: Array = [ ]; + + // Explicit type + if (this.type != null) { + types.push(this.type); + + } else { + if (hasFee) { + types.push(2); + } else if (hasGasPrice) { + types.push(1); + if (!hasAccessList) { types.push(0); } + } else if (hasAccessList) { + types.push(1); + types.push(2); + } else { + types.push(0); + types.push(1); + types.push(2); + } + } + + types.sort(); + + return types; + } + + clone(): Transaction { + return Transaction.from(this); + } + + freeze(): Frozen { + if (this.#props.sig) { + this.#props.sig = (this.#props.sig.clone().freeze()); + } + + if (this.#props.accessList) { + this.#props.accessList = Object.freeze(this.#props.accessList.map((set) => { + Object.freeze(set.storageKeys); + return Object.freeze(set); + })); + } + + Object.freeze(this.#props); + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } + + static from(tx: string | TransactionLike): Transaction { + if (typeof(tx) === "string") { + const payload = arrayify(tx); + + if (payload[0] >= 0x7f) { // @TODO: > vs >= ?? + return Transaction.from(_parseLegacy(payload)); + } + + switch(payload[0]) { + case 1: return Transaction.from(_parseEip2930(payload.slice(1))); + case 2: return Transaction.from(_parseEip1559(payload.slice(1))); + } + + throw new Error("unsupported transaction type"); + } + + const result = new Transaction(); + if (tx.type != null) { result.type = tx.type; } + if (tx.to != null) { result.to = tx.to; } + if (tx.nonce != null) { result.nonce = tx.nonce; } + if (tx.gasLimit != null) { result.gasLimit = tx.gasLimit; } + if (tx.gasPrice != null) { result.gasPrice = tx.gasPrice; } + if (tx.maxPriorityFeePerGas != null) { result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas; } + if (tx.maxFeePerGas != null) { result.maxFeePerGas = tx.maxFeePerGas; } + if (tx.data != null) { result.data = tx.data; } + if (tx.value != null) { result.value = tx.value; } + if (tx.chainId != null) { result.chainId = tx.chainId; } + if (tx.signature != null) { result.signature = Signature.from(tx.signature); } + if (tx.accessList != null) { result.accessList = tx.accessList; } + + // Should these be checked?? Should from be allowed if there is no signature? + // from?: null | A; + // hash?: null | string; + + return result; + } +} diff --git a/packages/transactions/tsconfig.json b/packages/transactions/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/transactions/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/wallet/LICENSE.md b/packages/wallet/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/wallet/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/wallet/package.json b/packages/wallet/package.json new file mode 100644 index 000000000..fe055b1d2 --- /dev/null +++ b/packages/wallet/package.json @@ -0,0 +1,42 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/hash": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/providers": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1", + "@ethersproject/signing-key": "^6.0.0-beta.1", + "@ethersproject/transactions": "^6.0.0-beta.1", + "@ethersproject/wordlists": "^6.0.0-beta.1", + "aes-js": "4.0.0-beta.2" + }, + "description": "Manage, encrypt and decrypt Ethereum Wallets.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/wallet", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/wallet", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/wallet/src.ts/_version.ts b/packages/wallet/src.ts/_version.ts new file mode 100644 index 000000000..aaa0b26f9 --- /dev/null +++ b/packages/wallet/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/wallet@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/wallet/src.ts/address.ts b/packages/wallet/src.ts/address.ts new file mode 100644 index 000000000..d1c409f1e --- /dev/null +++ b/packages/wallet/src.ts/address.ts @@ -0,0 +1,8 @@ +import { getAddress } from "@ethersproject/address"; +import { keccak256 } from "@ethersproject/crypto"; +import { SigningKey } from "@ethersproject/signing-key"; + +export function computeAddress(key: string): string { + const publicKey = SigningKey.computePublicKey(key, false); + return getAddress(keccak256("0x" + publicKey.substring(4)).substring(26)); +} diff --git a/packages/wallet/src.ts/base-wallet.ts b/packages/wallet/src.ts/base-wallet.ts new file mode 100644 index 000000000..0068298db --- /dev/null +++ b/packages/wallet/src.ts/base-wallet.ts @@ -0,0 +1,87 @@ +import { getAddress, resolveAddress } from "@ethersproject/address"; +import { hashMessage, TypedDataEncoder } from "@ethersproject/hash"; +import { defineProperties, resolveProperties } from "@ethersproject/properties"; +import { AbstractSigner } from "@ethersproject/providers"; +import { Transaction } from "@ethersproject/transactions"; + +import { computeAddress } from "./address.js"; +import { logger } from "./logger.js"; + +import type { TypedDataDomain, TypedDataField } from "@ethersproject/hash"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { SigningKey } from "@ethersproject/signing-key"; +import type { TransactionLike } from "@ethersproject/transactions"; + + +export class BaseWallet extends AbstractSigner { + readonly address!: string; + + readonly #signingKey: SigningKey; + + constructor(privateKey: SigningKey, provider?: null | Provider) { + super(provider); + this.#signingKey = privateKey; + + const address = computeAddress(this.signingKey.publicKey); + defineProperties(this, { address }); + } + + // Store these in getters to reduce visibility in console.log + get signingKey(): SigningKey { return this.#signingKey; } + get privateKey(): string { return this.signingKey.privateKey; } + + async getAddress(): Promise { return this.address; } + + connect(provider: null | Provider): BaseWallet { + return new BaseWallet(this.#signingKey, provider); + } + + async signTransaction(_tx: TransactionRequest): Promise { + // Replace any Addressable or ENS name with an address + const tx = >Object.assign({ }, _tx, await resolveProperties({ + to: (_tx.to ? resolveAddress(_tx.to, this.provider): undefined), + from: (_tx.from ? resolveAddress(_tx.from, this.provider): undefined) + })); + + if (tx.from != null) { + if (getAddress(tx.from) !== this.address) { + logger.throwArgumentError("transaction from address mismatch", "tx.from", _tx.from); + } + delete tx.from; + } + + // Build the transaction + const btx = Transaction.from(tx); + btx.signature = this.signingKey.sign(btx.unsignedHash); + + return btx.serialized; + } + + async signMessage(message: string | Uint8Array): Promise { + return this.signingKey.sign(hashMessage(message)).serialized; + } + + async signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise { + + // Populate any ENS names + const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name: string) => { + if (this.provider == null) { + return logger.throwError("cannot resolve ENS names without a provider", "UNSUPPORTED_OPERATION", { + operation: "resolveName", + info: { name } + }); + } + + const address = await this.provider.resolveName(name); + if (address == null) { + return logger.throwError("unconfigured ENS name", "UNCONFIGURED_NAME", { + value: name + }); + } + + return address; + }); + + return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized; + } +} diff --git a/packages/wallet/src.ts/hdwallet.ts b/packages/wallet/src.ts/hdwallet.ts new file mode 100644 index 000000000..872f5ac39 --- /dev/null +++ b/packages/wallet/src.ts/hdwallet.ts @@ -0,0 +1,354 @@ +import { arrayify, concat, dataSlice, hexlify } from "@ethersproject/bytes"; +import { computeHmac, randomBytes, ripemd160, sha256 } from "@ethersproject/crypto"; +import { decodeBase58, encodeBase58, toBigInt, toHex } from "@ethersproject/math"; +import { defineProperties } from "@ethersproject/properties"; +import { VoidSigner } from "@ethersproject/providers"; +import { SigningKey } from "@ethersproject/signing-key"; +import { langEn } from "@ethersproject/wordlists/lib/lang-en.js"; + +import { computeAddress } from "./address.js"; +import { logger } from "./logger.js"; +import { Mnemonic } from "./mnemonic.js"; +import { BaseWallet } from "./base-wallet.js"; + +import type { BytesLike, Numeric } from "@ethersproject/logger"; +import type { Provider } from "@ethersproject/providers"; +import type { Wordlist } from "@ethersproject/wordlists"; + + +export const defaultPath = "m/44'/60'/0'/0/0"; + + +// "Bitcoin seed" +const MasterSecret = new Uint8Array([ 66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100 ]); + +const HardenedBit = 0x80000000; + +const N = BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"); + +const Nibbles = "0123456789abcdef"; +function zpad(value: number, length: number): string { + let result = ""; + while (value) { + result = Nibbles[value % 16] + result; + value = Math.trunc(value / 16); + } + while (result.length < length * 2) { result = "0" + result; } + return "0x" + result; +} + +function encodeBase58Check(_value: BytesLike): string { + const value = logger.getBytes(_value); + const check = dataSlice(sha256(sha256(value)), 0, 4); + const bytes = concat([ value, check ]); + return encodeBase58(bytes); +} + +const _guard = { }; + +function ser_I(index: number, chainCode: string, publicKey: string, privateKey: null | string): { IL: Uint8Array, IR: Uint8Array } { + const data = new Uint8Array(37); + + if (index & HardenedBit) { + if (privateKey == null) { + return logger.throwError("cannot derive child of neutered node", "UNSUPPORTED_OPERATION", { + operation: "deriveChild" + }); + } + + // Data = 0x00 || ser_256(k_par) + data.set(arrayify(privateKey), 1); + + } else { + // Data = ser_p(point(k_par)) + data.set(arrayify(publicKey)); + } + + // Data += ser_32(i) + for (let i = 24; i >= 0; i -= 8) { data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); } + const I = arrayify(computeHmac("sha512", chainCode, data)); + + return { IL: I.slice(0, 32), IR: I.slice(32) }; +} + +type HDNodeLike = { depth: number, deriveChild: (i: number) => T }; +function derivePath>(node: T, path: string): T { + const components = path.split("/"); + + if (components.length === 0 || (components[0] === "m" && node.depth !== 0)) { + throw new Error("invalid path - " + path); + } + + if (components[0] === "m") { components.shift(); } + + let result: T = node; + for (let i = 0; i < components.length; i++) { + const component = components[i]; + + if (component.match(/^[0-9]+'$/)) { + const index = parseInt(component.substring(0, component.length - 1)); + if (index >= HardenedBit) { throw new Error("invalid path index - " + component); } + result = result.deriveChild(HardenedBit + index); + + } else if (component.match(/^[0-9]+$/)) { + const index = parseInt(component); + if (index >= HardenedBit) { throw new Error("invalid path index - " + component); } + result = result.deriveChild(index); + + } else { + throw new Error("invalid path component - " + component); + } + } + + return result; +} + + +export interface HDNodeWithPath { + path: string; +} + +export class HDNodeWallet extends BaseWallet { + readonly publicKey!: string; + + readonly fingerprint!: string; + readonly parentFingerprint!: string; + + readonly mnemonic!: null | Mnemonic; + + readonly chainCode!: string; + + readonly path!: null | string; + readonly index!: number; + readonly depth!: number; + + constructor(guard: any, signingKey: SigningKey, parentFingerprint: string, chainCode: string, path: null | string, index: number, depth: number, mnemonic: null | Mnemonic, provider: null | Provider) { + super(signingKey, provider); + logger.assertPrivate(guard, _guard, "HDNodeWallet"); + + defineProperties(this, { publicKey: signingKey.compressedPublicKey }); + + const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4); + defineProperties(this, { + parentFingerprint, fingerprint, + chainCode, path, index, depth + }); + + defineProperties(this, { mnemonic }); + } + + connect(provider: null | Provider): HDNodeWallet { + return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint, + this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider); + } + + get extendedKey(): string { + // We only support the mainnet values for now, but if anyone needs + // testnet values, let me know. I believe current sentiment is that + // we should always use mainnet, and use BIP-44 to derive the network + // - Mainnet: public=0x0488B21E, private=0x0488ADE4 + // - Testnet: public=0x043587CF, private=0x04358394 + + if (this.depth >= 256) { throw new Error("Depth too large!"); } + + return encodeBase58Check(concat([ + "0x0488ADE4", zpad(this.depth, 1), this.parentFingerprint, + zpad(this.index, 4), this.chainCode, + concat([ "0x00", this.privateKey ]) + ])); + } + + hasPath(): this is { path: string } { return (this.path != null); } + + neuter(): HDNodeVoidWallet { + return new HDNodeVoidWallet(_guard, this.address, this.publicKey, + this.parentFingerprint, this.chainCode, this.path, this.index, + this.depth, this.provider); + } + + deriveChild(_index: Numeric): HDNodeWallet { + const index = logger.getNumber(_index, "index"); + if (index > 0xffffffff) { throw new Error("invalid index - " + String(index)); } + + // Base path + let path = this.path; + if (path) { + path += "/" + (index & ~HardenedBit); + if (index & HardenedBit) { path += "'"; } + } + + const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey); + const ki = new SigningKey(toHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32)); + + return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR), + path, index, this.depth + 1, this.mnemonic, this.provider); + + } + + derivePath(path: string): HDNodeWallet { + return derivePath(this, path); + } + + static #fromSeed(_seed: BytesLike, mnemonic: null | Mnemonic): HDNodeWallet { + const seed = logger.getBytes(_seed, "seed"); + if (seed.length < 16 || seed.length > 64) { + throw new Error("invalid seed"); + } + + const I: Uint8Array = arrayify(computeHmac("sha512", MasterSecret, seed)); + const signingKey = new SigningKey(hexlify(I.slice(0, 32))); + + return new HDNodeWallet(_guard, signingKey, "0x00000000", hexlify(I.slice(32)), + "m", 0, 0, mnemonic, null); + } + + static fromSeed(seed: BytesLike): HDNodeWallet { + return HDNodeWallet.#fromSeed(seed, null); + } + + static fromPhrase(phrase: string, password = "", path: null | string = defaultPath, wordlist: Wordlist = langEn): HDNodeWallet { + if (!path) { path = defaultPath; } + const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist) + return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path); + } + + static fromMnemonic(mnemonic: Mnemonic, path: null | string = defaultPath): HDNodeWallet { + if (!path) { path = defaultPath; } + return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path); + } + + static fromExtendedKey(extendedKey: string): HDNodeWallet | HDNodeVoidWallet { + const bytes = arrayify(decodeBase58(extendedKey)); // @TODO: redact + + if (bytes.length !== 82 || encodeBase58Check(bytes.slice(0, 78)) !== extendedKey) { + logger.throwArgumentError("invalid extended key", "extendedKey", "[ REDACTED ]"); + } + + const depth = bytes[4]; + const parentFingerprint = hexlify(bytes.slice(5, 9)); + const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16); + const chainCode = hexlify(bytes.slice(13, 45)); + const key = bytes.slice(45, 78); + + switch (hexlify(bytes.slice(0, 4))) { + // Public Key + case "0x0488b21e": case "0x043587cf": { + const publicKey = hexlify(key); + return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey, + parentFingerprint, chainCode, null, index, depth, null); + } + + // Private Key + case "0x0488ade4": case "0x04358394 ": + if (key[0] !== 0) { break; } + return new HDNodeWallet(_guard, new SigningKey(key.slice(1)), + parentFingerprint, chainCode, null, index, depth, null, null); + } + + + return logger.throwArgumentError("invalid extended key prefix", "extendedKey", "[ REDACTED ]"); + } + + static createRandom(password = "", path: null | string = defaultPath, wordlist: Wordlist = langEn): HDNodeWallet { + if (!path) { path = defaultPath; } + const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist) + return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path); + } +} + +export class HDNodeVoidWallet extends VoidSigner { + readonly publicKey!: string; + + readonly fingerprint!: string; + readonly parentFingerprint!: string; + + readonly chainCode!: string; + + readonly path!: null | string; + readonly index!: number; + readonly depth!: number; + + constructor(guard: any, address: string, publicKey: string, parentFingerprint: string, chainCode: string, path: null | string, index: number, depth: number, provider: null | Provider) { + super(address, provider); + logger.assertPrivate(guard, _guard, "HDNodeVoidWallet"); + + defineProperties(this, { publicKey }); + + const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4); + defineProperties(this, { + publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth + }); + } + + connect(provider: null | Provider): HDNodeVoidWallet { + return new HDNodeVoidWallet(_guard, this.address, this.publicKey, + this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider); + } + + get extendedKey(): string { + // We only support the mainnet values for now, but if anyone needs + // testnet values, let me know. I believe current sentiment is that + // we should always use mainnet, and use BIP-44 to derive the network + // - Mainnet: public=0x0488B21E, private=0x0488ADE4 + // - Testnet: public=0x043587CF, private=0x04358394 + + if (this.depth >= 256) { throw new Error("Depth too large!"); } + + return encodeBase58Check(concat([ + "0x0488B21E", + zpad(this.depth, 1), + this.parentFingerprint, + zpad(this.index, 4), + this.chainCode, + this.publicKey, + ])); + } + + hasPath(): this is { path: string } { return (this.path != null); } + + deriveChild(_index: Numeric): HDNodeVoidWallet { + const index = logger.getNumber(_index, "index"); + if (index > 0xffffffff) { throw new Error("invalid index - " + String(index)); } + + // Base path + let path = this.path; + if (path) { + path += "/" + (index & ~HardenedBit); + if (index & HardenedBit) { path += "'"; } + } + + const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null); + const Ki = SigningKey._addPoints(IL, this.publicKey, true); + + const address = computeAddress(Ki); + + return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR), + path, index, this.depth + 1, this.provider); + + } + + derivePath(path: string): HDNodeVoidWallet { + return derivePath(this, path); + } +} + +export class HDNodeWalletManager { + #root: HDNodeWallet; + + constructor(phrase: string, password = "", path = "m/44'/60'/0'/0", locale: Wordlist = langEn) { + this.#root = HDNodeWallet.fromPhrase(phrase, password, path, locale); + } + + getSigner(index = 0): HDNodeWallet { + return this.#root.deriveChild(index); + } +} + +export function getAccountPath(_index: Numeric): string { + const index = logger.getNumber(_index, "index"); + if (index < 0 || index >= HardenedBit) { + logger.throwArgumentError("invalid account index", "index", index); + } + return `m/44'/60'/${ index }'/0/0`; +} + diff --git a/packages/wallet/src.ts/index.ts b/packages/wallet/src.ts/index.ts new file mode 100644 index 000000000..79dc0fc3f --- /dev/null +++ b/packages/wallet/src.ts/index.ts @@ -0,0 +1,23 @@ +export { computeAddress } from "./address.js"; +export { + defaultPath, + + getAccountPath, + + HDNodeWallet, + HDNodeVoidWallet, + HDNodeWalletManager, +} from "./hdwallet.js"; +export { isCrowdsaleJson, decryptCrowdsaleJson } from "./json-crowdsale.js"; +export { + isKeystoreJson, + decryptKeystoreJsonSync, decryptKeystoreJson, + encryptKeystoreJson +} from "./json-keystore.js"; +export { Mnemonic } from "./mnemonic.js"; +export { Wallet } from "./wallet.js"; + +export type { + KeystoreAccountParams, KeystoreAccount, + EncryptOptions +} from "./json-keystore.js" diff --git a/packages/wallet/src.ts/json-crowdsale.ts b/packages/wallet/src.ts/json-crowdsale.ts new file mode 100644 index 000000000..145be4035 --- /dev/null +++ b/packages/wallet/src.ts/json-crowdsale.ts @@ -0,0 +1,54 @@ +import { CBC, pkcs7Strip } from "aes-js"; + +import { getAddress } from "@ethersproject/address"; +import { arrayify } from "@ethersproject/bytes"; +import { pbkdf2 } from "@ethersproject/crypto"; +import { id } from "@ethersproject/hash"; + +import { logger } from "./logger.js"; +import { getPassword, looseArrayify, spelunk } from "./utils.js"; + +export interface CrowdsaleAccount { + privateKey: string; + address: string; +} + +export function isCrowdsaleJson(json: string): boolean { + try { + const data = JSON.parse(json); + if (data.encseed) { return true; } + } catch (error) { } + return false; +} + +// See: https://github.com/ethereum/pyethsaletool +export function decryptCrowdsaleJson(json: string, _password: string | Uint8Array): CrowdsaleAccount { + const data = JSON.parse(json); + const password = getPassword(_password); + + // Ethereum Address + const address = getAddress(spelunk(data, "ethaddr:string!")); + + // Encrypted Seed + const encseed = looseArrayify(spelunk(data, "encseed:string!")); + if (!encseed || (encseed.length % 16) !== 0) { + logger.throwArgumentError("invalid encseed", "json", json); + } + + const key = arrayify(pbkdf2(password, password, 2000, 32, "sha256")).slice(0, 16); + + const iv = encseed.slice(0, 16); + const encryptedSeed = encseed.slice(16); + + // Decrypt the seed + const aesCbc = new CBC(key, iv); + const seed = pkcs7Strip(arrayify(aesCbc.decrypt(encryptedSeed))); + + // This wallet format is weird... Convert the binary encoded hex to a string. + let seedHex = ""; + for (let i = 0; i < seed.length; i++) { + seedHex += String.fromCharCode(seed[i]); + } + + return { address, privateKey: id(seedHex) }; +} diff --git a/packages/wallet/src.ts/json-keystore.ts b/packages/wallet/src.ts/json-keystore.ts new file mode 100644 index 000000000..31860d044 --- /dev/null +++ b/packages/wallet/src.ts/json-keystore.ts @@ -0,0 +1,369 @@ +import { CTR } from "aes-js"; + +import { getAddress } from "@ethersproject/address"; +import { arrayify, concat, hexlify } from "@ethersproject/bytes"; +import { keccak256, pbkdf2, randomBytes, scrypt, scryptSync } from "@ethersproject/crypto"; + +import { computeAddress } from "./address.js"; +import { logger } from "./logger.js"; + +import { getPassword, spelunk, uuidV4, zpad } from "./utils.js"; + +import type { ProgressCallback } from "@ethersproject/crypto"; +import type { BytesLike } from "@ethersproject/logger"; + +import { version } from "./_version.js"; + +const defaultPath = "m/44'/60'/0'/0/0"; + + +export type KeystoreAccountParams = { + privateKey: string; + address?: string; + mnemonic?: { + entropy: string; + path: string; + locale: string; + }; +}; + +export type KeystoreAccount = { + address: string; + privateKey: string; + mnemonic?: { + entropy: string; + path: string; + locale: string; + }; +}; + +export type EncryptOptions = { + iv?: BytesLike; + entropy?: BytesLike; + client?: string; + salt?: BytesLike; + uuid?: string; + scrypt?: { + N?: number; + r?: number; + p?: number; + } +} + +export function isKeystoreJson(json: string): boolean { + try { + const data = JSON.parse(json); + const version = ((data.version != null) ? parseInt(data.version): 0); + if (version === 3) { return true; } + } catch (error) { } + return false; +} + +function decrypt(data: any, key: Uint8Array, ciphertext: Uint8Array): string { + const cipher = spelunk(data, "crypto.cipher:string"); + if (cipher === "aes-128-ctr") { + const iv = spelunk(data, "crypto.cipherparams.iv:data!") + const aesCtr = new CTR(key, iv); + return hexlify(aesCtr.decrypt(ciphertext)); + } + + return logger.throwError("unsupported cipher", "UNSUPPORTED_OPERATION", { + operation: "decrypt" + }); +} + +function getAccount(data: any, _key: string): KeystoreAccount { + const key = logger.getBytes(_key); + const ciphertext = spelunk(data, "crypto.ciphertext:data!"); + + const computedMAC = hexlify(keccak256(concat([ key.slice(16, 32), ciphertext ]))).substring(2); + if (computedMAC !== spelunk(data, "crypto.mac:string!").toLowerCase()) { + return logger.throwArgumentError("incorrect password", "password", "[ REDACTED ]"); + } + + const privateKey = decrypt(data, key.slice(0, 16), ciphertext); + + const address = computeAddress(privateKey); + if (data.address) { + let check = data.address.toLowerCase(); + if (check.substring(0, 2) !== "0x") { check = "0x" + check; } + + if (getAddress(check) !== address) { + logger.throwArgumentError("keystore address/privateKey mismatch", "address", data.address); + } + } + + const account: KeystoreAccount = { address, privateKey }; + + // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase + const version = spelunk(data, "x-ethers.version:string"); + if (version === "0.1") { + const mnemonicKey = key.slice(32, 64); + + const mnemonicCiphertext = spelunk(data, "x-ethers.mnemonicCiphertext:data!"); + const mnemonicIv = spelunk(data, "x-ethers.mnemonicCounter:data!"); + + const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv); + + account.mnemonic = { + path: (spelunk(data, "x-ethers.path:string") || defaultPath), + locale: (spelunk(data, "x-ethers.locale:string") || "en"), + entropy: hexlify(arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext))) + }; + } + + return account; +} + +type KdfParams = { + name: "scrypt"; + salt: Uint8Array; + N: number; + r: number; + p: number; + dkLen: number; +} | { + name: "pbkdf2"; + salt: Uint8Array; + count: number; + dkLen: number; + algorithm: "sha256" | "sha512"; +}; + +function getKdfParams(data: any): KdfParams { + const kdf = spelunk(data, "crypto.kdf:string"); + if (kdf && typeof(kdf) === "string") { + const throwError = function(name: string, value: any): never { + return logger.throwArgumentError("invalid key-derivation function parameters", name, value); + } + + if (kdf.toLowerCase() === "scrypt") { + const salt = spelunk(data, "crypto.kdfparams.salt:data!"); + const N = spelunk(data, "crypto.kdfparams.n:int!"); + const r = spelunk(data, "crypto.kdfparams.r:int!"); + const p = spelunk(data, "crypto.kdfparams.p:int!"); + + // Check for all required parameters + if (!N || !r || !p) { return throwError("kdf", kdf); } + + // Make sure N is a power of 2 + if ((N & (N - 1)) !== 0) { return throwError("N", N); } + + const dkLen = spelunk(data, "crypto.kdfparams.dklen:int!"); + if (dkLen !== 32) { return throwError("dklen", dkLen); } + + return { name: "scrypt", salt, N, r, p, dkLen: 64 }; + + } else if (kdf.toLowerCase() === "pbkdf2") { + + const salt = spelunk(data, "crypto.kdfparams.salt:data!"); + + const prf = spelunk(data, "crypto.kdfparams.prf:string!"); + const algorithm = prf.split("-").pop(); + if (algorithm !== "sha256" && algorithm !== "sha512") { + return throwError("prf", prf); + } + + const count = spelunk(data, "crypto.kdfparams.c:int!"); + + const dkLen = spelunk(data, "crypto.kdfparams.dklen:int!"); + if (dkLen !== 32) { throwError("dklen", dkLen); } + + return { name: "pbkdf2", salt, count, dkLen, algorithm }; + } + } + + return logger.throwArgumentError("unsupported key-derivation function", "kdf", kdf); +} + + +export function decryptKeystoreJsonSync(json: string, _password: string | Uint8Array): KeystoreAccount { + const data = JSON.parse(json); + + const password = getPassword(_password); + + const params = getKdfParams(data); + if (params.name === "pbkdf2") { + const { salt, count, dkLen, algorithm } = params; + const key = pbkdf2(password, salt, count, dkLen, algorithm); + return getAccount(data, key); + } else if (params.name === "scrypt") { + const { salt, N, r, p, dkLen } = params; + const key = scryptSync(password, salt, N, r, p, dkLen); + return getAccount(data, key); + } + + throw new Error("unreachable"); +} + +function stall(duration: number): Promise { + return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); }); +} + +export async function decryptKeystoreJson(json: string, _password: string | Uint8Array, progress?: ProgressCallback): Promise { + const data = JSON.parse(json); + + const password = getPassword(_password); + + const params = getKdfParams(data); + if (params.name === "pbkdf2") { + if (progress) { + progress(0); + await stall(0); + } + const { salt, count, dkLen, algorithm } = params; + const key = pbkdf2(password, salt, count, dkLen, algorithm); + if (progress) { + progress(1); + await stall(0); + } + return getAccount(data, key); + } else if (params.name === "scrypt") { + const { salt, N, r, p, dkLen } = params; + const key = await scrypt(password, salt, N, r, p, dkLen, progress); + return getAccount(data, key); + } + + throw new Error("unreachable"); +} + + +export async function encryptKeystoreJson(account: KeystoreAccount, password: string | Uint8Array, options?: EncryptOptions, progressCallback?: ProgressCallback): Promise { + + // Check the address matches the private key + //if (getAddress(account.address) !== computeAddress(account.privateKey)) { + // throw new Error("address/privateKey mismatch"); + //} + + // Check the mnemonic (if any) matches the private key + /* + if (hasMnemonic(account)) { + const mnemonic = account.mnemonic; + const node = HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || defaultPath); + + if (node.privateKey != account.privateKey) { + throw new Error("mnemonic mismatch"); + } + } + */ + + // The options are optional, so adjust the call as needed + if (typeof(options) === "function" && !progressCallback) { + progressCallback = options; + options = {}; + } + if (!options) { options = {}; } + + const privateKey = logger.getBytes(account.privateKey, "privateKey"); + const passwordBytes = getPassword(password); + +/* + let mnemonic: null | Mnemonic = null; + let entropy: Uint8Array = null + let path: string = null; + let locale: string = null; + if (hasMnemonic(account)) { + const srcMnemonic = account.mnemonic; + entropy = arrayify(mnemonicToEntropy(srcMnemonic.phrase, srcMnemonic.locale || "en")); + path = srcMnemonic.path || defaultPath; + locale = srcMnemonic.locale || "en"; + mnemonic = Mnemonic.from( + } +*/ + // Check/generate the salt + const salt = (options.salt != null) ? logger.getBytes(options.salt, "options.slat"): randomBytes(32); + + // Override initialization vector + const iv = (options.iv != null) ? logger.getBytes(options.iv, "options.iv"): randomBytes(16); + if (iv.length !== 16) { + logger.throwArgumentError("invalid options.iv", "options.iv", options.iv); + } + + // Override the uuid + const uuidRandom = (options.uuid != null) ? logger.getBytes(options.uuid, "options.uuid"): randomBytes(16); + if (uuidRandom.length !== 16) { + logger.throwArgumentError("invalid options.uuid", "options.uuid", options.iv); + } + if (uuidRandom.length !== 16) { throw new Error("invalid uuid"); } + + // Override the scrypt password-based key derivation function parameters + let N = (1 << 17), r = 8, p = 1; + if (options.scrypt) { + if (options.scrypt.N) { N = options.scrypt.N; } + if (options.scrypt.r) { r = options.scrypt.r; } + if (options.scrypt.p) { p = options.scrypt.p; } + } + + // We take 64 bytes: + // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix) + // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet) + const _key = await scrypt(passwordBytes, salt, N, r, p, 64, progressCallback); + const key = arrayify(_key); + + // This will be used to encrypt the wallet (as per Web3 secret storage) + const derivedKey = key.slice(0, 16); + const macPrefix = key.slice(16, 32); + + // Encrypt the private key + const aesCtr = new CTR(derivedKey, iv); + const ciphertext = arrayify(aesCtr.encrypt(privateKey)); + + // Compute the message authentication code, used to check the password + const mac = keccak256(concat([ macPrefix, ciphertext ])) + + // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition + const data: { [key: string]: any } = { + address: account.address.substring(2).toLowerCase(), + id: uuidV4(uuidRandom), + version: 3, + Crypto: { + cipher: "aes-128-ctr", + cipherparams: { + iv: hexlify(iv).substring(2), + }, + ciphertext: hexlify(ciphertext).substring(2), + kdf: "scrypt", + kdfparams: { + salt: hexlify(salt).substring(2), + n: N, + dklen: 32, + p: p, + r: r + }, + mac: mac.substring(2) + } + }; + + // If we have a mnemonic, encrypt it into the JSON wallet + if (account.mnemonic) { + const client = (options.client != null) ? options.client: `ethers/${ version }`; + + const path = account.mnemonic.path || defaultPath; + const locale = account.mnemonic.locale || "en"; + + const mnemonicKey = key.slice(32, 64); + + const entropy = logger.getBytes(account.mnemonic.entropy, "account.mnemonic.entropy"); + const mnemonicIv = randomBytes(16); + const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv); + const mnemonicCiphertext = arrayify(mnemonicAesCtr.encrypt(entropy)); + + const now = new Date(); + const timestamp = (now.getUTCFullYear() + "-" + + zpad(now.getUTCMonth() + 1, 2) + "-" + + zpad(now.getUTCDate(), 2) + "T" + + zpad(now.getUTCHours(), 2) + "-" + + zpad(now.getUTCMinutes(), 2) + "-" + + zpad(now.getUTCSeconds(), 2) + ".0Z"); + const gethFilename = ("UTC--" + timestamp + "--" + data.address); + + data["x-ethers"] = { + client, gethFilename, path, locale, + mnemonicCounter: hexlify(mnemonicIv).substring(2), + mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2), + version: "0.1" + }; + } + + return JSON.stringify(data); +} diff --git a/packages/wallet/src.ts/logger.ts b/packages/wallet/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/wallet/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/wallet/src.ts/mnemonic.ts b/packages/wallet/src.ts/mnemonic.ts new file mode 100644 index 000000000..ca9b1bbc9 --- /dev/null +++ b/packages/wallet/src.ts/mnemonic.ts @@ -0,0 +1,158 @@ +import { arrayify, hexlify } from "@ethersproject/bytes"; +import { pbkdf2, sha256 } from "@ethersproject/crypto"; +import { defineProperties } from "@ethersproject/properties"; +import { toUtf8Bytes, UnicodeNormalizationForm } from "@ethersproject/strings"; +import { langEn } from "@ethersproject/wordlists"; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; +import type { Wordlist } from "@ethersproject/wordlists"; + + +// Returns a byte with the MSB bits set +function getUpperMask(bits: number): number { + return ((1 << bits) - 1) << (8 - bits) & 0xff; +} + +// Returns a byte with the LSB bits set +function getLowerMask(bits: number): number { + return ((1 << bits) - 1) & 0xff; +} + + +function mnemonicToEntropy(mnemonic: string, wordlist: null | Wordlist = langEn): string { + logger.assertNormalize("NFKD"); + + if (wordlist == null) { wordlist = langEn; } + + const words = wordlist.split(mnemonic); + if ((words.length % 3) !== 0 || words.length < 12 || words.length > 24) { + logger.throwArgumentError("invalid mnemonic length", "mnemonic", "[ REDACTED ]"); + } + + const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8))); + + let offset = 0; + for (let i = 0; i < words.length; i++) { + let index = wordlist.getWordIndex(words[i].normalize("NFKD")); + if (index === -1) { + logger.throwArgumentError(`invalid mnemonic word at index ${ i }`, "mnemonic", "[ REDACTED ]"); + } + + for (let bit = 0; bit < 11; bit++) { + if (index & (1 << (10 - bit))) { + entropy[offset >> 3] |= (1 << (7 - (offset % 8))); + } + offset++; + } + } + + const entropyBits = 32 * words.length / 3; + + + const checksumBits = words.length / 3; + const checksumMask = getUpperMask(checksumBits); + + const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask; + + if (checksum !== (entropy[entropy.length - 1] & checksumMask)) { + logger.throwArgumentError("invalid mnemonic checksum", "mnemonic", "[ REDACTED ]"); + } + + return hexlify(entropy.slice(0, entropyBits / 8)); +} + +function entropyToMnemonic(entropy: Uint8Array, wordlist: null | Wordlist = langEn): string { + if ((entropy.length % 4) || entropy.length < 16 || entropy.length > 32) { + logger.throwArgumentError("invalid entropy size", "entropy", "[ REDACTED ]"); + } + + if (wordlist == null) { wordlist = langEn; } + + const indices: Array = [ 0 ]; + + let remainingBits = 11; + for (let i = 0; i < entropy.length; i++) { + + // Consume the whole byte (with still more to go) + if (remainingBits > 8) { + indices[indices.length - 1] <<= 8; + indices[indices.length - 1] |= entropy[i]; + + remainingBits -= 8; + + // This byte will complete an 11-bit index + } else { + indices[indices.length - 1] <<= remainingBits; + indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits); + + // Start the next word + indices.push(entropy[i] & getLowerMask(8 - remainingBits)); + + remainingBits += 3; + } + } + + // Compute the checksum bits + const checksumBits = entropy.length / 4; + const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits); + + // Shift the checksum into the word indices + indices[indices.length - 1] <<= checksumBits; + indices[indices.length - 1] |= (checksum >> (8 - checksumBits)); + + return wordlist.join(indices.map((index) => (wordlist).getWord(index))); +} + +const _guard = { }; + +export class Mnemonic { + readonly phrase!: string; + readonly password!: string; + readonly wordlist!: Wordlist; + + readonly entropy!: string; + + constructor(guard: any, entropy: string, phrase: string, password?: null | string, wordlist?: null | Wordlist) { + if (password == null) { password = ""; } + if (wordlist == null) { wordlist = langEn; } + logger.assertPrivate(guard, _guard, "Mnemonic"); + defineProperties(this, { phrase, password, wordlist, entropy }); + } + + computeSeed(): string { + const salt = toUtf8Bytes("mnemonic" + this.password, UnicodeNormalizationForm.NFKD); + return pbkdf2(toUtf8Bytes(this.phrase, UnicodeNormalizationForm.NFKD), salt, 2048, 64, "sha512"); + } + + static fromPhrase(phrase: string, password?: null | string, wordlist?: null | Wordlist) { + // Normalize the case and space; throws if invalid + const entropy = mnemonicToEntropy(phrase, wordlist); + phrase = entropyToMnemonic(logger.getBytes(entropy), wordlist); + return new Mnemonic(_guard, entropy, phrase, password, wordlist); + } + + static fromEntropy(_entropy: BytesLike, password?: null | string, wordlist?: null | Wordlist): Mnemonic { + const entropy = logger.getBytes(_entropy, "entropy"); + const phrase = entropyToMnemonic(entropy, wordlist); + return new Mnemonic(_guard, hexlify(entropy), phrase, password, wordlist); + } + + static entropyToPhrase(_entropy: BytesLike, wordlist?: null | Wordlist): string { + const entropy = logger.getBytes(_entropy, "entropy"); + return entropyToMnemonic(entropy, wordlist); + } + + static phraseToEntropy(phrase: string, wordlist?: null | Wordlist): string { + return mnemonicToEntropy(phrase, wordlist); + } + + static isValidMnemonic(phrase: string, wordlist?: null | Wordlist): boolean { + try { + mnemonicToEntropy(phrase, wordlist); + return true; + } catch (error) { } + return false; + } +} diff --git a/packages/wallet/src.ts/tests/test-hdwallet.ts b/packages/wallet/src.ts/tests/test-hdwallet.ts new file mode 100644 index 000000000..81de0fc4a --- /dev/null +++ b/packages/wallet/src.ts/tests/test-hdwallet.ts @@ -0,0 +1,121 @@ +import assert from "assert"; + +import { wordlists } from "@ethersproject/wordlists/lib/wordlists.js"; + +import { loadTests } from "./utils.js"; + +import { HDNodeWallet, HDNodeVoidWallet } from "../hdwallet.js"; +import { Mnemonic } from "../mnemonic.js"; + +import type { TestCaseMnemonic, TestCaseMnemonicNode } from "./types.js"; + + +const decoder = new TextDecoder(); +function fromHex(hex: string): string { + const data = Buffer.from(hex.substring(2), "hex"); + return decoder.decode(data); +} + +describe("Test HDWallets", function() { + function checkWallet(wallet: HDNodeWallet | HDNodeVoidWallet, test: TestCaseMnemonicNode): void { + assert.equal(wallet.chainCode, test.chainCode, "chainCode"); + assert.equal(wallet.depth, test.depth, "depth"); + assert.equal(wallet.index, test.index, "index"); + assert.equal(wallet.fingerprint, test.fingerprint, "fingerprint"); + assert.equal(wallet.parentFingerprint, test.parentFingerprint, "parentFingerprint"); + assert.equal(wallet.publicKey, test.publicKey, "publicKey"); + + if (wallet instanceof HDNodeWallet) { + assert.equal(wallet.extendedKey, test.xpriv, "xpriv"); + assert.equal(wallet.privateKey, test.privateKey, "privateKey"); + assert.equal(wallet.neuter().extendedKey, test.xpub, "xpub"); + } else if (wallet instanceof HDNodeVoidWallet) { + assert.equal(wallet.extendedKey, test.xpub, "xpub"); + } + } + + const tests = loadTests("mnemonics"); + tests.forEach((test) => { + // The phrase and password are stored in the test as hex so they + // are safe as ascii7 values for viewing, printing, etc. + const phrase = fromHex(test.phrase); + const password = fromHex(test.password); + const wordlist = wordlists[test.locale]; + if (wordlist == null) { + it(`tests ${ test.name }`, function() { + this.skip(); + }); + return; + } + + const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist); + + function checkMnemonic(actual: Mnemonic): void { + assert.equal(actual.phrase, phrase, "phrase"); + assert.equal(actual.password, password, "password"); + assert.equal(actual.wordlist.locale, test.locale, "locale"); + assert.equal(actual.entropy, mnemonic.entropy, "entropy"); + assert.equal(actual.computeSeed(), mnemonic.computeSeed(), "seed"); + } + + it(`computes the HD keys by mnemonic: ${ test.name }`, function() { + for (const subtest of test.nodes) { + const w = HDNodeWallet.fromPhrase(phrase, password, subtest.path, wordlist); + assert.ok(w instanceof HDNodeWallet, "instanceof HDNodeWallet"); + assert.equal(w.path, subtest.path, "path") + checkWallet(w, subtest); + assert.ok(!!w.mnemonic, "has mnemonic"); + checkMnemonic(w.mnemonic as Mnemonic); + } + }); + + it(`computes the HD keys by entropy: ${ test.name }`, function() { + const seedRoot = HDNodeWallet.fromSeed(test.seed); + for (const subtest of test.nodes) { + const w = seedRoot.derivePath(subtest.path); + assert.ok(w instanceof HDNodeWallet, "instanceof HDNodeWallet"); + assert.equal(w.path, subtest.path, "path") + checkWallet(w, subtest); + assert.equal(w.mnemonic, null); + } + }); + + it(`computes the HD keys by enxtended private key: ${ test.name }`, function() { + for (const subtest of test.nodes) { + const w = HDNodeWallet.fromExtendedKey(subtest.xpriv); + assert.ok(w instanceof HDNodeWallet, "instanceof HDNodeWallet"); + checkWallet(w, subtest); + assert.equal(w.mnemonic, null); + } + }); + + it(`computes the neutered HD keys by paths: ${ test.name }`, function() { + const root = HDNodeWallet.fromPhrase(phrase, password, "m", wordlist).neuter(); + for (const subtest of test.nodes) { + if (subtest.path.indexOf("'") >= 0) { + assert.throws(() => { + const w = root.derivePath(subtest.path); + console.log(w); + }, (error) => { + return (error.code === "UNSUPPORTED_OPERATION" && + error.message.match(/^cannot derive child of neutered node/) && + error.operation === "deriveChild"); + }); + } else { + const w = root.derivePath(subtest.path); + assert.ok(w instanceof HDNodeVoidWallet, "instanceof HDNodeVoidWallet"); + assert.equal(w.path, subtest.path, "path") + checkWallet(w, subtest); + } + } + }); + + it(`computes the neutered HD keys by enxtended public key: ${ test.name }`, function() { + for (const subtest of test.nodes) { + const w = HDNodeWallet.fromExtendedKey(subtest.xpub); + assert.ok(w instanceof HDNodeVoidWallet, "instanceof HDNodeVoidWallet"); + checkWallet(w, subtest); + } + }); + }); +}); diff --git a/packages/wallet/src.ts/tests/test-json.ts b/packages/wallet/src.ts/tests/test-json.ts new file mode 100644 index 000000000..7cbabbe29 --- /dev/null +++ b/packages/wallet/src.ts/tests/test-json.ts @@ -0,0 +1,58 @@ +import assert from "assert"; + +import { loadTests } from "./utils.js"; + +import type { TestCaseWallet } from "./types.js"; + +import { + decryptCrowdsaleJson, + decryptKeystoreJson, decryptKeystoreJsonSync, + Wallet +} from "../index.js"; + +describe("Tests JSON Wallet Formats", function() { + const tests = loadTests("wallets"); + tests.forEach((test) => { + if (test.type === "crowdsale") { + it(`tests decrypting Crowdsale JSON: ${ test.name }`, async function() { + const password = Buffer.from(test.password.substring(2), "hex"); + const account = decryptCrowdsaleJson(test.content, password); + assert.equal(account.address, test.address, "address"); + }); + + } else if (test.type === "keystore") { + it(`tests decrypting Keystore JSON (sync): ${ test.name }`, function() { + this.timeout(20000); + const password = Buffer.from(test.password.substring(2), "hex"); + const account = decryptKeystoreJsonSync(test.content, password); + //console.log(account); + assert.equal(account.address, test.address, "address"); + }); + + it(`tests decrypting Keystore JSON (async): ${ test.name }`, async function() { + this.timeout(20000); + const password = Buffer.from(test.password.substring(2), "hex"); + const account = await decryptKeystoreJson(test.content, password); + //console.log(account); + assert.equal(account.address, test.address, "address"); + }); + } + + it(`tests decrypting JSON (sync): ${ test.name }`, function() { + this.timeout(20000); + const password = Buffer.from(test.password.substring(2), "hex"); + const wallet = Wallet.fromEncryptedJsonSync(test.content, password); + //console.log(wallet); + assert.equal(wallet.address, test.address, "address"); + }); + + it(`tests decrypting JSON (async): ${ test.name }`, async function() { + this.timeout(20000); + const password = Buffer.from(test.password.substring(2), "hex"); + const wallet = await Wallet.fromEncryptedJson(test.content, password); + //console.log(wallet); + assert.equal(wallet.address, test.address, "address"); + }); + + }); +}); diff --git a/packages/wallet/src.ts/tests/test-mnemonic.ts b/packages/wallet/src.ts/tests/test-mnemonic.ts new file mode 100644 index 000000000..874ec3b86 --- /dev/null +++ b/packages/wallet/src.ts/tests/test-mnemonic.ts @@ -0,0 +1,149 @@ + +declare global { + class TextDecoder { + decode(data: Uint8Array): string; + } +} + +import assert from "assert"; + +import { sha256 } from "@ethersproject/crypto"; +import { toUtf8Bytes } from "@ethersproject/strings"; + +import { wordlists } from "@ethersproject/wordlists/lib/wordlists.js"; + +import { Mnemonic } from "../index.js"; + +import { loadTests } from "./utils.js"; +import type { TestCaseMnemonic } from "./types.js"; + +const decoder = new TextDecoder(); +function fromHex(hex: string): string { + const data = Buffer.from(hex.substring(2), "hex"); + return decoder.decode(data); +} + +function repeat(text: string, length: number): Array { + const result = [ ]; + while (result.length < length) { result.push(text); } + return result; +} + +describe("Tests Mnemonics", function() { + const tests = loadTests("mnemonics"); + + function runTest(phrase: string, mnemonic: Mnemonic, test: TestCaseMnemonic): void { + assert.ok(Mnemonic.isValidMnemonic(phrase, mnemonic.wordlist), "isValidMnemonic"); + if (test.locale === "en") { + assert.ok(Mnemonic.isValidMnemonic(phrase), "isValidMnemonic (default)"); + } + + assert.equal(mnemonic.wordlist.locale, test.locale, "locale"); + + assert.equal(mnemonic.entropy, test.entropy, "entropy"); + assert.equal(mnemonic.computeSeed(), test.seed, "seed"); + assert.equal(sha256(toUtf8Bytes(phrase)), test.phraseHash, "phraseHash") + } + + for (const test of tests) { + const wordlist = wordlists[test.locale]; + + it(`computes mnemonic from phrase: ${ test.name }`, function() { + if (wordlist == null) { + this.skip(); + return; + } + + const phrase = fromHex(test.phrase); + const password = fromHex(test.password); + const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist); + runTest(phrase, mnemonic, test); + }); + } + + for (const test of tests) { + const wordlist = wordlists[test.locale]; + + it(`computes mnemonic from entropy: ${ test.name }`, function() { + if (wordlist == null) { + this.skip(); + return; + } + const phrase = fromHex(test.phrase); + const password = fromHex(test.password); + const mnemonic = Mnemonic.fromEntropy(test.entropy, password, wordlist); + runTest(phrase, mnemonic, test); + }); + } +}); + +describe("Tests Bad Mnemonics Fail", function() { + + const badLengths = [ + repeat("abandon", 9), // 9 words; too short + repeat("abandon", 16), // 16 words; not congruent to 0 mod 3 + repeat("abandon", 27), // 27 words; too long + ]; + + for (const _phrase of badLengths) { + const phrase = _phrase.join(" "); + it(`fails on invalid mnemonic length: ${ _phrase.length }`, function() { + assert.ok(!Mnemonic.isValidMnemonic(phrase)); + assert.throws(function() { + Mnemonic.fromPhrase(phrase); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid mnemonic length/) && + error.argument === "mnemonic" && + error.value === "[ REDACTED ]"); + }); + }); + } + + it("fails on invalid mnemonic word", function() { + const phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon wagmi"; + assert.ok(!Mnemonic.isValidMnemonic(phrase)); + assert.throws(function() { + Mnemonic.fromPhrase(phrase); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid mnemonic word at index 11/) && + error.argument === "mnemonic" && + error.value === "[ REDACTED ]"); + }); + }); + + it("fails on invalid mnemonic checksum", function() { + const phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon"; + assert.ok(!Mnemonic.isValidMnemonic(phrase)); + assert.throws(function() { + Mnemonic.fromPhrase(phrase); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid mnemonic checksum/) && + error.argument === "mnemonic" && + error.value === "[ REDACTED ]"); + }); + }); + + + const badEntropyLengths = [ + repeat("42", 12), //12 bytes; too short + repeat("42", 15), // 16 bytes; not congruent to 0 mod 4 + repeat("42", 36), // 36 bytes; too long + ]; + + for (const _entropy of badEntropyLengths) { + const entropy = "0x" + _entropy.join(""); + it(`fails on invalid entropy length: ${ _entropy.length }`, function() { + assert.throws(function() { + Mnemonic.fromEntropy(entropy); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid entropy size/) && + error.argument === "entropy" && + error.value === "[ REDACTED ]"); + }); + }); + } +}) diff --git a/packages/wallet/src.ts/tests/test-wallet.ts b/packages/wallet/src.ts/tests/test-wallet.ts new file mode 100644 index 000000000..2e5d7525d --- /dev/null +++ b/packages/wallet/src.ts/tests/test-wallet.ts @@ -0,0 +1,83 @@ +import assert from "assert"; + +import { loadTests } from "./utils.js"; + +import type { + TestCaseAccount, TestCaseTypedData, TestCaseTransaction +} from "./types"; + + +import { Wallet } from "../index.js"; + + +describe("Test Private Key Wallet", function() { + const tests = loadTests("accounts"); + + tests.forEach(({ name, privateKey, address }) => { + it(`creates wallet: ${ name }`, function() { + const wallet = new Wallet(privateKey); + assert.equal(wallet.privateKey, privateKey); + assert.equal(wallet.address, address); + }); + }); +}); + +describe("Test Transaction Signing", function() { + const tests = loadTests("transactions"); + for (const test of tests) { + it(`tests signing a legacy transaction: ${ test.name }`, async function() { + const wallet = new Wallet(test.privateKey); + const txData = Object.assign({ }, test.transaction, { type: 0, accessList: undefined, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + + // Use the testcase sans the chainId for a legacy test + if (txData.chainId != null && parseInt(txData.chainId) != 0) { txData.chainId = "0x00"; } + + const signed = await wallet.signTransaction(txData); + assert.equal(signed, test.signedLegacy, "signedLegacy"); + }); + } + + for (const test of tests) { + if (!test.signedEip155) { continue; } + it(`tests signing an EIP-155 transaction: ${ test.name }`, async function() { + const wallet = new Wallet(test.privateKey); + const txData = Object.assign({ }, test.transaction, { type: 0, accessList: undefined, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + const signed = await wallet.signTransaction(txData); + assert.equal(signed, test.signedEip155, "signedEip155"); + }); + } + + for (const test of tests) { + it(`tests signing a Berlin transaction: ${ test.name }`, async function() { + const wallet = new Wallet(test.privateKey); + const txData = Object.assign({ }, test.transaction, { type: 1, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + const signed = await wallet.signTransaction(txData); + assert.equal(signed, test.signedBerlin, "signedBerlin"); + }); + } + + for (const test of tests) { + it(`tests signing a London transaction: ${ test.name }`, async function() { + const wallet = new Wallet(test.privateKey); + const txData = Object.assign({ }, test.transaction, { type: 2 }); + const signed = await wallet.signTransaction(txData); + assert.equal(signed, test.signedLondon, "signedLondon"); + }); + } +}); + +describe("Test Message Signing (EIP-191)", function() { +}); + +describe("Test Typed-Data Signing (EIP-712)", function() { + const tests = loadTests("typed-data"); + for (const test of tests) { + const { privateKey, signature } = test; + if (privateKey == null || signature == null) { continue; } + it(`tests signing typed-data: ${ test.name }`, async function() { + const wallet = new Wallet(privateKey); + const sig = await wallet.signTypedData(test.domain, test.types, test.data); + assert.equal(sig, signature, "signature"); + }); + } +}); diff --git a/packages/wallet/src.ts/tests/types.ts b/packages/wallet/src.ts/tests/types.ts new file mode 100644 index 000000000..332fb40fe --- /dev/null +++ b/packages/wallet/src.ts/tests/types.ts @@ -0,0 +1,100 @@ + +export interface TestCaseAccount { + name: string; + privateKey: string; + address: string; + icap: string; +} + +export interface TestCaseMnemonicNode { + path: string, + chainCode: string; + depth: number; + index: number; + parentFingerprint: string; + fingerprint: string; + publicKey: string; + privateKey: string; + xpriv: string; + xpub: string; +} + +export interface TestCaseMnemonic { + name: string; + phrase: string; + phraseHash: string; + password: string; + locale: string; + entropy: string; + seed: string; + nodes: Array; +}; + +export interface TestCaseTypedDataDomain { + name?: string; + version?: string; + chainId?: number; + verifyingContract?: string; + salt?: string; +} + +export interface TestCaseTypedDataType { + name: string; + type: string; +} + +export interface TestCaseTypedData { + name: string; + + domain: TestCaseTypedDataDomain; + primaryType: string; + types: Record> + data: any; + + encoded: string; + digest: string; + + privateKey?: string; + signature?: string; +} + +export interface TestCaseTransactionTx { + to?: string; + nonce?: number; + gasLimit?: string; + + gasPrice?: string; + maxFeePerGas?: string; + maxPriorityFeePerGas?: string; + + data?: string; + value?: string; + + accessList?: Array<{ address: string, storageKeys: Array }>; + + chainId?: string; +} + +export interface TestCaseTransaction { + name: string; + transaction: TestCaseTransactionTx; + privateKey: string; + + unsignedLegacy: string; + signedLegacy: string; + unsignedEip155: string; + signedEip155: string; + unsignedBerlin: string; + signedBerlin: string; + unsignedLondon: string; + signedLondon: string; +} + +export interface TestCaseWallet { + name: string; + filename: string, + type: string; + address: string; + password: string; + content: string; +} diff --git a/packages/wallet/src.ts/tests/utils.ts b/packages/wallet/src.ts/tests/utils.ts new file mode 100644 index 000000000..b40517e1b --- /dev/null +++ b/packages/wallet/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/wallet/src.ts/utils.ts b/packages/wallet/src.ts/utils.ts new file mode 100644 index 000000000..ba4e181d8 --- /dev/null +++ b/packages/wallet/src.ts/utils.ts @@ -0,0 +1,148 @@ +import { arrayify, hexlify } from "@ethersproject/bytes"; +import { toUtf8Bytes, UnicodeNormalizationForm } from '@ethersproject/strings'; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + +export function looseArrayify(hexString: string): Uint8Array { + if (typeof(hexString) === 'string' && hexString.substring(0, 2) !== '0x') { + hexString = '0x' + hexString; + } + return arrayify(hexString); +} + +export function zpad(value: String | number, length: number): String { + value = String(value); + while (value.length < length) { value = '0' + value; } + return value; +} + +export function getPassword(password: string | Uint8Array): Uint8Array { + if (typeof(password) === 'string') { + return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC); + } + return arrayify(password); +} + +export function spelunk(object: any, _path: string): T { + + const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i); + if (match == null) { + return logger.throwArgumentError("invalid path", "path", _path); + } + const path = match[1]; + const type = match[3]; + const reqd = (match[4] === "!"); + + let cur = object; + for (const comp of path.toLowerCase().split('.')) { + + // Search for a child object with a case-insensitive matching key + if (Array.isArray(cur)) { + if (!comp.match(/^[0-9]+$/)) { break; } + cur = cur[parseInt(comp)]; + + } else if (typeof(cur) === "object") { + let found: any = null; + for (const key in cur) { + if (key.toLowerCase() === comp) { + found = cur[key]; + break; + } + } + cur = found; + + } else { + cur = null; + } + + if (cur == null) { break; } + } + + if (reqd && cur == null) { + logger.throwArgumentError("missing required value", "path", path); + } + + if (type && cur != null) { + if (type === "int") { + if (typeof(cur) === "string" && cur.match(/^-?[0-9]+$/)) { + return parseInt(cur); + } else if (Number.isSafeInteger(cur)) { + return cur; + } + } + + if (type === "number") { + if (typeof(cur) === "string" && cur.match(/^-?[0-9.]*$/)) { + return parseFloat(cur); + } + } + + if (type === "data") { + if (typeof(cur) === "string") { return looseArrayify(cur); } + } + + if (type === "array" && Array.isArray(cur)) { return cur; } + if (type === typeof(cur)) { return cur; } + + logger.throwArgumentError(`wrong type found for ${ type } `, "path", path); + } + + return cur; +} +/* +export function follow(object: any, path: string): null | string { + let currentChild = object; + + for (const comp of path.toLowerCase().split('/')) { + + // Search for a child object with a case-insensitive matching key + let matchingChild = null; + for (const key in currentChild) { + if (key.toLowerCase() === comp) { + matchingChild = currentChild[key]; + break; + } + } + + if (matchingChild === null) { return null; } + + currentChild = matchingChild; + } + + return currentChild; +} + +// "path/to/something:type!" +export function followRequired(data: any, path: string): string { + const value = follow(data, path); + if (value != null) { return value; } + return logger.throwArgumentError("invalid value", `data:${ path }`, + JSON.stringify(data)); +} +*/ +// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4) +export function uuidV4(randomBytes: BytesLike): string { + const bytes = logger.getBytes(randomBytes, "randomBytes"); + + // Section: 4.1.3: + // - time_hi_and_version[12:16] = 0b0100 + bytes[6] = (bytes[6] & 0x0f) | 0x40; + + // Section 4.4 + // - clock_seq_hi_and_reserved[6] = 0b0 + // - clock_seq_hi_and_reserved[7] = 0b1 + bytes[8] = (bytes[8] & 0x3f) | 0x80; + + const value = hexlify(bytes); + + return [ + value.substring(2, 10), + value.substring(10, 14), + value.substring(14, 18), + value.substring(18, 22), + value.substring(22, 34), + ].join("-"); +} + diff --git a/packages/wallet/src.ts/wallet.ts b/packages/wallet/src.ts/wallet.ts new file mode 100644 index 000000000..41ce84560 --- /dev/null +++ b/packages/wallet/src.ts/wallet.ts @@ -0,0 +1,167 @@ +import { isHexString } from "@ethersproject/bytes"; +import { randomBytes } from "@ethersproject/crypto"; +import { SigningKey } from "@ethersproject/signing-key"; + +import { computeAddress } from "./address.js"; +import { BaseWallet } from "./base-wallet.js"; +import { HDNodeWallet } from "./hdwallet.js"; +import { decryptCrowdsaleJson, isCrowdsaleJson } from "./json-crowdsale.js"; +import { + decryptKeystoreJson, decryptKeystoreJsonSync, isKeystoreJson +} from "./json-keystore.js"; +import { logger } from "./logger.js"; +import { Mnemonic } from "./mnemonic.js"; + +import type { ProgressCallback } from "@ethersproject/crypto"; +import type { Provider } from "@ethersproject/providers"; +import type { Wordlist } from "@ethersproject/wordlists"; + +import type { CrowdsaleAccount } from "./json-crowdsale.js"; +import type { KeystoreAccount } from "./json-keystore.js"; + +function tryWallet(value: any): null | Wallet { + try { + if (!value || !value.signingKey) { return null; } + const key = trySigningKey(value.signingKey); + if (key == null || computeAddress(key.publicKey) !== value.address) { return null; } + if (value.mnemonic) { + const wallet = HDNodeWallet.fromMnemonic(value.mnemonic); + if (wallet.privateKey !== key.privateKey) { return null; } + } + return value; + } catch (e) { console.log(e); } + return null; +} + +// Try using value as mnemonic to derive the defaultPath HDodeWallet +function tryMnemonic(value: any): null | HDNodeWallet { + try { + if (value == null || typeof(value.phrase) !== "string" || + typeof(value.password) !== "string" || + value.wordlist == null) { return null; } + return HDNodeWallet.fromPhrase(value.phrase, value.password, null, value.wordlist); + } catch (error) { console.log(error); } + return null; +} + +function trySigningKey(value: any): null | SigningKey { + try { + if (!value || !isHexString(value.privateKey, 32)) { return null; } + + const key = value.privateKey; + if (SigningKey.computePublicKey(key) !== value.publicKey) { return null; } + return new SigningKey(key); + } catch (e) { console.log(e); } + return null; +} + +function stall(duration: number): Promise { + return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); }); +} + +export class Wallet extends BaseWallet { + readonly #mnemonic: null | Mnemonic; + + constructor(key: string | Mnemonic | SigningKey | BaseWallet, provider?: null | Provider) { + let signingKey: null | SigningKey = null; + let mnemonic: null | Mnemonic = null; + + // A normal private key + if (typeof(key) === "string") { signingKey = new SigningKey(key); } + + // Try Wallet + if (signingKey == null) { + const wallet = tryWallet(key); + if (wallet) { + signingKey = wallet.signingKey; + mnemonic = wallet.mnemonic || null; + } + } + + // Try Mnemonic, with the defaultPath wallet + if (signingKey == null) { + const wallet = tryMnemonic(key); + if (wallet) { + signingKey = wallet.signingKey; + mnemonic = wallet.mnemonic || null; + } + } + + // A signing key + if (signingKey == null) { signingKey = trySigningKey(key); } + + if (signingKey == null) { + logger.throwArgumentError("invalid key", "key", "[ REDACTED ]"); + } + + super(signingKey as SigningKey, provider); + this.#mnemonic = mnemonic; + } + + // Store this in a getter to reduce visibility in console.log + get mnemonic(): null | Mnemonic { return this.#mnemonic; } + + connect(provider: null | Provider): Wallet { + return new Wallet(this, provider); + } + + async encrypt(password: Uint8Array | string, options?: any, progressCallback?: ProgressCallback): Promise { + throw new Error("TODO"); + } + + encryptSync(password: Uint8Array | string, options?: any): Promise { + throw new Error("TODO"); + } + + static async fromEncryptedJson(json: string, password: Uint8Array | string, progress?: ProgressCallback): Promise { + let account: null | CrowdsaleAccount | KeystoreAccount = null; + if (isKeystoreJson(json)) { + account = await decryptKeystoreJson(json, password, progress); + + } else if (isCrowdsaleJson(json)) { + if (progress) { progress(0); await stall(0); } + account = decryptCrowdsaleJson(json, password); + if (progress) { progress(1); await stall(0); } + + } else { + return logger.throwArgumentError("invalid JSON wallet", "json", "[ REDACTED ]"); + } + + const wallet = new Wallet(account.privateKey); + if (wallet.address !== account.address) { + logger.throwArgumentError("address/privateKey mismatch", "json", "[ REDACTED ]"); + } + // @TODO: mnemonic + return wallet; + } + + static fromEncryptedJsonSync(json: string, password: Uint8Array | string): Wallet { + let account: null | CrowdsaleAccount | KeystoreAccount = null; + if (isKeystoreJson(json)) { + account = decryptKeystoreJsonSync(json, password); + } else if (isCrowdsaleJson(json)) { + account = decryptCrowdsaleJson(json, password); + } else { + return logger.throwArgumentError("invalid JSON wallet", "json", "[ REDACTED ]"); + } + + const wallet = new Wallet(account.privateKey); + if (wallet.address !== account.address) { + logger.throwArgumentError("address/privateKey mismatch", "json", "[ REDACTED ]"); + } + // @TODO: mnemonic + return wallet; + } + + static createRandom(provider?: null | Provider, password?: null | string, wordlist?: null | Wordlist): Wallet { + return new Wallet(Mnemonic.fromEntropy(randomBytes(16), password, wordlist), provider); + } + + static fromMnemonic(mnemonic: Mnemonic, provider?: null | Provider): Wallet { + return new Wallet(mnemonic, provider); + } + + static fromPhrase(phrase: string, provider?: null | Provider, password = "", wordlist?: Wordlist): Wallet { + return new Wallet(Mnemonic.fromPhrase(phrase, password, wordlist), provider); + } +} diff --git a/packages/wallet/tsconfig.json b/packages/wallet/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/wallet/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/web/.npmignore b/packages/web/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/web/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/web/LICENSE.md b/packages/web/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/web/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/web/package.json b/packages/web/package.json new file mode 100644 index 000000000..83c9cc540 --- /dev/null +++ b/packages/web/package.json @@ -0,0 +1,35 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1" + }, + "description": "Web fetching Utilities for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/web", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/web", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/web/src.ts/_version.ts b/packages/web/src.ts/_version.ts new file mode 100644 index 000000000..26ff8934e --- /dev/null +++ b/packages/web/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/web@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/web/src.ts/fetch-data.ts b/packages/web/src.ts/fetch-data.ts new file mode 100644 index 000000000..6e9dac82c --- /dev/null +++ b/packages/web/src.ts/fetch-data.ts @@ -0,0 +1,224 @@ +import { decodeBase64 } from "@ethersproject/bytes"; +import { toUtf8Bytes } from "@ethersproject/strings" + +import { getUrl } from "./get-url.js"; /*-browser*/ +import { logger } from "./logger.js"; +import { FetchRequest } from "./request.js"; +import { FetchResponse } from "./response.js"; + +import type { Frozen } from "@ethersproject/properties"; + + +async function delay(duration: number): Promise { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} + +export type PreflightRequestFunc = (request: Frozen) => Promise; +export type ProcessResponseFunc = (request: Frozen, response: FetchResponse) => Promise; +export type ThrottleRetryFunc = (request: Frozen, response: FetchResponse, attempt: number) => Promise; + +export type FrozenFetchRequest = Frozen; +export type FrozenFetchResponse = Frozen; + +export type ConnectionInfo = { + // The request + request: FetchRequest; + + // Called each time a request is about to be sent to the network; in + // the case of a throttle event, this may occur multiple times + // @TODO: Allow the prflight to directly make the request and respond? + //preflightRequest?: (request: Frozen) => Promise + preflightRequest?: PreflightRequestFunc; + + // If the response.throwThrottleError() is used the throttleConfig is + // used to determine when and if to retry + processResponse?: ProcessResponseFunc; + + // Throttling Configuration + throttleLimit?: number; + throttleSlotInterval?: number; + throttleRetry?: ThrottleRetryFunc; +}; + +// @TODO: Add option for global preflightRequest? + +function getTime(): number { return (new Date()).getTime(); } + +function unpercent(value: string): Uint8Array { + value = value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => { + return String.fromCharCode(parseInt(code, 16)); + }); + return toUtf8Bytes(value); +} + +export type GatewayFunc = (url: string) => Promise + +let lockGateways = false; +let ipfsGateway: null | string | GatewayFunc = "https:/\/gateway.ipfs.io/"; +let arGateway: null | string | GatewayFunc = "https:/\/gateway.ar.io/"; + +export async function fetchData(connection: string | FetchRequest | ConnectionInfo): Promise> { + const conn = (typeof(connection) === "string") ? { + request: new FetchRequest(connection) + }: (connection instanceof FetchRequest) ? { + request: connection + }: Object.assign({ }, connection); + + if (conn.request == null) { + return logger.throwArgumentError("missing request", "connection", connection); + } + + let req = conn.request.clone().freeze(); + + switch (conn.request.url.split(":")[0]) { + case "data": { + const match = req.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i); + if (match) { + try { + const headers = { + "content-type": (match[1] ? match[1]: "text/plain") + }; + const body = (match[2] ? decodeBase64(match[3]): unpercent(match[3])); + return new FetchResponse(200, "OK", headers, body, req.clone()); + } catch (error) { + return new FetchResponse(400, "BAD REQUEST (invalid base64 encoded data)", { }, null, req.clone()); + } + } + return new FetchResponse(500, "INTERNAL SERVER ERROR (unsupported dara URI)", { }, null, req.clone()); + } + case "ipfs": + case "ipns": + case "ar": + throw new Error("not implemented yet"); + console.log("FF", arGateway, ipfsGateway); + case "http": case "https": + break; + default: + throw new Error("unsupported scheme"); + } + + const attempts = (conn.throttleLimit != null) ? conn.throttleLimit: 12; + if (!Number.isInteger(attempts) || attempts < 1) { + return logger.throwArgumentError("invalid throttleLimit", "connection", connection); + } + + const slotInterval = (conn.throttleSlotInterval != null) ? conn.throttleSlotInterval: 100; + //logger.assertInteger(slotInterval, "connection.throttleSlotInterval", connection.throttleSlotInterval); + if (!Number.isInteger(slotInterval) || attempts < 0) { + return logger.throwArgumentError("invalid throttleSlotInterval", "connection", connection); + } + + const retryFunc = (conn.throttleRetry != null) ? conn.throttleRetry: null; + if (retryFunc && typeof(retryFunc) !== "function") { + return logger.throwArgumentError("invalid throttleRetry callback", "connection", connection); + } + + const preflightRequest = conn.preflightRequest || null; + if (preflightRequest && typeof(preflightRequest) !== "function") { + return logger.throwArgumentError("invalid preflightRequest callback", "connection", connection); + } + + const processResponse = conn.processResponse || null; + if (processResponse && typeof(processResponse) !== "function") { + return logger.throwArgumentError("invalid processResponse callback", "connection", connection); + } + + // Start time of this fetch (for timeouts) + const t0 = getTime(); + + let response: null | FetchResponse = null; + for (let a = 0; a < attempts; a++) { + let request = req.clone(); + + if (preflightRequest) { + request = (await preflightRequest(request.freeze())).clone(); + } + + const remainingTime = getTime() - t0; + if (remainingTime < 0) { + return logger.throwError("timeout", "TIMEOUT", { operation: "request", request }); + } + + response = await getUrl(request, remainingTime); + + // Retry logic (server forced) + if (a < attempts) { + if (response.statusCode === 301 || response.statusCode === 302) { + // Try following the redirect; the request will through if the + // type of redirect is not supported + try { + req = request.redirect(response.headers.location || ""); + continue; + } catch (error) { }; + + // Things won't get any better on another attempt; abort + return response; + + } else if (response.statusCode === 429) { + if (retryFunc == null || (await retryFunc(request.freeze(), response, a))) { + const retryAfter = response.headers["retry-after"]; + if (typeof(retryAfter) === "string" && retryAfter.match(/^[1-9][0-9]*$/)) { + await delay(parseInt(retryAfter)); + } else { + await delay(slotInterval * Math.trunc(Math.random() * Math.pow(2, a))); + } + continue; + } + } + } + + // Optional post-processing response; also allows trapping + // HTTP status errors and doing "something different", + // including any further throttling. + if (processResponse) { + try { + return await processResponse(request, response); + } catch (error: any) { + + // response.throwThrottleError + if (error.throttle && typeof(error.stall) === "number") { + if (a < attempts) { + await delay(error.stall); + continue; + } + + // Too many retries should behave more like a 5xx server error + return response.makeServerError("exceeded maximum retry limit", error); + } + + // Something went wrong during processing; throw a 5xx server error + response.makeServerError("error in post-processing function", error).assertOk(); + } + } + + return response; + } + + // Too many retries should behave more like a 5xx server error + return (response).makeServerError("exceeded maximum retry limit"); +} + +fetchData.lock = function(): void { + lockGateways = true; +} + +// @TODO: Allow a master Gateway function +fetchData.setGateway = function(gateway: null | GatewayFunc): void { +} + +fetchData.setIpfsGateway = function(gateway: null | string | GatewayFunc): void { + if (lockGateways) { + logger.throwError("gateways are locked", "UNSUPPORTED_OPERATION", { + operation: "setIpfsGateway" }); + } + ipfsGateway = gateway; +}; + +fetchData.setArGateway = function(gateway: null | string | GatewayFunc): void { + if (lockGateways) { + logger.throwError("gateways are locked", "UNSUPPORTED_OPERATION", { + operation: "setArGateway" }); + } + arGateway = gateway; +}; + diff --git a/packages/web/src.ts/get-url-browser.ts b/packages/web/src.ts/get-url-browser.ts new file mode 100644 index 000000000..f150146f5 --- /dev/null +++ b/packages/web/src.ts/get-url-browser.ts @@ -0,0 +1,62 @@ + +declare global { + class Headers { + constructor(values: Array<[ string, string ]>); + forEach(func: (v: string, k: string) => void): void; + } + + class Response { + status: number; + statusText: string; + headers: Headers; + arrayBuffer(): Promise; + } + + type FetchInit = { + method?: string, + headers?: Headers, + body?: Uint8Array + }; + + function fetch(url: string, init: FetchInit): Promise; +} + +import { logger } from "./logger.js"; +import { FetchResponse } from "./response.js"; + +import type { FetchRequest } from "./request.js"; + +export async function getUrl(req: FetchRequest, timeout: number): Promise { + const protocol = req.url.split(":")[0].toLowerCase(); + + if (protocol !== "http" && protocol !== "https") { + logger.throwError(`unsupported protocol ${ protocol }`, "UNSUPPORTED_OPERATION", { + info: { protocol }, + operation: "request" + }); + } + + if (req.credentials && !req.allowInsecureAuthentication) { + logger.throwError("insecure authorized connections unsupported", "UNSUPPORTED_OPERATION", { + operation: "request" + }); + } + + const init = { + method: req.method, + headers: new Headers(Array.from(req)), + body: req.body || undefined, + }; + + const resp = await fetch(req.url, init); + + const headers: Record = { }; + resp.headers.forEach((value, key) => { + headers[key.toLowerCase()] = value; + }); + + const body = new Uint8Array(await resp.arrayBuffer()); + + return new FetchResponse(resp.status, resp.statusText, headers, body, req); +} + diff --git a/packages/web/src.ts/get-url.ts b/packages/web/src.ts/get-url.ts new file mode 100644 index 000000000..7a9e12acc --- /dev/null +++ b/packages/web/src.ts/get-url.ts @@ -0,0 +1,89 @@ + +import http from "http"; +import https from "https"; +import { gunzipSync } from "zlib"; + +import { arrayify } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; +import { FetchResponse } from "./response.js"; + +import type { FetchRequest } from "./request.js"; + + +export async function getUrl(req: FetchRequest, timeout: number): Promise { + + const protocol = req.url.split(":")[0].toLowerCase(); + + if (protocol !== "http" && protocol !== "https") { + logger.throwError(`unsupported protocol ${ protocol }`, "UNSUPPORTED_OPERATION", { + info: { protocol }, + operation: "request" + }); + } + + if (req.credentials && !req.allowInsecureAuthentication) { + logger.throwError("insecure authorized connections unsupported", "UNSUPPORTED_OPERATION", { + operation: "request" + }); + } + + const method = req.method; + const headers = Object.assign({ }, req.headers); + + const options: any = { method, headers }; + + const request = ((protocol === "http") ? http: https).request(req.url, options); + + request.setTimeout(timeout); + + const body = req.body; + if (body) { request.write(Buffer.from(body)); } + + request.end(); + + return new Promise((resolve, reject) => { + request.once("response", (resp: http.IncomingMessage) => { + const statusCode = resp.statusCode || 0; + const statusMessage = resp.statusMessage || ""; + const headers = Object.keys(resp.headers || {}).reduce((accum, name) => { + let value = resp.headers[name] || ""; + if (Array.isArray(value)) { + value = value.join(", "); + } + accum[name] = value; + return accum; + }, <{ [ name: string ]: string }>{ }); + + let body: null | Uint8Array = null; + //resp.setEncoding("utf8"); + + resp.on("data", (chunk: Uint8Array) => { + if (body == null) { + body = chunk; + } else { + const newBody = new Uint8Array(body.length + chunk.length); + newBody.set(body, 0); + newBody.set(chunk, body.length); + body = newBody; + } + }); + + resp.on("end", () => { + if (headers["content-encoding"] === "gzip" && body) { + body = arrayify(gunzipSync(body)); + } + + resolve(new FetchResponse(statusCode, statusMessage, headers, body, req)); + }); + + resp.on("error", (error) => { + (error).response = new FetchResponse(statusCode, statusMessage, headers, body, req); + reject(error); + }); + }); + + request.on("error", (error) => { reject(error); }); + }); +} + diff --git a/packages/web/src.ts/index.ts b/packages/web/src.ts/index.ts new file mode 100644 index 000000000..101762f6f --- /dev/null +++ b/packages/web/src.ts/index.ts @@ -0,0 +1,11 @@ + +export { fetchData } from "./fetch-data.js"; +export { FetchRequest } from "./request.js"; +export { FetchResponse } from "./response.js"; + +export type { + ConnectionInfo, + PreflightRequestFunc, ProcessResponseFunc, + ThrottleRetryFunc +} from "./fetch-data.js"; + diff --git a/packages/web/src.ts/logger.ts b/packages/web/src.ts/logger.ts new file mode 100644 index 000000000..a1bfc739b --- /dev/null +++ b/packages/web/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { version } from "./_version.js"; +import { Logger } from "@ethersproject/logger"; +export const logger = new Logger(version); diff --git a/packages/web/src.ts/request.ts b/packages/web/src.ts/request.ts new file mode 100644 index 000000000..8fb9a9858 --- /dev/null +++ b/packages/web/src.ts/request.ts @@ -0,0 +1,246 @@ + +import { getStore, setStore } from "@ethersproject/properties"; +import { toUtf8Bytes } from "@ethersproject/strings"; + +import { logger } from "./logger.js"; + +import type { Freezable, Frozen } from "@ethersproject/properties"; + + +function check(value: T, type: string, name: string): T { + if (typeof(value) !== type) { + throw new Error(`invalid ${ name }`); + } + return value; +} + +export interface FetchRequestWithBody extends FetchRequest { + body: Uint8Array; +} + +export class FetchRequest implements Freezable, Iterable<[ key: string, value: string ]> { + #props: { + allowInsecure: boolean, + gzip: boolean; + headers: Record, + method: string, + timeout: number, + url: string, + + body?: Uint8Array, + bodyType?: string, + creds?: string, + }; + + // URL + get url(): string { return getStore(this.#props, "url"); } + set url(url: string) { + setStore(this.#props, "url", check(url, "string", "url")); + } + + // Body + get body(): null | Uint8Array { + const body = getStore(this.#props, "body"); + if (body == null) { return null; } + if (this.isFrozen()) { return new Uint8Array(body); } + return body; + } + set body(body: null | string | Readonly | Readonly) { + if (body == null) { + setStore(this.#props, "body", undefined); + setStore(this.#props, "bodyType", undefined); + } else if (typeof(body) === "string") { + // @TODO: utf8-check + setStore(this.#props, "body", toUtf8Bytes(body)); + setStore(this.#props, "bodyType", "text/plain"); + } else if (body instanceof Uint8Array) { + setStore(this.#props, "body", body); + setStore(this.#props, "bodyType", "application/octet-stream"); + } else if (typeof(body) === "object") { + setStore(this.#props, "body", toUtf8Bytes(JSON.stringify(body))); + setStore(this.#props, "bodyType", "application/json"); + } else { + throw new Error("invalid body"); + } + } + hasBody(): this is FetchRequestWithBody { + return (getStore(this.#props, "body") != null); + } + + // Method (default: GET with no body, POST with a body) + get method(): string { + const method = getStore(this.#props, "method"); + if (method) { return method.toUpperCase(); } + if (this.body) { return "POST"; } + return "GET"; + } + set method(method: null | string) { + if (method == null) { method = ""; } + setStore(this.#props, "method", check(method, "string", "method")); + } + + // Headers (automatically fills content-type if not explicitly set) + get headers(): Readonly> { + const headers = Object.assign({ }, getStore(this.#props, "headers")); + const bodyType = getStore(this.#props, "bodyType"); + + if (this.credentials) { /* TODO */ }; + + if (this.allowGzip) { + headers["accept-encoding"] = "gzip"; + } + + if (headers["content-type"] == null && bodyType) { + headers["content-type"] = bodyType; + } + if (this.body) { headers["content-length"] = String(this.body.length); } + + return Object.freeze(headers); + } + getHeader(key: string): string { + return this.headers[key.toLowerCase()]; + } + setHeader(key: string, value: string | number): void { + const headers = getStore(this.#props, "headers"); + setStore(this.#props, "headers", headers); + headers[check(key, "string", "key").toLowerCase()] = String(value); + } + clearHeaders(): void { + setStore(this.#props, "headers", { }); + } + + [Symbol.iterator](): Iterator<[ key: string, value: string ]> { + const headers = this.headers; + const keys = Object.keys(headers); + let index = 0; + return { + next: () => { + if (index < keys.length) { + const key = keys[index++]; + return { + value: [ key, headers[key] ], done: false + } + } + return { value: undefined, done: true }; + } + }; + } + + // Configure an Authorization header + get credentials(): null | string { + return getStore(this.#props, "creds") || null; + } + setCredentials(username: string, password: string): void { + if (username.match(/:/)) { + logger.throwArgumentError("invalid basic authentication username", "username", "[REDACTED]"); + } + setStore(this.#props, "creds", `${ username }:${ password }`); + // @TODO: + //const auth = username + ":" + password; + //this.setHeader("authorization", "Basic " + base64Encode(toUtf8Bytes(auth))) + //this.setHeader("authorization", "Basic TODO:" + auth); + } + + // Configure the request to allow gzipped responses + get allowGzip(): boolean { + return getStore(this.#props, "gzip"); + } + set allowGzip(value: boolean) { + setStore(this.#props, "gzip", !!value); + } + + // Allow credentials to be sent over an insecure (non-HTTPS) channel + get allowInsecureAuthentication(): boolean { + return !!getStore(this.#props, "allowInsecure"); + } + set allowInsecureAuthentication(value: boolean) { + setStore(this.#props, "allowInsecure", check(value, "boolean", "allowInsecureAuthentication")); + } + + // Timeout (seconds) + get timeout(): number { return getStore(this.#props, "timeout"); } + set timeout(timeout: number) { + timeout = check(timeout, "number", "timeout"); + if (timeout <= 0) { throw new Error("invalid timerout"); } + setStore(this.#props, "timeout", timeout); + } + + constructor(url: string) { + this.#props = { + allowInsecure: false, + gzip: false, + headers: { }, + method: "", + timeout: 300, + url: check(url, "string", "url") + }; + } + + redirect(location: string): FetchRequest { + // Redirection; for now we only support absolute locataions + const current = this.url.split(":")[0].toLowerCase(); + const target = location.split(":")[0].toLowerCase(); + if (this.method !== "GET" || (current === "https" && target === "http") || + !location.match(/^https?:/)) { + return logger.throwError(`unsupported redirect`, "UNSUPPORTED_OPERATION", { + operation: `redirect(${ this.method } ${ JSON.stringify(this.url) } => ${ JSON.stringify(location) })` + }); + } + + // Create a copy of this request, with a new URL + const req = new FetchRequest(location); + req.method = "GET"; + req.allowGzip = this.allowGzip; + req.timeout = this.timeout; + setStore(req.#props, "body", getStore(this.#props, "body")); + setStore(req.#props, "headers", Object.assign({}, getStore(this.#props, "headers"))); + setStore(req.#props, "bodyType", getStore(this.#props, "bodyType")); + + // Do not forward credentials unless on the same domain; only absolute + //req.allowInsecure = false; + // paths are currently supported; may want a way to specify to forward? + //setStore(req.#props, "creds", getStore(this.#pros, "creds")); + + return req; + } + + clone(): FetchRequest { + const clone = new FetchRequest(this.url); + + // Preserve "default method" (i.e. null) + setStore(clone.#props, "method", getStore(this.#props, "method")); + + // Preserve "default body" with type, copying the Uint8Array is present + const body = getStore(this.#props, "body"); + setStore(clone.#props, "body", (body == null) ? undefined: new Uint8Array(body)); + setStore(clone.#props, "bodyType", getStore(this.#props, "bodyType")); + + // Preserve "default headers" + setStore(clone.#props, "headers", Object.assign({ }, getStore(this.#props, "headers"))); + + // Credentials is readonly, so we copy internally + setStore(clone.#props, "creds", getStore(this.#props, "creds")); + + if (this.allowGzip) { clone.allowGzip = true; } + + clone.timeout = this.timeout; + if (this.allowInsecureAuthentication) { clone.allowInsecureAuthentication = true; } + + return clone; + } + + freeze(): Frozen { + // Copy the body so any changes to previous access do not modify it + const body = getStore(this.#props, "body"); + if (body != null) { setStore(this.#props, "body", new Uint8Array(body)); } + + Object.freeze(this.#props.headers); + Object.freeze(this.#props); + + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } +} diff --git a/packages/web/src.ts/response.ts b/packages/web/src.ts/response.ts new file mode 100644 index 000000000..3fc9b74f5 --- /dev/null +++ b/packages/web/src.ts/response.ts @@ -0,0 +1,143 @@ +import { hexlify } from "@ethersproject/bytes"; +import { defineProperties, getStore } from "@ethersproject/properties"; +import { toUtf8String } from "@ethersproject/strings"; + +import { logger } from "./logger.js"; + +import type { FetchRequest } from "./request.js"; + +export interface FetchResponseWithBody extends FetchResponse { + body: Readonly; +} + +interface ThrottleError extends Error { + stall: number; + throttle: true; +}; + +export class FetchResponse implements Iterable<[ key: string, value: string ]> { + #props: { + statusCode: number, + statusMessage: string, + headers: Readonly>, + body: null | Readonly, + request: null | FetchRequest, + } + #error: { error?: Error, message: string }; + + toString(): string { + const body = getStore(this.#props, "body"); + return ``; + } + + get statusCode(): number { return getStore(this.#props, "statusCode"); } + get statusMessage(): string { return getStore(this.#props, "statusMessage"); } + get headers() { return getStore(this.#props, "headers"); } + get body(): null | Readonly { + const body = getStore(this.#props, "body"); + return (body == null) ? null: new Uint8Array(body); + } + get bodyText(): string { + try { + const body = getStore(this.#props, "body"); + return (body == null) ? "": toUtf8String(body); + } catch (error) { + return logger.throwError("response body is not valid UTF-8 data", "UNSUPPORTED_OPERATION", { + operation: "bodyText", info: { response: this } + }); + } + } + get bodyJson(): any { + try { + return JSON.parse(this.bodyText); + } catch (error) { + return logger.throwError("response body is not valid JSON", "UNSUPPORTED_OPERATION", { + operation: "bodyJson", info: { response: this } + }); + } + } + + [Symbol.iterator](): Iterator<[ key: string, value: string ]> { + const headers = this.headers; + const keys = Object.keys(headers); + let index = 0; + return { + next: () => { + if (index < keys.length) { + const key = keys[index++]; + return { + value: [ key, headers[key] ], done: false + } + } + return { value: undefined, done: true }; + } + }; + } + + constructor(statusCode: number, statusMessage: string, headers: Readonly>, body: null | Uint8Array, request?: FetchRequest) { + this.#props = { + statusCode, + statusMessage, + headers: Object.freeze(Object.assign({ }, Object.keys(headers).reduce((accum, k) => { + accum[k.toLowerCase()] = headers[k]; + return accum; + }, >{ }))), + body: ((body == null) ? null: new Uint8Array(body)), + request: (request || null), + }; + this.#error = { message: "" }; + } + + makeServerError(message?: string, error?: Error): FetchResponse { + let statusMessage: string; + if (!message) { + message = `${ this.statusCode } ${ this.statusMessage }`; + statusMessage = `CLIENT ESCALATED SERVER ERROR (${ message })`; + } else { + statusMessage = `CLIENT ESCALATED SERVER ERROR (${ this.statusCode } ${ this.statusMessage }; ${ message })`; + } + const response = new FetchResponse(599, statusMessage, this.headers, + this.body, getStore(this.#props, "request") || undefined); + response.#error = { message, error }; + return response; + } + + throwThrottleError(message?: string, stall?: number): never { + if (stall == null) { stall = 1000; } + if (typeof(stall) !== "number" || !Number.isInteger(stall) || stall < 0) { + logger.throwArgumentError("invalid stall timeout", "stall", stall); + } + + const error = new Error(message || "throttling requests"); + + defineProperties(error, { stall, throttle: true }); + + throw error; + } + + getHeader(key: string): string { + return this.headers[key.toLowerCase()]; + } + + hasBody(): this is FetchResponseWithBody { + const body = getStore(this.#props, "body"); + return (body != null); + } + + get request(): null | FetchRequest { return getStore(this.#props, "request"); } + + ok(): boolean { + return (this.#error.message === "" && this.statusCode >= 200 && this.statusCode < 300); + } + + assertOk(): void { + if (this.ok()) { return; } + let { message, error } = this.#error; + if (message === "") { + message = `server response ${ this.statusCode } ${ this.statusMessage }`; + } + logger.throwError(message, "SERVER_ERROR", { + request: (this.request || "unknown request"), response: this, error + }); + } +} diff --git a/packages/web/tsconfig.json b/packages/web/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/web/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/wordlists/.npmignore b/packages/wordlists/.npmignore new file mode 100644 index 000000000..ccab92b85 --- /dev/null +++ b/packages/wordlists/.npmignore @@ -0,0 +1,5 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo + +input/** diff --git a/packages/wordlists/LICENSE.md b/packages/wordlists/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/wordlists/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/wordlists/input/lang-cz.txt b/packages/wordlists/input/lang-cz.txt new file mode 100644 index 000000000..fdab4a2ae --- /dev/null +++ b/packages/wordlists/input/lang-cz.txt @@ -0,0 +1,2048 @@ +abdikace +abeceda +adresa +agrese +akce +aktovka +alej +alkohol +amputace +ananas +andulka +anekdota +anketa +antika +anulovat +archa +arogance +asfalt +asistent +aspirace +astma +astronom +atlas +atletika +atol +autobus +azyl +babka +bachor +bacil +baculka +badatel +bageta +bagr +bahno +bakterie +balada +baletka +balkon +balonek +balvan +balza +bambus +bankomat +barbar +baret +barman +baroko +barva +baterka +batoh +bavlna +bazalka +bazilika +bazuka +bedna +beran +beseda +bestie +beton +bezinka +bezmoc +beztak +bicykl +bidlo +biftek +bikiny +bilance +biograf +biolog +bitva +bizon +blahobyt +blatouch +blecha +bledule +blesk +blikat +blizna +blokovat +bloudit +blud +bobek +bobr +bodlina +bodnout +bohatost +bojkot +bojovat +bokorys +bolest +borec +borovice +bota +boubel +bouchat +bouda +boule +bourat +boxer +bradavka +brambora +branka +bratr +brepta +briketa +brko +brloh +bronz +broskev +brunetka +brusinka +brzda +brzy +bublina +bubnovat +buchta +buditel +budka +budova +bufet +bujarost +bukvice +buldok +bulva +bunda +bunkr +burza +butik +buvol +buzola +bydlet +bylina +bytovka +bzukot +capart +carevna +cedr +cedule +cejch +cejn +cela +celer +celkem +celnice +cenina +cennost +cenovka +centrum +cenzor +cestopis +cetka +chalupa +chapadlo +charita +chata +chechtat +chemie +chichot +chirurg +chlad +chleba +chlubit +chmel +chmura +chobot +chochol +chodba +cholera +chomout +chopit +choroba +chov +chrapot +chrlit +chrt +chrup +chtivost +chudina +chutnat +chvat +chvilka +chvost +chyba +chystat +chytit +cibule +cigareta +cihelna +cihla +cinkot +cirkus +cisterna +citace +citrus +cizinec +cizost +clona +cokoliv +couvat +ctitel +ctnost +cudnost +cuketa +cukr +cupot +cvaknout +cval +cvik +cvrkot +cyklista +daleko +dareba +datel +datum +dcera +debata +dechovka +decibel +deficit +deflace +dekl +dekret +demokrat +deprese +derby +deska +detektiv +dikobraz +diktovat +dioda +diplom +disk +displej +divadlo +divoch +dlaha +dlouho +dluhopis +dnes +dobro +dobytek +docent +dochutit +dodnes +dohled +dohoda +dohra +dojem +dojnice +doklad +dokola +doktor +dokument +dolar +doleva +dolina +doma +dominant +domluvit +domov +donutit +dopad +dopis +doplnit +doposud +doprovod +dopustit +dorazit +dorost +dort +dosah +doslov +dostatek +dosud +dosyta +dotaz +dotek +dotknout +doufat +doutnat +dovozce +dozadu +doznat +dozorce +drahota +drak +dramatik +dravec +draze +drdol +drobnost +drogerie +drozd +drsnost +drtit +drzost +duben +duchovno +dudek +duha +duhovka +dusit +dusno +dutost +dvojice +dvorec +dynamit +ekolog +ekonomie +elektron +elipsa +email +emise +emoce +empatie +epizoda +epocha +epopej +epos +esej +esence +eskorta +eskymo +etiketa +euforie +evoluce +exekuce +exkurze +expedice +exploze +export +extrakt +facka +fajfka +fakulta +fanatik +fantazie +farmacie +favorit +fazole +federace +fejeton +fenka +fialka +figurant +filozof +filtr +finance +finta +fixace +fjord +flanel +flirt +flotila +fond +fosfor +fotbal +fotka +foton +frakce +freska +fronta +fukar +funkce +fyzika +galeje +garant +genetika +geolog +gilotina +glazura +glejt +golem +golfista +gotika +graf +gramofon +granule +grep +gril +grog +groteska +guma +hadice +hadr +hala +halenka +hanba +hanopis +harfa +harpuna +havran +hebkost +hejkal +hejno +hejtman +hektar +helma +hematom +herec +herna +heslo +hezky +historik +hladovka +hlasivky +hlava +hledat +hlen +hlodavec +hloh +hloupost +hltat +hlubina +hluchota +hmat +hmota +hmyz +hnis +hnojivo +hnout +hoblina +hoboj +hoch +hodiny +hodlat +hodnota +hodovat +hojnost +hokej +holinka +holka +holub +homole +honitba +honorace +horal +horda +horizont +horko +horlivec +hormon +hornina +horoskop +horstvo +hospoda +hostina +hotovost +houba +houf +houpat +houska +hovor +hradba +hranice +hravost +hrazda +hrbolek +hrdina +hrdlo +hrdost +hrnek +hrobka +hromada +hrot +hrouda +hrozen +hrstka +hrubost +hryzat +hubenost +hubnout +hudba +hukot +humr +husita +hustota +hvozd +hybnost +hydrant +hygiena +hymna +hysterik +idylka +ihned +ikona +iluze +imunita +infekce +inflace +inkaso +inovace +inspekce +internet +invalida +investor +inzerce +ironie +jablko +jachta +jahoda +jakmile +jakost +jalovec +jantar +jarmark +jaro +jasan +jasno +jatka +javor +jazyk +jedinec +jedle +jednatel +jehlan +jekot +jelen +jelito +jemnost +jenom +jepice +jeseter +jevit +jezdec +jezero +jinak +jindy +jinoch +jiskra +jistota +jitrnice +jizva +jmenovat +jogurt +jurta +kabaret +kabel +kabinet +kachna +kadet +kadidlo +kahan +kajak +kajuta +kakao +kaktus +kalamita +kalhoty +kalibr +kalnost +kamera +kamkoliv +kamna +kanibal +kanoe +kantor +kapalina +kapela +kapitola +kapka +kaple +kapota +kapr +kapusta +kapybara +karamel +karotka +karton +kasa +katalog +katedra +kauce +kauza +kavalec +kazajka +kazeta +kazivost +kdekoliv +kdesi +kedluben +kemp +keramika +kino +klacek +kladivo +klam +klapot +klasika +klaun +klec +klenba +klepat +klesnout +klid +klima +klisna +klobouk +klokan +klopa +kloub +klubovna +klusat +kluzkost +kmen +kmitat +kmotr +kniha +knot +koalice +koberec +kobka +kobliha +kobyla +kocour +kohout +kojenec +kokos +koktejl +kolaps +koleda +kolize +kolo +komando +kometa +komik +komnata +komora +kompas +komunita +konat +koncept +kondice +konec +konfese +kongres +konina +konkurs +kontakt +konzerva +kopanec +kopie +kopnout +koprovka +korbel +korektor +kormidlo +koroptev +korpus +koruna +koryto +korzet +kosatec +kostka +kotel +kotleta +kotoul +koukat +koupelna +kousek +kouzlo +kovboj +koza +kozoroh +krabice +krach +krajina +kralovat +krasopis +kravata +kredit +krejcar +kresba +kreveta +kriket +kritik +krize +krkavec +krmelec +krmivo +krocan +krok +kronika +kropit +kroupa +krovka +krtek +kruhadlo +krupice +krutost +krvinka +krychle +krypta +krystal +kryt +kudlanka +kufr +kujnost +kukla +kulajda +kulich +kulka +kulomet +kultura +kuna +kupodivu +kurt +kurzor +kutil +kvalita +kvasinka +kvestor +kynolog +kyselina +kytara +kytice +kytka +kytovec +kyvadlo +labrador +lachtan +ladnost +laik +lakomec +lamela +lampa +lanovka +lasice +laso +lastura +latinka +lavina +lebka +leckdy +leden +lednice +ledovka +ledvina +legenda +legie +legrace +lehce +lehkost +lehnout +lektvar +lenochod +lentilka +lepenka +lepidlo +letadlo +letec +letmo +letokruh +levhart +levitace +levobok +libra +lichotka +lidojed +lidskost +lihovina +lijavec +lilek +limetka +linie +linka +linoleum +listopad +litina +litovat +lobista +lodivod +logika +logoped +lokalita +loket +lomcovat +lopata +lopuch +lord +losos +lotr +loudal +louh +louka +louskat +lovec +lstivost +lucerna +lucifer +lump +lusk +lustrace +lvice +lyra +lyrika +lysina +madam +madlo +magistr +mahagon +majetek +majitel +majorita +makak +makovice +makrela +malba +malina +malovat +malvice +maminka +mandle +manko +marnost +masakr +maskot +masopust +matice +matrika +maturita +mazanec +mazivo +mazlit +mazurka +mdloba +mechanik +meditace +medovina +melasa +meloun +mentolka +metla +metoda +metr +mezera +migrace +mihnout +mihule +mikina +mikrofon +milenec +milimetr +milost +mimika +mincovna +minibar +minomet +minulost +miska +mistr +mixovat +mladost +mlha +mlhovina +mlok +mlsat +mluvit +mnich +mnohem +mobil +mocnost +modelka +modlitba +mohyla +mokro +molekula +momentka +monarcha +monokl +monstrum +montovat +monzun +mosaz +moskyt +most +motivace +motorka +motyka +moucha +moudrost +mozaika +mozek +mozol +mramor +mravenec +mrkev +mrtvola +mrzet +mrzutost +mstitel +mudrc +muflon +mulat +mumie +munice +muset +mutace +muzeum +muzikant +myslivec +mzda +nabourat +nachytat +nadace +nadbytek +nadhoz +nadobro +nadpis +nahlas +nahnat +nahodile +nahradit +naivita +najednou +najisto +najmout +naklonit +nakonec +nakrmit +nalevo +namazat +namluvit +nanometr +naoko +naopak +naostro +napadat +napevno +naplnit +napnout +naposled +naprosto +narodit +naruby +narychlo +nasadit +nasekat +naslepo +nastat +natolik +navenek +navrch +navzdory +nazvat +nebe +nechat +necky +nedaleko +nedbat +neduh +negace +nehet +nehoda +nejen +nejprve +neklid +nelibost +nemilost +nemoc +neochota +neonka +nepokoj +nerost +nerv +nesmysl +nesoulad +netvor +neuron +nevina +nezvykle +nicota +nijak +nikam +nikdy +nikl +nikterak +nitro +nocleh +nohavice +nominace +nora +norek +nositel +nosnost +nouze +noviny +novota +nozdra +nuda +nudle +nuget +nutit +nutnost +nutrie +nymfa +obal +obarvit +obava +obdiv +obec +obehnat +obejmout +obezita +obhajoba +obilnice +objasnit +objekt +obklopit +oblast +oblek +obliba +obloha +obluda +obnos +obohatit +obojek +obout +obrazec +obrna +obruba +obrys +obsah +obsluha +obstarat +obuv +obvaz +obvinit +obvod +obvykle +obyvatel +obzor +ocas +ocel +ocenit +ochladit +ochota +ochrana +ocitnout +odboj +odbyt +odchod +odcizit +odebrat +odeslat +odevzdat +odezva +odhadce +odhodit +odjet +odjinud +odkaz +odkoupit +odliv +odluka +odmlka +odolnost +odpad +odpis +odplout +odpor +odpustit +odpykat +odrazka +odsoudit +odstup +odsun +odtok +odtud +odvaha +odveta +odvolat +odvracet +odznak +ofina +ofsajd +ohlas +ohnisko +ohrada +ohrozit +ohryzek +okap +okenice +oklika +okno +okouzlit +okovy +okrasa +okres +okrsek +okruh +okupant +okurka +okusit +olejnina +olizovat +omak +omeleta +omezit +omladina +omlouvat +omluva +omyl +onehdy +opakovat +opasek +operace +opice +opilost +opisovat +opora +opozice +opravdu +oproti +orbital +orchestr +orgie +orlice +orloj +ortel +osada +oschnout +osika +osivo +oslava +oslepit +oslnit +oslovit +osnova +osoba +osolit +ospalec +osten +ostraha +ostuda +ostych +osvojit +oteplit +otisk +otop +otrhat +otrlost +otrok +otruby +otvor +ovanout +ovar +oves +ovlivnit +ovoce +oxid +ozdoba +pachatel +pacient +padouch +pahorek +pakt +palanda +palec +palivo +paluba +pamflet +pamlsek +panenka +panika +panna +panovat +panstvo +pantofle +paprika +parketa +parodie +parta +paruka +paryba +paseka +pasivita +pastelka +patent +patrona +pavouk +pazneht +pazourek +pecka +pedagog +pejsek +peklo +peloton +penalta +pendrek +penze +periskop +pero +pestrost +petarda +petice +petrolej +pevnina +pexeso +pianista +piha +pijavice +pikle +piknik +pilina +pilnost +pilulka +pinzeta +pipeta +pisatel +pistole +pitevna +pivnice +pivovar +placenta +plakat +plamen +planeta +plastika +platit +plavidlo +plaz +plech +plemeno +plenta +ples +pletivo +plevel +plivat +plnit +plno +plocha +plodina +plomba +plout +pluk +plyn +pobavit +pobyt +pochod +pocit +poctivec +podat +podcenit +podepsat +podhled +podivit +podklad +podmanit +podnik +podoba +podpora +podraz +podstata +podvod +podzim +poezie +pohanka +pohnutka +pohovor +pohroma +pohyb +pointa +pojistka +pojmout +pokazit +pokles +pokoj +pokrok +pokuta +pokyn +poledne +polibek +polknout +poloha +polynom +pomalu +pominout +pomlka +pomoc +pomsta +pomyslet +ponechat +ponorka +ponurost +popadat +popel +popisek +poplach +poprosit +popsat +popud +poradce +porce +porod +porucha +poryv +posadit +posed +posila +poskok +poslanec +posoudit +pospolu +postava +posudek +posyp +potah +potkan +potlesk +potomek +potrava +potupa +potvora +poukaz +pouto +pouzdro +povaha +povidla +povlak +povoz +povrch +povstat +povyk +povzdech +pozdrav +pozemek +poznatek +pozor +pozvat +pracovat +prahory +praktika +prales +praotec +praporek +prase +pravda +princip +prkno +probudit +procento +prodej +profese +prohra +projekt +prolomit +promile +pronikat +propad +prorok +prosba +proton +proutek +provaz +prskavka +prsten +prudkost +prut +prvek +prvohory +psanec +psovod +pstruh +ptactvo +puberta +puch +pudl +pukavec +puklina +pukrle +pult +pumpa +punc +pupen +pusa +pusinka +pustina +putovat +putyka +pyramida +pysk +pytel +racek +rachot +radiace +radnice +radon +raft +ragby +raketa +rakovina +rameno +rampouch +rande +rarach +rarita +rasovna +rastr +ratolest +razance +razidlo +reagovat +reakce +recept +redaktor +referent +reflex +rejnok +reklama +rekord +rekrut +rektor +reputace +revize +revma +revolver +rezerva +riskovat +riziko +robotika +rodokmen +rohovka +rokle +rokoko +romaneto +ropovod +ropucha +rorejs +rosol +rostlina +rotmistr +rotoped +rotunda +roubenka +roucho +roup +roura +rovina +rovnice +rozbor +rozchod +rozdat +rozeznat +rozhodce +rozinka +rozjezd +rozkaz +rozloha +rozmar +rozpad +rozruch +rozsah +roztok +rozum +rozvod +rubrika +ruchadlo +rukavice +rukopis +ryba +rybolov +rychlost +rydlo +rypadlo +rytina +ryzost +sadista +sahat +sako +samec +samizdat +samota +sanitka +sardinka +sasanka +satelit +sazba +sazenice +sbor +schovat +sebranka +secese +sedadlo +sediment +sedlo +sehnat +sejmout +sekera +sekta +sekunda +sekvoje +semeno +seno +servis +sesadit +seshora +seskok +seslat +sestra +sesuv +sesypat +setba +setina +setkat +setnout +setrvat +sever +seznam +shoda +shrnout +sifon +silnice +sirka +sirotek +sirup +situace +skafandr +skalisko +skanzen +skaut +skeptik +skica +skladba +sklenice +sklo +skluz +skoba +skokan +skoro +skripta +skrz +skupina +skvost +skvrna +slabika +sladidlo +slanina +slast +slavnost +sledovat +slepec +sleva +slezina +slib +slina +sliznice +slon +sloupek +slovo +sluch +sluha +slunce +slupka +slza +smaragd +smetana +smilstvo +smlouva +smog +smrad +smrk +smrtka +smutek +smysl +snad +snaha +snob +sobota +socha +sodovka +sokol +sopka +sotva +souboj +soucit +soudce +souhlas +soulad +soumrak +souprava +soused +soutok +souviset +spalovna +spasitel +spis +splav +spodek +spojenec +spolu +sponzor +spornost +spousta +sprcha +spustit +sranda +sraz +srdce +srna +srnec +srovnat +srpen +srst +srub +stanice +starosta +statika +stavba +stehno +stezka +stodola +stolek +stopa +storno +stoupat +strach +stres +strhnout +strom +struna +studna +stupnice +stvol +styk +subjekt +subtropy +suchar +sudost +sukno +sundat +sunout +surikata +surovina +svah +svalstvo +svetr +svatba +svazek +svisle +svitek +svoboda +svodidlo +svorka +svrab +sykavka +sykot +synek +synovec +sypat +sypkost +syrovost +sysel +sytost +tabletka +tabule +tahoun +tajemno +tajfun +tajga +tajit +tajnost +taktika +tamhle +tampon +tancovat +tanec +tanker +tapeta +tavenina +tazatel +technika +tehdy +tekutina +telefon +temnota +tendence +tenista +tenor +teplota +tepna +teprve +terapie +termoska +textil +ticho +tiskopis +titulek +tkadlec +tkanina +tlapka +tleskat +tlukot +tlupa +tmel +toaleta +topinka +topol +torzo +touha +toulec +tradice +traktor +tramp +trasa +traverza +trefit +trest +trezor +trhavina +trhlina +trochu +trojice +troska +trouba +trpce +trpitel +trpkost +trubec +truchlit +truhlice +trus +trvat +tudy +tuhnout +tuhost +tundra +turista +turnaj +tuzemsko +tvaroh +tvorba +tvrdost +tvrz +tygr +tykev +ubohost +uboze +ubrat +ubrousek +ubrus +ubytovna +ucho +uctivost +udivit +uhradit +ujednat +ujistit +ujmout +ukazatel +uklidnit +uklonit +ukotvit +ukrojit +ulice +ulita +ulovit +umyvadlo +unavit +uniforma +uniknout +upadnout +uplatnit +uplynout +upoutat +upravit +uran +urazit +usednout +usilovat +usmrtit +usnadnit +usnout +usoudit +ustlat +ustrnout +utahovat +utkat +utlumit +utonout +utopenec +utrousit +uvalit +uvolnit +uvozovka +uzdravit +uzel +uzenina +uzlina +uznat +vagon +valcha +valoun +vana +vandal +vanilka +varan +varhany +varovat +vcelku +vchod +vdova +vedro +vegetace +vejce +velbloud +veletrh +velitel +velmoc +velryba +venkov +veranda +verze +veselka +veskrze +vesnice +vespodu +vesta +veterina +veverka +vibrace +vichr +videohra +vidina +vidle +vila +vinice +viset +vitalita +vize +vizitka +vjezd +vklad +vkus +vlajka +vlak +vlasec +vlevo +vlhkost +vliv +vlnovka +vloupat +vnucovat +vnuk +voda +vodivost +vodoznak +vodstvo +vojensky +vojna +vojsko +volant +volba +volit +volno +voskovka +vozidlo +vozovna +vpravo +vrabec +vracet +vrah +vrata +vrba +vrcholek +vrhat +vrstva +vrtule +vsadit +vstoupit +vstup +vtip +vybavit +vybrat +vychovat +vydat +vydra +vyfotit +vyhledat +vyhnout +vyhodit +vyhradit +vyhubit +vyjasnit +vyjet +vyjmout +vyklopit +vykonat +vylekat +vymazat +vymezit +vymizet +vymyslet +vynechat +vynikat +vynutit +vypadat +vyplatit +vypravit +vypustit +vyrazit +vyrovnat +vyrvat +vyslovit +vysoko +vystavit +vysunout +vysypat +vytasit +vytesat +vytratit +vyvinout +vyvolat +vyvrhel +vyzdobit +vyznat +vzadu +vzbudit +vzchopit +vzdor +vzduch +vzdychat +vzestup +vzhledem +vzkaz +vzlykat +vznik +vzorek +vzpoura +vztah +vztek +xylofon +zabrat +zabydlet +zachovat +zadarmo +zadusit +zafoukat +zahltit +zahodit +zahrada +zahynout +zajatec +zajet +zajistit +zaklepat +zakoupit +zalepit +zamezit +zamotat +zamyslet +zanechat +zanikat +zaplatit +zapojit +zapsat +zarazit +zastavit +zasunout +zatajit +zatemnit +zatknout +zaujmout +zavalit +zavelet +zavinit +zavolat +zavrtat +zazvonit +zbavit +zbrusu +zbudovat +zbytek +zdaleka +zdarma +zdatnost +zdivo +zdobit +zdroj +zdvih +zdymadlo +zelenina +zeman +zemina +zeptat +zezadu +zezdola +zhatit +zhltnout +zhluboka +zhotovit +zhruba +zima +zimnice +zjemnit +zklamat +zkoumat +zkratka +zkumavka +zlato +zlehka +zloba +zlom +zlost +zlozvyk +zmapovat +zmar +zmatek +zmije +zmizet +zmocnit +zmodrat +zmrzlina +zmutovat +znak +znalost +znamenat +znovu +zobrazit +zotavit +zoubek +zoufale +zplodit +zpomalit +zprava +zprostit +zprudka +zprvu +zrada +zranit +zrcadlo +zrnitost +zrno +zrovna +zrychlit +zrzavost +zticha +ztratit +zubovina +zubr +zvednout +zvenku +zvesela +zvon +zvrat +zvukovod +zvyk diff --git a/packages/wordlists/input/lang-en.txt b/packages/wordlists/input/lang-en.txt new file mode 100644 index 000000000..942040ed5 --- /dev/null +++ b/packages/wordlists/input/lang-en.txt @@ -0,0 +1,2048 @@ +abandon +ability +able +about +above +absent +absorb +abstract +absurd +abuse +access +accident +account +accuse +achieve +acid +acoustic +acquire +across +act +action +actor +actress +actual +adapt +add +addict +address +adjust +admit +adult +advance +advice +aerobic +affair +afford +afraid +again +age +agent +agree +ahead +aim +air +airport +aisle +alarm +album +alcohol +alert +alien +all +alley +allow +almost +alone +alpha +already +also +alter +always +amateur +amazing +among +amount +amused +analyst +anchor +ancient +anger +angle +angry +animal +ankle +announce +annual +another +answer +antenna +antique +anxiety +any +apart +apology +appear +apple +approve +april +arch +arctic +area +arena +argue +arm +armed +armor +army +around +arrange +arrest +arrive +arrow +art +artefact +artist +artwork +ask +aspect +assault +asset +assist +assume +asthma +athlete +atom +attack +attend +attitude +attract +auction +audit +august +aunt +author +auto +autumn +average +avocado +avoid +awake +aware +away +awesome +awful +awkward +axis +baby +bachelor +bacon +badge +bag +balance +balcony +ball +bamboo +banana +banner +bar +barely +bargain +barrel +base +basic +basket +battle +beach +bean +beauty +because +become +beef +before +begin +behave +behind +believe +below +belt +bench +benefit +best +betray +better +between +beyond +bicycle +bid +bike +bind +biology +bird +birth +bitter +black +blade +blame +blanket +blast +bleak +bless +blind +blood +blossom +blouse +blue +blur +blush +board +boat +body +boil +bomb +bone +bonus +book +boost +border +boring +borrow +boss +bottom +bounce +box +boy +bracket +brain +brand +brass +brave +bread +breeze +brick +bridge +brief +bright +bring +brisk +broccoli +broken +bronze +broom +brother +brown +brush +bubble +buddy +budget +buffalo +build +bulb +bulk +bullet +bundle +bunker +burden +burger +burst +bus +business +busy +butter +buyer +buzz +cabbage +cabin +cable +cactus +cage +cake +call +calm +camera +camp +can +canal +cancel +candy +cannon +canoe +canvas +canyon +capable +capital +captain +car +carbon +card +cargo +carpet +carry +cart +case +cash +casino +castle +casual +cat +catalog +catch +category +cattle +caught +cause +caution +cave +ceiling +celery +cement +census +century +cereal +certain +chair +chalk +champion +change +chaos +chapter +charge +chase +chat +cheap +check +cheese +chef +cherry +chest +chicken +chief +child +chimney +choice +choose +chronic +chuckle +chunk +churn +cigar +cinnamon +circle +citizen +city +civil +claim +clap +clarify +claw +clay +clean +clerk +clever +click +client +cliff +climb +clinic +clip +clock +clog +close +cloth +cloud +clown +club +clump +cluster +clutch +coach +coast +coconut +code +coffee +coil +coin +collect +color +column +combine +come +comfort +comic +common +company +concert +conduct +confirm +congress +connect +consider +control +convince +cook +cool +copper +copy +coral +core +corn +correct +cost +cotton +couch +country +couple +course +cousin +cover +coyote +crack +cradle +craft +cram +crane +crash +crater +crawl +crazy +cream +credit +creek +crew +cricket +crime +crisp +critic +crop +cross +crouch +crowd +crucial +cruel +cruise +crumble +crunch +crush +cry +crystal +cube +culture +cup +cupboard +curious +current +curtain +curve +cushion +custom +cute +cycle +dad +damage +damp +dance +danger +daring +dash +daughter +dawn +day +deal +debate +debris +decade +december +decide +decline +decorate +decrease +deer +defense +define +defy +degree +delay +deliver +demand +demise +denial +dentist +deny +depart +depend +deposit +depth +deputy +derive +describe +desert +design +desk +despair +destroy +detail +detect +develop +device +devote +diagram +dial +diamond +diary +dice +diesel +diet +differ +digital +dignity +dilemma +dinner +dinosaur +direct +dirt +disagree +discover +disease +dish +dismiss +disorder +display +distance +divert +divide +divorce +dizzy +doctor +document +dog +doll +dolphin +domain +donate +donkey +donor +door +dose +double +dove +draft +dragon +drama +drastic +draw +dream +dress +drift +drill +drink +drip +drive +drop +drum +dry +duck +dumb +dune +during +dust +dutch +duty +dwarf +dynamic +eager +eagle +early +earn +earth +easily +east +easy +echo +ecology +economy +edge +edit +educate +effort +egg +eight +either +elbow +elder +electric +elegant +element +elephant +elevator +elite +else +embark +embody +embrace +emerge +emotion +employ +empower +empty +enable +enact +end +endless +endorse +enemy +energy +enforce +engage +engine +enhance +enjoy +enlist +enough +enrich +enroll +ensure +enter +entire +entry +envelope +episode +equal +equip +era +erase +erode +erosion +error +erupt +escape +essay +essence +estate +eternal +ethics +evidence +evil +evoke +evolve +exact +example +excess +exchange +excite +exclude +excuse +execute +exercise +exhaust +exhibit +exile +exist +exit +exotic +expand +expect +expire +explain +expose +express +extend +extra +eye +eyebrow +fabric +face +faculty +fade +faint +faith +fall +false +fame +family +famous +fan +fancy +fantasy +farm +fashion +fat +fatal +father +fatigue +fault +favorite +feature +february +federal +fee +feed +feel +female +fence +festival +fetch +fever +few +fiber +fiction +field +figure +file +film +filter +final +find +fine +finger +finish +fire +firm +first +fiscal +fish +fit +fitness +fix +flag +flame +flash +flat +flavor +flee +flight +flip +float +flock +floor +flower +fluid +flush +fly +foam +focus +fog +foil +fold +follow +food +foot +force +forest +forget +fork +fortune +forum +forward +fossil +foster +found +fox +fragile +frame +frequent +fresh +friend +fringe +frog +front +frost +frown +frozen +fruit +fuel +fun +funny +furnace +fury +future +gadget +gain +galaxy +gallery +game +gap +garage +garbage +garden +garlic +garment +gas +gasp +gate +gather +gauge +gaze +general +genius +genre +gentle +genuine +gesture +ghost +giant +gift +giggle +ginger +giraffe +girl +give +glad +glance +glare +glass +glide +glimpse +globe +gloom +glory +glove +glow +glue +goat +goddess +gold +good +goose +gorilla +gospel +gossip +govern +gown +grab +grace +grain +grant +grape +grass +gravity +great +green +grid +grief +grit +grocery +group +grow +grunt +guard +guess +guide +guilt +guitar +gun +gym +habit +hair +half +hammer +hamster +hand +happy +harbor +hard +harsh +harvest +hat +have +hawk +hazard +head +health +heart +heavy +hedgehog +height +hello +helmet +help +hen +hero +hidden +high +hill +hint +hip +hire +history +hobby +hockey +hold +hole +holiday +hollow +home +honey +hood +hope +horn +horror +horse +hospital +host +hotel +hour +hover +hub +huge +human +humble +humor +hundred +hungry +hunt +hurdle +hurry +hurt +husband +hybrid +ice +icon +idea +identify +idle +ignore +ill +illegal +illness +image +imitate +immense +immune +impact +impose +improve +impulse +inch +include +income +increase +index +indicate +indoor +industry +infant +inflict +inform +inhale +inherit +initial +inject +injury +inmate +inner +innocent +input +inquiry +insane +insect +inside +inspire +install +intact +interest +into +invest +invite +involve +iron +island +isolate +issue +item +ivory +jacket +jaguar +jar +jazz +jealous +jeans +jelly +jewel +job +join +joke +journey +joy +judge +juice +jump +jungle +junior +junk +just +kangaroo +keen +keep +ketchup +key +kick +kid +kidney +kind +kingdom +kiss +kit +kitchen +kite +kitten +kiwi +knee +knife +knock +know +lab +label +labor +ladder +lady +lake +lamp +language +laptop +large +later +latin +laugh +laundry +lava +law +lawn +lawsuit +layer +lazy +leader +leaf +learn +leave +lecture +left +leg +legal +legend +leisure +lemon +lend +length +lens +leopard +lesson +letter +level +liar +liberty +library +license +life +lift +light +like +limb +limit +link +lion +liquid +list +little +live +lizard +load +loan +lobster +local +lock +logic +lonely +long +loop +lottery +loud +lounge +love +loyal +lucky +luggage +lumber +lunar +lunch +luxury +lyrics +machine +mad +magic +magnet +maid +mail +main +major +make +mammal +man +manage +mandate +mango +mansion +manual +maple +marble +march +margin +marine +market +marriage +mask +mass +master +match +material +math +matrix +matter +maximum +maze +meadow +mean +measure +meat +mechanic +medal +media +melody +melt +member +memory +mention +menu +mercy +merge +merit +merry +mesh +message +metal +method +middle +midnight +milk +million +mimic +mind +minimum +minor +minute +miracle +mirror +misery +miss +mistake +mix +mixed +mixture +mobile +model +modify +mom +moment +monitor +monkey +monster +month +moon +moral +more +morning +mosquito +mother +motion +motor +mountain +mouse +move +movie +much +muffin +mule +multiply +muscle +museum +mushroom +music +must +mutual +myself +mystery +myth +naive +name +napkin +narrow +nasty +nation +nature +near +neck +need +negative +neglect +neither +nephew +nerve +nest +net +network +neutral +never +news +next +nice +night +noble +noise +nominee +noodle +normal +north +nose +notable +note +nothing +notice +novel +now +nuclear +number +nurse +nut +oak +obey +object +oblige +obscure +observe +obtain +obvious +occur +ocean +october +odor +off +offer +office +often +oil +okay +old +olive +olympic +omit +once +one +onion +online +only +open +opera +opinion +oppose +option +orange +orbit +orchard +order +ordinary +organ +orient +original +orphan +ostrich +other +outdoor +outer +output +outside +oval +oven +over +own +owner +oxygen +oyster +ozone +pact +paddle +page +pair +palace +palm +panda +panel +panic +panther +paper +parade +parent +park +parrot +party +pass +patch +path +patient +patrol +pattern +pause +pave +payment +peace +peanut +pear +peasant +pelican +pen +penalty +pencil +people +pepper +perfect +permit +person +pet +phone +photo +phrase +physical +piano +picnic +picture +piece +pig +pigeon +pill +pilot +pink +pioneer +pipe +pistol +pitch +pizza +place +planet +plastic +plate +play +please +pledge +pluck +plug +plunge +poem +poet +point +polar +pole +police +pond +pony +pool +popular +portion +position +possible +post +potato +pottery +poverty +powder +power +practice +praise +predict +prefer +prepare +present +pretty +prevent +price +pride +primary +print +priority +prison +private +prize +problem +process +produce +profit +program +project +promote +proof +property +prosper +protect +proud +provide +public +pudding +pull +pulp +pulse +pumpkin +punch +pupil +puppy +purchase +purity +purpose +purse +push +put +puzzle +pyramid +quality +quantum +quarter +question +quick +quit +quiz +quote +rabbit +raccoon +race +rack +radar +radio +rail +rain +raise +rally +ramp +ranch +random +range +rapid +rare +rate +rather +raven +raw +razor +ready +real +reason +rebel +rebuild +recall +receive +recipe +record +recycle +reduce +reflect +reform +refuse +region +regret +regular +reject +relax +release +relief +rely +remain +remember +remind +remove +render +renew +rent +reopen +repair +repeat +replace +report +require +rescue +resemble +resist +resource +response +result +retire +retreat +return +reunion +reveal +review +reward +rhythm +rib +ribbon +rice +rich +ride +ridge +rifle +right +rigid +ring +riot +ripple +risk +ritual +rival +river +road +roast +robot +robust +rocket +romance +roof +rookie +room +rose +rotate +rough +round +route +royal +rubber +rude +rug +rule +run +runway +rural +sad +saddle +sadness +safe +sail +salad +salmon +salon +salt +salute +same +sample +sand +satisfy +satoshi +sauce +sausage +save +say +scale +scan +scare +scatter +scene +scheme +school +science +scissors +scorpion +scout +scrap +screen +script +scrub +sea +search +season +seat +second +secret +section +security +seed +seek +segment +select +sell +seminar +senior +sense +sentence +series +service +session +settle +setup +seven +shadow +shaft +shallow +share +shed +shell +sheriff +shield +shift +shine +ship +shiver +shock +shoe +shoot +shop +short +shoulder +shove +shrimp +shrug +shuffle +shy +sibling +sick +side +siege +sight +sign +silent +silk +silly +silver +similar +simple +since +sing +siren +sister +situate +six +size +skate +sketch +ski +skill +skin +skirt +skull +slab +slam +sleep +slender +slice +slide +slight +slim +slogan +slot +slow +slush +small +smart +smile +smoke +smooth +snack +snake +snap +sniff +snow +soap +soccer +social +sock +soda +soft +solar +soldier +solid +solution +solve +someone +song +soon +sorry +sort +soul +sound +soup +source +south +space +spare +spatial +spawn +speak +special +speed +spell +spend +sphere +spice +spider +spike +spin +spirit +split +spoil +sponsor +spoon +sport +spot +spray +spread +spring +spy +square +squeeze +squirrel +stable +stadium +staff +stage +stairs +stamp +stand +start +state +stay +steak +steel +stem +step +stereo +stick +still +sting +stock +stomach +stone +stool +story +stove +strategy +street +strike +strong +struggle +student +stuff +stumble +style +subject +submit +subway +success +such +sudden +suffer +sugar +suggest +suit +summer +sun +sunny +sunset +super +supply +supreme +sure +surface +surge +surprise +surround +survey +suspect +sustain +swallow +swamp +swap +swarm +swear +sweet +swift +swim +swing +switch +sword +symbol +symptom +syrup +system +table +tackle +tag +tail +talent +talk +tank +tape +target +task +taste +tattoo +taxi +teach +team +tell +ten +tenant +tennis +tent +term +test +text +thank +that +theme +then +theory +there +they +thing +this +thought +three +thrive +throw +thumb +thunder +ticket +tide +tiger +tilt +timber +time +tiny +tip +tired +tissue +title +toast +tobacco +today +toddler +toe +together +toilet +token +tomato +tomorrow +tone +tongue +tonight +tool +tooth +top +topic +topple +torch +tornado +tortoise +toss +total +tourist +toward +tower +town +toy +track +trade +traffic +tragic +train +transfer +trap +trash +travel +tray +treat +tree +trend +trial +tribe +trick +trigger +trim +trip +trophy +trouble +truck +true +truly +trumpet +trust +truth +try +tube +tuition +tumble +tuna +tunnel +turkey +turn +turtle +twelve +twenty +twice +twin +twist +two +type +typical +ugly +umbrella +unable +unaware +uncle +uncover +under +undo +unfair +unfold +unhappy +uniform +unique +unit +universe +unknown +unlock +until +unusual +unveil +update +upgrade +uphold +upon +upper +upset +urban +urge +usage +use +used +useful +useless +usual +utility +vacant +vacuum +vague +valid +valley +valve +van +vanish +vapor +various +vast +vault +vehicle +velvet +vendor +venture +venue +verb +verify +version +very +vessel +veteran +viable +vibrant +vicious +victory +video +view +village +vintage +violin +virtual +virus +visa +visit +visual +vital +vivid +vocal +voice +void +volcano +volume +vote +voyage +wage +wagon +wait +walk +wall +walnut +want +warfare +warm +warrior +wash +wasp +waste +water +wave +way +wealth +weapon +wear +weasel +weather +web +wedding +weekend +weird +welcome +west +wet +whale +what +wheat +wheel +when +where +whip +whisper +wide +width +wife +wild +will +win +window +wine +wing +wink +winner +winter +wire +wisdom +wise +wish +witness +wolf +woman +wonder +wood +wool +word +work +world +worry +worth +wrap +wreck +wrestle +wrist +write +wrong +yard +year +yellow +you +young +youth +zebra +zero +zone +zoo diff --git a/packages/wordlists/input/lang-es.txt b/packages/wordlists/input/lang-es.txt new file mode 100644 index 000000000..fdbc23c73 --- /dev/null +++ b/packages/wordlists/input/lang-es.txt @@ -0,0 +1,2048 @@ +ábaco +abdomen +abeja +abierto +abogado +abono +aborto +abrazo +abrir +abuelo +abuso +acabar +academia +acceso +acción +aceite +acelga +acento +aceptar +ácido +aclarar +acné +acoger +acoso +activo +acto +actriz +actuar +acudir +acuerdo +acusar +adicto +admitir +adoptar +adorno +aduana +adulto +aéreo +afectar +afición +afinar +afirmar +ágil +agitar +agonía +agosto +agotar +agregar +agrio +agua +agudo +águila +aguja +ahogo +ahorro +aire +aislar +ajedrez +ajeno +ajuste +alacrán +alambre +alarma +alba +álbum +alcalde +aldea +alegre +alejar +alerta +aleta +alfiler +alga +algodón +aliado +aliento +alivio +alma +almeja +almíbar +altar +alteza +altivo +alto +altura +alumno +alzar +amable +amante +amapola +amargo +amasar +ámbar +ámbito +ameno +amigo +amistad +amor +amparo +amplio +ancho +anciano +ancla +andar +andén +anemia +ángulo +anillo +ánimo +anís +anotar +antena +antiguo +antojo +anual +anular +anuncio +añadir +añejo +año +apagar +aparato +apetito +apio +aplicar +apodo +aporte +apoyo +aprender +aprobar +apuesta +apuro +arado +araña +arar +árbitro +árbol +arbusto +archivo +arco +arder +ardilla +arduo +área +árido +aries +armonía +arnés +aroma +arpa +arpón +arreglo +arroz +arruga +arte +artista +asa +asado +asalto +ascenso +asegurar +aseo +asesor +asiento +asilo +asistir +asno +asombro +áspero +astilla +astro +astuto +asumir +asunto +atajo +ataque +atar +atento +ateo +ático +atleta +átomo +atraer +atroz +atún +audaz +audio +auge +aula +aumento +ausente +autor +aval +avance +avaro +ave +avellana +avena +avestruz +avión +aviso +ayer +ayuda +ayuno +azafrán +azar +azote +azúcar +azufre +azul +baba +babor +bache +bahía +baile +bajar +balanza +balcón +balde +bambú +banco +banda +baño +barba +barco +barniz +barro +báscula +bastón +basura +batalla +batería +batir +batuta +baúl +bazar +bebé +bebida +bello +besar +beso +bestia +bicho +bien +bingo +blanco +bloque +blusa +boa +bobina +bobo +boca +bocina +boda +bodega +boina +bola +bolero +bolsa +bomba +bondad +bonito +bono +bonsái +borde +borrar +bosque +bote +botín +bóveda +bozal +bravo +brazo +brecha +breve +brillo +brinco +brisa +broca +broma +bronce +brote +bruja +brusco +bruto +buceo +bucle +bueno +buey +bufanda +bufón +búho +buitre +bulto +burbuja +burla +burro +buscar +butaca +buzón +caballo +cabeza +cabina +cabra +cacao +cadáver +cadena +caer +café +caída +caimán +caja +cajón +cal +calamar +calcio +caldo +calidad +calle +calma +calor +calvo +cama +cambio +camello +camino +campo +cáncer +candil +canela +canguro +canica +canto +caña +cañón +caoba +caos +capaz +capitán +capote +captar +capucha +cara +carbón +cárcel +careta +carga +cariño +carne +carpeta +carro +carta +casa +casco +casero +caspa +castor +catorce +catre +caudal +causa +cazo +cebolla +ceder +cedro +celda +célebre +celoso +célula +cemento +ceniza +centro +cerca +cerdo +cereza +cero +cerrar +certeza +césped +cetro +chacal +chaleco +champú +chancla +chapa +charla +chico +chiste +chivo +choque +choza +chuleta +chupar +ciclón +ciego +cielo +cien +cierto +cifra +cigarro +cima +cinco +cine +cinta +ciprés +circo +ciruela +cisne +cita +ciudad +clamor +clan +claro +clase +clave +cliente +clima +clínica +cobre +cocción +cochino +cocina +coco +código +codo +cofre +coger +cohete +cojín +cojo +cola +colcha +colegio +colgar +colina +collar +colmo +columna +combate +comer +comida +cómodo +compra +conde +conejo +conga +conocer +consejo +contar +copa +copia +corazón +corbata +corcho +cordón +corona +correr +coser +cosmos +costa +cráneo +cráter +crear +crecer +creído +crema +cría +crimen +cripta +crisis +cromo +crónica +croqueta +crudo +cruz +cuadro +cuarto +cuatro +cubo +cubrir +cuchara +cuello +cuento +cuerda +cuesta +cueva +cuidar +culebra +culpa +culto +cumbre +cumplir +cuna +cuneta +cuota +cupón +cúpula +curar +curioso +curso +curva +cutis +dama +danza +dar +dardo +dátil +deber +débil +década +decir +dedo +defensa +definir +dejar +delfín +delgado +delito +demora +denso +dental +deporte +derecho +derrota +desayuno +deseo +desfile +desnudo +destino +desvío +detalle +detener +deuda +día +diablo +diadema +diamante +diana +diario +dibujo +dictar +diente +dieta +diez +difícil +digno +dilema +diluir +dinero +directo +dirigir +disco +diseño +disfraz +diva +divino +doble +doce +dolor +domingo +don +donar +dorado +dormir +dorso +dos +dosis +dragón +droga +ducha +duda +duelo +dueño +dulce +dúo +duque +durar +dureza +duro +ébano +ebrio +echar +eco +ecuador +edad +edición +edificio +editor +educar +efecto +eficaz +eje +ejemplo +elefante +elegir +elemento +elevar +elipse +élite +elixir +elogio +eludir +embudo +emitir +emoción +empate +empeño +empleo +empresa +enano +encargo +enchufe +encía +enemigo +enero +enfado +enfermo +engaño +enigma +enlace +enorme +enredo +ensayo +enseñar +entero +entrar +envase +envío +época +equipo +erizo +escala +escena +escolar +escribir +escudo +esencia +esfera +esfuerzo +espada +espejo +espía +esposa +espuma +esquí +estar +este +estilo +estufa +etapa +eterno +ética +etnia +evadir +evaluar +evento +evitar +exacto +examen +exceso +excusa +exento +exigir +exilio +existir +éxito +experto +explicar +exponer +extremo +fábrica +fábula +fachada +fácil +factor +faena +faja +falda +fallo +falso +faltar +fama +familia +famoso +faraón +farmacia +farol +farsa +fase +fatiga +fauna +favor +fax +febrero +fecha +feliz +feo +feria +feroz +fértil +fervor +festín +fiable +fianza +fiar +fibra +ficción +ficha +fideo +fiebre +fiel +fiera +fiesta +figura +fijar +fijo +fila +filete +filial +filtro +fin +finca +fingir +finito +firma +flaco +flauta +flecha +flor +flota +fluir +flujo +flúor +fobia +foca +fogata +fogón +folio +folleto +fondo +forma +forro +fortuna +forzar +fosa +foto +fracaso +frágil +franja +frase +fraude +freír +freno +fresa +frío +frito +fruta +fuego +fuente +fuerza +fuga +fumar +función +funda +furgón +furia +fusil +fútbol +futuro +gacela +gafas +gaita +gajo +gala +galería +gallo +gamba +ganar +gancho +ganga +ganso +garaje +garza +gasolina +gastar +gato +gavilán +gemelo +gemir +gen +género +genio +gente +geranio +gerente +germen +gesto +gigante +gimnasio +girar +giro +glaciar +globo +gloria +gol +golfo +goloso +golpe +goma +gordo +gorila +gorra +gota +goteo +gozar +grada +gráfico +grano +grasa +gratis +grave +grieta +grillo +gripe +gris +grito +grosor +grúa +grueso +grumo +grupo +guante +guapo +guardia +guerra +guía +guiño +guion +guiso +guitarra +gusano +gustar +haber +hábil +hablar +hacer +hacha +hada +hallar +hamaca +harina +haz +hazaña +hebilla +hebra +hecho +helado +helio +hembra +herir +hermano +héroe +hervir +hielo +hierro +hígado +higiene +hijo +himno +historia +hocico +hogar +hoguera +hoja +hombre +hongo +honor +honra +hora +hormiga +horno +hostil +hoyo +hueco +huelga +huerta +hueso +huevo +huida +huir +humano +húmedo +humilde +humo +hundir +huracán +hurto +icono +ideal +idioma +ídolo +iglesia +iglú +igual +ilegal +ilusión +imagen +imán +imitar +impar +imperio +imponer +impulso +incapaz +índice +inerte +infiel +informe +ingenio +inicio +inmenso +inmune +innato +insecto +instante +interés +íntimo +intuir +inútil +invierno +ira +iris +ironía +isla +islote +jabalí +jabón +jamón +jarabe +jardín +jarra +jaula +jazmín +jefe +jeringa +jinete +jornada +joroba +joven +joya +juerga +jueves +juez +jugador +jugo +juguete +juicio +junco +jungla +junio +juntar +júpiter +jurar +justo +juvenil +juzgar +kilo +koala +labio +lacio +lacra +lado +ladrón +lagarto +lágrima +laguna +laico +lamer +lámina +lámpara +lana +lancha +langosta +lanza +lápiz +largo +larva +lástima +lata +látex +latir +laurel +lavar +lazo +leal +lección +leche +lector +leer +legión +legumbre +lejano +lengua +lento +leña +león +leopardo +lesión +letal +letra +leve +leyenda +libertad +libro +licor +líder +lidiar +lienzo +liga +ligero +lima +límite +limón +limpio +lince +lindo +línea +lingote +lino +linterna +líquido +liso +lista +litera +litio +litro +llaga +llama +llanto +llave +llegar +llenar +llevar +llorar +llover +lluvia +lobo +loción +loco +locura +lógica +logro +lombriz +lomo +lonja +lote +lucha +lucir +lugar +lujo +luna +lunes +lupa +lustro +luto +luz +maceta +macho +madera +madre +maduro +maestro +mafia +magia +mago +maíz +maldad +maleta +malla +malo +mamá +mambo +mamut +manco +mando +manejar +manga +maniquí +manjar +mano +manso +manta +mañana +mapa +máquina +mar +marco +marea +marfil +margen +marido +mármol +marrón +martes +marzo +masa +máscara +masivo +matar +materia +matiz +matriz +máximo +mayor +mazorca +mecha +medalla +medio +médula +mejilla +mejor +melena +melón +memoria +menor +mensaje +mente +menú +mercado +merengue +mérito +mes +mesón +meta +meter +método +metro +mezcla +miedo +miel +miembro +miga +mil +milagro +militar +millón +mimo +mina +minero +mínimo +minuto +miope +mirar +misa +miseria +misil +mismo +mitad +mito +mochila +moción +moda +modelo +moho +mojar +molde +moler +molino +momento +momia +monarca +moneda +monja +monto +moño +morada +morder +moreno +morir +morro +morsa +mortal +mosca +mostrar +motivo +mover +móvil +mozo +mucho +mudar +mueble +muela +muerte +muestra +mugre +mujer +mula +muleta +multa +mundo +muñeca +mural +muro +músculo +museo +musgo +música +muslo +nácar +nación +nadar +naipe +naranja +nariz +narrar +nasal +natal +nativo +natural +náusea +naval +nave +navidad +necio +néctar +negar +negocio +negro +neón +nervio +neto +neutro +nevar +nevera +nicho +nido +niebla +nieto +niñez +niño +nítido +nivel +nobleza +noche +nómina +noria +norma +norte +nota +noticia +novato +novela +novio +nube +nuca +núcleo +nudillo +nudo +nuera +nueve +nuez +nulo +número +nutria +oasis +obeso +obispo +objeto +obra +obrero +observar +obtener +obvio +oca +ocaso +océano +ochenta +ocho +ocio +ocre +octavo +octubre +oculto +ocupar +ocurrir +odiar +odio +odisea +oeste +ofensa +oferta +oficio +ofrecer +ogro +oído +oír +ojo +ola +oleada +olfato +olivo +olla +olmo +olor +olvido +ombligo +onda +onza +opaco +opción +ópera +opinar +oponer +optar +óptica +opuesto +oración +orador +oral +órbita +orca +orden +oreja +órgano +orgía +orgullo +oriente +origen +orilla +oro +orquesta +oruga +osadía +oscuro +osezno +oso +ostra +otoño +otro +oveja +óvulo +óxido +oxígeno +oyente +ozono +pacto +padre +paella +página +pago +país +pájaro +palabra +palco +paleta +pálido +palma +paloma +palpar +pan +panal +pánico +pantera +pañuelo +papá +papel +papilla +paquete +parar +parcela +pared +parir +paro +párpado +parque +párrafo +parte +pasar +paseo +pasión +paso +pasta +pata +patio +patria +pausa +pauta +pavo +payaso +peatón +pecado +pecera +pecho +pedal +pedir +pegar +peine +pelar +peldaño +pelea +peligro +pellejo +pelo +peluca +pena +pensar +peñón +peón +peor +pepino +pequeño +pera +percha +perder +pereza +perfil +perico +perla +permiso +perro +persona +pesa +pesca +pésimo +pestaña +pétalo +petróleo +pez +pezuña +picar +pichón +pie +piedra +pierna +pieza +pijama +pilar +piloto +pimienta +pino +pintor +pinza +piña +piojo +pipa +pirata +pisar +piscina +piso +pista +pitón +pizca +placa +plan +plata +playa +plaza +pleito +pleno +plomo +pluma +plural +pobre +poco +poder +podio +poema +poesía +poeta +polen +policía +pollo +polvo +pomada +pomelo +pomo +pompa +poner +porción +portal +posada +poseer +posible +poste +potencia +potro +pozo +prado +precoz +pregunta +premio +prensa +preso +previo +primo +príncipe +prisión +privar +proa +probar +proceso +producto +proeza +profesor +programa +prole +promesa +pronto +propio +próximo +prueba +público +puchero +pudor +pueblo +puerta +puesto +pulga +pulir +pulmón +pulpo +pulso +puma +punto +puñal +puño +pupa +pupila +puré +quedar +queja +quemar +querer +queso +quieto +química +quince +quitar +rábano +rabia +rabo +ración +radical +raíz +rama +rampa +rancho +rango +rapaz +rápido +rapto +rasgo +raspa +rato +rayo +raza +razón +reacción +realidad +rebaño +rebote +recaer +receta +rechazo +recoger +recreo +recto +recurso +red +redondo +reducir +reflejo +reforma +refrán +refugio +regalo +regir +regla +regreso +rehén +reino +reír +reja +relato +relevo +relieve +relleno +reloj +remar +remedio +remo +rencor +rendir +renta +reparto +repetir +reposo +reptil +res +rescate +resina +respeto +resto +resumen +retiro +retorno +retrato +reunir +revés +revista +rey +rezar +rico +riego +rienda +riesgo +rifa +rígido +rigor +rincón +riñón +río +riqueza +risa +ritmo +rito +rizo +roble +roce +rociar +rodar +rodeo +rodilla +roer +rojizo +rojo +romero +romper +ron +ronco +ronda +ropa +ropero +rosa +rosca +rostro +rotar +rubí +rubor +rudo +rueda +rugir +ruido +ruina +ruleta +rulo +rumbo +rumor +ruptura +ruta +rutina +sábado +saber +sabio +sable +sacar +sagaz +sagrado +sala +saldo +salero +salir +salmón +salón +salsa +salto +salud +salvar +samba +sanción +sandía +sanear +sangre +sanidad +sano +santo +sapo +saque +sardina +sartén +sastre +satán +sauna +saxofón +sección +seco +secreto +secta +sed +seguir +seis +sello +selva +semana +semilla +senda +sensor +señal +señor +separar +sepia +sequía +ser +serie +sermón +servir +sesenta +sesión +seta +setenta +severo +sexo +sexto +sidra +siesta +siete +siglo +signo +sílaba +silbar +silencio +silla +símbolo +simio +sirena +sistema +sitio +situar +sobre +socio +sodio +sol +solapa +soldado +soledad +sólido +soltar +solución +sombra +sondeo +sonido +sonoro +sonrisa +sopa +soplar +soporte +sordo +sorpresa +sorteo +sostén +sótano +suave +subir +suceso +sudor +suegra +suelo +sueño +suerte +sufrir +sujeto +sultán +sumar +superar +suplir +suponer +supremo +sur +surco +sureño +surgir +susto +sutil +tabaco +tabique +tabla +tabú +taco +tacto +tajo +talar +talco +talento +talla +talón +tamaño +tambor +tango +tanque +tapa +tapete +tapia +tapón +taquilla +tarde +tarea +tarifa +tarjeta +tarot +tarro +tarta +tatuaje +tauro +taza +tazón +teatro +techo +tecla +técnica +tejado +tejer +tejido +tela +teléfono +tema +temor +templo +tenaz +tender +tener +tenis +tenso +teoría +terapia +terco +término +ternura +terror +tesis +tesoro +testigo +tetera +texto +tez +tibio +tiburón +tiempo +tienda +tierra +tieso +tigre +tijera +tilde +timbre +tímido +timo +tinta +tío +típico +tipo +tira +tirón +titán +títere +título +tiza +toalla +tobillo +tocar +tocino +todo +toga +toldo +tomar +tono +tonto +topar +tope +toque +tórax +torero +tormenta +torneo +toro +torpedo +torre +torso +tortuga +tos +tosco +toser +tóxico +trabajo +tractor +traer +tráfico +trago +traje +tramo +trance +trato +trauma +trazar +trébol +tregua +treinta +tren +trepar +tres +tribu +trigo +tripa +triste +triunfo +trofeo +trompa +tronco +tropa +trote +trozo +truco +trueno +trufa +tubería +tubo +tuerto +tumba +tumor +túnel +túnica +turbina +turismo +turno +tutor +ubicar +úlcera +umbral +unidad +unir +universo +uno +untar +uña +urbano +urbe +urgente +urna +usar +usuario +útil +utopía +uva +vaca +vacío +vacuna +vagar +vago +vaina +vajilla +vale +válido +valle +valor +válvula +vampiro +vara +variar +varón +vaso +vecino +vector +vehículo +veinte +vejez +vela +velero +veloz +vena +vencer +venda +veneno +vengar +venir +venta +venus +ver +verano +verbo +verde +vereda +verja +verso +verter +vía +viaje +vibrar +vicio +víctima +vida +vídeo +vidrio +viejo +viernes +vigor +vil +villa +vinagre +vino +viñedo +violín +viral +virgo +virtud +visor +víspera +vista +vitamina +viudo +vivaz +vivero +vivir +vivo +volcán +volumen +volver +voraz +votar +voto +voz +vuelo +vulgar +yacer +yate +yegua +yema +yerno +yeso +yodo +yoga +yogur +zafiro +zanja +zapato +zarza +zona +zorro +zumo +zurdo diff --git a/packages/wordlists/input/lang-fr.txt b/packages/wordlists/input/lang-fr.txt new file mode 100644 index 000000000..1d749904f --- /dev/null +++ b/packages/wordlists/input/lang-fr.txt @@ -0,0 +1,2048 @@ +abaisser +abandon +abdiquer +abeille +abolir +aborder +aboutir +aboyer +abrasif +abreuver +abriter +abroger +abrupt +absence +absolu +absurde +abusif +abyssal +académie +acajou +acarien +accabler +accepter +acclamer +accolade +accroche +accuser +acerbe +achat +acheter +aciduler +acier +acompte +acquérir +acronyme +acteur +actif +actuel +adepte +adéquat +adhésif +adjectif +adjuger +admettre +admirer +adopter +adorer +adoucir +adresse +adroit +adulte +adverbe +aérer +aéronef +affaire +affecter +affiche +affreux +affubler +agacer +agencer +agile +agiter +agrafer +agréable +agrume +aider +aiguille +ailier +aimable +aisance +ajouter +ajuster +alarmer +alchimie +alerte +algèbre +algue +aliéner +aliment +alléger +alliage +allouer +allumer +alourdir +alpaga +altesse +alvéole +amateur +ambigu +ambre +aménager +amertume +amidon +amiral +amorcer +amour +amovible +amphibie +ampleur +amusant +analyse +anaphore +anarchie +anatomie +ancien +anéantir +angle +angoisse +anguleux +animal +annexer +annonce +annuel +anodin +anomalie +anonyme +anormal +antenne +antidote +anxieux +apaiser +apéritif +aplanir +apologie +appareil +appeler +apporter +appuyer +aquarium +aqueduc +arbitre +arbuste +ardeur +ardoise +argent +arlequin +armature +armement +armoire +armure +arpenter +arracher +arriver +arroser +arsenic +artériel +article +aspect +asphalte +aspirer +assaut +asservir +assiette +associer +assurer +asticot +astre +astuce +atelier +atome +atrium +atroce +attaque +attentif +attirer +attraper +aubaine +auberge +audace +audible +augurer +aurore +automne +autruche +avaler +avancer +avarice +avenir +averse +aveugle +aviateur +avide +avion +aviser +avoine +avouer +avril +axial +axiome +badge +bafouer +bagage +baguette +baignade +balancer +balcon +baleine +balisage +bambin +bancaire +bandage +banlieue +bannière +banquier +barbier +baril +baron +barque +barrage +bassin +bastion +bataille +bateau +batterie +baudrier +bavarder +belette +bélier +belote +bénéfice +berceau +berger +berline +bermuda +besace +besogne +bétail +beurre +biberon +bicycle +bidule +bijou +bilan +bilingue +billard +binaire +biologie +biopsie +biotype +biscuit +bison +bistouri +bitume +bizarre +blafard +blague +blanchir +blessant +blinder +blond +bloquer +blouson +bobard +bobine +boire +boiser +bolide +bonbon +bondir +bonheur +bonifier +bonus +bordure +borne +botte +boucle +boueux +bougie +boulon +bouquin +bourse +boussole +boutique +boxeur +branche +brasier +brave +brebis +brèche +breuvage +bricoler +brigade +brillant +brioche +brique +brochure +broder +bronzer +brousse +broyeur +brume +brusque +brutal +bruyant +buffle +buisson +bulletin +bureau +burin +bustier +butiner +butoir +buvable +buvette +cabanon +cabine +cachette +cadeau +cadre +caféine +caillou +caisson +calculer +calepin +calibre +calmer +calomnie +calvaire +camarade +caméra +camion +campagne +canal +caneton +canon +cantine +canular +capable +caporal +caprice +capsule +capter +capuche +carabine +carbone +caresser +caribou +carnage +carotte +carreau +carton +cascade +casier +casque +cassure +causer +caution +cavalier +caverne +caviar +cédille +ceinture +céleste +cellule +cendrier +censurer +central +cercle +cérébral +cerise +cerner +cerveau +cesser +chagrin +chaise +chaleur +chambre +chance +chapitre +charbon +chasseur +chaton +chausson +chavirer +chemise +chenille +chéquier +chercher +cheval +chien +chiffre +chignon +chimère +chiot +chlorure +chocolat +choisir +chose +chouette +chrome +chute +cigare +cigogne +cimenter +cinéma +cintrer +circuler +cirer +cirque +citerne +citoyen +citron +civil +clairon +clameur +claquer +classe +clavier +client +cligner +climat +clivage +cloche +clonage +cloporte +cobalt +cobra +cocasse +cocotier +coder +codifier +coffre +cogner +cohésion +coiffer +coincer +colère +colibri +colline +colmater +colonel +combat +comédie +commande +compact +concert +conduire +confier +congeler +connoter +consonne +contact +convexe +copain +copie +corail +corbeau +cordage +corniche +corpus +correct +cortège +cosmique +costume +coton +coude +coupure +courage +couteau +couvrir +coyote +crabe +crainte +cravate +crayon +créature +créditer +crémeux +creuser +crevette +cribler +crier +cristal +critère +croire +croquer +crotale +crucial +cruel +crypter +cubique +cueillir +cuillère +cuisine +cuivre +culminer +cultiver +cumuler +cupide +curatif +curseur +cyanure +cycle +cylindre +cynique +daigner +damier +danger +danseur +dauphin +débattre +débiter +déborder +débrider +débutant +décaler +décembre +déchirer +décider +déclarer +décorer +décrire +décupler +dédale +déductif +déesse +défensif +défiler +défrayer +dégager +dégivrer +déglutir +dégrafer +déjeuner +délice +déloger +demander +demeurer +démolir +dénicher +dénouer +dentelle +dénuder +départ +dépenser +déphaser +déplacer +déposer +déranger +dérober +désastre +descente +désert +désigner +désobéir +dessiner +destrier +détacher +détester +détourer +détresse +devancer +devenir +deviner +devoir +diable +dialogue +diamant +dicter +différer +digérer +digital +digne +diluer +dimanche +diminuer +dioxyde +directif +diriger +discuter +disposer +dissiper +distance +divertir +diviser +docile +docteur +dogme +doigt +domaine +domicile +dompter +donateur +donjon +donner +dopamine +dortoir +dorure +dosage +doseur +dossier +dotation +douanier +double +douceur +douter +doyen +dragon +draper +dresser +dribbler +droiture +duperie +duplexe +durable +durcir +dynastie +éblouir +écarter +écharpe +échelle +éclairer +éclipse +éclore +écluse +école +économie +écorce +écouter +écraser +écrémer +écrivain +écrou +écume +écureuil +édifier +éduquer +effacer +effectif +effigie +effort +effrayer +effusion +égaliser +égarer +éjecter +élaborer +élargir +électron +élégant +éléphant +élève +éligible +élitisme +éloge +élucider +éluder +emballer +embellir +embryon +émeraude +émission +emmener +émotion +émouvoir +empereur +employer +emporter +emprise +émulsion +encadrer +enchère +enclave +encoche +endiguer +endosser +endroit +enduire +énergie +enfance +enfermer +enfouir +engager +engin +englober +énigme +enjamber +enjeu +enlever +ennemi +ennuyeux +enrichir +enrobage +enseigne +entasser +entendre +entier +entourer +entraver +énumérer +envahir +enviable +envoyer +enzyme +éolien +épaissir +épargne +épatant +épaule +épicerie +épidémie +épier +épilogue +épine +épisode +épitaphe +époque +épreuve +éprouver +épuisant +équerre +équipe +ériger +érosion +erreur +éruption +escalier +espadon +espèce +espiègle +espoir +esprit +esquiver +essayer +essence +essieu +essorer +estime +estomac +estrade +étagère +étaler +étanche +étatique +éteindre +étendoir +éternel +éthanol +éthique +ethnie +étirer +étoffer +étoile +étonnant +étourdir +étrange +étroit +étude +euphorie +évaluer +évasion +éventail +évidence +éviter +évolutif +évoquer +exact +exagérer +exaucer +exceller +excitant +exclusif +excuse +exécuter +exemple +exercer +exhaler +exhorter +exigence +exiler +exister +exotique +expédier +explorer +exposer +exprimer +exquis +extensif +extraire +exulter +fable +fabuleux +facette +facile +facture +faiblir +falaise +fameux +famille +farceur +farfelu +farine +farouche +fasciner +fatal +fatigue +faucon +fautif +faveur +favori +fébrile +féconder +fédérer +félin +femme +fémur +fendoir +féodal +fermer +féroce +ferveur +festival +feuille +feutre +février +fiasco +ficeler +fictif +fidèle +figure +filature +filetage +filière +filleul +filmer +filou +filtrer +financer +finir +fiole +firme +fissure +fixer +flairer +flamme +flasque +flatteur +fléau +flèche +fleur +flexion +flocon +flore +fluctuer +fluide +fluvial +folie +fonderie +fongible +fontaine +forcer +forgeron +formuler +fortune +fossile +foudre +fougère +fouiller +foulure +fourmi +fragile +fraise +franchir +frapper +frayeur +frégate +freiner +frelon +frémir +frénésie +frère +friable +friction +frisson +frivole +froid +fromage +frontal +frotter +fruit +fugitif +fuite +fureur +furieux +furtif +fusion +futur +gagner +galaxie +galerie +gambader +garantir +gardien +garnir +garrigue +gazelle +gazon +géant +gélatine +gélule +gendarme +général +génie +genou +gentil +géologie +géomètre +géranium +germe +gestuel +geyser +gibier +gicler +girafe +givre +glace +glaive +glisser +globe +gloire +glorieux +golfeur +gomme +gonfler +gorge +gorille +goudron +gouffre +goulot +goupille +gourmand +goutte +graduel +graffiti +graine +grand +grappin +gratuit +gravir +grenat +griffure +griller +grimper +grogner +gronder +grotte +groupe +gruger +grutier +gruyère +guépard +guerrier +guide +guimauve +guitare +gustatif +gymnaste +gyrostat +habitude +hachoir +halte +hameau +hangar +hanneton +haricot +harmonie +harpon +hasard +hélium +hématome +herbe +hérisson +hermine +héron +hésiter +heureux +hiberner +hibou +hilarant +histoire +hiver +homard +hommage +homogène +honneur +honorer +honteux +horde +horizon +horloge +hormone +horrible +houleux +housse +hublot +huileux +humain +humble +humide +humour +hurler +hydromel +hygiène +hymne +hypnose +idylle +ignorer +iguane +illicite +illusion +image +imbiber +imiter +immense +immobile +immuable +impact +impérial +implorer +imposer +imprimer +imputer +incarner +incendie +incident +incliner +incolore +indexer +indice +inductif +inédit +ineptie +inexact +infini +infliger +informer +infusion +ingérer +inhaler +inhiber +injecter +injure +innocent +inoculer +inonder +inscrire +insecte +insigne +insolite +inspirer +instinct +insulter +intact +intense +intime +intrigue +intuitif +inutile +invasion +inventer +inviter +invoquer +ironique +irradier +irréel +irriter +isoler +ivoire +ivresse +jaguar +jaillir +jambe +janvier +jardin +jauger +jaune +javelot +jetable +jeton +jeudi +jeunesse +joindre +joncher +jongler +joueur +jouissif +journal +jovial +joyau +joyeux +jubiler +jugement +junior +jupon +juriste +justice +juteux +juvénile +kayak +kimono +kiosque +label +labial +labourer +lacérer +lactose +lagune +laine +laisser +laitier +lambeau +lamelle +lampe +lanceur +langage +lanterne +lapin +largeur +larme +laurier +lavabo +lavoir +lecture +légal +léger +légume +lessive +lettre +levier +lexique +lézard +liasse +libérer +libre +licence +licorne +liège +lièvre +ligature +ligoter +ligue +limer +limite +limonade +limpide +linéaire +lingot +lionceau +liquide +lisière +lister +lithium +litige +littoral +livreur +logique +lointain +loisir +lombric +loterie +louer +lourd +loutre +louve +loyal +lubie +lucide +lucratif +lueur +lugubre +luisant +lumière +lunaire +lundi +luron +lutter +luxueux +machine +magasin +magenta +magique +maigre +maillon +maintien +mairie +maison +majorer +malaxer +maléfice +malheur +malice +mallette +mammouth +mandater +maniable +manquant +manteau +manuel +marathon +marbre +marchand +mardi +maritime +marqueur +marron +marteler +mascotte +massif +matériel +matière +matraque +maudire +maussade +mauve +maximal +méchant +méconnu +médaille +médecin +méditer +méduse +meilleur +mélange +mélodie +membre +mémoire +menacer +mener +menhir +mensonge +mentor +mercredi +mérite +merle +messager +mesure +métal +météore +méthode +métier +meuble +miauler +microbe +miette +mignon +migrer +milieu +million +mimique +mince +minéral +minimal +minorer +minute +miracle +miroiter +missile +mixte +mobile +moderne +moelleux +mondial +moniteur +monnaie +monotone +monstre +montagne +monument +moqueur +morceau +morsure +mortier +moteur +motif +mouche +moufle +moulin +mousson +mouton +mouvant +multiple +munition +muraille +murène +murmure +muscle +muséum +musicien +mutation +muter +mutuel +myriade +myrtille +mystère +mythique +nageur +nappe +narquois +narrer +natation +nation +nature +naufrage +nautique +navire +nébuleux +nectar +néfaste +négation +négliger +négocier +neige +nerveux +nettoyer +neurone +neutron +neveu +niche +nickel +nitrate +niveau +noble +nocif +nocturne +noirceur +noisette +nomade +nombreux +nommer +normatif +notable +notifier +notoire +nourrir +nouveau +novateur +novembre +novice +nuage +nuancer +nuire +nuisible +numéro +nuptial +nuque +nutritif +obéir +objectif +obliger +obscur +observer +obstacle +obtenir +obturer +occasion +occuper +océan +octobre +octroyer +octupler +oculaire +odeur +odorant +offenser +officier +offrir +ogive +oiseau +oisillon +olfactif +olivier +ombrage +omettre +onctueux +onduler +onéreux +onirique +opale +opaque +opérer +opinion +opportun +opprimer +opter +optique +orageux +orange +orbite +ordonner +oreille +organe +orgueil +orifice +ornement +orque +ortie +osciller +osmose +ossature +otarie +ouragan +ourson +outil +outrager +ouvrage +ovation +oxyde +oxygène +ozone +paisible +palace +palmarès +palourde +palper +panache +panda +pangolin +paniquer +panneau +panorama +pantalon +papaye +papier +papoter +papyrus +paradoxe +parcelle +paresse +parfumer +parler +parole +parrain +parsemer +partager +parure +parvenir +passion +pastèque +paternel +patience +patron +pavillon +pavoiser +payer +paysage +peigne +peintre +pelage +pélican +pelle +pelouse +peluche +pendule +pénétrer +pénible +pensif +pénurie +pépite +péplum +perdrix +perforer +période +permuter +perplexe +persil +perte +peser +pétale +petit +pétrir +peuple +pharaon +phobie +phoque +photon +phrase +physique +piano +pictural +pièce +pierre +pieuvre +pilote +pinceau +pipette +piquer +pirogue +piscine +piston +pivoter +pixel +pizza +placard +plafond +plaisir +planer +plaque +plastron +plateau +pleurer +plexus +pliage +plomb +plonger +pluie +plumage +pochette +poésie +poète +pointe +poirier +poisson +poivre +polaire +policier +pollen +polygone +pommade +pompier +ponctuel +pondérer +poney +portique +position +posséder +posture +potager +poteau +potion +pouce +poulain +poumon +pourpre +poussin +pouvoir +prairie +pratique +précieux +prédire +préfixe +prélude +prénom +présence +prétexte +prévoir +primitif +prince +prison +priver +problème +procéder +prodige +profond +progrès +proie +projeter +prologue +promener +propre +prospère +protéger +prouesse +proverbe +prudence +pruneau +psychose +public +puceron +puiser +pulpe +pulsar +punaise +punitif +pupitre +purifier +puzzle +pyramide +quasar +querelle +question +quiétude +quitter +quotient +racine +raconter +radieux +ragondin +raideur +raisin +ralentir +rallonge +ramasser +rapide +rasage +ratisser +ravager +ravin +rayonner +réactif +réagir +réaliser +réanimer +recevoir +réciter +réclamer +récolter +recruter +reculer +recycler +rédiger +redouter +refaire +réflexe +réformer +refrain +refuge +régalien +région +réglage +régulier +réitérer +rejeter +rejouer +relatif +relever +relief +remarque +remède +remise +remonter +remplir +remuer +renard +renfort +renifler +renoncer +rentrer +renvoi +replier +reporter +reprise +reptile +requin +réserve +résineux +résoudre +respect +rester +résultat +rétablir +retenir +réticule +retomber +retracer +réunion +réussir +revanche +revivre +révolte +révulsif +richesse +rideau +rieur +rigide +rigoler +rincer +riposter +risible +risque +rituel +rival +rivière +rocheux +romance +rompre +ronce +rondin +roseau +rosier +rotatif +rotor +rotule +rouge +rouille +rouleau +routine +royaume +ruban +rubis +ruche +ruelle +rugueux +ruiner +ruisseau +ruser +rustique +rythme +sabler +saboter +sabre +sacoche +safari +sagesse +saisir +salade +salive +salon +saluer +samedi +sanction +sanglier +sarcasme +sardine +saturer +saugrenu +saumon +sauter +sauvage +savant +savonner +scalpel +scandale +scélérat +scénario +sceptre +schéma +science +scinder +score +scrutin +sculpter +séance +sécable +sécher +secouer +sécréter +sédatif +séduire +seigneur +séjour +sélectif +semaine +sembler +semence +séminal +sénateur +sensible +sentence +séparer +séquence +serein +sergent +sérieux +serrure +sérum +service +sésame +sévir +sevrage +sextuple +sidéral +siècle +siéger +siffler +sigle +signal +silence +silicium +simple +sincère +sinistre +siphon +sirop +sismique +situer +skier +social +socle +sodium +soigneux +soldat +soleil +solitude +soluble +sombre +sommeil +somnoler +sonde +songeur +sonnette +sonore +sorcier +sortir +sosie +sottise +soucieux +soudure +souffle +soulever +soupape +source +soutirer +souvenir +spacieux +spatial +spécial +sphère +spiral +stable +station +sternum +stimulus +stipuler +strict +studieux +stupeur +styliste +sublime +substrat +subtil +subvenir +succès +sucre +suffixe +suggérer +suiveur +sulfate +superbe +supplier +surface +suricate +surmener +surprise +sursaut +survie +suspect +syllabe +symbole +symétrie +synapse +syntaxe +système +tabac +tablier +tactile +tailler +talent +talisman +talonner +tambour +tamiser +tangible +tapis +taquiner +tarder +tarif +tartine +tasse +tatami +tatouage +taupe +taureau +taxer +témoin +temporel +tenaille +tendre +teneur +tenir +tension +terminer +terne +terrible +tétine +texte +thème +théorie +thérapie +thorax +tibia +tiède +timide +tirelire +tiroir +tissu +titane +titre +tituber +toboggan +tolérant +tomate +tonique +tonneau +toponyme +torche +tordre +tornade +torpille +torrent +torse +tortue +totem +toucher +tournage +tousser +toxine +traction +trafic +tragique +trahir +train +trancher +travail +trèfle +tremper +trésor +treuil +triage +tribunal +tricoter +trilogie +triomphe +tripler +triturer +trivial +trombone +tronc +tropical +troupeau +tuile +tulipe +tumulte +tunnel +turbine +tuteur +tutoyer +tuyau +tympan +typhon +typique +tyran +ubuesque +ultime +ultrason +unanime +unifier +union +unique +unitaire +univers +uranium +urbain +urticant +usage +usine +usuel +usure +utile +utopie +vacarme +vaccin +vagabond +vague +vaillant +vaincre +vaisseau +valable +valise +vallon +valve +vampire +vanille +vapeur +varier +vaseux +vassal +vaste +vecteur +vedette +végétal +véhicule +veinard +véloce +vendredi +vénérer +venger +venimeux +ventouse +verdure +vérin +vernir +verrou +verser +vertu +veston +vétéran +vétuste +vexant +vexer +viaduc +viande +victoire +vidange +vidéo +vignette +vigueur +vilain +village +vinaigre +violon +vipère +virement +virtuose +virus +visage +viseur +vision +visqueux +visuel +vital +vitesse +viticole +vitrine +vivace +vivipare +vocation +voguer +voile +voisin +voiture +volaille +volcan +voltiger +volume +vorace +vortex +voter +vouloir +voyage +voyelle +wagon +xénon +yacht +zèbre +zénith +zeste +zoologie diff --git a/packages/wordlists/input/lang-it.txt b/packages/wordlists/input/lang-it.txt new file mode 100644 index 000000000..c47370f4e --- /dev/null +++ b/packages/wordlists/input/lang-it.txt @@ -0,0 +1,2048 @@ +abaco +abbaglio +abbinato +abete +abisso +abolire +abrasivo +abrogato +accadere +accenno +accusato +acetone +achille +acido +acqua +acre +acrilico +acrobata +acuto +adagio +addebito +addome +adeguato +aderire +adipe +adottare +adulare +affabile +affetto +affisso +affranto +aforisma +afoso +africano +agave +agente +agevole +aggancio +agire +agitare +agonismo +agricolo +agrumeto +aguzzo +alabarda +alato +albatro +alberato +albo +albume +alce +alcolico +alettone +alfa +algebra +aliante +alibi +alimento +allagato +allegro +allievo +allodola +allusivo +almeno +alogeno +alpaca +alpestre +altalena +alterno +alticcio +altrove +alunno +alveolo +alzare +amalgama +amanita +amarena +ambito +ambrato +ameba +america +ametista +amico +ammasso +ammenda +ammirare +ammonito +amore +ampio +ampliare +amuleto +anacardo +anagrafe +analista +anarchia +anatra +anca +ancella +ancora +andare +andrea +anello +angelo +angolare +angusto +anima +annegare +annidato +anno +annuncio +anonimo +anticipo +anzi +apatico +apertura +apode +apparire +appetito +appoggio +approdo +appunto +aprile +arabica +arachide +aragosta +araldica +arancio +aratura +arazzo +arbitro +archivio +ardito +arenile +argento +argine +arguto +aria +armonia +arnese +arredato +arringa +arrosto +arsenico +arso +artefice +arzillo +asciutto +ascolto +asepsi +asettico +asfalto +asino +asola +aspirato +aspro +assaggio +asse +assoluto +assurdo +asta +astenuto +astice +astratto +atavico +ateismo +atomico +atono +attesa +attivare +attorno +attrito +attuale +ausilio +austria +autista +autonomo +autunno +avanzato +avere +avvenire +avviso +avvolgere +azione +azoto +azzimo +azzurro +babele +baccano +bacino +baco +badessa +badilata +bagnato +baita +balcone +baldo +balena +ballata +balzano +bambino +bandire +baraonda +barbaro +barca +baritono +barlume +barocco +basilico +basso +batosta +battuto +baule +bava +bavosa +becco +beffa +belgio +belva +benda +benevole +benigno +benzina +bere +berlina +beta +bibita +bici +bidone +bifido +biga +bilancia +bimbo +binocolo +biologo +bipede +bipolare +birbante +birra +biscotto +bisesto +bisnonno +bisonte +bisturi +bizzarro +blando +blatta +bollito +bonifico +bordo +bosco +botanico +bottino +bozzolo +braccio +bradipo +brama +branca +bravura +bretella +brevetto +brezza +briglia +brillante +brindare +broccolo +brodo +bronzina +brullo +bruno +bubbone +buca +budino +buffone +buio +bulbo +buono +burlone +burrasca +bussola +busta +cadetto +caduco +calamaro +calcolo +calesse +calibro +calmo +caloria +cambusa +camerata +camicia +cammino +camola +campale +canapa +candela +cane +canino +canotto +cantina +capace +capello +capitolo +capogiro +cappero +capra +capsula +carapace +carcassa +cardo +carisma +carovana +carretto +cartolina +casaccio +cascata +caserma +caso +cassone +castello +casuale +catasta +catena +catrame +cauto +cavillo +cedibile +cedrata +cefalo +celebre +cellulare +cena +cenone +centesimo +ceramica +cercare +certo +cerume +cervello +cesoia +cespo +ceto +chela +chiaro +chicca +chiedere +chimera +china +chirurgo +chitarra +ciao +ciclismo +cifrare +cigno +cilindro +ciottolo +circa +cirrosi +citrico +cittadino +ciuffo +civetta +civile +classico +clinica +cloro +cocco +codardo +codice +coerente +cognome +collare +colmato +colore +colposo +coltivato +colza +coma +cometa +commando +comodo +computer +comune +conciso +condurre +conferma +congelare +coniuge +connesso +conoscere +consumo +continuo +convegno +coperto +copione +coppia +copricapo +corazza +cordata +coricato +cornice +corolla +corpo +corredo +corsia +cortese +cosmico +costante +cottura +covato +cratere +cravatta +creato +credere +cremoso +crescita +creta +criceto +crinale +crisi +critico +croce +cronaca +crostata +cruciale +crusca +cucire +cuculo +cugino +cullato +cupola +curatore +cursore +curvo +cuscino +custode +dado +daino +dalmata +damerino +daniela +dannoso +danzare +datato +davanti +davvero +debutto +decennio +deciso +declino +decollo +decreto +dedicato +definito +deforme +degno +delegare +delfino +delirio +delta +demenza +denotato +dentro +deposito +derapata +derivare +deroga +descritto +deserto +desiderio +desumere +detersivo +devoto +diametro +dicembre +diedro +difeso +diffuso +digerire +digitale +diluvio +dinamico +dinnanzi +dipinto +diploma +dipolo +diradare +dire +dirotto +dirupo +disagio +discreto +disfare +disgelo +disposto +distanza +disumano +dito +divano +divelto +dividere +divorato +doblone +docente +doganale +dogma +dolce +domato +domenica +dominare +dondolo +dono +dormire +dote +dottore +dovuto +dozzina +drago +druido +dubbio +dubitare +ducale +duna +duomo +duplice +duraturo +ebano +eccesso +ecco +eclissi +economia +edera +edicola +edile +editoria +educare +egemonia +egli +egoismo +egregio +elaborato +elargire +elegante +elencato +eletto +elevare +elfico +elica +elmo +elsa +eluso +emanato +emblema +emesso +emiro +emotivo +emozione +empirico +emulo +endemico +enduro +energia +enfasi +enoteca +entrare +enzima +epatite +epilogo +episodio +epocale +eppure +equatore +erario +erba +erboso +erede +eremita +erigere +ermetico +eroe +erosivo +errante +esagono +esame +esanime +esaudire +esca +esempio +esercito +esibito +esigente +esistere +esito +esofago +esortato +esoso +espanso +espresso +essenza +esso +esteso +estimare +estonia +estroso +esultare +etilico +etnico +etrusco +etto +euclideo +europa +evaso +evidenza +evitato +evoluto +evviva +fabbrica +faccenda +fachiro +falco +famiglia +fanale +fanfara +fango +fantasma +fare +farfalla +farinoso +farmaco +fascia +fastoso +fasullo +faticare +fato +favoloso +febbre +fecola +fede +fegato +felpa +feltro +femmina +fendere +fenomeno +fermento +ferro +fertile +fessura +festivo +fetta +feudo +fiaba +fiducia +fifa +figurato +filo +finanza +finestra +finire +fiore +fiscale +fisico +fiume +flacone +flamenco +flebo +flemma +florido +fluente +fluoro +fobico +focaccia +focoso +foderato +foglio +folata +folclore +folgore +fondente +fonetico +fonia +fontana +forbito +forchetta +foresta +formica +fornaio +foro +fortezza +forzare +fosfato +fosso +fracasso +frana +frassino +fratello +freccetta +frenata +fresco +frigo +frollino +fronde +frugale +frutta +fucilata +fucsia +fuggente +fulmine +fulvo +fumante +fumetto +fumoso +fune +funzione +fuoco +furbo +furgone +furore +fuso +futile +gabbiano +gaffe +galateo +gallina +galoppo +gambero +gamma +garanzia +garbo +garofano +garzone +gasdotto +gasolio +gastrico +gatto +gaudio +gazebo +gazzella +geco +gelatina +gelso +gemello +gemmato +gene +genitore +gennaio +genotipo +gergo +ghepardo +ghiaccio +ghisa +giallo +gilda +ginepro +giocare +gioiello +giorno +giove +girato +girone +gittata +giudizio +giurato +giusto +globulo +glutine +gnomo +gobba +golf +gomito +gommone +gonfio +gonna +governo +gracile +grado +grafico +grammo +grande +grattare +gravoso +grazia +greca +gregge +grifone +grigio +grinza +grotta +gruppo +guadagno +guaio +guanto +guardare +gufo +guidare +ibernato +icona +identico +idillio +idolo +idra +idrico +idrogeno +igiene +ignaro +ignorato +ilare +illeso +illogico +illudere +imballo +imbevuto +imbocco +imbuto +immane +immerso +immolato +impacco +impeto +impiego +importo +impronta +inalare +inarcare +inattivo +incanto +incendio +inchino +incisivo +incluso +incontro +incrocio +incubo +indagine +india +indole +inedito +infatti +infilare +inflitto +ingaggio +ingegno +inglese +ingordo +ingrosso +innesco +inodore +inoltrare +inondato +insano +insetto +insieme +insonnia +insulina +intasato +intero +intonaco +intuito +inumidire +invalido +invece +invito +iperbole +ipnotico +ipotesi +ippica +iride +irlanda +ironico +irrigato +irrorare +isolato +isotopo +isterico +istituto +istrice +italia +iterare +labbro +labirinto +lacca +lacerato +lacrima +lacuna +laddove +lago +lampo +lancetta +lanterna +lardoso +larga +laringe +lastra +latenza +latino +lattuga +lavagna +lavoro +legale +leggero +lembo +lentezza +lenza +leone +lepre +lesivo +lessato +lesto +letterale +leva +levigato +libero +lido +lievito +lilla +limatura +limitare +limpido +lineare +lingua +liquido +lira +lirica +lisca +lite +litigio +livrea +locanda +lode +logica +lombare +londra +longevo +loquace +lorenzo +loto +lotteria +luce +lucidato +lumaca +luminoso +lungo +lupo +luppolo +lusinga +lusso +lutto +macabro +macchina +macero +macinato +madama +magico +maglia +magnete +magro +maiolica +malafede +malgrado +malinteso +malsano +malto +malumore +mana +mancia +mandorla +mangiare +manifesto +mannaro +manovra +mansarda +mantide +manubrio +mappa +maratona +marcire +maretta +marmo +marsupio +maschera +massaia +mastino +materasso +matricola +mattone +maturo +mazurca +meandro +meccanico +mecenate +medesimo +meditare +mega +melassa +melis +melodia +meninge +meno +mensola +mercurio +merenda +merlo +meschino +mese +messere +mestolo +metallo +metodo +mettere +miagolare +mica +micelio +michele +microbo +midollo +miele +migliore +milano +milite +mimosa +minerale +mini +minore +mirino +mirtillo +miscela +missiva +misto +misurare +mitezza +mitigare +mitra +mittente +mnemonico +modello +modifica +modulo +mogano +mogio +mole +molosso +monastero +monco +mondina +monetario +monile +monotono +monsone +montato +monviso +mora +mordere +morsicato +mostro +motivato +motosega +motto +movenza +movimento +mozzo +mucca +mucosa +muffa +mughetto +mugnaio +mulatto +mulinello +multiplo +mummia +munto +muovere +murale +musa +muscolo +musica +mutevole +muto +nababbo +nafta +nanometro +narciso +narice +narrato +nascere +nastrare +naturale +nautica +naviglio +nebulosa +necrosi +negativo +negozio +nemmeno +neofita +neretto +nervo +nessuno +nettuno +neutrale +neve +nevrotico +nicchia +ninfa +nitido +nobile +nocivo +nodo +nome +nomina +nordico +normale +norvegese +nostrano +notare +notizia +notturno +novella +nucleo +nulla +numero +nuovo +nutrire +nuvola +nuziale +oasi +obbedire +obbligo +obelisco +oblio +obolo +obsoleto +occasione +occhio +occidente +occorrere +occultare +ocra +oculato +odierno +odorare +offerta +offrire +offuscato +oggetto +oggi +ognuno +olandese +olfatto +oliato +oliva +ologramma +oltre +omaggio +ombelico +ombra +omega +omissione +ondoso +onere +onice +onnivoro +onorevole +onta +operato +opinione +opposto +oracolo +orafo +ordine +orecchino +orefice +orfano +organico +origine +orizzonte +orma +ormeggio +ornativo +orologio +orrendo +orribile +ortensia +ortica +orzata +orzo +osare +oscurare +osmosi +ospedale +ospite +ossa +ossidare +ostacolo +oste +otite +otre +ottagono +ottimo +ottobre +ovale +ovest +ovino +oviparo +ovocito +ovunque +ovviare +ozio +pacchetto +pace +pacifico +padella +padrone +paese +paga +pagina +palazzina +palesare +pallido +palo +palude +pandoro +pannello +paolo +paonazzo +paprica +parabola +parcella +parere +pargolo +pari +parlato +parola +partire +parvenza +parziale +passivo +pasticca +patacca +patologia +pattume +pavone +peccato +pedalare +pedonale +peggio +peloso +penare +pendice +penisola +pennuto +penombra +pensare +pentola +pepe +pepita +perbene +percorso +perdonato +perforare +pergamena +periodo +permesso +perno +perplesso +persuaso +pertugio +pervaso +pesatore +pesista +peso +pestifero +petalo +pettine +petulante +pezzo +piacere +pianta +piattino +piccino +picozza +piega +pietra +piffero +pigiama +pigolio +pigro +pila +pilifero +pillola +pilota +pimpante +pineta +pinna +pinolo +pioggia +piombo +piramide +piretico +pirite +pirolisi +pitone +pizzico +placebo +planare +plasma +platano +plenario +pochezza +poderoso +podismo +poesia +poggiare +polenta +poligono +pollice +polmonite +polpetta +polso +poltrona +polvere +pomice +pomodoro +ponte +popoloso +porfido +poroso +porpora +porre +portata +posa +positivo +possesso +postulato +potassio +potere +pranzo +prassi +pratica +precluso +predica +prefisso +pregiato +prelievo +premere +prenotare +preparato +presenza +pretesto +prevalso +prima +principe +privato +problema +procura +produrre +profumo +progetto +prolunga +promessa +pronome +proposta +proroga +proteso +prova +prudente +prugna +prurito +psiche +pubblico +pudica +pugilato +pugno +pulce +pulito +pulsante +puntare +pupazzo +pupilla +puro +quadro +qualcosa +quasi +querela +quota +raccolto +raddoppio +radicale +radunato +raffica +ragazzo +ragione +ragno +ramarro +ramingo +ramo +randagio +rantolare +rapato +rapina +rappreso +rasatura +raschiato +rasente +rassegna +rastrello +rata +ravveduto +reale +recepire +recinto +recluta +recondito +recupero +reddito +redimere +regalato +registro +regola +regresso +relazione +remare +remoto +renna +replica +reprimere +reputare +resa +residente +responso +restauro +rete +retina +retorica +rettifica +revocato +riassunto +ribadire +ribelle +ribrezzo +ricarica +ricco +ricevere +riciclato +ricordo +ricreduto +ridicolo +ridurre +rifasare +riflesso +riforma +rifugio +rigare +rigettato +righello +rilassato +rilevato +rimanere +rimbalzo +rimedio +rimorchio +rinascita +rincaro +rinforzo +rinnovo +rinomato +rinsavito +rintocco +rinuncia +rinvenire +riparato +ripetuto +ripieno +riportare +ripresa +ripulire +risata +rischio +riserva +risibile +riso +rispetto +ristoro +risultato +risvolto +ritardo +ritegno +ritmico +ritrovo +riunione +riva +riverso +rivincita +rivolto +rizoma +roba +robotico +robusto +roccia +roco +rodaggio +rodere +roditore +rogito +rollio +romantico +rompere +ronzio +rosolare +rospo +rotante +rotondo +rotula +rovescio +rubizzo +rubrica +ruga +rullino +rumine +rumoroso +ruolo +rupe +russare +rustico +sabato +sabbiare +sabotato +sagoma +salasso +saldatura +salgemma +salivare +salmone +salone +saltare +saluto +salvo +sapere +sapido +saporito +saraceno +sarcasmo +sarto +sassoso +satellite +satira +satollo +saturno +savana +savio +saziato +sbadiglio +sbalzo +sbancato +sbarra +sbattere +sbavare +sbendare +sbirciare +sbloccato +sbocciato +sbrinare +sbruffone +sbuffare +scabroso +scadenza +scala +scambiare +scandalo +scapola +scarso +scatenare +scavato +scelto +scenico +scettro +scheda +schiena +sciarpa +scienza +scindere +scippo +sciroppo +scivolo +sclerare +scodella +scolpito +scomparto +sconforto +scoprire +scorta +scossone +scozzese +scriba +scrollare +scrutinio +scuderia +scultore +scuola +scuro +scusare +sdebitare +sdoganare +seccatura +secondo +sedano +seggiola +segnalato +segregato +seguito +selciato +selettivo +sella +selvaggio +semaforo +sembrare +seme +seminato +sempre +senso +sentire +sepolto +sequenza +serata +serbato +sereno +serio +serpente +serraglio +servire +sestina +setola +settimana +sfacelo +sfaldare +sfamato +sfarzoso +sfaticato +sfera +sfida +sfilato +sfinge +sfocato +sfoderare +sfogo +sfoltire +sforzato +sfratto +sfruttato +sfuggito +sfumare +sfuso +sgabello +sgarbato +sgonfiare +sgorbio +sgrassato +sguardo +sibilo +siccome +sierra +sigla +signore +silenzio +sillaba +simbolo +simpatico +simulato +sinfonia +singolo +sinistro +sino +sintesi +sinusoide +sipario +sisma +sistole +situato +slitta +slogatura +sloveno +smarrito +smemorato +smentito +smeraldo +smilzo +smontare +smottato +smussato +snellire +snervato +snodo +sobbalzo +sobrio +soccorso +sociale +sodale +soffitto +sogno +soldato +solenne +solido +sollazzo +solo +solubile +solvente +somatico +somma +sonda +sonetto +sonnifero +sopire +soppeso +sopra +sorgere +sorpasso +sorriso +sorso +sorteggio +sorvolato +sospiro +sosta +sottile +spada +spalla +spargere +spatola +spavento +spazzola +specie +spedire +spegnere +spelatura +speranza +spessore +spettrale +spezzato +spia +spigoloso +spillato +spinoso +spirale +splendido +sportivo +sposo +spranga +sprecare +spronato +spruzzo +spuntino +squillo +sradicare +srotolato +stabile +stacco +staffa +stagnare +stampato +stantio +starnuto +stasera +statuto +stelo +steppa +sterzo +stiletto +stima +stirpe +stivale +stizzoso +stonato +storico +strappo +stregato +stridulo +strozzare +strutto +stuccare +stufo +stupendo +subentro +succoso +sudore +suggerito +sugo +sultano +suonare +superbo +supporto +surgelato +surrogato +sussurro +sutura +svagare +svedese +sveglio +svelare +svenuto +svezia +sviluppo +svista +svizzera +svolta +svuotare +tabacco +tabulato +tacciare +taciturno +tale +talismano +tampone +tannino +tara +tardivo +targato +tariffa +tarpare +tartaruga +tasto +tattico +taverna +tavolata +tazza +teca +tecnico +telefono +temerario +tempo +temuto +tendone +tenero +tensione +tentacolo +teorema +terme +terrazzo +terzetto +tesi +tesserato +testato +tetro +tettoia +tifare +tigella +timbro +tinto +tipico +tipografo +tiraggio +tiro +titanio +titolo +titubante +tizio +tizzone +toccare +tollerare +tolto +tombola +tomo +tonfo +tonsilla +topazio +topologia +toppa +torba +tornare +torrone +tortora +toscano +tossire +tostatura +totano +trabocco +trachea +trafila +tragedia +tralcio +tramonto +transito +trapano +trarre +trasloco +trattato +trave +treccia +tremolio +trespolo +tributo +tricheco +trifoglio +trillo +trincea +trio +tristezza +triturato +trivella +tromba +trono +troppo +trottola +trovare +truccato +tubatura +tuffato +tulipano +tumulto +tunisia +turbare +turchino +tuta +tutela +ubicato +uccello +uccisore +udire +uditivo +uffa +ufficio +uguale +ulisse +ultimato +umano +umile +umorismo +uncinetto +ungere +ungherese +unicorno +unificato +unisono +unitario +unte +uovo +upupa +uragano +urgenza +urlo +usanza +usato +uscito +usignolo +usuraio +utensile +utilizzo +utopia +vacante +vaccinato +vagabondo +vagliato +valanga +valgo +valico +valletta +valoroso +valutare +valvola +vampata +vangare +vanitoso +vano +vantaggio +vanvera +vapore +varano +varcato +variante +vasca +vedetta +vedova +veduto +vegetale +veicolo +velcro +velina +velluto +veloce +venato +vendemmia +vento +verace +verbale +vergogna +verifica +vero +verruca +verticale +vescica +vessillo +vestale +veterano +vetrina +vetusto +viandante +vibrante +vicenda +vichingo +vicinanza +vidimare +vigilia +vigneto +vigore +vile +villano +vimini +vincitore +viola +vipera +virgola +virologo +virulento +viscoso +visione +vispo +vissuto +visura +vita +vitello +vittima +vivanda +vivido +viziare +voce +voga +volatile +volere +volpe +voragine +vulcano +zampogna +zanna +zappato +zattera +zavorra +zefiro +zelante +zelo +zenzero +zerbino +zibetto +zinco +zircone +zitto +zolla +zotico +zucchero +zufolo +zulu +zuppa diff --git a/packages/wordlists/input/lang-ja.txt b/packages/wordlists/input/lang-ja.txt new file mode 100644 index 000000000..fb8501a6e --- /dev/null +++ b/packages/wordlists/input/lang-ja.txt @@ -0,0 +1,2048 @@ +あいこくしん +あいさつ +あいだ +あおぞら +あかちゃん +あきる +あけがた +あける +あこがれる +あさい +あさひ +あしあと +あじわう +あずかる +あずき +あそぶ +あたえる +あたためる +あたりまえ +あたる +あつい +あつかう +あっしゅく +あつまり +あつめる +あてな +あてはまる +あひる +あぶら +あぶる +あふれる +あまい +あまど +あまやかす +あまり +あみもの +あめりか +あやまる +あゆむ +あらいぐま +あらし +あらすじ +あらためる +あらゆる +あらわす +ありがとう +あわせる +あわてる +あんい +あんがい +あんこ +あんぜん +あんてい +あんない +あんまり +いいだす +いおん +いがい +いがく +いきおい +いきなり +いきもの +いきる +いくじ +いくぶん +いけばな +いけん +いこう +いこく +いこつ +いさましい +いさん +いしき +いじゅう +いじょう +いじわる +いずみ +いずれ +いせい +いせえび +いせかい +いせき +いぜん +いそうろう +いそがしい +いだい +いだく +いたずら +いたみ +いたりあ +いちおう +いちじ +いちど +いちば +いちぶ +いちりゅう +いつか +いっしゅん +いっせい +いっそう +いったん +いっち +いってい +いっぽう +いてざ +いてん +いどう +いとこ +いない +いなか +いねむり +いのち +いのる +いはつ +いばる +いはん +いびき +いひん +いふく +いへん +いほう +いみん +いもうと +いもたれ +いもり +いやがる +いやす +いよかん +いよく +いらい +いらすと +いりぐち +いりょう +いれい +いれもの +いれる +いろえんぴつ +いわい +いわう +いわかん +いわば +いわゆる +いんげんまめ +いんさつ +いんしょう +いんよう +うえき +うえる +うおざ +うがい +うかぶ +うかべる +うきわ +うくらいな +うくれれ +うけたまわる +うけつけ +うけとる +うけもつ +うける +うごかす +うごく +うこん +うさぎ +うしなう +うしろがみ +うすい +うすぎ +うすぐらい +うすめる +うせつ +うちあわせ +うちがわ +うちき +うちゅう +うっかり +うつくしい +うったえる +うつる +うどん +うなぎ +うなじ +うなずく +うなる +うねる +うのう +うぶげ +うぶごえ +うまれる +うめる +うもう +うやまう +うよく +うらがえす +うらぐち +うらない +うりあげ +うりきれ +うるさい +うれしい +うれゆき +うれる +うろこ +うわき +うわさ +うんこう +うんちん +うんてん +うんどう +えいえん +えいが +えいきょう +えいご +えいせい +えいぶん +えいよう +えいわ +えおり +えがお +えがく +えきたい +えくせる +えしゃく +えすて +えつらん +えのぐ +えほうまき +えほん +えまき +えもじ +えもの +えらい +えらぶ +えりあ +えんえん +えんかい +えんぎ +えんげき +えんしゅう +えんぜつ +えんそく +えんちょう +えんとつ +おいかける +おいこす +おいしい +おいつく +おうえん +おうさま +おうじ +おうせつ +おうたい +おうふく +おうべい +おうよう +おえる +おおい +おおう +おおどおり +おおや +おおよそ +おかえり +おかず +おがむ +おかわり +おぎなう +おきる +おくさま +おくじょう +おくりがな +おくる +おくれる +おこす +おこなう +おこる +おさえる +おさない +おさめる +おしいれ +おしえる +おじぎ +おじさん +おしゃれ +おそらく +おそわる +おたがい +おたく +おだやか +おちつく +おっと +おつり +おでかけ +おとしもの +おとなしい +おどり +おどろかす +おばさん +おまいり +おめでとう +おもいで +おもう +おもたい +おもちゃ +おやつ +おやゆび +およぼす +おらんだ +おろす +おんがく +おんけい +おんしゃ +おんせん +おんだん +おんちゅう +おんどけい +かあつ +かいが +がいき +がいけん +がいこう +かいさつ +かいしゃ +かいすいよく +かいぜん +かいぞうど +かいつう +かいてん +かいとう +かいふく +がいへき +かいほう +かいよう +がいらい +かいわ +かえる +かおり +かかえる +かがく +かがし +かがみ +かくご +かくとく +かざる +がぞう +かたい +かたち +がちょう +がっきゅう +がっこう +がっさん +がっしょう +かなざわし +かのう +がはく +かぶか +かほう +かほご +かまう +かまぼこ +かめれおん +かゆい +かようび +からい +かるい +かろう +かわく +かわら +がんか +かんけい +かんこう +かんしゃ +かんそう +かんたん +かんち +がんばる +きあい +きあつ +きいろ +ぎいん +きうい +きうん +きえる +きおう +きおく +きおち +きおん +きかい +きかく +きかんしゃ +ききて +きくばり +きくらげ +きけんせい +きこう +きこえる +きこく +きさい +きさく +きさま +きさらぎ +ぎじかがく +ぎしき +ぎじたいけん +ぎじにってい +ぎじゅつしゃ +きすう +きせい +きせき +きせつ +きそう +きぞく +きぞん +きたえる +きちょう +きつえん +ぎっちり +きつつき +きつね +きてい +きどう +きどく +きない +きなが +きなこ +きぬごし +きねん +きのう +きのした +きはく +きびしい +きひん +きふく +きぶん +きぼう +きほん +きまる +きみつ +きむずかしい +きめる +きもだめし +きもち +きもの +きゃく +きやく +ぎゅうにく +きよう +きょうりゅう +きらい +きらく +きりん +きれい +きれつ +きろく +ぎろん +きわめる +ぎんいろ +きんかくじ +きんじょ +きんようび +ぐあい +くいず +くうかん +くうき +くうぐん +くうこう +ぐうせい +くうそう +ぐうたら +くうふく +くうぼ +くかん +くきょう +くげん +ぐこう +くさい +くさき +くさばな +くさる +くしゃみ +くしょう +くすのき +くすりゆび +くせげ +くせん +ぐたいてき +くださる +くたびれる +くちこみ +くちさき +くつした +ぐっすり +くつろぐ +くとうてん +くどく +くなん +くねくね +くのう +くふう +くみあわせ +くみたてる +くめる +くやくしょ +くらす +くらべる +くるま +くれる +くろう +くわしい +ぐんかん +ぐんしょく +ぐんたい +ぐんて +けあな +けいかく +けいけん +けいこ +けいさつ +げいじゅつ +けいたい +げいのうじん +けいれき +けいろ +けおとす +けおりもの +げきか +げきげん +げきだん +げきちん +げきとつ +げきは +げきやく +げこう +げこくじょう +げざい +けさき +げざん +けしき +けしごむ +けしょう +げすと +けたば +けちゃっぷ +けちらす +けつあつ +けつい +けつえき +けっこん +けつじょ +けっせき +けってい +けつまつ +げつようび +げつれい +けつろん +げどく +けとばす +けとる +けなげ +けなす +けなみ +けぬき +げねつ +けねん +けはい +げひん +けぶかい +げぼく +けまり +けみかる +けむし +けむり +けもの +けらい +けろけろ +けわしい +けんい +けんえつ +けんお +けんか +げんき +けんげん +けんこう +けんさく +けんしゅう +けんすう +げんそう +けんちく +けんてい +けんとう +けんない +けんにん +げんぶつ +けんま +けんみん +けんめい +けんらん +けんり +こあくま +こいぬ +こいびと +ごうい +こうえん +こうおん +こうかん +ごうきゅう +ごうけい +こうこう +こうさい +こうじ +こうすい +ごうせい +こうそく +こうたい +こうちゃ +こうつう +こうてい +こうどう +こうない +こうはい +ごうほう +ごうまん +こうもく +こうりつ +こえる +こおり +ごかい +ごがつ +ごかん +こくご +こくさい +こくとう +こくない +こくはく +こぐま +こけい +こける +ここのか +こころ +こさめ +こしつ +こすう +こせい +こせき +こぜん +こそだて +こたい +こたえる +こたつ +こちょう +こっか +こつこつ +こつばん +こつぶ +こてい +こてん +ことがら +ことし +ことば +ことり +こなごな +こねこね +このまま +このみ +このよ +ごはん +こひつじ +こふう +こふん +こぼれる +ごまあぶら +こまかい +ごますり +こまつな +こまる +こむぎこ +こもじ +こもち +こもの +こもん +こやく +こやま +こゆう +こゆび +こよい +こよう +こりる +これくしょん +ころっけ +こわもて +こわれる +こんいん +こんかい +こんき +こんしゅう +こんすい +こんだて +こんとん +こんなん +こんびに +こんぽん +こんまけ +こんや +こんれい +こんわく +ざいえき +さいかい +さいきん +ざいげん +ざいこ +さいしょ +さいせい +ざいたく +ざいちゅう +さいてき +ざいりょう +さうな +さかいし +さがす +さかな +さかみち +さがる +さぎょう +さくし +さくひん +さくら +さこく +さこつ +さずかる +ざせき +さたん +さつえい +ざつおん +ざっか +ざつがく +さっきょく +ざっし +さつじん +ざっそう +さつたば +さつまいも +さてい +さといも +さとう +さとおや +さとし +さとる +さのう +さばく +さびしい +さべつ +さほう +さほど +さます +さみしい +さみだれ +さむけ +さめる +さやえんどう +さゆう +さよう +さよく +さらだ +ざるそば +さわやか +さわる +さんいん +さんか +さんきゃく +さんこう +さんさい +ざんしょ +さんすう +さんせい +さんそ +さんち +さんま +さんみ +さんらん +しあい +しあげ +しあさって +しあわせ +しいく +しいん +しうち +しえい +しおけ +しかい +しかく +じかん +しごと +しすう +じだい +したうけ +したぎ +したて +したみ +しちょう +しちりん +しっかり +しつじ +しつもん +してい +してき +してつ +じてん +じどう +しなぎれ +しなもの +しなん +しねま +しねん +しのぐ +しのぶ +しはい +しばかり +しはつ +しはらい +しはん +しひょう +しふく +じぶん +しへい +しほう +しほん +しまう +しまる +しみん +しむける +じむしょ +しめい +しめる +しもん +しゃいん +しゃうん +しゃおん +じゃがいも +しやくしょ +しゃくほう +しゃけん +しゃこ +しゃざい +しゃしん +しゃせん +しゃそう +しゃたい +しゃちょう +しゃっきん +じゃま +しゃりん +しゃれい +じゆう +じゅうしょ +しゅくはく +じゅしん +しゅっせき +しゅみ +しゅらば +じゅんばん +しょうかい +しょくたく +しょっけん +しょどう +しょもつ +しらせる +しらべる +しんか +しんこう +じんじゃ +しんせいじ +しんちく +しんりん +すあげ +すあし +すあな +ずあん +すいえい +すいか +すいとう +ずいぶん +すいようび +すうがく +すうじつ +すうせん +すおどり +すきま +すくう +すくない +すける +すごい +すこし +ずさん +すずしい +すすむ +すすめる +すっかり +ずっしり +ずっと +すてき +すてる +すねる +すのこ +すはだ +すばらしい +ずひょう +ずぶぬれ +すぶり +すふれ +すべて +すべる +ずほう +すぼん +すまい +すめし +すもう +すやき +すらすら +するめ +すれちがう +すろっと +すわる +すんぜん +すんぽう +せあぶら +せいかつ +せいげん +せいじ +せいよう +せおう +せかいかん +せきにん +せきむ +せきゆ +せきらんうん +せけん +せこう +せすじ +せたい +せたけ +せっかく +せっきゃく +ぜっく +せっけん +せっこつ +せっさたくま +せつぞく +せつだん +せつでん +せっぱん +せつび +せつぶん +せつめい +せつりつ +せなか +せのび +せはば +せびろ +せぼね +せまい +せまる +せめる +せもたれ +せりふ +ぜんあく +せんい +せんえい +せんか +せんきょ +せんく +せんげん +ぜんご +せんさい +せんしゅ +せんすい +せんせい +せんぞ +せんたく +せんちょう +せんてい +せんとう +せんぬき +せんねん +せんぱい +ぜんぶ +ぜんぽう +せんむ +せんめんじょ +せんもん +せんやく +せんゆう +せんよう +ぜんら +ぜんりゃく +せんれい +せんろ +そあく +そいとげる +そいね +そうがんきょう +そうき +そうご +そうしん +そうだん +そうなん +そうび +そうめん +そうり +そえもの +そえん +そがい +そげき +そこう +そこそこ +そざい +そしな +そせい +そせん +そそぐ +そだてる +そつう +そつえん +そっかん +そつぎょう +そっけつ +そっこう +そっせん +そっと +そとがわ +そとづら +そなえる +そなた +そふぼ +そぼく +そぼろ +そまつ +そまる +そむく +そむりえ +そめる +そもそも +そよかぜ +そらまめ +そろう +そんかい +そんけい +そんざい +そんしつ +そんぞく +そんちょう +ぞんび +ぞんぶん +そんみん +たあい +たいいん +たいうん +たいえき +たいおう +だいがく +たいき +たいぐう +たいけん +たいこ +たいざい +だいじょうぶ +だいすき +たいせつ +たいそう +だいたい +たいちょう +たいてい +だいどころ +たいない +たいねつ +たいのう +たいはん +だいひょう +たいふう +たいへん +たいほ +たいまつばな +たいみんぐ +たいむ +たいめん +たいやき +たいよう +たいら +たいりょく +たいる +たいわん +たうえ +たえる +たおす +たおる +たおれる +たかい +たかね +たきび +たくさん +たこく +たこやき +たさい +たしざん +だじゃれ +たすける +たずさわる +たそがれ +たたかう +たたく +ただしい +たたみ +たちばな +だっかい +だっきゃく +だっこ +だっしゅつ +だったい +たてる +たとえる +たなばた +たにん +たぬき +たのしみ +たはつ +たぶん +たべる +たぼう +たまご +たまる +だむる +ためいき +ためす +ためる +たもつ +たやすい +たよる +たらす +たりきほんがん +たりょう +たりる +たると +たれる +たれんと +たろっと +たわむれる +だんあつ +たんい +たんおん +たんか +たんき +たんけん +たんご +たんさん +たんじょうび +だんせい +たんそく +たんたい +だんち +たんてい +たんとう +だんな +たんにん +だんねつ +たんのう +たんぴん +だんぼう +たんまつ +たんめい +だんれつ +だんろ +だんわ +ちあい +ちあん +ちいき +ちいさい +ちえん +ちかい +ちから +ちきゅう +ちきん +ちけいず +ちけん +ちこく +ちさい +ちしき +ちしりょう +ちせい +ちそう +ちたい +ちたん +ちちおや +ちつじょ +ちてき +ちてん +ちぬき +ちぬり +ちのう +ちひょう +ちへいせん +ちほう +ちまた +ちみつ +ちみどろ +ちめいど +ちゃんこなべ +ちゅうい +ちゆりょく +ちょうし +ちょさくけん +ちらし +ちらみ +ちりがみ +ちりょう +ちるど +ちわわ +ちんたい +ちんもく +ついか +ついたち +つうか +つうじょう +つうはん +つうわ +つかう +つかれる +つくね +つくる +つけね +つける +つごう +つたえる +つづく +つつじ +つつむ +つとめる +つながる +つなみ +つねづね +つのる +つぶす +つまらない +つまる +つみき +つめたい +つもり +つもる +つよい +つるぼ +つるみく +つわもの +つわり +てあし +てあて +てあみ +ていおん +ていか +ていき +ていけい +ていこく +ていさつ +ていし +ていせい +ていたい +ていど +ていねい +ていひょう +ていへん +ていぼう +てうち +ておくれ +てきとう +てくび +でこぼこ +てさぎょう +てさげ +てすり +てそう +てちがい +てちょう +てつがく +てつづき +でっぱ +てつぼう +てつや +でぬかえ +てぬき +てぬぐい +てのひら +てはい +てぶくろ +てふだ +てほどき +てほん +てまえ +てまきずし +てみじか +てみやげ +てらす +てれび +てわけ +てわたし +でんあつ +てんいん +てんかい +てんき +てんぐ +てんけん +てんごく +てんさい +てんし +てんすう +でんち +てんてき +てんとう +てんない +てんぷら +てんぼうだい +てんめつ +てんらんかい +でんりょく +でんわ +どあい +といれ +どうかん +とうきゅう +どうぐ +とうし +とうむぎ +とおい +とおか +とおく +とおす +とおる +とかい +とかす +ときおり +ときどき +とくい +とくしゅう +とくてん +とくに +とくべつ +とけい +とける +とこや +とさか +としょかん +とそう +とたん +とちゅう +とっきゅう +とっくん +とつぜん +とつにゅう +とどける +ととのえる +とない +となえる +となり +とのさま +とばす +どぶがわ +とほう +とまる +とめる +ともだち +ともる +どようび +とらえる +とんかつ +どんぶり +ないかく +ないこう +ないしょ +ないす +ないせん +ないそう +なおす +ながい +なくす +なげる +なこうど +なさけ +なたでここ +なっとう +なつやすみ +ななおし +なにごと +なにもの +なにわ +なのか +なふだ +なまいき +なまえ +なまみ +なみだ +なめらか +なめる +なやむ +ならう +ならび +ならぶ +なれる +なわとび +なわばり +にあう +にいがた +にうけ +におい +にかい +にがて +にきび +にくしみ +にくまん +にげる +にさんかたんそ +にしき +にせもの +にちじょう +にちようび +にっか +にっき +にっけい +にっこう +にっさん +にっしょく +にっすう +にっせき +にってい +になう +にほん +にまめ +にもつ +にやり +にゅういん +にりんしゃ +にわとり +にんい +にんか +にんき +にんげん +にんしき +にんずう +にんそう +にんたい +にんち +にんてい +にんにく +にんぷ +にんまり +にんむ +にんめい +にんよう +ぬいくぎ +ぬかす +ぬぐいとる +ぬぐう +ぬくもり +ぬすむ +ぬまえび +ぬめり +ぬらす +ぬんちゃく +ねあげ +ねいき +ねいる +ねいろ +ねぐせ +ねくたい +ねくら +ねこぜ +ねこむ +ねさげ +ねすごす +ねそべる +ねだん +ねつい +ねっしん +ねつぞう +ねったいぎょ +ねぶそく +ねふだ +ねぼう +ねほりはほり +ねまき +ねまわし +ねみみ +ねむい +ねむたい +ねもと +ねらう +ねわざ +ねんいり +ねんおし +ねんかん +ねんきん +ねんぐ +ねんざ +ねんし +ねんちゃく +ねんど +ねんぴ +ねんぶつ +ねんまつ +ねんりょう +ねんれい +のいず +のおづま +のがす +のきなみ +のこぎり +のこす +のこる +のせる +のぞく +のぞむ +のたまう +のちほど +のっく +のばす +のはら +のべる +のぼる +のみもの +のやま +のらいぬ +のらねこ +のりもの +のりゆき +のれん +のんき +ばあい +はあく +ばあさん +ばいか +ばいく +はいけん +はいご +はいしん +はいすい +はいせん +はいそう +はいち +ばいばい +はいれつ +はえる +はおる +はかい +ばかり +はかる +はくしゅ +はけん +はこぶ +はさみ +はさん +はしご +ばしょ +はしる +はせる +ぱそこん +はそん +はたん +はちみつ +はつおん +はっかく +はづき +はっきり +はっくつ +はっけん +はっこう +はっさん +はっしん +はったつ +はっちゅう +はってん +はっぴょう +はっぽう +はなす +はなび +はにかむ +はぶらし +はみがき +はむかう +はめつ +はやい +はやし +はらう +はろうぃん +はわい +はんい +はんえい +はんおん +はんかく +はんきょう +ばんぐみ +はんこ +はんしゃ +はんすう +はんだん +ぱんち +ぱんつ +はんてい +はんとし +はんのう +はんぱ +はんぶん +はんぺん +はんぼうき +はんめい +はんらん +はんろん +ひいき +ひうん +ひえる +ひかく +ひかり +ひかる +ひかん +ひくい +ひけつ +ひこうき +ひこく +ひさい +ひさしぶり +ひさん +びじゅつかん +ひしょ +ひそか +ひそむ +ひたむき +ひだり +ひたる +ひつぎ +ひっこし +ひっし +ひつじゅひん +ひっす +ひつぜん +ぴったり +ぴっちり +ひつよう +ひてい +ひとごみ +ひなまつり +ひなん +ひねる +ひはん +ひびく +ひひょう +ひほう +ひまわり +ひまん +ひみつ +ひめい +ひめじし +ひやけ +ひやす +ひよう +びょうき +ひらがな +ひらく +ひりつ +ひりょう +ひるま +ひるやすみ +ひれい +ひろい +ひろう +ひろき +ひろゆき +ひんかく +ひんけつ +ひんこん +ひんしゅ +ひんそう +ぴんち +ひんぱん +びんぼう +ふあん +ふいうち +ふうけい +ふうせん +ぷうたろう +ふうとう +ふうふ +ふえる +ふおん +ふかい +ふきん +ふくざつ +ふくぶくろ +ふこう +ふさい +ふしぎ +ふじみ +ふすま +ふせい +ふせぐ +ふそく +ぶたにく +ふたん +ふちょう +ふつう +ふつか +ふっかつ +ふっき +ふっこく +ぶどう +ふとる +ふとん +ふのう +ふはい +ふひょう +ふへん +ふまん +ふみん +ふめつ +ふめん +ふよう +ふりこ +ふりる +ふるい +ふんいき +ぶんがく +ぶんぐ +ふんしつ +ぶんせき +ふんそう +ぶんぽう +へいあん +へいおん +へいがい +へいき +へいげん +へいこう +へいさ +へいしゃ +へいせつ +へいそ +へいたく +へいてん +へいねつ +へいわ +へきが +へこむ +べにいろ +べにしょうが +へらす +へんかん +べんきょう +べんごし +へんさい +へんたい +べんり +ほあん +ほいく +ぼうぎょ +ほうこく +ほうそう +ほうほう +ほうもん +ほうりつ +ほえる +ほおん +ほかん +ほきょう +ぼきん +ほくろ +ほけつ +ほけん +ほこう +ほこる +ほしい +ほしつ +ほしゅ +ほしょう +ほせい +ほそい +ほそく +ほたて +ほたる +ぽちぶくろ +ほっきょく +ほっさ +ほったん +ほとんど +ほめる +ほんい +ほんき +ほんけ +ほんしつ +ほんやく +まいにち +まかい +まかせる +まがる +まける +まこと +まさつ +まじめ +ますく +まぜる +まつり +まとめ +まなぶ +まぬけ +まねく +まほう +まもる +まゆげ +まよう +まろやか +まわす +まわり +まわる +まんが +まんきつ +まんぞく +まんなか +みいら +みうち +みえる +みがく +みかた +みかん +みけん +みこん +みじかい +みすい +みすえる +みせる +みっか +みつかる +みつける +みてい +みとめる +みなと +みなみかさい +みねらる +みのう +みのがす +みほん +みもと +みやげ +みらい +みりょく +みわく +みんか +みんぞく +むいか +むえき +むえん +むかい +むかう +むかえ +むかし +むぎちゃ +むける +むげん +むさぼる +むしあつい +むしば +むじゅん +むしろ +むすう +むすこ +むすぶ +むすめ +むせる +むせん +むちゅう +むなしい +むのう +むやみ +むよう +むらさき +むりょう +むろん +めいあん +めいうん +めいえん +めいかく +めいきょく +めいさい +めいし +めいそう +めいぶつ +めいれい +めいわく +めぐまれる +めざす +めした +めずらしい +めだつ +めまい +めやす +めんきょ +めんせき +めんどう +もうしあげる +もうどうけん +もえる +もくし +もくてき +もくようび +もちろん +もどる +もらう +もんく +もんだい +やおや +やける +やさい +やさしい +やすい +やすたろう +やすみ +やせる +やそう +やたい +やちん +やっと +やっぱり +やぶる +やめる +ややこしい +やよい +やわらかい +ゆうき +ゆうびんきょく +ゆうべ +ゆうめい +ゆけつ +ゆしゅつ +ゆせん +ゆそう +ゆたか +ゆちゃく +ゆでる +ゆにゅう +ゆびわ +ゆらい +ゆれる +ようい +ようか +ようきゅう +ようじ +ようす +ようちえん +よかぜ +よかん +よきん +よくせい +よくぼう +よけい +よごれる +よさん +よしゅう +よそう +よそく +よっか +よてい +よどがわく +よねつ +よやく +よゆう +よろこぶ +よろしい +らいう +らくがき +らくご +らくさつ +らくだ +らしんばん +らせん +らぞく +らたい +らっか +られつ +りえき +りかい +りきさく +りきせつ +りくぐん +りくつ +りけん +りこう +りせい +りそう +りそく +りてん +りねん +りゆう +りゅうがく +りよう +りょうり +りょかん +りょくちゃ +りょこう +りりく +りれき +りろん +りんご +るいけい +るいさい +るいじ +るいせき +るすばん +るりがわら +れいかん +れいぎ +れいせい +れいぞうこ +れいとう +れいぼう +れきし +れきだい +れんあい +れんけい +れんこん +れんさい +れんしゅう +れんぞく +れんらく +ろうか +ろうご +ろうじん +ろうそく +ろくが +ろこつ +ろじうら +ろしゅつ +ろせん +ろてん +ろめん +ろれつ +ろんぎ +ろんぱ +ろんぶん +ろんり +わかす +わかめ +わかやま +わかれる +わしつ +わじまし +わすれもの +わらう +われる diff --git a/packages/wordlists/input/lang-ko.txt b/packages/wordlists/input/lang-ko.txt new file mode 100644 index 000000000..1acebf75a --- /dev/null +++ b/packages/wordlists/input/lang-ko.txt @@ -0,0 +1,2048 @@ +가격 +가끔 +가난 +가능 +가득 +가르침 +가뭄 +가방 +가상 +가슴 +가운데 +가을 +가이드 +가입 +가장 +가정 +가족 +가죽 +각오 +각자 +간격 +간부 +간섭 +간장 +간접 +간판 +갈등 +갈비 +갈색 +갈증 +감각 +감기 +감소 +감수성 +감자 +감정 +갑자기 +강남 +강당 +강도 +강력히 +강변 +강북 +강사 +강수량 +강아지 +강원도 +강의 +강제 +강조 +같이 +개구리 +개나리 +개방 +개별 +개선 +개성 +개인 +객관적 +거실 +거액 +거울 +거짓 +거품 +걱정 +건강 +건물 +건설 +건조 +건축 +걸음 +검사 +검토 +게시판 +게임 +겨울 +견해 +결과 +결국 +결론 +결석 +결승 +결심 +결정 +결혼 +경계 +경고 +경기 +경력 +경복궁 +경비 +경상도 +경영 +경우 +경쟁 +경제 +경주 +경찰 +경치 +경향 +경험 +계곡 +계단 +계란 +계산 +계속 +계약 +계절 +계층 +계획 +고객 +고구려 +고궁 +고급 +고등학생 +고무신 +고민 +고양이 +고장 +고전 +고집 +고춧가루 +고통 +고향 +곡식 +골목 +골짜기 +골프 +공간 +공개 +공격 +공군 +공급 +공기 +공동 +공무원 +공부 +공사 +공식 +공업 +공연 +공원 +공장 +공짜 +공책 +공통 +공포 +공항 +공휴일 +과목 +과일 +과장 +과정 +과학 +관객 +관계 +관광 +관념 +관람 +관련 +관리 +관습 +관심 +관점 +관찰 +광경 +광고 +광장 +광주 +괴로움 +굉장히 +교과서 +교문 +교복 +교실 +교양 +교육 +교장 +교직 +교통 +교환 +교훈 +구경 +구름 +구멍 +구별 +구분 +구석 +구성 +구속 +구역 +구입 +구청 +구체적 +국가 +국기 +국내 +국립 +국물 +국민 +국수 +국어 +국왕 +국적 +국제 +국회 +군대 +군사 +군인 +궁극적 +권리 +권위 +권투 +귀국 +귀신 +규정 +규칙 +균형 +그날 +그냥 +그늘 +그러나 +그룹 +그릇 +그림 +그제서야 +그토록 +극복 +극히 +근거 +근교 +근래 +근로 +근무 +근본 +근원 +근육 +근처 +글씨 +글자 +금강산 +금고 +금년 +금메달 +금액 +금연 +금요일 +금지 +긍정적 +기간 +기관 +기념 +기능 +기독교 +기둥 +기록 +기름 +기법 +기본 +기분 +기쁨 +기숙사 +기술 +기억 +기업 +기온 +기운 +기원 +기적 +기준 +기침 +기혼 +기획 +긴급 +긴장 +길이 +김밥 +김치 +김포공항 +깍두기 +깜빡 +깨달음 +깨소금 +껍질 +꼭대기 +꽃잎 +나들이 +나란히 +나머지 +나물 +나침반 +나흘 +낙엽 +난방 +날개 +날씨 +날짜 +남녀 +남대문 +남매 +남산 +남자 +남편 +남학생 +낭비 +낱말 +내년 +내용 +내일 +냄비 +냄새 +냇물 +냉동 +냉면 +냉방 +냉장고 +넥타이 +넷째 +노동 +노란색 +노력 +노인 +녹음 +녹차 +녹화 +논리 +논문 +논쟁 +놀이 +농구 +농담 +농민 +농부 +농업 +농장 +농촌 +높이 +눈동자 +눈물 +눈썹 +뉴욕 +느낌 +늑대 +능동적 +능력 +다방 +다양성 +다음 +다이어트 +다행 +단계 +단골 +단독 +단맛 +단순 +단어 +단위 +단점 +단체 +단추 +단편 +단풍 +달걀 +달러 +달력 +달리 +닭고기 +담당 +담배 +담요 +담임 +답변 +답장 +당근 +당분간 +당연히 +당장 +대규모 +대낮 +대단히 +대답 +대도시 +대략 +대량 +대륙 +대문 +대부분 +대신 +대응 +대장 +대전 +대접 +대중 +대책 +대출 +대충 +대통령 +대학 +대한민국 +대합실 +대형 +덩어리 +데이트 +도대체 +도덕 +도둑 +도망 +도서관 +도심 +도움 +도입 +도자기 +도저히 +도전 +도중 +도착 +독감 +독립 +독서 +독일 +독창적 +동화책 +뒷모습 +뒷산 +딸아이 +마누라 +마늘 +마당 +마라톤 +마련 +마무리 +마사지 +마약 +마요네즈 +마을 +마음 +마이크 +마중 +마지막 +마찬가지 +마찰 +마흔 +막걸리 +막내 +막상 +만남 +만두 +만세 +만약 +만일 +만점 +만족 +만화 +많이 +말기 +말씀 +말투 +맘대로 +망원경 +매년 +매달 +매력 +매번 +매스컴 +매일 +매장 +맥주 +먹이 +먼저 +먼지 +멀리 +메일 +며느리 +며칠 +면담 +멸치 +명단 +명령 +명예 +명의 +명절 +명칭 +명함 +모금 +모니터 +모델 +모든 +모범 +모습 +모양 +모임 +모조리 +모집 +모퉁이 +목걸이 +목록 +목사 +목소리 +목숨 +목적 +목표 +몰래 +몸매 +몸무게 +몸살 +몸속 +몸짓 +몸통 +몹시 +무관심 +무궁화 +무더위 +무덤 +무릎 +무슨 +무엇 +무역 +무용 +무조건 +무지개 +무척 +문구 +문득 +문법 +문서 +문제 +문학 +문화 +물가 +물건 +물결 +물고기 +물론 +물리학 +물음 +물질 +물체 +미국 +미디어 +미사일 +미술 +미역 +미용실 +미움 +미인 +미팅 +미혼 +민간 +민족 +민주 +믿음 +밀가루 +밀리미터 +밑바닥 +바가지 +바구니 +바나나 +바늘 +바닥 +바닷가 +바람 +바이러스 +바탕 +박물관 +박사 +박수 +반대 +반드시 +반말 +반발 +반성 +반응 +반장 +반죽 +반지 +반찬 +받침 +발가락 +발걸음 +발견 +발달 +발레 +발목 +발바닥 +발생 +발음 +발자국 +발전 +발톱 +발표 +밤하늘 +밥그릇 +밥맛 +밥상 +밥솥 +방금 +방면 +방문 +방바닥 +방법 +방송 +방식 +방안 +방울 +방지 +방학 +방해 +방향 +배경 +배꼽 +배달 +배드민턴 +백두산 +백색 +백성 +백인 +백제 +백화점 +버릇 +버섯 +버튼 +번개 +번역 +번지 +번호 +벌금 +벌레 +벌써 +범위 +범인 +범죄 +법률 +법원 +법적 +법칙 +베이징 +벨트 +변경 +변동 +변명 +변신 +변호사 +변화 +별도 +별명 +별일 +병실 +병아리 +병원 +보관 +보너스 +보라색 +보람 +보름 +보상 +보안 +보자기 +보장 +보전 +보존 +보통 +보편적 +보험 +복도 +복사 +복숭아 +복습 +볶음 +본격적 +본래 +본부 +본사 +본성 +본인 +본질 +볼펜 +봉사 +봉지 +봉투 +부근 +부끄러움 +부담 +부동산 +부문 +부분 +부산 +부상 +부엌 +부인 +부작용 +부장 +부정 +부족 +부지런히 +부친 +부탁 +부품 +부회장 +북부 +북한 +분노 +분량 +분리 +분명 +분석 +분야 +분위기 +분필 +분홍색 +불고기 +불과 +불교 +불꽃 +불만 +불법 +불빛 +불안 +불이익 +불행 +브랜드 +비극 +비난 +비닐 +비둘기 +비디오 +비로소 +비만 +비명 +비밀 +비바람 +비빔밥 +비상 +비용 +비율 +비중 +비타민 +비판 +빌딩 +빗물 +빗방울 +빗줄기 +빛깔 +빨간색 +빨래 +빨리 +사건 +사계절 +사나이 +사냥 +사람 +사랑 +사립 +사모님 +사물 +사방 +사상 +사생활 +사설 +사슴 +사실 +사업 +사용 +사월 +사장 +사전 +사진 +사촌 +사춘기 +사탕 +사투리 +사흘 +산길 +산부인과 +산업 +산책 +살림 +살인 +살짝 +삼계탕 +삼국 +삼십 +삼월 +삼촌 +상관 +상금 +상대 +상류 +상반기 +상상 +상식 +상업 +상인 +상자 +상점 +상처 +상추 +상태 +상표 +상품 +상황 +새벽 +색깔 +색연필 +생각 +생명 +생물 +생방송 +생산 +생선 +생신 +생일 +생활 +서랍 +서른 +서명 +서민 +서비스 +서양 +서울 +서적 +서점 +서쪽 +서클 +석사 +석유 +선거 +선물 +선배 +선생 +선수 +선원 +선장 +선전 +선택 +선풍기 +설거지 +설날 +설렁탕 +설명 +설문 +설사 +설악산 +설치 +설탕 +섭씨 +성공 +성당 +성명 +성별 +성인 +성장 +성적 +성질 +성함 +세금 +세미나 +세상 +세월 +세종대왕 +세탁 +센터 +센티미터 +셋째 +소규모 +소극적 +소금 +소나기 +소년 +소득 +소망 +소문 +소설 +소속 +소아과 +소용 +소원 +소음 +소중히 +소지품 +소질 +소풍 +소형 +속담 +속도 +속옷 +손가락 +손길 +손녀 +손님 +손등 +손목 +손뼉 +손실 +손질 +손톱 +손해 +솔직히 +솜씨 +송아지 +송이 +송편 +쇠고기 +쇼핑 +수건 +수년 +수단 +수돗물 +수동적 +수면 +수명 +수박 +수상 +수석 +수술 +수시로 +수업 +수염 +수영 +수입 +수준 +수집 +수출 +수컷 +수필 +수학 +수험생 +수화기 +숙녀 +숙소 +숙제 +순간 +순서 +순수 +순식간 +순위 +숟가락 +술병 +술집 +숫자 +스님 +스물 +스스로 +스승 +스웨터 +스위치 +스케이트 +스튜디오 +스트레스 +스포츠 +슬쩍 +슬픔 +습관 +습기 +승객 +승리 +승부 +승용차 +승진 +시각 +시간 +시골 +시금치 +시나리오 +시댁 +시리즈 +시멘트 +시민 +시부모 +시선 +시설 +시스템 +시아버지 +시어머니 +시월 +시인 +시일 +시작 +시장 +시절 +시점 +시중 +시즌 +시집 +시청 +시합 +시험 +식구 +식기 +식당 +식량 +식료품 +식물 +식빵 +식사 +식생활 +식초 +식탁 +식품 +신고 +신규 +신념 +신문 +신발 +신비 +신사 +신세 +신용 +신제품 +신청 +신체 +신화 +실감 +실내 +실력 +실례 +실망 +실수 +실습 +실시 +실장 +실정 +실질적 +실천 +실체 +실컷 +실태 +실패 +실험 +실현 +심리 +심부름 +심사 +심장 +심정 +심판 +쌍둥이 +씨름 +씨앗 +아가씨 +아나운서 +아드님 +아들 +아쉬움 +아스팔트 +아시아 +아울러 +아저씨 +아줌마 +아직 +아침 +아파트 +아프리카 +아픔 +아홉 +아흔 +악기 +악몽 +악수 +안개 +안경 +안과 +안내 +안녕 +안동 +안방 +안부 +안주 +알루미늄 +알코올 +암시 +암컷 +압력 +앞날 +앞문 +애인 +애정 +액수 +앨범 +야간 +야단 +야옹 +약간 +약국 +약속 +약수 +약점 +약품 +약혼녀 +양념 +양력 +양말 +양배추 +양주 +양파 +어둠 +어려움 +어른 +어젯밤 +어쨌든 +어쩌다가 +어쩐지 +언니 +언덕 +언론 +언어 +얼굴 +얼른 +얼음 +얼핏 +엄마 +업무 +업종 +업체 +엉덩이 +엉망 +엉터리 +엊그제 +에너지 +에어컨 +엔진 +여건 +여고생 +여관 +여군 +여권 +여대생 +여덟 +여동생 +여든 +여론 +여름 +여섯 +여성 +여왕 +여인 +여전히 +여직원 +여학생 +여행 +역사 +역시 +역할 +연결 +연구 +연극 +연기 +연락 +연설 +연세 +연속 +연습 +연애 +연예인 +연인 +연장 +연주 +연출 +연필 +연합 +연휴 +열기 +열매 +열쇠 +열심히 +열정 +열차 +열흘 +염려 +엽서 +영국 +영남 +영상 +영양 +영역 +영웅 +영원히 +영하 +영향 +영혼 +영화 +옆구리 +옆방 +옆집 +예감 +예금 +예방 +예산 +예상 +예선 +예술 +예습 +예식장 +예약 +예전 +예절 +예정 +예컨대 +옛날 +오늘 +오락 +오랫동안 +오렌지 +오로지 +오른발 +오븐 +오십 +오염 +오월 +오전 +오직 +오징어 +오페라 +오피스텔 +오히려 +옥상 +옥수수 +온갖 +온라인 +온몸 +온종일 +온통 +올가을 +올림픽 +올해 +옷차림 +와이셔츠 +와인 +완성 +완전 +왕비 +왕자 +왜냐하면 +왠지 +외갓집 +외국 +외로움 +외삼촌 +외출 +외침 +외할머니 +왼발 +왼손 +왼쪽 +요금 +요일 +요즘 +요청 +용기 +용서 +용어 +우산 +우선 +우승 +우연히 +우정 +우체국 +우편 +운동 +운명 +운반 +운전 +운행 +울산 +울음 +움직임 +웃어른 +웃음 +워낙 +원고 +원래 +원서 +원숭이 +원인 +원장 +원피스 +월급 +월드컵 +월세 +월요일 +웨이터 +위반 +위법 +위성 +위원 +위험 +위협 +윗사람 +유난히 +유럽 +유명 +유물 +유산 +유적 +유치원 +유학 +유행 +유형 +육군 +육상 +육십 +육체 +은행 +음력 +음료 +음반 +음성 +음식 +음악 +음주 +의견 +의논 +의문 +의복 +의식 +의심 +의외로 +의욕 +의원 +의학 +이것 +이곳 +이념 +이놈 +이달 +이대로 +이동 +이렇게 +이력서 +이론적 +이름 +이민 +이발소 +이별 +이불 +이빨 +이상 +이성 +이슬 +이야기 +이용 +이웃 +이월 +이윽고 +이익 +이전 +이중 +이튿날 +이틀 +이혼 +인간 +인격 +인공 +인구 +인근 +인기 +인도 +인류 +인물 +인생 +인쇄 +인연 +인원 +인재 +인종 +인천 +인체 +인터넷 +인하 +인형 +일곱 +일기 +일단 +일대 +일등 +일반 +일본 +일부 +일상 +일생 +일손 +일요일 +일월 +일정 +일종 +일주일 +일찍 +일체 +일치 +일행 +일회용 +임금 +임무 +입대 +입력 +입맛 +입사 +입술 +입시 +입원 +입장 +입학 +자가용 +자격 +자극 +자동 +자랑 +자부심 +자식 +자신 +자연 +자원 +자율 +자전거 +자정 +자존심 +자판 +작가 +작년 +작성 +작업 +작용 +작은딸 +작품 +잔디 +잔뜩 +잔치 +잘못 +잠깐 +잠수함 +잠시 +잠옷 +잠자리 +잡지 +장관 +장군 +장기간 +장래 +장례 +장르 +장마 +장면 +장모 +장미 +장비 +장사 +장소 +장식 +장애인 +장인 +장점 +장차 +장학금 +재능 +재빨리 +재산 +재생 +재작년 +재정 +재채기 +재판 +재학 +재활용 +저것 +저고리 +저곳 +저녁 +저런 +저렇게 +저번 +저울 +저절로 +저축 +적극 +적당히 +적성 +적용 +적응 +전개 +전공 +전기 +전달 +전라도 +전망 +전문 +전반 +전부 +전세 +전시 +전용 +전자 +전쟁 +전주 +전철 +전체 +전통 +전혀 +전후 +절대 +절망 +절반 +절약 +절차 +점검 +점수 +점심 +점원 +점점 +점차 +접근 +접시 +접촉 +젓가락 +정거장 +정도 +정류장 +정리 +정말 +정면 +정문 +정반대 +정보 +정부 +정비 +정상 +정성 +정오 +정원 +정장 +정지 +정치 +정확히 +제공 +제과점 +제대로 +제목 +제발 +제법 +제삿날 +제안 +제일 +제작 +제주도 +제출 +제품 +제한 +조각 +조건 +조금 +조깅 +조명 +조미료 +조상 +조선 +조용히 +조절 +조정 +조직 +존댓말 +존재 +졸업 +졸음 +종교 +종로 +종류 +종소리 +종업원 +종종 +종합 +좌석 +죄인 +주관적 +주름 +주말 +주머니 +주먹 +주문 +주민 +주방 +주변 +주식 +주인 +주일 +주장 +주전자 +주택 +준비 +줄거리 +줄기 +줄무늬 +중간 +중계방송 +중국 +중년 +중단 +중독 +중반 +중부 +중세 +중소기업 +중순 +중앙 +중요 +중학교 +즉석 +즉시 +즐거움 +증가 +증거 +증권 +증상 +증세 +지각 +지갑 +지경 +지극히 +지금 +지급 +지능 +지름길 +지리산 +지방 +지붕 +지식 +지역 +지우개 +지원 +지적 +지점 +지진 +지출 +직선 +직업 +직원 +직장 +진급 +진동 +진로 +진료 +진리 +진짜 +진찰 +진출 +진통 +진행 +질문 +질병 +질서 +짐작 +집단 +집안 +집중 +짜증 +찌꺼기 +차남 +차라리 +차량 +차림 +차별 +차선 +차츰 +착각 +찬물 +찬성 +참가 +참기름 +참새 +참석 +참여 +참외 +참조 +찻잔 +창가 +창고 +창구 +창문 +창밖 +창작 +창조 +채널 +채점 +책가방 +책방 +책상 +책임 +챔피언 +처벌 +처음 +천국 +천둥 +천장 +천재 +천천히 +철도 +철저히 +철학 +첫날 +첫째 +청년 +청바지 +청소 +청춘 +체계 +체력 +체온 +체육 +체중 +체험 +초등학생 +초반 +초밥 +초상화 +초순 +초여름 +초원 +초저녁 +초점 +초청 +초콜릿 +촛불 +총각 +총리 +총장 +촬영 +최근 +최상 +최선 +최신 +최악 +최종 +추석 +추억 +추진 +추천 +추측 +축구 +축소 +축제 +축하 +출근 +출발 +출산 +출신 +출연 +출입 +출장 +출판 +충격 +충고 +충돌 +충분히 +충청도 +취업 +취직 +취향 +치약 +친구 +친척 +칠십 +칠월 +칠판 +침대 +침묵 +침실 +칫솔 +칭찬 +카메라 +카운터 +칼국수 +캐릭터 +캠퍼스 +캠페인 +커튼 +컨디션 +컬러 +컴퓨터 +코끼리 +코미디 +콘서트 +콜라 +콤플렉스 +콩나물 +쾌감 +쿠데타 +크림 +큰길 +큰딸 +큰소리 +큰아들 +큰어머니 +큰일 +큰절 +클래식 +클럽 +킬로 +타입 +타자기 +탁구 +탁자 +탄생 +태권도 +태양 +태풍 +택시 +탤런트 +터널 +터미널 +테니스 +테스트 +테이블 +텔레비전 +토론 +토마토 +토요일 +통계 +통과 +통로 +통신 +통역 +통일 +통장 +통제 +통증 +통합 +통화 +퇴근 +퇴원 +퇴직금 +튀김 +트럭 +특급 +특별 +특성 +특수 +특징 +특히 +튼튼히 +티셔츠 +파란색 +파일 +파출소 +판결 +판단 +판매 +판사 +팔십 +팔월 +팝송 +패션 +팩스 +팩시밀리 +팬티 +퍼센트 +페인트 +편견 +편의 +편지 +편히 +평가 +평균 +평생 +평소 +평양 +평일 +평화 +포스터 +포인트 +포장 +포함 +표면 +표정 +표준 +표현 +품목 +품질 +풍경 +풍속 +풍습 +프랑스 +프린터 +플라스틱 +피곤 +피망 +피아노 +필름 +필수 +필요 +필자 +필통 +핑계 +하느님 +하늘 +하드웨어 +하룻밤 +하반기 +하숙집 +하순 +하여튼 +하지만 +하천 +하품 +하필 +학과 +학교 +학급 +학기 +학년 +학력 +학번 +학부모 +학비 +학생 +학술 +학습 +학용품 +학원 +학위 +학자 +학점 +한계 +한글 +한꺼번에 +한낮 +한눈 +한동안 +한때 +한라산 +한마디 +한문 +한번 +한복 +한식 +한여름 +한쪽 +할머니 +할아버지 +할인 +함께 +함부로 +합격 +합리적 +항공 +항구 +항상 +항의 +해결 +해군 +해답 +해당 +해물 +해석 +해설 +해수욕장 +해안 +핵심 +핸드백 +햄버거 +햇볕 +햇살 +행동 +행복 +행사 +행운 +행위 +향기 +향상 +향수 +허락 +허용 +헬기 +현관 +현금 +현대 +현상 +현실 +현장 +현재 +현지 +혈액 +협력 +형부 +형사 +형수 +형식 +형제 +형태 +형편 +혜택 +호기심 +호남 +호랑이 +호박 +호텔 +호흡 +혹시 +홀로 +홈페이지 +홍보 +홍수 +홍차 +화면 +화분 +화살 +화요일 +화장 +화학 +확보 +확인 +확장 +확정 +환갑 +환경 +환영 +환율 +환자 +활기 +활동 +활발히 +활용 +활짝 +회견 +회관 +회복 +회색 +회원 +회장 +회전 +횟수 +횡단보도 +효율적 +후반 +후춧가루 +훈련 +훨씬 +휴식 +휴일 +흉내 +흐름 +흑백 +흑인 +흔적 +흔히 +흥미 +흥분 +희곡 +희망 +희생 +흰색 +힘껏 diff --git a/packages/wordlists/input/lang-pt.txt b/packages/wordlists/input/lang-pt.txt new file mode 100644 index 000000000..4a8910550 --- /dev/null +++ b/packages/wordlists/input/lang-pt.txt @@ -0,0 +1,2048 @@ +abacate +abaixo +abalar +abater +abduzir +abelha +aberto +abismo +abotoar +abranger +abreviar +abrigar +abrupto +absinto +absoluto +absurdo +abutre +acabado +acalmar +acampar +acanhar +acaso +aceitar +acelerar +acenar +acervo +acessar +acetona +achatar +acidez +acima +acionado +acirrar +aclamar +aclive +acolhida +acomodar +acoplar +acordar +acumular +acusador +adaptar +adega +adentro +adepto +adequar +aderente +adesivo +adeus +adiante +aditivo +adjetivo +adjunto +admirar +adorar +adquirir +adubo +adverso +advogado +aeronave +afastar +aferir +afetivo +afinador +afivelar +aflito +afluente +afrontar +agachar +agarrar +agasalho +agenciar +agilizar +agiota +agitado +agora +agradar +agreste +agrupar +aguardar +agulha +ajoelhar +ajudar +ajustar +alameda +alarme +alastrar +alavanca +albergue +albino +alcatra +aldeia +alecrim +alegria +alertar +alface +alfinete +algum +alheio +aliar +alicate +alienar +alinhar +aliviar +almofada +alocar +alpiste +alterar +altitude +alucinar +alugar +aluno +alusivo +alvo +amaciar +amador +amarelo +amassar +ambas +ambiente +ameixa +amenizar +amido +amistoso +amizade +amolador +amontoar +amoroso +amostra +amparar +ampliar +ampola +anagrama +analisar +anarquia +anatomia +andaime +anel +anexo +angular +animar +anjo +anomalia +anotado +ansioso +anterior +anuidade +anunciar +anzol +apagador +apalpar +apanhado +apego +apelido +apertada +apesar +apetite +apito +aplauso +aplicada +apoio +apontar +aposta +aprendiz +aprovar +aquecer +arame +aranha +arara +arcada +ardente +areia +arejar +arenito +aresta +argiloso +argola +arma +arquivo +arraial +arrebate +arriscar +arroba +arrumar +arsenal +arterial +artigo +arvoredo +asfaltar +asilado +aspirar +assador +assinar +assoalho +assunto +astral +atacado +atadura +atalho +atarefar +atear +atender +aterro +ateu +atingir +atirador +ativo +atoleiro +atracar +atrevido +atriz +atual +atum +auditor +aumentar +aura +aurora +autismo +autoria +autuar +avaliar +avante +avaria +avental +avesso +aviador +avisar +avulso +axila +azarar +azedo +azeite +azulejo +babar +babosa +bacalhau +bacharel +bacia +bagagem +baiano +bailar +baioneta +bairro +baixista +bajular +baleia +baliza +balsa +banal +bandeira +banho +banir +banquete +barato +barbado +baronesa +barraca +barulho +baseado +bastante +batata +batedor +batida +batom +batucar +baunilha +beber +beijo +beirada +beisebol +beldade +beleza +belga +beliscar +bendito +bengala +benzer +berimbau +berlinda +berro +besouro +bexiga +bezerro +bico +bicudo +bienal +bifocal +bifurcar +bigorna +bilhete +bimestre +bimotor +biologia +biombo +biosfera +bipolar +birrento +biscoito +bisneto +bispo +bissexto +bitola +bizarro +blindado +bloco +bloquear +boato +bobagem +bocado +bocejo +bochecha +boicotar +bolada +boletim +bolha +bolo +bombeiro +bonde +boneco +bonita +borbulha +borda +boreal +borracha +bovino +boxeador +branco +brasa +braveza +breu +briga +brilho +brincar +broa +brochura +bronzear +broto +bruxo +bucha +budismo +bufar +bule +buraco +busca +busto +buzina +cabana +cabelo +cabide +cabo +cabrito +cacau +cacetada +cachorro +cacique +cadastro +cadeado +cafezal +caiaque +caipira +caixote +cajado +caju +calafrio +calcular +caldeira +calibrar +calmante +calota +camada +cambista +camisa +camomila +campanha +camuflar +canavial +cancelar +caneta +canguru +canhoto +canivete +canoa +cansado +cantar +canudo +capacho +capela +capinar +capotar +capricho +captador +capuz +caracol +carbono +cardeal +careca +carimbar +carneiro +carpete +carreira +cartaz +carvalho +casaco +casca +casebre +castelo +casulo +catarata +cativar +caule +causador +cautelar +cavalo +caverna +cebola +cedilha +cegonha +celebrar +celular +cenoura +censo +centeio +cercar +cerrado +certeiro +cerveja +cetim +cevada +chacota +chaleira +chamado +chapada +charme +chatice +chave +chefe +chegada +cheiro +cheque +chicote +chifre +chinelo +chocalho +chover +chumbo +chutar +chuva +cicatriz +ciclone +cidade +cidreira +ciente +cigana +cimento +cinto +cinza +ciranda +circuito +cirurgia +citar +clareza +clero +clicar +clone +clube +coado +coagir +cobaia +cobertor +cobrar +cocada +coelho +coentro +coeso +cogumelo +coibir +coifa +coiote +colar +coleira +colher +colidir +colmeia +colono +coluna +comando +combinar +comentar +comitiva +comover +complexo +comum +concha +condor +conectar +confuso +congelar +conhecer +conjugar +consumir +contrato +convite +cooperar +copeiro +copiador +copo +coquetel +coragem +cordial +corneta +coronha +corporal +correio +cortejo +coruja +corvo +cosseno +costela +cotonete +couro +couve +covil +cozinha +cratera +cravo +creche +credor +creme +crer +crespo +criada +criminal +crioulo +crise +criticar +crosta +crua +cruzeiro +cubano +cueca +cuidado +cujo +culatra +culminar +culpar +cultura +cumprir +cunhado +cupido +curativo +curral +cursar +curto +cuspir +custear +cutelo +damasco +datar +debater +debitar +deboche +debulhar +decalque +decimal +declive +decote +decretar +dedal +dedicado +deduzir +defesa +defumar +degelo +degrau +degustar +deitado +deixar +delator +delegado +delinear +delonga +demanda +demitir +demolido +dentista +depenado +depilar +depois +depressa +depurar +deriva +derramar +desafio +desbotar +descanso +desenho +desfiado +desgaste +desigual +deslize +desmamar +desova +despesa +destaque +desviar +detalhar +detentor +detonar +detrito +deusa +dever +devido +devotado +dezena +diagrama +dialeto +didata +difuso +digitar +dilatado +diluente +diminuir +dinastia +dinheiro +diocese +direto +discreta +disfarce +disparo +disquete +dissipar +distante +ditador +diurno +diverso +divisor +divulgar +dizer +dobrador +dolorido +domador +dominado +donativo +donzela +dormente +dorsal +dosagem +dourado +doutor +drenagem +drible +drogaria +duelar +duende +dueto +duplo +duquesa +durante +duvidoso +eclodir +ecoar +ecologia +edificar +edital +educado +efeito +efetivar +ejetar +elaborar +eleger +eleitor +elenco +elevador +eliminar +elogiar +embargo +embolado +embrulho +embutido +emenda +emergir +emissor +empatia +empenho +empinado +empolgar +emprego +empurrar +emulador +encaixe +encenado +enchente +encontro +endeusar +endossar +enfaixar +enfeite +enfim +engajado +engenho +englobar +engomado +engraxar +enguia +enjoar +enlatar +enquanto +enraizar +enrolado +enrugar +ensaio +enseada +ensino +ensopado +entanto +enteado +entidade +entortar +entrada +entulho +envergar +enviado +envolver +enxame +enxerto +enxofre +enxuto +epiderme +equipar +ereto +erguido +errata +erva +ervilha +esbanjar +esbelto +escama +escola +escrita +escuta +esfinge +esfolar +esfregar +esfumado +esgrima +esmalte +espanto +espelho +espiga +esponja +espreita +espumar +esquerda +estaca +esteira +esticar +estofado +estrela +estudo +esvaziar +etanol +etiqueta +euforia +europeu +evacuar +evaporar +evasivo +eventual +evidente +evoluir +exagero +exalar +examinar +exato +exausto +excesso +excitar +exclamar +executar +exemplo +exibir +exigente +exonerar +expandir +expelir +expirar +explanar +exposto +expresso +expulsar +externo +extinto +extrato +fabricar +fabuloso +faceta +facial +fada +fadiga +faixa +falar +falta +familiar +fandango +fanfarra +fantoche +fardado +farelo +farinha +farofa +farpa +fartura +fatia +fator +favorita +faxina +fazenda +fechado +feijoada +feirante +felino +feminino +fenda +feno +fera +feriado +ferrugem +ferver +festejar +fetal +feudal +fiapo +fibrose +ficar +ficheiro +figurado +fileira +filho +filme +filtrar +firmeza +fisgada +fissura +fita +fivela +fixador +fixo +flacidez +flamingo +flanela +flechada +flora +flutuar +fluxo +focal +focinho +fofocar +fogo +foguete +foice +folgado +folheto +forjar +formiga +forno +forte +fosco +fossa +fragata +fralda +frango +frasco +fraterno +freira +frente +fretar +frieza +friso +fritura +fronha +frustrar +fruteira +fugir +fulano +fuligem +fundar +fungo +funil +furador +furioso +futebol +gabarito +gabinete +gado +gaiato +gaiola +gaivota +galega +galho +galinha +galocha +ganhar +garagem +garfo +gargalo +garimpo +garoupa +garrafa +gasoduto +gasto +gata +gatilho +gaveta +gazela +gelado +geleia +gelo +gemada +gemer +gemido +generoso +gengiva +genial +genoma +genro +geologia +gerador +germinar +gesso +gestor +ginasta +gincana +gingado +girafa +girino +glacial +glicose +global +glorioso +goela +goiaba +golfe +golpear +gordura +gorjeta +gorro +gostoso +goteira +governar +gracejo +gradual +grafite +gralha +grampo +granada +gratuito +graveto +graxa +grego +grelhar +greve +grilo +grisalho +gritaria +grosso +grotesco +grudado +grunhido +gruta +guache +guarani +guaxinim +guerrear +guiar +guincho +guisado +gula +guloso +guru +habitar +harmonia +haste +haver +hectare +herdar +heresia +hesitar +hiato +hibernar +hidratar +hiena +hino +hipismo +hipnose +hipoteca +hoje +holofote +homem +honesto +honrado +hormonal +hospedar +humorado +iate +ideia +idoso +ignorado +igreja +iguana +ileso +ilha +iludido +iluminar +ilustrar +imagem +imediato +imenso +imersivo +iminente +imitador +imortal +impacto +impedir +implante +impor +imprensa +impune +imunizar +inalador +inapto +inativo +incenso +inchar +incidir +incluir +incolor +indeciso +indireto +indutor +ineficaz +inerente +infantil +infestar +infinito +inflamar +informal +infrator +ingerir +inibido +inicial +inimigo +injetar +inocente +inodoro +inovador +inox +inquieto +inscrito +inseto +insistir +inspetor +instalar +insulto +intacto +integral +intimar +intocado +intriga +invasor +inverno +invicto +invocar +iogurte +iraniano +ironizar +irreal +irritado +isca +isento +isolado +isqueiro +italiano +janeiro +jangada +janta +jararaca +jardim +jarro +jasmim +jato +javali +jazida +jejum +joaninha +joelhada +jogador +joia +jornal +jorrar +jovem +juba +judeu +judoca +juiz +julgador +julho +jurado +jurista +juro +justa +labareda +laboral +lacre +lactante +ladrilho +lagarta +lagoa +laje +lamber +lamentar +laminar +lampejo +lanche +lapidar +lapso +laranja +lareira +largura +lasanha +lastro +lateral +latido +lavanda +lavoura +lavrador +laxante +lazer +lealdade +lebre +legado +legendar +legista +leigo +leiloar +leitura +lembrete +leme +lenhador +lentilha +leoa +lesma +leste +letivo +letreiro +levar +leveza +levitar +liberal +libido +liderar +ligar +ligeiro +limitar +limoeiro +limpador +linda +linear +linhagem +liquidez +listagem +lisura +litoral +livro +lixa +lixeira +locador +locutor +lojista +lombo +lona +longe +lontra +lorde +lotado +loteria +loucura +lousa +louvar +luar +lucidez +lucro +luneta +lustre +lutador +luva +macaco +macete +machado +macio +madeira +madrinha +magnata +magreza +maior +mais +malandro +malha +malote +maluco +mamilo +mamoeiro +mamute +manada +mancha +mandato +manequim +manhoso +manivela +manobrar +mansa +manter +manusear +mapeado +maquinar +marcador +maresia +marfim +margem +marinho +marmita +maroto +marquise +marreco +martelo +marujo +mascote +masmorra +massagem +mastigar +matagal +materno +matinal +matutar +maxilar +medalha +medida +medusa +megafone +meiga +melancia +melhor +membro +memorial +menino +menos +mensagem +mental +merecer +mergulho +mesada +mesclar +mesmo +mesquita +mestre +metade +meteoro +metragem +mexer +mexicano +micro +migalha +migrar +milagre +milenar +milhar +mimado +minerar +minhoca +ministro +minoria +miolo +mirante +mirtilo +misturar +mocidade +moderno +modular +moeda +moer +moinho +moita +moldura +moleza +molho +molinete +molusco +montanha +moqueca +morango +morcego +mordomo +morena +mosaico +mosquete +mostarda +motel +motim +moto +motriz +muda +muito +mulata +mulher +multar +mundial +munido +muralha +murcho +muscular +museu +musical +nacional +nadador +naja +namoro +narina +narrado +nascer +nativa +natureza +navalha +navegar +navio +neblina +nebuloso +negativa +negociar +negrito +nervoso +neta +neural +nevasca +nevoeiro +ninar +ninho +nitidez +nivelar +nobreza +noite +noiva +nomear +nominal +nordeste +nortear +notar +noticiar +noturno +novelo +novilho +novo +nublado +nudez +numeral +nupcial +nutrir +nuvem +obcecado +obedecer +objetivo +obrigado +obscuro +obstetra +obter +obturar +ocidente +ocioso +ocorrer +oculista +ocupado +ofegante +ofensiva +oferenda +oficina +ofuscado +ogiva +olaria +oleoso +olhar +oliveira +ombro +omelete +omisso +omitir +ondulado +oneroso +ontem +opcional +operador +oponente +oportuno +oposto +orar +orbitar +ordem +ordinal +orfanato +orgasmo +orgulho +oriental +origem +oriundo +orla +ortodoxo +orvalho +oscilar +ossada +osso +ostentar +otimismo +ousadia +outono +outubro +ouvido +ovelha +ovular +oxidar +oxigenar +pacato +paciente +pacote +pactuar +padaria +padrinho +pagar +pagode +painel +pairar +paisagem +palavra +palestra +palheta +palito +palmada +palpitar +pancada +panela +panfleto +panqueca +pantanal +papagaio +papelada +papiro +parafina +parcial +pardal +parede +partida +pasmo +passado +pastel +patamar +patente +patinar +patrono +paulada +pausar +peculiar +pedalar +pedestre +pediatra +pedra +pegada +peitoral +peixe +pele +pelicano +penca +pendurar +peneira +penhasco +pensador +pente +perceber +perfeito +pergunta +perito +permitir +perna +perplexo +persiana +pertence +peruca +pescado +pesquisa +pessoa +petiscar +piada +picado +piedade +pigmento +pilastra +pilhado +pilotar +pimenta +pincel +pinguim +pinha +pinote +pintar +pioneiro +pipoca +piquete +piranha +pires +pirueta +piscar +pistola +pitanga +pivete +planta +plaqueta +platina +plebeu +plumagem +pluvial +pneu +poda +poeira +poetisa +polegada +policiar +poluente +polvilho +pomar +pomba +ponderar +pontaria +populoso +porta +possuir +postal +pote +poupar +pouso +povoar +praia +prancha +prato +praxe +prece +predador +prefeito +premiar +prensar +preparar +presilha +pretexto +prevenir +prezar +primata +princesa +prisma +privado +processo +produto +profeta +proibido +projeto +prometer +propagar +prosa +protetor +provador +publicar +pudim +pular +pulmonar +pulseira +punhal +punir +pupilo +pureza +puxador +quadra +quantia +quarto +quase +quebrar +queda +queijo +quente +querido +quimono +quina +quiosque +rabanada +rabisco +rachar +racionar +radial +raiar +rainha +raio +raiva +rajada +ralado +ramal +ranger +ranhura +rapadura +rapel +rapidez +raposa +raquete +raridade +rasante +rascunho +rasgar +raspador +rasteira +rasurar +ratazana +ratoeira +realeza +reanimar +reaver +rebaixar +rebelde +rebolar +recado +recente +recheio +recibo +recordar +recrutar +recuar +rede +redimir +redonda +reduzida +reenvio +refinar +refletir +refogar +refresco +refugiar +regalia +regime +regra +reinado +reitor +rejeitar +relativo +remador +remendo +remorso +renovado +reparo +repelir +repleto +repolho +represa +repudiar +requerer +resenha +resfriar +resgatar +residir +resolver +respeito +ressaca +restante +resumir +retalho +reter +retirar +retomada +retratar +revelar +revisor +revolta +riacho +rica +rigidez +rigoroso +rimar +ringue +risada +risco +risonho +robalo +rochedo +rodada +rodeio +rodovia +roedor +roleta +romano +roncar +rosado +roseira +rosto +rota +roteiro +rotina +rotular +rouco +roupa +roxo +rubro +rugido +rugoso +ruivo +rumo +rupestre +russo +sabor +saciar +sacola +sacudir +sadio +safira +saga +sagrada +saibro +salada +saleiro +salgado +saliva +salpicar +salsicha +saltar +salvador +sambar +samurai +sanar +sanfona +sangue +sanidade +sapato +sarda +sargento +sarjeta +saturar +saudade +saxofone +sazonal +secar +secular +seda +sedento +sediado +sedoso +sedutor +segmento +segredo +segundo +seiva +seleto +selvagem +semanal +semente +senador +senhor +sensual +sentado +separado +sereia +seringa +serra +servo +setembro +setor +sigilo +silhueta +silicone +simetria +simpatia +simular +sinal +sincero +singular +sinopse +sintonia +sirene +siri +situado +soberano +sobra +socorro +sogro +soja +solda +soletrar +solteiro +sombrio +sonata +sondar +sonegar +sonhador +sono +soprano +soquete +sorrir +sorteio +sossego +sotaque +soterrar +sovado +sozinho +suavizar +subida +submerso +subsolo +subtrair +sucata +sucesso +suco +sudeste +sufixo +sugador +sugerir +sujeito +sulfato +sumir +suor +superior +suplicar +suposto +suprimir +surdina +surfista +surpresa +surreal +surtir +suspiro +sustento +tabela +tablete +tabuada +tacho +tagarela +talher +talo +talvez +tamanho +tamborim +tampa +tangente +tanto +tapar +tapioca +tardio +tarefa +tarja +tarraxa +tatuagem +taurino +taxativo +taxista +teatral +tecer +tecido +teclado +tedioso +teia +teimar +telefone +telhado +tempero +tenente +tensor +tentar +termal +terno +terreno +tese +tesoura +testado +teto +textura +texugo +tiara +tigela +tijolo +timbrar +timidez +tingido +tinteiro +tiragem +titular +toalha +tocha +tolerar +tolice +tomada +tomilho +tonel +tontura +topete +tora +torcido +torneio +torque +torrada +torto +tostar +touca +toupeira +toxina +trabalho +tracejar +tradutor +trafegar +trajeto +trama +trancar +trapo +traseiro +tratador +travar +treino +tremer +trepidar +trevo +triagem +tribo +triciclo +tridente +trilogia +trindade +triplo +triturar +triunfal +trocar +trombeta +trova +trunfo +truque +tubular +tucano +tudo +tulipa +tupi +turbo +turma +turquesa +tutelar +tutorial +uivar +umbigo +unha +unidade +uniforme +urologia +urso +urtiga +urubu +usado +usina +usufruir +vacina +vadiar +vagaroso +vaidoso +vala +valente +validade +valores +vantagem +vaqueiro +varanda +vareta +varrer +vascular +vasilha +vassoura +vazar +vazio +veado +vedar +vegetar +veicular +veleiro +velhice +veludo +vencedor +vendaval +venerar +ventre +verbal +verdade +vereador +vergonha +vermelho +verniz +versar +vertente +vespa +vestido +vetorial +viaduto +viagem +viajar +viatura +vibrador +videira +vidraria +viela +viga +vigente +vigiar +vigorar +vilarejo +vinco +vinheta +vinil +violeta +virada +virtude +visitar +visto +vitral +viveiro +vizinho +voador +voar +vogal +volante +voleibol +voltagem +volumoso +vontade +vulto +vuvuzela +xadrez +xarope +xeque +xeretar +xerife +xingar +zangado +zarpar +zebu +zelador +zombar +zoologia +zumbido diff --git a/packages/wordlists/input/lang-zh_cn.txt b/packages/wordlists/input/lang-zh_cn.txt new file mode 100644 index 000000000..b90f1ed85 --- /dev/null +++ b/packages/wordlists/input/lang-zh_cn.txt @@ -0,0 +1,2048 @@ +的 +一 +是 +在 +不 +了 +有 +和 +人 +这 +中 +大 +为 +上 +个 +国 +我 +以 +要 +他 +时 +来 +用 +们 +生 +到 +作 +地 +于 +出 +就 +分 +对 +成 +会 +可 +主 +发 +年 +动 +同 +工 +也 +能 +下 +过 +子 +说 +产 +种 +面 +而 +方 +后 +多 +定 +行 +学 +法 +所 +民 +得 +经 +十 +三 +之 +进 +着 +等 +部 +度 +家 +电 +力 +里 +如 +水 +化 +高 +自 +二 +理 +起 +小 +物 +现 +实 +加 +量 +都 +两 +体 +制 +机 +当 +使 +点 +从 +业 +本 +去 +把 +性 +好 +应 +开 +它 +合 +还 +因 +由 +其 +些 +然 +前 +外 +天 +政 +四 +日 +那 +社 +义 +事 +平 +形 +相 +全 +表 +间 +样 +与 +关 +各 +重 +新 +线 +内 +数 +正 +心 +反 +你 +明 +看 +原 +又 +么 +利 +比 +或 +但 +质 +气 +第 +向 +道 +命 +此 +变 +条 +只 +没 +结 +解 +问 +意 +建 +月 +公 +无 +系 +军 +很 +情 +者 +最 +立 +代 +想 +已 +通 +并 +提 +直 +题 +党 +程 +展 +五 +果 +料 +象 +员 +革 +位 +入 +常 +文 +总 +次 +品 +式 +活 +设 +及 +管 +特 +件 +长 +求 +老 +头 +基 +资 +边 +流 +路 +级 +少 +图 +山 +统 +接 +知 +较 +将 +组 +见 +计 +别 +她 +手 +角 +期 +根 +论 +运 +农 +指 +几 +九 +区 +强 +放 +决 +西 +被 +干 +做 +必 +战 +先 +回 +则 +任 +取 +据 +处 +队 +南 +给 +色 +光 +门 +即 +保 +治 +北 +造 +百 +规 +热 +领 +七 +海 +口 +东 +导 +器 +压 +志 +世 +金 +增 +争 +济 +阶 +油 +思 +术 +极 +交 +受 +联 +什 +认 +六 +共 +权 +收 +证 +改 +清 +美 +再 +采 +转 +更 +单 +风 +切 +打 +白 +教 +速 +花 +带 +安 +场 +身 +车 +例 +真 +务 +具 +万 +每 +目 +至 +达 +走 +积 +示 +议 +声 +报 +斗 +完 +类 +八 +离 +华 +名 +确 +才 +科 +张 +信 +马 +节 +话 +米 +整 +空 +元 +况 +今 +集 +温 +传 +土 +许 +步 +群 +广 +石 +记 +需 +段 +研 +界 +拉 +林 +律 +叫 +且 +究 +观 +越 +织 +装 +影 +算 +低 +持 +音 +众 +书 +布 +复 +容 +儿 +须 +际 +商 +非 +验 +连 +断 +深 +难 +近 +矿 +千 +周 +委 +素 +技 +备 +半 +办 +青 +省 +列 +习 +响 +约 +支 +般 +史 +感 +劳 +便 +团 +往 +酸 +历 +市 +克 +何 +除 +消 +构 +府 +称 +太 +准 +精 +值 +号 +率 +族 +维 +划 +选 +标 +写 +存 +候 +毛 +亲 +快 +效 +斯 +院 +查 +江 +型 +眼 +王 +按 +格 +养 +易 +置 +派 +层 +片 +始 +却 +专 +状 +育 +厂 +京 +识 +适 +属 +圆 +包 +火 +住 +调 +满 +县 +局 +照 +参 +红 +细 +引 +听 +该 +铁 +价 +严 +首 +底 +液 +官 +德 +随 +病 +苏 +失 +尔 +死 +讲 +配 +女 +黄 +推 +显 +谈 +罪 +神 +艺 +呢 +席 +含 +企 +望 +密 +批 +营 +项 +防 +举 +球 +英 +氧 +势 +告 +李 +台 +落 +木 +帮 +轮 +破 +亚 +师 +围 +注 +远 +字 +材 +排 +供 +河 +态 +封 +另 +施 +减 +树 +溶 +怎 +止 +案 +言 +士 +均 +武 +固 +叶 +鱼 +波 +视 +仅 +费 +紧 +爱 +左 +章 +早 +朝 +害 +续 +轻 +服 +试 +食 +充 +兵 +源 +判 +护 +司 +足 +某 +练 +差 +致 +板 +田 +降 +黑 +犯 +负 +击 +范 +继 +兴 +似 +余 +坚 +曲 +输 +修 +故 +城 +夫 +够 +送 +笔 +船 +占 +右 +财 +吃 +富 +春 +职 +觉 +汉 +画 +功 +巴 +跟 +虽 +杂 +飞 +检 +吸 +助 +升 +阳 +互 +初 +创 +抗 +考 +投 +坏 +策 +古 +径 +换 +未 +跑 +留 +钢 +曾 +端 +责 +站 +简 +述 +钱 +副 +尽 +帝 +射 +草 +冲 +承 +独 +令 +限 +阿 +宣 +环 +双 +请 +超 +微 +让 +控 +州 +良 +轴 +找 +否 +纪 +益 +依 +优 +顶 +础 +载 +倒 +房 +突 +坐 +粉 +敌 +略 +客 +袁 +冷 +胜 +绝 +析 +块 +剂 +测 +丝 +协 +诉 +念 +陈 +仍 +罗 +盐 +友 +洋 +错 +苦 +夜 +刑 +移 +频 +逐 +靠 +混 +母 +短 +皮 +终 +聚 +汽 +村 +云 +哪 +既 +距 +卫 +停 +烈 +央 +察 +烧 +迅 +境 +若 +印 +洲 +刻 +括 +激 +孔 +搞 +甚 +室 +待 +核 +校 +散 +侵 +吧 +甲 +游 +久 +菜 +味 +旧 +模 +湖 +货 +损 +预 +阻 +毫 +普 +稳 +乙 +妈 +植 +息 +扩 +银 +语 +挥 +酒 +守 +拿 +序 +纸 +医 +缺 +雨 +吗 +针 +刘 +啊 +急 +唱 +误 +训 +愿 +审 +附 +获 +茶 +鲜 +粮 +斤 +孩 +脱 +硫 +肥 +善 +龙 +演 +父 +渐 +血 +欢 +械 +掌 +歌 +沙 +刚 +攻 +谓 +盾 +讨 +晚 +粒 +乱 +燃 +矛 +乎 +杀 +药 +宁 +鲁 +贵 +钟 +煤 +读 +班 +伯 +香 +介 +迫 +句 +丰 +培 +握 +兰 +担 +弦 +蛋 +沉 +假 +穿 +执 +答 +乐 +谁 +顺 +烟 +缩 +征 +脸 +喜 +松 +脚 +困 +异 +免 +背 +星 +福 +买 +染 +井 +概 +慢 +怕 +磁 +倍 +祖 +皇 +促 +静 +补 +评 +翻 +肉 +践 +尼 +衣 +宽 +扬 +棉 +希 +伤 +操 +垂 +秋 +宜 +氢 +套 +督 +振 +架 +亮 +末 +宪 +庆 +编 +牛 +触 +映 +雷 +销 +诗 +座 +居 +抓 +裂 +胞 +呼 +娘 +景 +威 +绿 +晶 +厚 +盟 +衡 +鸡 +孙 +延 +危 +胶 +屋 +乡 +临 +陆 +顾 +掉 +呀 +灯 +岁 +措 +束 +耐 +剧 +玉 +赵 +跳 +哥 +季 +课 +凯 +胡 +额 +款 +绍 +卷 +齐 +伟 +蒸 +殖 +永 +宗 +苗 +川 +炉 +岩 +弱 +零 +杨 +奏 +沿 +露 +杆 +探 +滑 +镇 +饭 +浓 +航 +怀 +赶 +库 +夺 +伊 +灵 +税 +途 +灭 +赛 +归 +召 +鼓 +播 +盘 +裁 +险 +康 +唯 +录 +菌 +纯 +借 +糖 +盖 +横 +符 +私 +努 +堂 +域 +枪 +润 +幅 +哈 +竟 +熟 +虫 +泽 +脑 +壤 +碳 +欧 +遍 +侧 +寨 +敢 +彻 +虑 +斜 +薄 +庭 +纳 +弹 +饲 +伸 +折 +麦 +湿 +暗 +荷 +瓦 +塞 +床 +筑 +恶 +户 +访 +塔 +奇 +透 +梁 +刀 +旋 +迹 +卡 +氯 +遇 +份 +毒 +泥 +退 +洗 +摆 +灰 +彩 +卖 +耗 +夏 +择 +忙 +铜 +献 +硬 +予 +繁 +圈 +雪 +函 +亦 +抽 +篇 +阵 +阴 +丁 +尺 +追 +堆 +雄 +迎 +泛 +爸 +楼 +避 +谋 +吨 +野 +猪 +旗 +累 +偏 +典 +馆 +索 +秦 +脂 +潮 +爷 +豆 +忽 +托 +惊 +塑 +遗 +愈 +朱 +替 +纤 +粗 +倾 +尚 +痛 +楚 +谢 +奋 +购 +磨 +君 +池 +旁 +碎 +骨 +监 +捕 +弟 +暴 +割 +贯 +殊 +释 +词 +亡 +壁 +顿 +宝 +午 +尘 +闻 +揭 +炮 +残 +冬 +桥 +妇 +警 +综 +招 +吴 +付 +浮 +遭 +徐 +您 +摇 +谷 +赞 +箱 +隔 +订 +男 +吹 +园 +纷 +唐 +败 +宋 +玻 +巨 +耕 +坦 +荣 +闭 +湾 +键 +凡 +驻 +锅 +救 +恩 +剥 +凝 +碱 +齿 +截 +炼 +麻 +纺 +禁 +废 +盛 +版 +缓 +净 +睛 +昌 +婚 +涉 +筒 +嘴 +插 +岸 +朗 +庄 +街 +藏 +姑 +贸 +腐 +奴 +啦 +惯 +乘 +伙 +恢 +匀 +纱 +扎 +辩 +耳 +彪 +臣 +亿 +璃 +抵 +脉 +秀 +萨 +俄 +网 +舞 +店 +喷 +纵 +寸 +汗 +挂 +洪 +贺 +闪 +柬 +爆 +烯 +津 +稻 +墙 +软 +勇 +像 +滚 +厘 +蒙 +芳 +肯 +坡 +柱 +荡 +腿 +仪 +旅 +尾 +轧 +冰 +贡 +登 +黎 +削 +钻 +勒 +逃 +障 +氨 +郭 +峰 +币 +港 +伏 +轨 +亩 +毕 +擦 +莫 +刺 +浪 +秘 +援 +株 +健 +售 +股 +岛 +甘 +泡 +睡 +童 +铸 +汤 +阀 +休 +汇 +舍 +牧 +绕 +炸 +哲 +磷 +绩 +朋 +淡 +尖 +启 +陷 +柴 +呈 +徒 +颜 +泪 +稍 +忘 +泵 +蓝 +拖 +洞 +授 +镜 +辛 +壮 +锋 +贫 +虚 +弯 +摩 +泰 +幼 +廷 +尊 +窗 +纲 +弄 +隶 +疑 +氏 +宫 +姐 +震 +瑞 +怪 +尤 +琴 +循 +描 +膜 +违 +夹 +腰 +缘 +珠 +穷 +森 +枝 +竹 +沟 +催 +绳 +忆 +邦 +剩 +幸 +浆 +栏 +拥 +牙 +贮 +礼 +滤 +钠 +纹 +罢 +拍 +咱 +喊 +袖 +埃 +勤 +罚 +焦 +潜 +伍 +墨 +欲 +缝 +姓 +刊 +饱 +仿 +奖 +铝 +鬼 +丽 +跨 +默 +挖 +链 +扫 +喝 +袋 +炭 +污 +幕 +诸 +弧 +励 +梅 +奶 +洁 +灾 +舟 +鉴 +苯 +讼 +抱 +毁 +懂 +寒 +智 +埔 +寄 +届 +跃 +渡 +挑 +丹 +艰 +贝 +碰 +拔 +爹 +戴 +码 +梦 +芽 +熔 +赤 +渔 +哭 +敬 +颗 +奔 +铅 +仲 +虎 +稀 +妹 +乏 +珍 +申 +桌 +遵 +允 +隆 +螺 +仓 +魏 +锐 +晓 +氮 +兼 +隐 +碍 +赫 +拨 +忠 +肃 +缸 +牵 +抢 +博 +巧 +壳 +兄 +杜 +讯 +诚 +碧 +祥 +柯 +页 +巡 +矩 +悲 +灌 +龄 +伦 +票 +寻 +桂 +铺 +圣 +恐 +恰 +郑 +趣 +抬 +荒 +腾 +贴 +柔 +滴 +猛 +阔 +辆 +妻 +填 +撤 +储 +签 +闹 +扰 +紫 +砂 +递 +戏 +吊 +陶 +伐 +喂 +疗 +瓶 +婆 +抚 +臂 +摸 +忍 +虾 +蜡 +邻 +胸 +巩 +挤 +偶 +弃 +槽 +劲 +乳 +邓 +吉 +仁 +烂 +砖 +租 +乌 +舰 +伴 +瓜 +浅 +丙 +暂 +燥 +橡 +柳 +迷 +暖 +牌 +秧 +胆 +详 +簧 +踏 +瓷 +谱 +呆 +宾 +糊 +洛 +辉 +愤 +竞 +隙 +怒 +粘 +乃 +绪 +肩 +籍 +敏 +涂 +熙 +皆 +侦 +悬 +掘 +享 +纠 +醒 +狂 +锁 +淀 +恨 +牲 +霸 +爬 +赏 +逆 +玩 +陵 +祝 +秒 +浙 +貌 +役 +彼 +悉 +鸭 +趋 +凤 +晨 +畜 +辈 +秩 +卵 +署 +梯 +炎 +滩 +棋 +驱 +筛 +峡 +冒 +啥 +寿 +译 +浸 +泉 +帽 +迟 +硅 +疆 +贷 +漏 +稿 +冠 +嫩 +胁 +芯 +牢 +叛 +蚀 +奥 +鸣 +岭 +羊 +凭 +串 +塘 +绘 +酵 +融 +盆 +锡 +庙 +筹 +冻 +辅 +摄 +袭 +筋 +拒 +僚 +旱 +钾 +鸟 +漆 +沈 +眉 +疏 +添 +棒 +穗 +硝 +韩 +逼 +扭 +侨 +凉 +挺 +碗 +栽 +炒 +杯 +患 +馏 +劝 +豪 +辽 +勃 +鸿 +旦 +吏 +拜 +狗 +埋 +辊 +掩 +饮 +搬 +骂 +辞 +勾 +扣 +估 +蒋 +绒 +雾 +丈 +朵 +姆 +拟 +宇 +辑 +陕 +雕 +偿 +蓄 +崇 +剪 +倡 +厅 +咬 +驶 +薯 +刷 +斥 +番 +赋 +奉 +佛 +浇 +漫 +曼 +扇 +钙 +桃 +扶 +仔 +返 +俗 +亏 +腔 +鞋 +棱 +覆 +框 +悄 +叔 +撞 +骗 +勘 +旺 +沸 +孤 +吐 +孟 +渠 +屈 +疾 +妙 +惜 +仰 +狠 +胀 +谐 +抛 +霉 +桑 +岗 +嘛 +衰 +盗 +渗 +脏 +赖 +涌 +甜 +曹 +阅 +肌 +哩 +厉 +烃 +纬 +毅 +昨 +伪 +症 +煮 +叹 +钉 +搭 +茎 +笼 +酷 +偷 +弓 +锥 +恒 +杰 +坑 +鼻 +翼 +纶 +叙 +狱 +逮 +罐 +络 +棚 +抑 +膨 +蔬 +寺 +骤 +穆 +冶 +枯 +册 +尸 +凸 +绅 +坯 +牺 +焰 +轰 +欣 +晋 +瘦 +御 +锭 +锦 +丧 +旬 +锻 +垄 +搜 +扑 +邀 +亭 +酯 +迈 +舒 +脆 +酶 +闲 +忧 +酚 +顽 +羽 +涨 +卸 +仗 +陪 +辟 +惩 +杭 +姚 +肚 +捉 +飘 +漂 +昆 +欺 +吾 +郎 +烷 +汁 +呵 +饰 +萧 +雅 +邮 +迁 +燕 +撒 +姻 +赴 +宴 +烦 +债 +帐 +斑 +铃 +旨 +醇 +董 +饼 +雏 +姿 +拌 +傅 +腹 +妥 +揉 +贤 +拆 +歪 +葡 +胺 +丢 +浩 +徽 +昂 +垫 +挡 +览 +贪 +慰 +缴 +汪 +慌 +冯 +诺 +姜 +谊 +凶 +劣 +诬 +耀 +昏 +躺 +盈 +骑 +乔 +溪 +丛 +卢 +抹 +闷 +咨 +刮 +驾 +缆 +悟 +摘 +铒 +掷 +颇 +幻 +柄 +惠 +惨 +佳 +仇 +腊 +窝 +涤 +剑 +瞧 +堡 +泼 +葱 +罩 +霍 +捞 +胎 +苍 +滨 +俩 +捅 +湘 +砍 +霞 +邵 +萄 +疯 +淮 +遂 +熊 +粪 +烘 +宿 +档 +戈 +驳 +嫂 +裕 +徙 +箭 +捐 +肠 +撑 +晒 +辨 +殿 +莲 +摊 +搅 +酱 +屏 +疫 +哀 +蔡 +堵 +沫 +皱 +畅 +叠 +阁 +莱 +敲 +辖 +钩 +痕 +坝 +巷 +饿 +祸 +丘 +玄 +溜 +曰 +逻 +彭 +尝 +卿 +妨 +艇 +吞 +韦 +怨 +矮 +歇 diff --git a/packages/wordlists/input/lang-zh_tw.txt b/packages/wordlists/input/lang-zh_tw.txt new file mode 100644 index 000000000..9b0204792 --- /dev/null +++ b/packages/wordlists/input/lang-zh_tw.txt @@ -0,0 +1,2048 @@ +的 +一 +是 +在 +不 +了 +有 +和 +人 +這 +中 +大 +為 +上 +個 +國 +我 +以 +要 +他 +時 +來 +用 +們 +生 +到 +作 +地 +於 +出 +就 +分 +對 +成 +會 +可 +主 +發 +年 +動 +同 +工 +也 +能 +下 +過 +子 +說 +產 +種 +面 +而 +方 +後 +多 +定 +行 +學 +法 +所 +民 +得 +經 +十 +三 +之 +進 +著 +等 +部 +度 +家 +電 +力 +裡 +如 +水 +化 +高 +自 +二 +理 +起 +小 +物 +現 +實 +加 +量 +都 +兩 +體 +制 +機 +當 +使 +點 +從 +業 +本 +去 +把 +性 +好 +應 +開 +它 +合 +還 +因 +由 +其 +些 +然 +前 +外 +天 +政 +四 +日 +那 +社 +義 +事 +平 +形 +相 +全 +表 +間 +樣 +與 +關 +各 +重 +新 +線 +內 +數 +正 +心 +反 +你 +明 +看 +原 +又 +麼 +利 +比 +或 +但 +質 +氣 +第 +向 +道 +命 +此 +變 +條 +只 +沒 +結 +解 +問 +意 +建 +月 +公 +無 +系 +軍 +很 +情 +者 +最 +立 +代 +想 +已 +通 +並 +提 +直 +題 +黨 +程 +展 +五 +果 +料 +象 +員 +革 +位 +入 +常 +文 +總 +次 +品 +式 +活 +設 +及 +管 +特 +件 +長 +求 +老 +頭 +基 +資 +邊 +流 +路 +級 +少 +圖 +山 +統 +接 +知 +較 +將 +組 +見 +計 +別 +她 +手 +角 +期 +根 +論 +運 +農 +指 +幾 +九 +區 +強 +放 +決 +西 +被 +幹 +做 +必 +戰 +先 +回 +則 +任 +取 +據 +處 +隊 +南 +給 +色 +光 +門 +即 +保 +治 +北 +造 +百 +規 +熱 +領 +七 +海 +口 +東 +導 +器 +壓 +志 +世 +金 +增 +爭 +濟 +階 +油 +思 +術 +極 +交 +受 +聯 +什 +認 +六 +共 +權 +收 +證 +改 +清 +美 +再 +採 +轉 +更 +單 +風 +切 +打 +白 +教 +速 +花 +帶 +安 +場 +身 +車 +例 +真 +務 +具 +萬 +每 +目 +至 +達 +走 +積 +示 +議 +聲 +報 +鬥 +完 +類 +八 +離 +華 +名 +確 +才 +科 +張 +信 +馬 +節 +話 +米 +整 +空 +元 +況 +今 +集 +溫 +傳 +土 +許 +步 +群 +廣 +石 +記 +需 +段 +研 +界 +拉 +林 +律 +叫 +且 +究 +觀 +越 +織 +裝 +影 +算 +低 +持 +音 +眾 +書 +布 +复 +容 +兒 +須 +際 +商 +非 +驗 +連 +斷 +深 +難 +近 +礦 +千 +週 +委 +素 +技 +備 +半 +辦 +青 +省 +列 +習 +響 +約 +支 +般 +史 +感 +勞 +便 +團 +往 +酸 +歷 +市 +克 +何 +除 +消 +構 +府 +稱 +太 +準 +精 +值 +號 +率 +族 +維 +劃 +選 +標 +寫 +存 +候 +毛 +親 +快 +效 +斯 +院 +查 +江 +型 +眼 +王 +按 +格 +養 +易 +置 +派 +層 +片 +始 +卻 +專 +狀 +育 +廠 +京 +識 +適 +屬 +圓 +包 +火 +住 +調 +滿 +縣 +局 +照 +參 +紅 +細 +引 +聽 +該 +鐵 +價 +嚴 +首 +底 +液 +官 +德 +隨 +病 +蘇 +失 +爾 +死 +講 +配 +女 +黃 +推 +顯 +談 +罪 +神 +藝 +呢 +席 +含 +企 +望 +密 +批 +營 +項 +防 +舉 +球 +英 +氧 +勢 +告 +李 +台 +落 +木 +幫 +輪 +破 +亞 +師 +圍 +注 +遠 +字 +材 +排 +供 +河 +態 +封 +另 +施 +減 +樹 +溶 +怎 +止 +案 +言 +士 +均 +武 +固 +葉 +魚 +波 +視 +僅 +費 +緊 +愛 +左 +章 +早 +朝 +害 +續 +輕 +服 +試 +食 +充 +兵 +源 +判 +護 +司 +足 +某 +練 +差 +致 +板 +田 +降 +黑 +犯 +負 +擊 +范 +繼 +興 +似 +餘 +堅 +曲 +輸 +修 +故 +城 +夫 +夠 +送 +筆 +船 +佔 +右 +財 +吃 +富 +春 +職 +覺 +漢 +畫 +功 +巴 +跟 +雖 +雜 +飛 +檢 +吸 +助 +昇 +陽 +互 +初 +創 +抗 +考 +投 +壞 +策 +古 +徑 +換 +未 +跑 +留 +鋼 +曾 +端 +責 +站 +簡 +述 +錢 +副 +盡 +帝 +射 +草 +衝 +承 +獨 +令 +限 +阿 +宣 +環 +雙 +請 +超 +微 +讓 +控 +州 +良 +軸 +找 +否 +紀 +益 +依 +優 +頂 +礎 +載 +倒 +房 +突 +坐 +粉 +敵 +略 +客 +袁 +冷 +勝 +絕 +析 +塊 +劑 +測 +絲 +協 +訴 +念 +陳 +仍 +羅 +鹽 +友 +洋 +錯 +苦 +夜 +刑 +移 +頻 +逐 +靠 +混 +母 +短 +皮 +終 +聚 +汽 +村 +雲 +哪 +既 +距 +衛 +停 +烈 +央 +察 +燒 +迅 +境 +若 +印 +洲 +刻 +括 +激 +孔 +搞 +甚 +室 +待 +核 +校 +散 +侵 +吧 +甲 +遊 +久 +菜 +味 +舊 +模 +湖 +貨 +損 +預 +阻 +毫 +普 +穩 +乙 +媽 +植 +息 +擴 +銀 +語 +揮 +酒 +守 +拿 +序 +紙 +醫 +缺 +雨 +嗎 +針 +劉 +啊 +急 +唱 +誤 +訓 +願 +審 +附 +獲 +茶 +鮮 +糧 +斤 +孩 +脫 +硫 +肥 +善 +龍 +演 +父 +漸 +血 +歡 +械 +掌 +歌 +沙 +剛 +攻 +謂 +盾 +討 +晚 +粒 +亂 +燃 +矛 +乎 +殺 +藥 +寧 +魯 +貴 +鐘 +煤 +讀 +班 +伯 +香 +介 +迫 +句 +豐 +培 +握 +蘭 +擔 +弦 +蛋 +沉 +假 +穿 +執 +答 +樂 +誰 +順 +煙 +縮 +徵 +臉 +喜 +松 +腳 +困 +異 +免 +背 +星 +福 +買 +染 +井 +概 +慢 +怕 +磁 +倍 +祖 +皇 +促 +靜 +補 +評 +翻 +肉 +踐 +尼 +衣 +寬 +揚 +棉 +希 +傷 +操 +垂 +秋 +宜 +氫 +套 +督 +振 +架 +亮 +末 +憲 +慶 +編 +牛 +觸 +映 +雷 +銷 +詩 +座 +居 +抓 +裂 +胞 +呼 +娘 +景 +威 +綠 +晶 +厚 +盟 +衡 +雞 +孫 +延 +危 +膠 +屋 +鄉 +臨 +陸 +顧 +掉 +呀 +燈 +歲 +措 +束 +耐 +劇 +玉 +趙 +跳 +哥 +季 +課 +凱 +胡 +額 +款 +紹 +卷 +齊 +偉 +蒸 +殖 +永 +宗 +苗 +川 +爐 +岩 +弱 +零 +楊 +奏 +沿 +露 +桿 +探 +滑 +鎮 +飯 +濃 +航 +懷 +趕 +庫 +奪 +伊 +靈 +稅 +途 +滅 +賽 +歸 +召 +鼓 +播 +盤 +裁 +險 +康 +唯 +錄 +菌 +純 +借 +糖 +蓋 +橫 +符 +私 +努 +堂 +域 +槍 +潤 +幅 +哈 +竟 +熟 +蟲 +澤 +腦 +壤 +碳 +歐 +遍 +側 +寨 +敢 +徹 +慮 +斜 +薄 +庭 +納 +彈 +飼 +伸 +折 +麥 +濕 +暗 +荷 +瓦 +塞 +床 +築 +惡 +戶 +訪 +塔 +奇 +透 +梁 +刀 +旋 +跡 +卡 +氯 +遇 +份 +毒 +泥 +退 +洗 +擺 +灰 +彩 +賣 +耗 +夏 +擇 +忙 +銅 +獻 +硬 +予 +繁 +圈 +雪 +函 +亦 +抽 +篇 +陣 +陰 +丁 +尺 +追 +堆 +雄 +迎 +泛 +爸 +樓 +避 +謀 +噸 +野 +豬 +旗 +累 +偏 +典 +館 +索 +秦 +脂 +潮 +爺 +豆 +忽 +托 +驚 +塑 +遺 +愈 +朱 +替 +纖 +粗 +傾 +尚 +痛 +楚 +謝 +奮 +購 +磨 +君 +池 +旁 +碎 +骨 +監 +捕 +弟 +暴 +割 +貫 +殊 +釋 +詞 +亡 +壁 +頓 +寶 +午 +塵 +聞 +揭 +炮 +殘 +冬 +橋 +婦 +警 +綜 +招 +吳 +付 +浮 +遭 +徐 +您 +搖 +谷 +贊 +箱 +隔 +訂 +男 +吹 +園 +紛 +唐 +敗 +宋 +玻 +巨 +耕 +坦 +榮 +閉 +灣 +鍵 +凡 +駐 +鍋 +救 +恩 +剝 +凝 +鹼 +齒 +截 +煉 +麻 +紡 +禁 +廢 +盛 +版 +緩 +淨 +睛 +昌 +婚 +涉 +筒 +嘴 +插 +岸 +朗 +莊 +街 +藏 +姑 +貿 +腐 +奴 +啦 +慣 +乘 +夥 +恢 +勻 +紗 +扎 +辯 +耳 +彪 +臣 +億 +璃 +抵 +脈 +秀 +薩 +俄 +網 +舞 +店 +噴 +縱 +寸 +汗 +掛 +洪 +賀 +閃 +柬 +爆 +烯 +津 +稻 +牆 +軟 +勇 +像 +滾 +厘 +蒙 +芳 +肯 +坡 +柱 +盪 +腿 +儀 +旅 +尾 +軋 +冰 +貢 +登 +黎 +削 +鑽 +勒 +逃 +障 +氨 +郭 +峰 +幣 +港 +伏 +軌 +畝 +畢 +擦 +莫 +刺 +浪 +秘 +援 +株 +健 +售 +股 +島 +甘 +泡 +睡 +童 +鑄 +湯 +閥 +休 +匯 +舍 +牧 +繞 +炸 +哲 +磷 +績 +朋 +淡 +尖 +啟 +陷 +柴 +呈 +徒 +顏 +淚 +稍 +忘 +泵 +藍 +拖 +洞 +授 +鏡 +辛 +壯 +鋒 +貧 +虛 +彎 +摩 +泰 +幼 +廷 +尊 +窗 +綱 +弄 +隸 +疑 +氏 +宮 +姐 +震 +瑞 +怪 +尤 +琴 +循 +描 +膜 +違 +夾 +腰 +緣 +珠 +窮 +森 +枝 +竹 +溝 +催 +繩 +憶 +邦 +剩 +幸 +漿 +欄 +擁 +牙 +貯 +禮 +濾 +鈉 +紋 +罷 +拍 +咱 +喊 +袖 +埃 +勤 +罰 +焦 +潛 +伍 +墨 +欲 +縫 +姓 +刊 +飽 +仿 +獎 +鋁 +鬼 +麗 +跨 +默 +挖 +鏈 +掃 +喝 +袋 +炭 +污 +幕 +諸 +弧 +勵 +梅 +奶 +潔 +災 +舟 +鑑 +苯 +訟 +抱 +毀 +懂 +寒 +智 +埔 +寄 +屆 +躍 +渡 +挑 +丹 +艱 +貝 +碰 +拔 +爹 +戴 +碼 +夢 +芽 +熔 +赤 +漁 +哭 +敬 +顆 +奔 +鉛 +仲 +虎 +稀 +妹 +乏 +珍 +申 +桌 +遵 +允 +隆 +螺 +倉 +魏 +銳 +曉 +氮 +兼 +隱 +礙 +赫 +撥 +忠 +肅 +缸 +牽 +搶 +博 +巧 +殼 +兄 +杜 +訊 +誠 +碧 +祥 +柯 +頁 +巡 +矩 +悲 +灌 +齡 +倫 +票 +尋 +桂 +鋪 +聖 +恐 +恰 +鄭 +趣 +抬 +荒 +騰 +貼 +柔 +滴 +猛 +闊 +輛 +妻 +填 +撤 +儲 +簽 +鬧 +擾 +紫 +砂 +遞 +戲 +吊 +陶 +伐 +餵 +療 +瓶 +婆 +撫 +臂 +摸 +忍 +蝦 +蠟 +鄰 +胸 +鞏 +擠 +偶 +棄 +槽 +勁 +乳 +鄧 +吉 +仁 +爛 +磚 +租 +烏 +艦 +伴 +瓜 +淺 +丙 +暫 +燥 +橡 +柳 +迷 +暖 +牌 +秧 +膽 +詳 +簧 +踏 +瓷 +譜 +呆 +賓 +糊 +洛 +輝 +憤 +競 +隙 +怒 +粘 +乃 +緒 +肩 +籍 +敏 +塗 +熙 +皆 +偵 +懸 +掘 +享 +糾 +醒 +狂 +鎖 +淀 +恨 +牲 +霸 +爬 +賞 +逆 +玩 +陵 +祝 +秒 +浙 +貌 +役 +彼 +悉 +鴨 +趨 +鳳 +晨 +畜 +輩 +秩 +卵 +署 +梯 +炎 +灘 +棋 +驅 +篩 +峽 +冒 +啥 +壽 +譯 +浸 +泉 +帽 +遲 +矽 +疆 +貸 +漏 +稿 +冠 +嫩 +脅 +芯 +牢 +叛 +蝕 +奧 +鳴 +嶺 +羊 +憑 +串 +塘 +繪 +酵 +融 +盆 +錫 +廟 +籌 +凍 +輔 +攝 +襲 +筋 +拒 +僚 +旱 +鉀 +鳥 +漆 +沈 +眉 +疏 +添 +棒 +穗 +硝 +韓 +逼 +扭 +僑 +涼 +挺 +碗 +栽 +炒 +杯 +患 +餾 +勸 +豪 +遼 +勃 +鴻 +旦 +吏 +拜 +狗 +埋 +輥 +掩 +飲 +搬 +罵 +辭 +勾 +扣 +估 +蔣 +絨 +霧 +丈 +朵 +姆 +擬 +宇 +輯 +陝 +雕 +償 +蓄 +崇 +剪 +倡 +廳 +咬 +駛 +薯 +刷 +斥 +番 +賦 +奉 +佛 +澆 +漫 +曼 +扇 +鈣 +桃 +扶 +仔 +返 +俗 +虧 +腔 +鞋 +棱 +覆 +框 +悄 +叔 +撞 +騙 +勘 +旺 +沸 +孤 +吐 +孟 +渠 +屈 +疾 +妙 +惜 +仰 +狠 +脹 +諧 +拋 +黴 +桑 +崗 +嘛 +衰 +盜 +滲 +臟 +賴 +湧 +甜 +曹 +閱 +肌 +哩 +厲 +烴 +緯 +毅 +昨 +偽 +症 +煮 +嘆 +釘 +搭 +莖 +籠 +酷 +偷 +弓 +錐 +恆 +傑 +坑 +鼻 +翼 +綸 +敘 +獄 +逮 +罐 +絡 +棚 +抑 +膨 +蔬 +寺 +驟 +穆 +冶 +枯 +冊 +屍 +凸 +紳 +坯 +犧 +焰 +轟 +欣 +晉 +瘦 +禦 +錠 +錦 +喪 +旬 +鍛 +壟 +搜 +撲 +邀 +亭 +酯 +邁 +舒 +脆 +酶 +閒 +憂 +酚 +頑 +羽 +漲 +卸 +仗 +陪 +闢 +懲 +杭 +姚 +肚 +捉 +飄 +漂 +昆 +欺 +吾 +郎 +烷 +汁 +呵 +飾 +蕭 +雅 +郵 +遷 +燕 +撒 +姻 +赴 +宴 +煩 +債 +帳 +斑 +鈴 +旨 +醇 +董 +餅 +雛 +姿 +拌 +傅 +腹 +妥 +揉 +賢 +拆 +歪 +葡 +胺 +丟 +浩 +徽 +昂 +墊 +擋 +覽 +貪 +慰 +繳 +汪 +慌 +馮 +諾 +姜 +誼 +兇 +劣 +誣 +耀 +昏 +躺 +盈 +騎 +喬 +溪 +叢 +盧 +抹 +悶 +諮 +刮 +駕 +纜 +悟 +摘 +鉺 +擲 +頗 +幻 +柄 +惠 +慘 +佳 +仇 +臘 +窩 +滌 +劍 +瞧 +堡 +潑 +蔥 +罩 +霍 +撈 +胎 +蒼 +濱 +倆 +捅 +湘 +砍 +霞 +邵 +萄 +瘋 +淮 +遂 +熊 +糞 +烘 +宿 +檔 +戈 +駁 +嫂 +裕 +徙 +箭 +捐 +腸 +撐 +曬 +辨 +殿 +蓮 +攤 +攪 +醬 +屏 +疫 +哀 +蔡 +堵 +沫 +皺 +暢 +疊 +閣 +萊 +敲 +轄 +鉤 +痕 +壩 +巷 +餓 +禍 +丘 +玄 +溜 +曰 +邏 +彭 +嘗 +卿 +妨 +艇 +吞 +韋 +怨 +矮 +歇 diff --git a/packages/wordlists/package.json b/packages/wordlists/package.json new file mode 100644 index 000000000..a5bcc99a1 --- /dev/null +++ b/packages/wordlists/package.json @@ -0,0 +1,38 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1" + }, + "description": "BIP-39 Wordlists for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "__exports": { + "./": "./lib/" + }, + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/wordlists", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/wordlists", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/wordlists/src.ts/_version.ts b/packages/wordlists/src.ts/_version.ts new file mode 100644 index 000000000..52afe29a3 --- /dev/null +++ b/packages/wordlists/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/wordlists@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/wordlists/src.ts/bit-reader.ts b/packages/wordlists/src.ts/bit-reader.ts new file mode 100644 index 000000000..984a0002c --- /dev/null +++ b/packages/wordlists/src.ts/bit-reader.ts @@ -0,0 +1,31 @@ +const Base64 = ")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_"; +export function decodeBits(width: number, data: string): Array { + const maxValue = (1 << width) - 1; + const result: Array = [ ]; + let accum = 0, bits = 0, flood = 0; + for (let i = 0; i < data.length; i++) { + + // Accumulate 6 bits of data + accum = ((accum << 6) | Base64.indexOf(data[i])); + bits += 6; + + // While we have enough for a word... + while (bits >= width) { + // ...read the word + const value = (accum >> (bits - width)); + accum &= (1 << (bits - width)) - 1; + bits -= width; + + // A value of 0 indicates we exceeded maxValue, it + // floods over into the next value + if (value === 0) { + flood += maxValue; + } else { + result.push(value + flood); + flood = 0; + } + } + } + + return result; +} diff --git a/packages/wordlists/src.ts/decode-owl.ts b/packages/wordlists/src.ts/decode-owl.ts new file mode 100644 index 000000000..7677b1f73 --- /dev/null +++ b/packages/wordlists/src.ts/decode-owl.ts @@ -0,0 +1,47 @@ + +const subsChrs = " !#$%&'()*+,-./<=>?@[]^_`{|}~"; +const Word = /^[a-z]*$/i; + +function unfold(words: Array, sep: string): Array { + let initial = 97; + return words.reduce((accum, word) => { + if (word === sep) { + initial++; + } else if (word.match(Word)) { + accum.push(String.fromCharCode(initial) + word); + } else { + initial = 97; + accum.push(word); + } + return accum; + }, >[]); +} + +export function decode(data: string, subs: string): Array { + + // Replace all the substitutions with their expanded form + for (let i = subsChrs.length - 1; i >= 0; i--) { + data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2)); + } + + // Get all tle clumps; each suffix, first-increment and second-increment + const clumps: Array = [ ]; + const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => { + if (semi) { + for (let i = parseInt(semi); i >= 0; i--) { clumps.push(";"); } + } else { + clumps.push(item.toLowerCase()); + } + return ""; + }); + if (leftover) { throw new Error(`leftovers: ${ JSON.stringify(leftover) }`); } + + return unfold(unfold(clumps, ";"), ":"); +} + +export function decodeOwl(data: string): Array { + if (data[0] !== "0") { throw TypeError("unsupported auwl data"); } + return decode( + data.substring(1 + 2 * subsChrs.length), + data.substring(1, 1 + 2 * subsChrs.length)); +} diff --git a/packages/wordlists/src.ts/decode-owla.ts b/packages/wordlists/src.ts/decode-owla.ts new file mode 100644 index 000000000..4ea2a1557 --- /dev/null +++ b/packages/wordlists/src.ts/decode-owla.ts @@ -0,0 +1,27 @@ +import { decodeBits } from "./bit-reader.js"; +import { decodeOwl } from "./decode-owl.js"; + +export function decodeOwlA(data: string, accents: string): Array { + let words = decodeOwl(data).join(","); + + // Inject the accents + accents.split(/,/g).forEach((accent) => { + const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/); + if (!match) { throw new Error("internal error parsing accents"); } + + let posOffset = 0; + const positions = decodeBits(parseInt(match[3]), match[4]); + const charCode = parseInt(match[2]); + const regex = new RegExp(`([${ match[1] }])`, "g"); + words = words.replace(regex, (all, letter) => { + const rem = --positions[posOffset]; + if (rem === 0) { + letter = String.fromCharCode(letter.charCodeAt(0), charCode); + posOffset++; + } + return letter; + }); + }); + + return words.split(","); +} diff --git a/packages/wordlists/src.ts/generation/encode-latin.ts b/packages/wordlists/src.ts/generation/encode-latin.ts new file mode 100644 index 000000000..b39e8d6cb --- /dev/null +++ b/packages/wordlists/src.ts/generation/encode-latin.ts @@ -0,0 +1,370 @@ + +// OWL Data Format +// +// The Official WordList data format exported by this encoder +// encodes sorted latin-1 words (letters only) based on the +// fact that sorted words have prefixes with substantial +// overlap. +// +// For example, the words: +// [ Another, Apple, Apricot, Bread ] +// could be folded once with a single special character, such +// as ":" to yield: +// [ nother, pple, pricot, :, read ]. +// The First letter has been removed, but can be inferred by +// starting at A and incrementing to the next letter when ":" +// is encountered. +// +// The fold operation can be repeated for large sets as even within +// each folded set, there is substatial overlap in prefix. With the +// second special symbol ";", we get: +// [ ; x 13, other, :, ple, ricot, :, ; x 18, ead ] +// which can be further compressed by using numbers instead of the +// special character: +// [ 13, other, :, ple, ricot, :, 18, ead ] +// and to keep all values within a single byte, we only allow a +// maximum value of 10 (using 0 through 9 to represent 1 through 10), +// we get: +// [ 9, 2, other, :, ple, ricot, :, 9, 7, ead ] +// and we use camel-case to imply the bounrary, giving the final string: +// "92Other:PleRicot:97Ead" +// +// Once the entire latin-1 set has been collapsed, we use the remaining +// printable characters (except " and \, which require 2 bytes to represent +// in string) to substiture for the most common 2-letter pairs of letters +// in the string. +// +// OWLA Accent Format +// +// OWLA first removes all accents, and encodes that data using the OWL +// data format and encodes the accents as a base-64 series of 6-bit +// packed bits representing the distance from one followed letter to the +// next. +// +// For example, the acute accent in a given language may follow either +// a or e, in which case the follow-set is "ae". Each letter in the entire +// set is indexed, so the set of words with the accents: +// "thisA/ppleDoe/sNotMa/tterToMe/" +// " 1^ 2^ 3^ 4^ 5^ 6^ " <-- follow-set members, ALL a's and e's +// which gives the positions: +// [ 0, 2, 3, 4, 6 ] +// which then reduce to the distances +// [ 0, 2, 1, 1, 2 ] +// each of which fit into a 2-bit value, so this can be encoded as the +// base-64 encoded string: +// 00 10 01 01 10 = 001001 1010xx +// +// The base-64 set used has all number replaced with their +// shifted-counterparts to prevent comflicting with the numbers used in +// the fold operation to indicate the number of ";". + +import fs from "fs"; + +import { id } from "@ethersproject/hash"; + +import { decodeOwl } from "../decode-owl.js"; +import { decodeOwlA } from "../decode-owla.js"; + +const subsChrs = " !#$%&'()*+,-./<=>?@[]^_`{|}~"; + +const Word = /^[a-z'`]*$/i; + +function fold(words: Array, sep: string): Array { + const output: Array = [ ]; + + let initial = 97; + for (const word of words) { + if (word.match(Word)) { + while (initial < word.charCodeAt(0)) { + initial++; + output.push(sep); + } + output.push(word.substring(1)); + } else { + initial = 97; + output.push(word); + } + } + + return output; +} + +function camelcase(words: Array): string { + return words.map((word) => { + if (word.match(Word)) { + return word[0].toUpperCase() + word.substring(1); + } else { + return word; + } + }).join(""); +} + +//let cc = 0, ce = 0; +/* +function getChar(c: string): string { + //if (c === "e") { ce++; } + if (c >= 'a' && c <= 'z') { return c; } + if (c.charCodeAt(1)) { + throw new Error(`bad char: "${ c }"`); + } + //cc++; + return ""; + if (c.charCodeAt(0) === 768) { return "`"; } + if (c.charCodeAt(0) === 769) { return "'"; } + if (c.charCodeAt(0) === 771) { return "~"; } + throw new Error(`Unsupported character: ${ c } (${ c.charCodeAt(0) }, ${ c.charCodeAt(1) })`); +} +function mangle(text: string): { word: string, special: string } { + const result: Array = [ ]; + for (let i = 0; i < text.length; i++) { + const c = getChar(text[i]); + result.push(c); + } + + const word = result.join(""); + if (word[1] >= 'a' && word[1] <= 'z') { return { word, special: " " }; } + return { word: word[0] + word.substring(2), special: word[1] }; +} +*/ +/* + Store: [ accent ][ targets ][ rle data; base64-tail ] + ` ae 3, 100 = (63, 37), 15 + ~ n 63, 64 = (63, 1), 27 +*/ + +const Base64 = ")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_"; +export class BitWriter { + readonly width: number; + readonly #data: Array; + + #bitLength: number; + + constructor(width: number) { + this.width = width; + this.#data = [ ]; + this.#bitLength = 0; + } + + write(value: number): void { + const maxValue = ((1 << this.width) - 1); + while (value > maxValue) { + this.#data.push(0); + this.#bitLength += this.width; + value -= maxValue; + } + this.#data.push(value); + this.#bitLength += this.width; + } + + get length(): number { + return 1 + Math.trunc((this.#bitLength + 5) / 6); + } + + get data(): string { + let result = String(this.width); + let bits = 0; + let accum = 0; + + const data = this.#data.slice(); + let bitMod = this.#bitLength % 6; + while (bitMod !== 0 && bitMod < 6) { + data.push(0); + bitMod += this.width; + } + + for (const value of data) { + accum <<= this.width; + accum |= value; + bits += this.width; + + if (bits < 6) { continue; } + + result += Base64[accum >> (bits - 6)]; + bits -= 6; + accum &= ((1 << bits) - 1); + } + + if (result.length !== this.length) { + throw new Error(`Hmm: ${ this.length } ${ result.length } ${ result }`); + } + return result; + } +} + +export interface AccentSet { + accent: number; + follows: string; + positions: Array; + positionsLength: number; + positionData: string; + positionDataLength: number; +}; + +function sorted(text: string): string { + const letters = text.split(""); + letters.sort(); + return letters.join(""); +} + +// if (c.charCodeAt(0) === 768) { return "`"; } +// if (c.charCodeAt(0) === 769) { return "'"; } +// if (c.charCodeAt(0) === 771) { return "~"; } +export function extractAccents(words: Array): { accents: Array, words: Array } { + + // Build a list that maps accents to the letters it can follow + const followsMap: Map = new Map(); + for (const word of words) { + for (let i = 0; i < word.length; i++) { + const c = word[i]; + if (c >= 'a' && c <= 'z') { continue; } + + // Make sure this positions and codepoint make sense + if (c.charCodeAt(1)) { throw new Error(`unsupported codepoint: "${ c }"`); } + if (i === 0) { throw new Error(`unmatched accent: ${ c }`); } + + const ac = c.charCodeAt(0), lastLetter = word[i - 1];; + const follows = (followsMap.get(ac) || ""); + if (follows.indexOf(lastLetter) === -1) { + followsMap.set(ac, sorted(follows + lastLetter)); + } + } + } + + // Build the positions of each follow-set for those accents + const positionsMap: Map> = new Map(); + for (const [ accent, follows ] of followsMap) { + let count = 0; + for (const word of words) { + for (let i = 0; i < word.length; i++) { + const c = word[i], ac = c.charCodeAt(0); + if (follows.indexOf(c) >= 0) { count++; } + if (ac === accent) { + const pos = positionsMap.get(ac) || [ ]; + pos.push(count); + positionsMap.set(ac, pos); + } + } + } + } + + const accents: Array = [ ]; + for (const [ accent, follows ] of followsMap) { + let last = -1; + const positions = (positionsMap.get(accent) || [ ]).map((value, index) => { + const delta = value - last; + last = value; + if (index === 0) { return value; } + return delta; + }); + + // Find the best encoding of the position data + let positionData = ""; + for (let i = 2; i < 7; i++) { + const bitWriter = new BitWriter(i); + for (const p of positions) { bitWriter.write(p); } + if (positionData === "" || bitWriter.length < positionData.length) { + positionData = bitWriter.data; + } + } + const positionsLength = positions.length; + const positionDataLength = positionData.length; + + accents.push({ accent, follows, positions, positionsLength, positionData, positionDataLength }); + } + + words = words.map((word) => { + let result = ""; + for (let i = 0; i < word.length; i++) { + const c = word[i]; + if (c >= 'a' && c <= 'z') { result += c } + } + return result; + }); + + return { accents, words }; +} + +// Encode Official WordList +export function encodeOwl(words: Array): { subs: string, data: string } { + + // Fold the sorted words by indicating delta for the first 2 letters + let data = camelcase(fold(fold(words, ":"), ";")); + + // Replace semicolons with counts (e.g. ";;;" with "3") + data = data.replace(/(;+)/g, (all, semis) => { + let result = ""; + while (semis.length) { + let count = semis.length; + if (count > 10) { count = 10; } + result += String(count - 1); + semis = semis.substring(count); + } + return result; + }); + + // Finds the best option for a shortcut replacement using the + // unused ascii7 characters + function findBest(): string { + const tally: Record = { }; + const l = 2; + for (let i = l; i < data.length; i++) { + const key = data.substring(i - l, i); + tally[key] = (tally[key] || 0) + 1; + } + + const sorted: Array<{ text: string, count: number, save: number }> = Object.keys(tally).map((text) => { + return { text, count: tally[text], save: (tally[text] * (text.length - 1)) } + }); + sorted.sort((a, b) => (b.save - a.save)); + + return sorted[0].text; + } + + // Make substitutions + let subs = ""; + for (let i = 0; i < subsChrs.length; i++) { + const n = subsChrs[i], o = findBest(); + subs += o; + data = data.split(o).join(n); + } + + return { data, subs }; +} + +// Returns either: +// - OWL data for accent-free latin-1: { data, accentds: "" } +// - OWLA data for accented latin-1: { data, accents } +function encodeWords(_words: Array): { data: string, accents: string } { + const { accents, words } = extractAccents(_words); + const { data, subs } = encodeOwl(words); + const accentData = accents.map(({ accent, follows, positionData }) => { + return `${ follows }${ accent }${ positionData }`; + }).join(","); + + return { + data: `0${ subs }${data}`, + accents: accentData + }; +} + +// CLI +const content = fs.readFileSync(process.argv[2]).toString(); +const words = content.split("\n").filter(Boolean); +const { data, accents } = encodeWords(words); + +if (accents) { + const rec = decodeOwlA(data, accents); + console.log("DATA: ", JSON.stringify(data)); + console.log("ACCENTS: ", JSON.stringify(accents)); + console.log("LENGTH: ", data.length); + console.log("CHECKSUM: ", id(content)); + console.log("RATIO: ", Math.trunc(100 * data.length / content.length) + "%"); + if (rec.join("\n") !== words.join("\n")) { throw new Error("no match!"); } +} else { + const rec = decodeOwl(data); + console.log("DATA: ", JSON.stringify(data)); + console.log("LENGTH: ", data.length); + console.log("CHECKSUM: ", id(content)); + console.log("RATIO: ", Math.trunc(100 * data.length / content.length) + "%"); + if (rec.join("\n") !== words.join("\n")) { throw new Error("no match!"); } +} diff --git a/packages/wordlists/src.ts/index.ts b/packages/wordlists/src.ts/index.ts new file mode 100644 index 000000000..776e4f86e --- /dev/null +++ b/packages/wordlists/src.ts/index.ts @@ -0,0 +1,7 @@ + +export { Wordlist } from "./wordlist.js"; +export { langEn, LangEn } from "./lang-en.js"; +export { wordlists } from "./wordlists.js"; + +export { WordlistOwl } from "./wordlist-owl.js"; +export { WordlistOwlA } from "./wordlist-owla.js"; diff --git a/packages/wordlists/src.ts/lang-cz.ts b/packages/wordlists/src.ts/lang-cz.ts new file mode 100644 index 000000000..debf6fedc --- /dev/null +++ b/packages/wordlists/src.ts/lang-cz.ts @@ -0,0 +1,10 @@ +import { WordlistOwl } from "./wordlist-owl.js"; + +const words = "0itatkastcenaovo$taouleraeki&chor*teci%enbalodaeladet'!Chn=0Di#%E%^1Resa2Rese3CeT'#0EjKohol0Pu)%0A&sDul#Ekdo)Ke)Ti#Ul|3}aOgan%0FaltI$@tPi,%TmaTronom0LasL{i#Ol0Tobus4Yl:B#}R'?TaUb_U/!U^U+Ur!Xer2A^v#Ambo,An#AtrEp)Ike)KoLohOnzOskevUn{#Usin#Z^Zy2Bl.Bn|})D _D#D'aF{Jar(Kv?LdokLvaN^NkrRzaTikVolZola3D+tL.T'#0Ukot:PartRev&3DrDu+J/JnLaLerLkemLn?N.Nn(N'#NtrumNzZ(2O&2KolivUv!4It_N(0Dn(Ke)KrPot0Ak~AlIkRkot2Kli$a:L-oRe[T_Tum1E,1B!a}'#Cib_Fic Fla%KlKr{Mokr!PreseRbyS#T-tiv3Kob,zKt|O^P]mSkSp+jV`]Vo/2AhaOuhoUhopis1Es0BroByt-C@t}ut DnesH+dHo^H,JemJn?Kl`KolaKtAzeDolObn(OgerieOzdSn(T Z(2B@}'noD-HaH'#S SnoT(0Oj?Or>2Nam :9O]gOnomie0EktronIpsa0AilIseO%P!ie2Izo^O/aOpejOs2EjEn%K<)Kymo0Ike)0FR&S]Zky3StOhOup(T!Ub.U/o)0AtO)Yz0IsOjivoOut0Bl.Boj}DinyDl!Dno)D|Jn(KejLin#L#LubMo+N [No,%RalR^RizontRkoRliv>RmonRn.RoskopR$voSpo^St.T'(U[UfUp!Us#V<2Ad[An?Av(Az^Bo+kD.D]D(N-Ob#Oma^OtOu^Oz@St#Ub(Yz!2B@(B~D[KotMrS aSto)0Ozd2Bn(D,ntGie&M&Sterik:2Yl#3Ned2O&0Uze0Un a0F-%Fla%KasoOva%Sp-%Tern{Vali^Ve$N)rRmarkRoSanSnoT#VD+Dn!_HlanKotL@L oMn(NomP?S{erV Zd>Zero3NakNdyNo/Sk,Sto)Trn?Zva3En|1Gurt5R):Bar{B_Bin{}&D{Did]HanJakJu)KaoKtusLam aLhotyLibrLn(Me,MkolivM&Ni[lNoeNtB#BlihaBylaC*rH=J@>KosKtejlLapsLe^LizeLoMandoMe)MikMn!aMo,MpasMun aN!N%ptNd?N>NfeseNgresN.NkursN)ktNzervaPan>PieP~Pr'#Rb_R-tSt#T_T+)T*lUk!Up_&Us-Uz]VbojZaZMe+cMivoOcanOkOni#Op OupaOv#T-Uh`]Up?Ut(Vin#Y/+Yp)Y$alYt2Dlan#FrJn(KlaLaj^Li/L#Lom{Ltu,NaPodivuRtRzV`]:B,d<})nDn(IkKom>M_aMpaN'#S?SoStu,Tin#V.3B#CkdyD@Dn?D'#Dv.G@^GieG,%H%Hk(H~KtvarNo/odNtil#P@#Pid]T`]T>TmoTokruhVhartV a%Vobok3B,}ot#DojedDsk(H'.Jav>L-M{#NieN#No+umStop`T.T|5Bi$aDivodGi#GopedKal aK{Mc|P!aPu/RdSosTrU^lUhU#Usk!V>3Tiv(1Cer&CiferMpSkSt,%0I%2RaRi#S.:DamD]Gi$rHagonJ{-J _J< aKakK'?Kr_aL[L.L|Lv?Min#Nd+NkoRn(SakrSkotSopu$T?Tri#Tur aZan>ZivoZl Zur#2Lo[0}anikD a%D'.LasaL*nNtol#TlaTo^TrZe,3G,%H~Hu+K.KrofonL@>Lim{rL(Mi#Nc'&Ni[rNom{Nul(S#StrX|2Ad(HaH'.OkS!Uv 1I/Ohem0BilCn(D_#Dl [HylaKroL-ulaM@t#Nar/aNoklN$rumNt|NzunSazSkytStTiva%T<#Ty#U/aUdr(Zai#Z-Zol2AmKevTvolaZ{Zut(0T _1DrcF]nL!MieN?S{Ta%ZeumZi#nt3Sliv>0Da:B*r!}yt!Da%Dbyt-DhozDobroDpisHlasHn!Hodi+H,d Iv aJedn*Ji$oJm=K]n Kon>Krm LevoMaz!Mluv Nom{rOkoOpakO$roP`!PevnoPln P~Pos+dPr(oRod RubyRy/]S` S-!S+poSt!TolikV@-Vr/VzdR&Ru[RysSahSluhaS)r!UvVazVin VodVyk+Yv!_Z<0AsElEn Hl` Ho)H,&It~0BojByt}odCiz Ebr!Esl!Evzd!EzvaH`%Hod J{JinudKazK*p LivLu#Ml#Oln(P`PisPl=PLivoLu[Mf+tMls-N@#Ni#N&N|N$voNtof+Pri#Rke)RodieR)Ru#Ry[Se#Siv aSt_#T@tTro&V*kZnehtZ*r-3C#DagogJs-K]LotonNal)Ndr-NzeRiskopRoStr(Tar^T?Tro+jVn.Xeso3Ani$aHaJav?K+KnikL.Ln(Lul#Nze)Pe)S!_Sto+Tev&Vn?V'ar2A%n)Ak!Am@Ane)A$i#At Avid]AzE/Em@oEn)EsEtivoEv_Iv!N NoO/aOd.Om[OutUkYn2Bav Byt}odC Ctiv>D!D%n Deps!Dh+dDiv Dkl`Dman DnikDo[Dpo,D,zD$!aDvodDzimEzieHan#Hnut#H'S*d SpoluS)vaSud-SypTahT#nT+skTom-T,vaTupaTvo,U#zUtoUzdroVahaVidlaVlakVozVr/V$!VykVzde/Zd,vZem-Zn!-ZAp<-AseAv^IncipKnoObud O%ntoOdejOfeseOh,Oj-tO]m Omi+Onik!Op`OrokOs[OtonOut-OvazS#v#St@Udk(UtV-VohOvodTruh0Actvo0Ber)}DlKav>Kl.Kr+LtMpaNcP@SaSin#St.T|Ty#3Rami^SkT_::C-}otDia%Dn?DonFtGbyKe)K'.M@oMp*/NdeRa/R aS'&StrTo+$Zan%Zid]3Ag|Ak%CeptDaktMizd!Mo)N #Rdin#San#T_ Z[Z@?0Or0H|1B,n#CeseD`]Dim@tD]Hn!Jm=Ke,K)Kun^KvojeM@oNoRvisS` Sho,SkokSl!St,SuvSyp!T[T.Tk!T~Trv!VerZ&m2O^R~0FonLn?R#Rot-RupTua%1AfandrAliskoAnz@AutEptikIcaL`[L@?LoLuzO[O#nOroRip)RzUp.V(Vr&0Abi#Adid]An.A$Avn(Ed|Ep>EvaEz.IbI&Izn?OnOup-OvoU/UhaUn%Up#Za0A,gdE)&Il$voL*vaOgR`RkRt#Ut-Ysl0AdAhaOb0Bo)}aD'#KolP#TvaUbojUc Ud%UhlasUl`Um,kUp,vaUsedUtokUvis{0Al'&As _IsLavOd-Oj@>OluOnzOvn!P@StUb1An?Ar(aAti#Av[EhnoEz#OdolaO+kOpaOrnoOup!Ra/ResRh~RomRu&Ud&Upn?VolYk0Bj-tBtropy}arD(KnoNd!N=Rik!aR'.0AhAl$voEtrAt[Az-Is+It-Obo^Odid]Or#Rab2Kav#KotN-N'>P!Pk(R'(S_T(:B+t#Bu+H*nJemnoJfunJgaJ Jn(Kti#Mh+MponNc|N>NkerPe)V@.Z!_3}ni#HdyKut.LefonMno)Nd@%Ni$aNU/l Uhl?UsV!2DyH~H(Nd,Ri$aR&jZemsko0ArohOr[Rd(Rz2GrKev:0Oh(OzeR!R*s-RusYt'&0HoTiv(0Iv 3R` 1Edn!I$ M=0Az!_Lidn Lon Otv Roj 0I%I)Ov 0Yv`]0Av IfR*s 1Al Oln Oz'#3D,v ElEn.L.N!:GonL/aL*nNaN^lNil#RanRhanyR|1ElkuHod0Ova0DroGe)%J%Lbl*dL{rhL _LmocLry[Nk'Ran^RzeS_#SkrzeSn?SpoduS)Ter.Ver#3B,%}rDeoh,D.D+LaN?S{Tal aZeZ #0Ezd0L`Us0Aj#AkAs>EvoHk(IvN'#Oup!1Uc|Uk0DaDiv(Doz&kD$voJ@skyJ&JskoLantL[L LnoSk'#Zid]Z'&0Ravo1Ab>A%tAhA)Ba}o+kH!StvaTu+0Ad T*p Tup0Ip4Bav Br!}|D!D,Fot H+d!H~Hod H,d Hub Jasn J{Jm=K]p Kon!L-!Maz!Mez Miz{Mys+tNe/!Nik!Nut P`!Pl! P,v Pu$ Raz R'n!Rv!Sl' SokoS)v Su~Syp!Tas Tes!Tr! Vi~Vol!Vrh_Zdob Zn!0AduBud }op DJ{Ji$ K+p!K*p Lep Mez Mot!Mys+tNe/!Nik!Pl! Poj Ps!Raz S)v Su~Taj Temn Tk~Ujm=Val Ve+tVin Vol!Vrt!Zvon 0Av RusuUd|Yt-1A+#ArmaAtn(IvoOb RojVihYm`]0L@.ManM.Pt!Z`uZdola2At Lt~Lubo#Ot' Ru[0MaMn?0Emn 0Lam!Oum!R!#Umav#0AtoEh#O[OmO$Ozvyk0Ap|ArAt-IjeIz{Ocn Odr!Rzl.Ut|0AkAl(Am@!Ovu0B,z Tav Ub-Ufa+0Lod Omal RavaR( Rud#Rvu1A^An C`]N (NoOv&Y/l Zav(1I/aR! 0B'.Br0Ed~EnkuEs_aOnR!Uk'odYk"; +const checksum = "0x25f44555f4af25b51a711136e1c7d6e50ce9f8917d39d6b1f076b2bb4d2fac1a"; + +export class LangCz extends WordlistOwl { + constructor() { super("cz", words, checksum); } +} + +export const langCz = new LangCz(); diff --git a/packages/wordlists/src.ts/lang-en.ts b/packages/wordlists/src.ts/lang-en.ts new file mode 100644 index 000000000..9fa27bc0d --- /dev/null +++ b/packages/wordlists/src.ts/lang-en.ts @@ -0,0 +1,10 @@ +import { WordlistOwl } from "./wordlist-owl.js"; + +const words = "0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO"; +const checksum = "0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60"; + +export class LangEn extends WordlistOwl { + constructor() { super("en", words, checksum); } +} + +export const langEn = new LangEn(); diff --git a/packages/wordlists/src.ts/lang-es.ts b/packages/wordlists/src.ts/lang-es.ts new file mode 100644 index 000000000..e2fa5ea9b --- /dev/null +++ b/packages/wordlists/src.ts/lang-es.ts @@ -0,0 +1,11 @@ +import { WordlistOwlA } from "./wordlist-owla.js"; + +const words = "0arertoiotadonoaRteirroenaNonaLsolocoiliaralaorrenadaChoN$n0A>Dom,EjaI!#Oga&O'Or#RazoR*Ue=U<0Ab Adem@CeLe%OmoRa!RozUn0DazD$GeLaM,#S,)T^0AlAnceA+EEl]`E`EstruzI.I<2ErU{U'0Af[nArO)Uc Uf_Ul:BaB^|eH@IleJ Lanz/c.LdeMbuN>Nd-oRb(>RnizR+Scu]S#nSu[Tal]T!@T*Tu%UlZ 3BeBid/=S SoSt@3|oEnNgo2An>OqueUsa2ABi`BoCaCi`DaDegaIn//!oLsaMb-{dNi#N}saiRdeRr SqueTeTinVe{Zal2AvoAzoEchaEveIl=In>IsaOcaOmaOnceO)UjaUs>U#2CeoCleE'EyFan{F.HoIt_L#Rbuj(l(+Sc TacaZ.:Bal=BezaBi`B[CaoDav!D,aErFeI{ImanJaJ.LLam Lc$L&Li{dLleLm/^LvoMaMb$Mel=Mi'Mp}c!Nd?Nel-gu+Nic-#N-.ObaOsPazPi%nPo)Pt Puch((b.RcelRe%Rg(i'RneRpe%R+R%SaS>S!oSpaS#rT^ceT_U{lUsaZo3Bol]D!D+Ld/eb_LoAmpuAnc]ApaAr]I>Is)IvoOqueOzaUle%Up 0Cl.EgoE=EnEr#F[G +M->NeN%P_sR>Rue]SneTaU{d2Am^AnA+AseAveI,)ImaInica2B_Cc~|i'Ci`CoDigoDoF_G!He)JinJoL/ch/eg$Lg Lin/l LmoLum`Mba)M!Mi{Mo&Mpr-deNej}g-oc!Nsej}t PaPi(az.Rba%RchoR&nR.(r!S!SmosS%2AneoAt!E Ec!Ei&EmaIaIm,Ip%IsisOmoOnicaOque%U&Uz2Ad+Ar#At+BoBr*| aEl=En#Er{Es%EvaId Lebr/p/#Mb_Mpl*N-e%O%P.Pul( R$Se'Sf[zVaVi'5BleCeL^Ming}N Ra&Rm*RAu%EchaOrO%U*UjoU^2B@CaGa%G.L$Lle#N&Rm(+Rtun(z SaTo2AcaA'AsaAtisAveIe%Il=IpeIsI#OG Gu!aJaMb_Ng}^Nr((mig('St?Yo5E>ElgaEr%ENgl-$Nt Pit!R S#V,?Zg :7Lo5A]:B$C$C[DoD+nG #GrimaGu`I>M!Mi`Mp --ch-gos%NzaPizRgoRvaStimaTaTexT*U_lV Zo3AlCc~|eC#rErG~Gumb_Ja'Ngu-#NaOnOp &S~TalT[VeY,{3B!%dB+C^D!Di EnzoGaG!oMaMi)M.Mp$NceN&Ne-go)N}t!`Qui&SoS%T!aT$T+2AgaAmaAn#AveEg En Ev Or Ov!Uv@2BoC~CoCu[GicaG+MbrizM}jaTe5|aC*G J}-esPaSt+ToZ:Ce%|oD!aD_Du+Est+F@G@GoIzL{dLe%Ll/oMaMboMutN>N&Nej Ng-iquiNj N}Re(f?Rg,Ri&RmolR+nR)sRzoSaSc aSivoT T!@TizTrizXimoY^Z^ca3|aDal]D$Du]J?]J^L,/.M^i-^NsajeN)NuRca&R,gueRi#SS.TaT!To&T+Zc]3E&ElEmb+G/Lag+Lit Ll.M}-!}im}u#OpeR SaS!@S?SmoTadTo5|?aC~DaDe=HoJ LdeL!Li'M,#Mi- c-ed-j-#NoRad(d!Re'R*R+Rs(%lScaStr TivoV!V?Zo5|oD EbleE]Er)Est[G_J!L/e%L%N&Nec(alRoScu=SeoSgoSicaS=:C C~D IpeRanj(izRr SalTalTivoTu[lUseaValVeVi{d3C$Ct G Goc$G+OnRv$ToUt+V V!a3|oDoEb]E#NezNoTi&Vel5Bleza|eMin(i(m()TaTic@Va#Ve]V$5BeCaCleoD?=DoE[EveEzLoM!oTr@:Sis0EC~E[In On!T TicaUes#1Ac~A&rAlBi%CaD,EjaGa'G@Gul=I,)Ig,Il]OQues%Uga0Ad@Cu+Ez'OT[0O'Ro1EjaU=1I&Ige'0En)0O':C#D_El]Gi`GoIsJ oLabr/>Le%Li&Lm/om/p NNalNi>Nt!-ue=PaPelP?]Que)R Rcel(edR*RoRpa&RqueR[foR)S SeoS~SoS%TaT$Tr@UsaU%VoYa<3A#nCa&C!a|oDalD*G IneL L{'Le/ig+LlejoLoLuc--s N.OnOrPi'Que'R(ch(d!Rez(f?Ri>Rl(mizEgun%Em$EnsaE|!oD^Eb=Er%Es#Lg/*Lm.LpoLrNd*N%P #Pet*PoN{PaP!oSaScaSt+T 5BiB^DoE{G*I&In/e%LoMboM^Ptu[TaTi`:Ba&B!B$BleC GazG[&L/&L!oL*Lm.L.Ls/#LudLv Mb-c~Ndi-e Ng_Ni{dN}#PoQueRdin()nSt_TanU`Xof.3Cc~CoC_#C%DGu*IsL=LvaMa`M?l-d-Re'Rg*S#T?:Ba>BiqueB]BuCoC#JoL L>L,#Ll/.Ma'Mb^Ng}quePaPe)P@P.Qu?l(deRe(if(je%RotR+R%TuajeU+ZaZ.3At+|oC]CnicaJa&J!Ji&L/efo'MaM^Mp=NazNd!N!NisNRmi'Rnur(+rSisSo+StigoT!aX#Z3B$Bu+nEmpoEn{Er[EPoR(.TanT!eTu=Za5Al]B?=C Ci'DoG/&M N}#P PeQueRaxR!oRm,%RneoRoRpe&R_RS!Xi>2AbajoAc#rA!Afi>AgoAjeAmoAnceA#AumaAz EbolEguaEin%EnEp EsIbuIgoIpaIs)IunfoOfeoOmpaOn>OpaO)OzoU>Ue'Ufa2B!@BoEr#MbaM^NelNic(bin(ismoR'T^:0Ic 9C!a0B[l0I{dIrIv! = null; + +function hex(word: string) { + return hexlify(toUtf8Bytes(word)); +} + +const KiYoKu = "0xe3818de38284e3818f"; +const KyoKu = "0xe3818de38283e3818f" + +function toString(data: Array): string { + return toUtf8String(new Uint8Array(data)); +} + +function loadWords(): Array { + if (_wordlist !== null) { return _wordlist; } + + const wordlist = []; + + // Transforms for normalizing (sort is a not quite UTF-8) + const transform: { [key: string]: string | boolean } = {}; + + // Delete the diacritic marks + transform[toString([227, 130, 154])] = false; + transform[toString([227, 130, 153])] = false; + + // Some simple transforms that sort out most of the order + transform[toString([227, 130, 133])] = toString([227, 130, 134]); + transform[toString([227, 129, 163])] = toString([227, 129, 164]); + transform[toString([227, 130, 131])] = toString([227, 130, 132]); + transform[toString([227, 130, 135])] = toString([227, 130, 136]); + + + // Normalize words using the transform + function normalize(word: string) { + let result = ""; + for (let i = 0; i < word.length; i++) { + let kana = word[i]; + const target = transform[kana]; + if (target === false) { continue; } + if (target) { kana = target; } + result += kana; + } + return result; + } + + // Sort how the Japanese list is sorted + function sortJapanese(a: string, b: string) { + a = normalize(a); + b = normalize(b); + if (a < b) { return -1; } + if (a > b) { return 1; } + return 0; + } + + // Load all the words + for (let length = 3; length <= 9; length++) { + const d = data[length - 3]; + for (let offset = 0; offset < d.length; offset += length) { + const word = []; + for (let i = 0; i < length; i++) { + const k = mapping.indexOf(d[offset + i]); + word.push(227); + word.push((k & 0x40) ? 130: 129); + word.push((k & 0x3f) + 128); + } + wordlist.push(toString(word)); + } + } + wordlist.sort(sortJapanese); + + // For some reason kyoku and kiyoku are flipped in node (!!). + // The order SHOULD be: + // - kyoku + // - kiyoku + + // This should ignore "if", but that doesn't work here?? + /* c8 ignore start */ + if (hex(wordlist[442]) === KiYoKu && hex(wordlist[443]) === KyoKu) { + const tmp = wordlist[442]; + wordlist[442] = wordlist[443]; + wordlist[443] = tmp; + } + /* c8 ignore stop */ + + // Verify the computed list matches the official list + /* istanbul ignore if */ + const checksum = id(wordlist.join("\n") + "\n"); + /* c8 ignore start */ + if (checksum !== "0xcb36b09e6baa935787fd762ce65e80b0c6a8dabdfbc3a7f86ac0e2c4fd111600") { + throw new Error("BIP39 Wordlist for ja (Japanese) FAILED"); + } + /* c8 ignore stop */ + + _wordlist = wordlist; + + return wordlist; +} + +class LangJa extends Wordlist { + constructor() { super("ja"); } + + getWord(index: number): string { + const words = loadWords(); + if (index < 0 || index >= words.length) { + logger.throwArgumentError(`invalid word index: ${ index }`, "index", index); + } + return words[index]; + } + + getWordIndex(word: string): number { + return loadWords().indexOf(word); + } + + split(mnemonic: string): Array { + //logger.assertNormalize(); + return mnemonic.split(/(?:\u3000| )+/g); + } + + join(words: Array): string { + return words.join("\u3000"); + } +} + +export const langJa = new LangJa(); diff --git a/packages/wordlists/src.ts/lang-ko.ts b/packages/wordlists/src.ts/lang-ko.ts new file mode 100644 index 000000000..f2b1a4a3f --- /dev/null +++ b/packages/wordlists/src.ts/lang-ko.ts @@ -0,0 +1,84 @@ +import { id } from "@ethersproject/hash"; +import { toUtf8String } from "@ethersproject/strings"; + +import { logger } from "./logger.js"; +import { Wordlist } from "./wordlist.js"; + + +const data = [ + "OYAa", + "ATAZoATBl3ATCTrATCl8ATDloATGg3ATHT8ATJT8ATJl3ATLlvATLn4ATMT8ATMX8ATMboATMgoAToLbAToMTATrHgATvHnAT3AnAT3JbAT3MTAT8DbAT8JTAT8LmAT8MYAT8MbAT#LnAUHT8AUHZvAUJXrAUJX8AULnrAXJnvAXLUoAXLgvAXMn6AXRg3AXrMbAX3JTAX3QbAYLn3AZLgvAZrSUAZvAcAZ8AaAZ8AbAZ8AnAZ8HnAZ8LgAZ8MYAZ8MgAZ8OnAaAboAaDTrAaFTrAaJTrAaJboAaLVoAaMXvAaOl8AaSeoAbAUoAbAg8AbAl4AbGnrAbMT8AbMXrAbMn4AbQb8AbSV8AbvRlAb8AUAb8AnAb8HgAb8JTAb8NTAb8RbAcGboAcLnvAcMT8AcMX8AcSToAcrAaAcrFnAc8AbAc8MgAfGgrAfHboAfJnvAfLV8AfLkoAfMT8AfMnoAfQb8AfScrAfSgrAgAZ8AgFl3AgGX8AgHZvAgHgrAgJXoAgJX8AgJboAgLZoAgLn4AgOX8AgoATAgoAnAgoCUAgoJgAgoLXAgoMYAgoSeAgrDUAgrJTAhrFnAhrLjAhrQgAjAgoAjJnrAkMX8AkOnoAlCTvAlCV8AlClvAlFg4AlFl6AlFn3AloSnAlrAXAlrAfAlrFUAlrFbAlrGgAlrOXAlvKnAlvMTAl3AbAl3MnAnATrAnAcrAnCZ3AnCl8AnDg8AnFboAnFl3AnHX4AnHbrAnHgrAnIl3AnJgvAnLXoAnLX4AnLbrAnLgrAnLhrAnMXoAnMgrAnOn3AnSbrAnSeoAnvLnAn3OnCTGgvCTSlvCTvAUCTvKnCTvNTCT3CZCT3GUCT3MTCT8HnCUCZrCULf8CULnvCU3HnCU3JUCY6NUCbDb8CbFZoCbLnrCboOTCboScCbrFnCbvLnCb8AgCb8HgCb$LnCkLfoClBn3CloDUDTHT8DTLl3DTSU8DTrAaDTrLXDTrLjDTrOYDTrOgDTvFXDTvFnDT3HUDT3LfDUCT9DUDT4DUFVoDUFV8DUFkoDUGgrDUJnrDULl8DUMT8DUMXrDUMX4DUMg8DUOUoDUOgvDUOg8DUSToDUSZ8DbDXoDbDgoDbGT8DbJn3DbLg3DbLn4DbMXrDbMg8DbOToDboJXGTClvGTDT8GTFZrGTLVoGTLlvGTLl3GTMg8GTOTvGTSlrGToCUGTrDgGTrJYGTrScGTtLnGTvAnGTvQgGUCZrGUDTvGUFZoGUHXrGULnvGUMT8GUoMgGXoLnGXrMXGXrMnGXvFnGYLnvGZOnvGZvOnGZ8LaGZ8LmGbAl3GbDYvGbDlrGbHX3GbJl4GbLV8GbLn3GbMn4GboJTGboRfGbvFUGb3GUGb4JnGgDX3GgFl$GgJlrGgLX6GgLZoGgLf8GgOXoGgrAgGgrJXGgrMYGgrScGgvATGgvOYGnAgoGnJgvGnLZoGnLg3GnLnrGnQn8GnSbrGnrMgHTClvHTDToHTFT3HTQT8HToJTHToJgHTrDUHTrMnHTvFYHTvRfHT8MnHT8SUHUAZ8HUBb4HUDTvHUoMYHXFl6HXJX6HXQlrHXrAUHXrMnHXrSbHXvFYHXvKXHX3LjHX3MeHYvQlHZrScHZvDbHbAcrHbFT3HbFl3HbJT8HbLTrHbMT8HbMXrHbMbrHbQb8HbSX3HboDbHboJTHbrFUHbrHgHbrJTHb8JTHb8MnHb8QgHgAlrHgDT3HgGgrHgHgrHgJTrHgJT8HgLX@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!Ln$CTGXMnCToLZ4CTrHT8CT3JTrCT3RZrCT#GTvCU6GgvCU8Db8CU8GZrCU8HT8CboLl3CbrGgrCbrMU8Cb8DT3Cb8GnrCb8LX4Cb8MT8Cb8ObrCgrGgvCgrKX4Cl8FZoDTrAbvDTrDboDTrGT6DTrJgrDTrMX3DTrRZrDTrRg8DTvAVvDTvFZoDT3DT8DT3Ln3DT4HZrDT4MT8DT8AlrDT8MT8DUAkGbDUDbJnDYLnQlDbDUOYDbMTAnDbMXSnDboAT3DboFn4DboLnvDj6JTrGTCgFTGTGgFnGTJTMnGTLnPlGToJT8GTrCT3GTrLVoGTrLnvGTrMX3GTrMboGTvKl3GZClFnGZrDT3GZ8DTrGZ8FZ8GZ8MXvGZ8On8GZ8ST3GbCnQXGbMbFnGboFboGboJg3GboMXoGb3JTvGb3JboGb3Mn6Gb3Qb8GgDXLjGgMnAUGgrDloGgrHX4GgrSToGgvAXrGgvAZvGgvFbrGgvLl3GgvMnvGnDnLXGnrATrGnrMboGnuLl3HTATMnHTAgCnHTCTCTHTrGTvHTrHTvHTrJX8HTrLl8HTrMT8HTrMgoHTrOTrHTuOn3HTvAZrHTvDTvHTvGboHTvJU8HTvLl3HTvMXrHTvQb4HT4GT6HT4JT8HT4Jb#HT8Al3HT8GZrHT8GgrHT8HX4HT8Jb8HT8JnoHT8LTrHT8LgvHT8SToHT8SV8HUoJUoHUoJX8HUoLnrHXrLZoHXvAl3HX3LnrHX4FkvHX4LhrHX4MXoHX4OnoHZrAZ8HZrDb8HZrGZ8HZrJnrHZvGZ8HZvLnvHZ8JnvHZ8LhrHbCXJlHbMTAnHboJl4HbpLl3HbrJX8HbrLnrHbrMnvHbvRYrHgoSTrHgrFV8HgrGZ8HgrJXoHgrRnvHgvBb!HgvGTrHgvHX4HgvHn!HgvLTrHgvSU8HnDnLbHnFbJbHnvDn8Hn6GgvHn!BTvJTCTLnJTQgFnJTrAnvJTrLX4JTrOUoJTvFn3JTvLnrJTvNToJT3AgoJT3Jn4JT3LhvJT3ObrJT8AcrJT8Al3JT8JT8JT8JnoJT8LX4JT8LnrJT8MX3JT8Rg3JT8Sc8JUoBTvJU8AToJU8GZ8JU8GgvJU8JTrJU8JXrJU8JnrJU8LnvJU8ScvJXHnJlJXrGgvJXrJU8JXrLhrJXrMT8JXrMXrJXrQUoJXvCTvJXvGZ8JXvGgrJXvQT8JX8Ab8JX8DT8JX8GZ8JX8HZvJX8LnrJX8MT8JX8MXoJX8MnvJX8ST3JYGnCTJbAkGbJbCTAnJbLTAcJboDT3JboLb6JbrAnvJbrCn3JbrDl8JbrGboJbrIZoJbrJnvJbrMnvJbrQb4Jb8RZrJeAbAnJgJnFbJgScAnJgrATrJgvHZ8JgvMn4JlJlFbJlLiQXJlLjOnJlRbOlJlvNXoJlvRl3Jl4AcrJl8AUoJl8MnrJnFnMlJnHgGbJnoDT8JnoFV8JnoGgvJnoIT8JnoQToJnoRg3JnrCZ3JnrGgrJnrHTvJnrLf8JnrOX8JnvAT3JnvFZoJnvGT8JnvJl4JnvMT8JnvMX8JnvOXrJnvPX6JnvSX3JnvSZrJn3MT8Jn3MX8Jn3RTrLTATKnLTJnLTLTMXKnLTRTQlLToGb8LTrAZ8LTrCZ8LTrDb8LTrHT8LT3PX6LT4FZoLT$CTvLT$GgrLUvHX3LVoATrLVoAgoLVoJboLVoMX3LVoRg3LV8CZ3LV8FZoLV8GTvLXrDXoLXrFbrLXvAgvLXvFlrLXvLl3LXvRn6LX4Mb8LX8GT8LYCXMnLYrMnrLZoSTvLZrAZvLZrAloLZrFToLZrJXvLZrJboLZrJl4LZrLnrLZrMT8LZrOgvLZrRnvLZrST4LZvMX8LZvSlvLZ8AgoLZ8CT3LZ8JT8LZ8LV8LZ8LZoLZ8Lg8LZ8SV8LZ8SbrLZ$HT8LZ$Mn4La6CTvLbFbMnLbRYFTLbSnFZLboJT8LbrAT9LbrGb3LbrQb8LcrJX8LcrMXrLerHTvLerJbrLerNboLgrDb8LgrGZ8LgrHTrLgrMXrLgrSU8LgvJTrLgvLl3Lg6Ll3LhrLnrLhrMT8LhvAl4LiLnQXLkoAgrLkoJT8LkoJn4LlrSU8Ll3FZoLl3HTrLl3JX8Ll3JnoLl3LToLmLeFbLnDUFbLnLVAnLnrATrLnrAZoLnrAb8LnrAlrLnrGgvLnrJU8LnrLZrLnrLhrLnrMb8LnrOXrLnrSZ8LnvAb4LnvDTrLnvDl8LnvHTrLnvHbrLnvJT8LnvJU8LnvJbrLnvLhvLnvMX8LnvMb8LnvNnoLnvSU8Ln3Al3Ln4FZoLn4GT6Ln4JgvLn4LhrLn4MT8Ln4SToMToCZrMToJX8MToLX4MToLf8MToRg3MTrEloMTvGb6MT3BTrMT3Lb6MT8AcrMT8AgrMT8GZrMT8JnoMT8LnrMT8MX3MUOUAnMXAbFnMXoAloMXoJX8MXoLf8MXoLl8MXrAb8MXrDTvMXrGT8MXrGgrMXrHTrMXrLf8MXrMU8MXrOXvMXrQb8MXvGT8MXvHTrMXvLVoMX3AX3MX3Jn3MX3LhrMX3MX3MX4AlrMX4OboMX8GTvMX8GZrMX8GgrMX8JT8MX8JX8MX8LhrMX8MT8MYDUFbMYMgDbMbGnFfMbvLX4MbvLl3Mb8Mb8Mb8ST4MgGXCnMg8ATrMg8AgoMg8CZrMg8DTrMg8DboMg8HTrMg8JgrMg8LT8MloJXoMl8AhrMl8JT8MnLgAUMnoJXrMnoLX4MnoLhrMnoMT8MnrAl4MnrDb8MnrOTvMnrOgvMnrQb8MnrSU8MnvGgrMnvHZ8Mn3MToMn4DTrMn4LTrMn4Mg8NnBXAnOTFTFnOToAToOTrGgvOTrJX8OT3JXoOT6MTrOT8GgrOT8HTpOT8MToOUoHT8OUoJT8OUoLn3OXrAgoOXrDg8OXrMT8OXvSToOX6CTvOX8CZrOX8OgrOb6HgvOb8AToOb8MT8OcvLZ8OgvAlrOgvHTvOgvJTrOgvJnrOgvLZrOgvLn4OgvMT8OgvRTrOg8AZoOg8DbvOnrOXoOnvJn4OnvLhvOnvRTrOn3GgoOn3JnvOn6JbvOn8OTrPTGYFTPbBnFnPbGnDnPgDYQTPlrAnvPlrETvPlrLnvPlrMXvPlvFX4QTMTAnQTrJU8QYCnJlQYJlQlQbGTQbQb8JnrQb8LZoQb8LnvQb8MT8Qb8Ml8Qb8ST4QloAl4QloHZvQloJX8QloMn8QnJZOlRTrAZvRTrDTrRTvJn4RTvLhvRT4Jb8RZrAZrRZ8AkrRZ8JU8RZ8LV8RZ8LnvRbJlQXRg3GboRg3MnvRg8AZ8Rg8JboRg8Jl4RnLTCbRnvFl3RnvQb8SToAl4SToCZrSToFZoSToHXrSToJU8SToJgvSToJl4SToLhrSToMX3STrAlvSTrCT9STrCgrSTrGgrSTrHXrSTrHboSTrJnoSTrNboSTvLnrST4AZoST8Ab8ST8JT8SUoJn3SU6HZ#SU6JTvSU8Db8SU8HboSU8LgrSV8JT8SZrAcrSZrAl3SZrJT8SZrJnvSZrMT8SZvLUoSZ4FZoSZ8JnoSZ8RZrScoLnrScoMT8ScoMX8ScrAT4ScrAZ8ScrLZ8ScrLkvScvDb8ScvLf8ScvNToSgrFZrShvKnrSloHUoSloLnrSlrMXoSl8HgrSmrJUoSn3BX6", + "ATFlOn3ATLgrDYAT4MTAnAT8LTMnAYJnRTrAbGgJnrAbLV8LnAbvNTAnAeFbLg3AgOYMXoAlQbFboAnDboAfAnJgoJTBToDgAnBUJbAl3BboDUAnCTDlvLnCTFTrSnCYoQTLnDTwAbAnDUDTrSnDUHgHgrDX8LXFnDbJXAcrETvLTLnGTFTQbrGTMnGToGT3DUFbGUJlPX3GbQg8LnGboJbFnGb3GgAYGgAg8ScGgMbAXrGgvAbAnGnJTLnvGnvATFgHTDT6ATHTrDlJnHYLnMn8HZrSbJTHZ8LTFnHbFTJUoHgSeMT8HgrLjAnHgvAbAnHlFUrDlHnDgvAnHnHTFT3HnQTGnrJTAaMXvJTGbCn3JTOgrAnJXvAXMnJbMg8SnJbMnRg3Jb8LTMnJnAl3OnJnGYrQlJnJlQY3LTDlCn3LTJjLg3LTLgvFXLTMg3GTLV8HUOgLXFZLg3LXNXrMnLX8QXFnLX9AlMYLYLXPXrLZAbJU8LZDUJU8LZMXrSnLZ$AgFnLaPXrDULbFYrMnLbMn8LXLboJgJgLeFbLg3LgLZrSnLgOYAgoLhrRnJlLkCTrSnLkOnLhrLnFX%AYLnFZoJXLnHTvJbLnLloAbMTATLf8MTHgJn3MTMXrAXMT3MTFnMUITvFnMXFX%AYMXMXvFbMXrFTDbMYAcMX3MbLf8SnMb8JbFnMgMXrMTMgvAXFnMgvGgCmMnAloSnMnFnJTrOXvMXSnOX8HTMnObJT8ScObLZFl3ObMXCZoPTLgrQXPUFnoQXPU3RXJlPX3RkQXPbrJXQlPlrJbFnQUAhrDbQXGnCXvQYLnHlvQbLfLnvRTOgvJbRXJYrQlRYLnrQlRbLnrQlRlFT8JlRlFnrQXSTClCn3STHTrAnSTLZQlrSTMnGTrSToHgGbSTrGTDnSTvGXCnST3HgFbSU3HXAXSbAnJn3SbFT8LnScLfLnv", + "AT3JgJX8AT8FZoSnAT8JgFV8AT8LhrDbAZ8JT8DbAb8GgLhrAb8SkLnvAe8MT8SnAlMYJXLVAl3GYDTvAl3LfLnvBUDTvLl3CTOn3HTrCT3DUGgrCU8MT8AbCbFTrJUoCgrDb8MTDTLV8JX8DTLnLXQlDT8LZrSnDUQb8FZ8DUST4JnvDb8ScOUoDj6GbJl4GTLfCYMlGToAXvFnGboAXvLnGgAcrJn3GgvFnSToGnLf8JnvGn#HTDToHTLnFXJlHTvATFToHTvHTDToHTvMTAgoHT3STClvHT4AlFl6HT8HTDToHUoDgJTrHUoScMX3HbRZrMXoHboJg8LTHgDb8JTrHgMToLf8HgvLnLnoHnHn3HT4Hn6MgvAnJTJU8ScvJT3AaQT8JT8HTrAnJXrRg8AnJbAloMXoJbrATFToJbvMnoSnJgDb6GgvJgDb8MXoJgSX3JU8JguATFToJlPYLnQlJlQkDnLbJlQlFYJlJl8Lf8OTJnCTFnLbJnLTHXMnJnLXGXCnJnoFfRg3JnrMYRg3Jn3HgFl3KT8Dg8LnLTRlFnPTLTvPbLbvLVoSbrCZLXMY6HT3LXNU7DlrLXNXDTATLX8DX8LnLZDb8JU8LZMnoLhrLZSToJU8LZrLaLnrLZvJn3SnLZ8LhrSnLaJnoMT8LbFlrHTvLbrFTLnrLbvATLlvLb6OTFn3LcLnJZOlLeAT6Mn4LeJT3ObrLg6LXFlrLhrJg8LnLhvDlPX4LhvLfLnvLj6JTFT3LnFbrMXoLnQluCTvLnrQXCY6LnvLfLnvLnvMgLnvLnvSeLf8MTMbrJn3MT3JgST3MT8AnATrMT8LULnrMUMToCZrMUScvLf8MXoDT8SnMX6ATFToMX8AXMT8MX8FkMT8MX8HTrDUMX8ScoSnMYJT6CTvMgAcrMXoMg8SToAfMlvAXLg3MnFl3AnvOT3AnFl3OUoATHT8OU3RnLXrOXrOXrSnObPbvFn6Og8HgrSnOg8OX8DbPTvAgoJgPU3RYLnrPXrDnJZrPb8CTGgvPlrLTDlvPlvFUJnoQUvFXrQlQeMnoAl3QlrQlrSnRTFTrJUoSTDlLiLXSTFg6HT3STJgoMn4STrFTJTrSTrLZFl3ST4FnMXoSUrDlHUoScvHTvSnSfLkvMXo", + "AUoAcrMXoAZ8HboAg8AbOg6ATFgAg8AloMXoAl3AT8JTrAl8MX8MXoCT3SToJU8Cl8Db8MXoDT8HgrATrDboOT8MXoGTOTrATMnGT8LhrAZ8GnvFnGnQXHToGgvAcrHTvAXvLl3HbrAZoMXoHgBlFXLg3HgMnFXrSnHgrSb8JUoHn6HT8LgvITvATrJUoJUoLZrRnvJU8HT8Jb8JXvFX8QT8JXvLToJTrJYrQnGnQXJgrJnoATrJnoJU8ScvJnvMnvMXoLTCTLgrJXLTJlRTvQlLbRnJlQYvLbrMb8LnvLbvFn3RnoLdCVSTGZrLeSTvGXCnLg3MnoLn3MToLlrETvMT8SToAl3MbrDU6GTvMb8LX4LhrPlrLXGXCnSToLf8Rg3STrDb8LTrSTvLTHXMnSb3RYLnMnSgOg6ATFg", + "HUDlGnrQXrJTrHgLnrAcJYMb8DULc8LTvFgGnCk3Mg8JbAnLX4QYvFYHnMXrRUoJnGnvFnRlvFTJlQnoSTrBXHXrLYSUJgLfoMT8Se8DTrHbDb", + "AbDl8SToJU8An3RbAb8ST8DUSTrGnrAgoLbFU6Db8LTrMg8AaHT8Jb8ObDl8SToJU8Pb3RlvFYoJl" +] + +const codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*" + +function getHangul(code: number): string { + if (code >= 40) { + code = code + 168 - 40; + } else if (code >= 19) { + code = code + 97 - 19; + } + + return toUtf8String(new Uint8Array([ 225, (code >> 6) + 132, (code & 0x3f) + 128])); +} + +let _wordlist: null | Array = null; + +function loadWords(): Array { + if (_wordlist != null) { return _wordlist; } + + const wordlist: Array = [ ]; + + data.forEach((data, length) => { + length += 4; + for (let i = 0; i < data.length; i += length) { + let word = ""; + for (let j = 0; j < length; j++) { + word += getHangul(codes.indexOf(data[i + j])); + } + wordlist.push(word) + } + }); + + wordlist.sort(); + + // Verify the computed list matches the official list + /* istanbul ignore if */ + const checksum = id(wordlist.join("\n") + "\n"); + /* c8 ignore start */ + if (checksum !== "0xf9eddeace9c5d3da9c93cf7d3cd38f6a13ed3affb933259ae865714e8a3ae71a") { + throw new Error("BIP39 Wordlist for ko (Korean) FAILED"); + } + /* c8 ignore stop */ + + _wordlist = wordlist; + + return wordlist; +} + + +class LangKo extends Wordlist { + constructor() { + super("ko"); + } + + getWord(index: number): string { + const words = loadWords(); + if (index < 0 || index >= words.length) { + logger.throwArgumentError(`invalid word index: ${ index }`, "index", index); + } + return words[index]; + } + + getWordIndex(word: string): number { + return loadWords().indexOf(word); + } +} + +export const langKo = new LangKo(); diff --git a/packages/wordlists/src.ts/lang-pt.ts b/packages/wordlists/src.ts/lang-pt.ts new file mode 100644 index 000000000..07807c96a --- /dev/null +++ b/packages/wordlists/src.ts/lang-pt.ts @@ -0,0 +1,10 @@ +import { WordlistOwl } from "./wordlist-owl.js"; + +const words = "0arad!ototealirertainrasoent hoandoaR#riareha!aroele'oronul0Aca%AixoAl A%rDuz'El]Er$IsmoO$ Rum S-&T(i&TigoVo[=0F&.Il#P' S?S* So&/Sun$Tr&0Ac#Adu+Al/A[f E End(Er_EuIng'Ir?IvoOl{oRac Revi=RizU&Um0Di$rM-.R>o+TismoT|@Tu 0Ali An%Ar@Ent&Es,I?Is Ul,1Ila1Ar E=Ei%Ulejo:B BosaC&]uCh `C@GagemI+c>~/Se#S)n%Ta)Te=rTidaTomTuc Unil]3B(IjoIr^IsebolLd!eLezaLgaLisc Ndi$Ng&aNz(RimbauRl*d>_Sou_XigaZ(_3CoCu=En&Foc&Furc G|naLhe%Mest[Mo$rOlog@OmboOsf(aPol Rr-$Scoi$Sne$SpoSsex$TolaZ _2Ind#OcoOque 2A$BagemC#CejoChec]Ico.L^LetimL]LoMb{oNdeNecoNi)Rb~h>d>e&R+c]V*oXe?2AncoAsaAvezaEuIgaIl/Inc OaOchu+Onze O$Uxo2C]DismoF LeRacoScaS$Z*a:Bimb Rn{oRpe%R['>)zRv&/SacoScaSeb[S%loS~oT a)Tiv UleUs?U%l V&oV(na3BolaDil]G}]Lebr L~ Nou+N,N%ioRc Rr#R%'oRvejaTimV^2Aco)Al{aAm#Ap^ArmeAticeAveEfeEg^E'oEqueIco%If[In`oOc&/Ov(UmboU.Uva0CatrizCl}eD!eD['aEn%Gcui$Rurg@T 2A[zaE_Ic OneUbe2A=Ag'Ba@B($rBr C^El/Ent_E,Gum`oIb'IfaIo%L L{aLh(Lid'Lme@L}oLunaM<=Mb* M-.MitivaMov(MplexoMumNc]N=rNec.Nfu,Ng` Nhec(Njug Nsum'Nt+$Nvi%Op( P{oPi?PoQue%lRagemRdi&Rne)R}h>p|&R[ioR%joRuj>voSs-oS%laT}e%U_UveVilZ*]2A%+AvoEcheE=rEmeErEspoI^Im*&Io~oIseItic Os)UaUz{o2B+m SafioSbo.Sc<,S-/Sfi#Sgas%Sigu&SlizeSmam SovaSpesaS)queSvi T&h T-$rT} Tri$UsaV(Vi=Vot#Z-a3Ag+maAle$Da)Fu,Gi.Lat#Lu-%M*u'Nast@Nh{oOceseRe$Sc[)Sf ceSp oSque%Ssip S)n%T?UrnoV(,Vi,rV~g Z(5Br?L|i=M?M*#NativoNz`>m-%Rs&SagemUr#U$r2EnagemIbleOg @2El EndeE$PloQues><%Vi=,:1Lod'O Olog@0Ific It&Uc#1Ei$Etiv 3E.1Ab| Eg(Ei$rEncoEv?Im* Ogi 0B goBol#Br~/Buti=EndaErg'Is,rPat@P-/P*#Polg P[goPurr Ul?0CaixeC-#Ch-%C}t_Deus Doss Faix Fei%FimGaj#G-/Glob Gom#G+x Gu@Jo La.Qu<$Raiz Rol#Rug SaioSe^S*oSop#T<$Te#Tid!eT|.Tr^T~/V(g Vi#Volv(XameX($Xof[Xu$1Id(me0Uip 0E$Gui=Ra)VaVil]0Bopeu0Acu Ap| AsivoEntu&Id-%Olu'1Ag(oAl Am* A$Aus$Ces,Ci.Clam Ecu.EmploIb'Ig-%On( Pof>p>tu+T@T|V|i)X*aZ-da3Ch#Ijo^I+n%L*oM**oNdaNoR>i#RrugemRv(S%j T&Ud&3ApoB_seC Ch{oGur#L{aL/LmeLtr RmezaSg^Ssu+TaV`aX?Xo2AcidezAm*goAn`aEch^O+Utu Uxo2C&C*/Foc GoGue%IceLg#Lhe$Rj Rmig>noR%ScoSsa2Aga)AldaAngoAscoA%rnoE'aEn%E.IezaI,Itu+On]Ustr U%'a2G'L+faSodu$S$TaTil/Ve)Z`a3L#Le@LoM^M(Mi=N(o,NgivaNi&NomaN_Ologi>?Rm* S,S$r3Nas)Nc*o2Aci&IcoseOb&Orio,2ElaIabaLfeLpe Rdu+Rje)R_S$,T{aV(n 2AcejoAdu&Afi%Al]AmpoAn^Atui$Ave$AxaEgoElh EveIloIs&/I.@Os,O%scoUd#Unhi=U)2AcheA+niAx*imEr[ I Inc/Is#LaLo,Ru:Bi.Rm}@S%V(3C.eRd Res@Si.3A$B(n D+.EnaNoPismoPnosePo%ca5JeLofo%MemNes$Nr#Rm}&Sped 5M|#:Te2E@O,2N|#RejaUdimR_SmimToV&iZida3Jum9An*]Elh^G?I>n&Rr Vem5BaDeuDocaIzLg?L/R#Ris)RoS)::B edaB|&C[C)n%Dril/G )GoaJeMb(M-.M* MpejoNchePid P,R{>gu+S<]St_T(&Ti=VfimRgemR*/Rmi)Ro$RquiseR[coR%loRujoSco%Sm|+SsagemStig Tag&T(noT*&Tu.Xil 3D&]DidaDusaGaf}eIgaLc/Sc~ SeuSic&:Ci}&D?JaMo_R*>r#Sc(TivaTu[zaV&]Veg Vio3Bl*aB~o,GativaGoci Gri$Rvo,TaUr&VascaVo{o3N N/TidezV` 5B[zaI%IvaMe M*&Rdes%R% T Tici TurnoV`oVil/Vo5Bl#DezM(&Pci&Tr'Vem:0Cec#Edec(JetivoRig#Scu_S%t+T(Tur 0Id-%Io,Orr(Ulis)Up#2Eg<%EnsivaEr-daIc*aUsc#0Iva4Ar@Eo,H Iv{a0B_Ele%Is,It'0D~#E_,Tem1Ci}&Er?On-%OrtunoOs$1ArBi.DemD*&Fci&Rd&RedeRtidaSmoSs#S%lTam T-%T* T_noUl^Us 3C~i D& Dest[D@t+D+G^I$r&IxeLeLicplexoRsi<>%nceRucaSc#SquisaS,aTisc 3AdaC#Ed!eGm-$Last+Lh#Lo.M-)Nc`NguimN]No%N.On{oPocaQue%ResRue)Sc S$laTg-$Rje)Tur Ud!eXof}eZ}&3C C~ DaD-$Di#Do,Du$rGm-$G[=Gun=IvaLe$LvagemM<&M-%N?N/rNsu&Nt#P #Rei>*g>+RvoTemb_T|3GiloLhue)Lic}eMetr@Mpat@M~ N&Nc(oNg~ NopseN$ni>-eRiTu#5B(fis)Rp[s>[&Rt'Sp'oS%n$:B`aBle%Bu^C/G `aLh(LoLvezMdioRef>j>+xaTuagemUr*oXativoXis)3Atr&C(Ci=Cl#Dio,IaIm Lef}eLh#Mp(oN-%N,rN.Rm&RnoRr-oSeSou+St#ToXtu+Xugo3A+G`aJoloMbr MidezNgi=N%'oRagemT~ 5Al]C]L( LiceM^Mil/N`Ntu+Pe%R>ci=RneioRqueRr!>$S.UcaUp{aX*a2Ab&/Acej Adu$rAfeg Aje$AmaAnc ApoAs{oAt?Av E*oEm(Epid EvoIagemIboIcicloId-%Ilog@Ind!eIploItur Iunf&Oc Ombe)OvaUnfoUque2B~ CquesaT` T|i&:7V 3Bigo0HaId!eIf|me3Olog@SoTigaUbu0A=InaUfru':C*aDi G o,I=,LaL-%Lid!eLo[sN)gemQu{oRe)Rr(Sc~ Sil]S,u+Z Zio3A=D Ge.Ic~ L{oLhiceLu=Nce=rNdav&N( Nt[Rb&Rd!eRe?Rg}h>m`/RnizRs R%n%SpaSti=T|i&3Adu$AgemAj Atu+Br?D{aDr @ElaGaG-%Gi G| L ejoNcoNhe)NilOle)R!>tudeSi.S$Tr&V{oZ*/5A=rArG&L<%LeibolL)gemLumo,Nt!e5L$Vuz`a::D[zRope3QueRe.Rife3Ng ::Ng#Rp 3BuL?9Mb Olog@5Mbi="; +const checksum = "0x2219000926df7b50d8aa0a3d495826b988287df4657fbd100e6fe596c8f737ac"; + +export class LangPt extends WordlistOwl { + constructor() { super("pt", words, checksum); } +} + +export const langPt = new LangPt(); diff --git a/packages/wordlists/src.ts/lang-zh.ts b/packages/wordlists/src.ts/lang-zh.ts new file mode 100644 index 000000000..4b8c7ba75 --- /dev/null +++ b/packages/wordlists/src.ts/lang-zh.ts @@ -0,0 +1,84 @@ +import { id } from "@ethersproject/hash"; +import { toUtf8String } from "@ethersproject/strings"; + +import { logger } from "./logger.js"; +import { Wordlist } from "./wordlist.js"; + + +const data = "}aE#4A=Yv&co#4N#6G=cJ&SM#66|/Z#4t&kn~46#4K~4q%b9=IR#7l,mB#7W_X2*dl}Uo~7s}Uf&Iw#9c&cw~6O&H6&wx&IG%v5=IQ~8a&Pv#47$PR&50%Ko&QM&3l#5f,D9#4L|/H&tQ;v0~6n]nN> = { + zh_cn: null, + zh_tw: null +} + +const Checks: Record = { + zh_cn: "0x17bcc4d8547e5a7135e365d1ab443aaae95e76d8230c2782c67305d4f21497a1", + zh_tw: "0x51e720e90c7b87bec1d70eb6e74a21a449bd3ec9c020b01d3a40ed991b60ce5d" +} + +const codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +const style = "~!@#$%^&*_-=[]{}|;:,.()<>?" + +function loadWords(locale: string): Array { + if (_wordlist[locale] != null) { return _wordlist[locale] as Array; } + + const wordlist = []; + + let deltaOffset = 0; + for (let i = 0; i < 2048; i++) { + const s = style.indexOf(data[i * 3]); + const bytes = [ + 228 + (s >> 2), + 128 + codes.indexOf(data[i * 3 + 1]), + 128 + codes.indexOf(data[i * 3 + 2]), + ]; + + if (locale === "zh_tw") { + const common = s % 4; + for (let i = common; i < 3; i++) { + bytes[i] = codes.indexOf(deltaData[deltaOffset++]) + ((i == 0) ? 228: 128); + } + } + + wordlist.push(toUtf8String(new Uint8Array(bytes))); + } + + // Verify the computed list matches the official list + const checksum = id(wordlist.join("\n") + "\n"); + /* c8 ignore start */ + if (checksum !== Checks[locale]) { + throw new Error(`BIP39 Wordlist for ${ locale } (Chinese) FAILED`); + } + /* c8 ignore stop */ + + _wordlist[locale] = wordlist; + + return wordlist; +} + +class LangZh extends Wordlist { + constructor(country: string) { super("zh_" + country); } + + getWord(index: number): string { + const words = loadWords(this.locale); + if (index < 0 || index >= words.length) { + logger.throwArgumentError(`invalid word index: ${ index }`, "index", index); + } + return words[index]; + } + + getWordIndex(word: string): number { + return loadWords(this.locale).indexOf(word); + } + + split(mnemonic: string): Array { + mnemonic = mnemonic.replace(/(?:\u3000| )+/g, ""); + return mnemonic.split(""); + } +} + +export const langZhCn = new LangZh("cn"); +export const langZhTw = new LangZh("tw"); diff --git a/packages/wordlists/src.ts/logger.ts b/packages/wordlists/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/wordlists/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/wordlists/src.ts/tests/test-wordlists.ts b/packages/wordlists/src.ts/tests/test-wordlists.ts new file mode 100644 index 000000000..8dfa732e5 --- /dev/null +++ b/packages/wordlists/src.ts/tests/test-wordlists.ts @@ -0,0 +1,73 @@ +import assert from 'assert'; + +import { wordlists } from "../wordlists.js"; + +import { loadTests } from "./utils.js"; + +import type { TestCaseWordlist } from "./types.js"; + +import type { Wordlist } from "../wordlist.js"; + + +function checkWordlist(test: TestCaseWordlist, wordlist: Wordlist): void { + + it(`matches wordlists: ${ test.locale }`, function() { + const words = test.content.split('\n'); + + let check = ""; + for (let i = 0; i < 2048; i++) { + let word = wordlist.getWord(i); + check += (word + "\n"); + assert.equal(word, words[i]); + assert.equal(wordlist.getWordIndex(word), i); + } + + assert.equal(check, test.content); + }); + + it (`splitting and joining are equivalent: ${ test.locale }`, function() { + const words: Array = [ ]; + for (let i = 0; i < 12; i++) { + words.push(wordlist.getWord(i)); + } + + const phrase = wordlist.join(words); + + const words2 = wordlist.split(phrase); + const phrase2 = wordlist.join(words2); + + assert.deepStrictEqual(words2, words, "split words"); + assert.deepStrictEqual(phrase2, phrase, "re-joined words"); + }); + + it(`handles out-of-range values: ${ test.locale }`, function() { + assert.equal(wordlist.getWordIndex("foobar"), -1); + + assert.throws(() => { + wordlist.getWord(-1); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid word index/) && + error.argument === "index" && + error.value === -1); + }); + + assert.throws(() => { + wordlist.getWord(2048); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid word index/) && + error.argument === "index" && + error.value === 2048); + }); + }); +} + +describe('Check Wordlists', function() { + const tests = loadTests("wordlists"); + tests.forEach((test) => { + let wordlist = wordlists[test.locale]; + if (wordlist == null) { return; } + checkWordlist(test, wordlist); + }); +}); diff --git a/packages/wordlists/src.ts/tests/types.ts b/packages/wordlists/src.ts/tests/types.ts new file mode 100644 index 000000000..f06cc2251 --- /dev/null +++ b/packages/wordlists/src.ts/tests/types.ts @@ -0,0 +1,7 @@ + +export interface TestCaseWordlist { + name: string; + filename: string, + locale: string; + content: string; +} diff --git a/packages/wordlists/src.ts/tests/utils.ts b/packages/wordlists/src.ts/tests/utils.ts new file mode 100644 index 000000000..0b1da525d --- /dev/null +++ b/packages/wordlists/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + ".json.gz"); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/wordlists/src.ts/wordlist-owl.ts b/packages/wordlists/src.ts/wordlist-owl.ts new file mode 100644 index 000000000..88831c1a3 --- /dev/null +++ b/packages/wordlists/src.ts/wordlist-owl.ts @@ -0,0 +1,57 @@ + +// Use the encode-latin.js script to create the necessary +// data files to be consumed by this class + +import { id } from "@ethersproject/hash"; + +import { decodeOwl } from "./decode-owl.js"; +import { logger } from "./logger.js"; +import { Wordlist } from "./wordlist.js"; + +export class WordlistOwl extends Wordlist { + #data: string; + #checksum: string; + + constructor(locale: string, data: string, checksum: string) { + super(locale); + this.#data = data; + this.#checksum = checksum; + this.#words = null; + } + + get _data(): string { return this.#data; } + + _decodeWords(): Array { + return decodeOwl(this.#data); + } + + #words: null | Array; + #loadWords(): Array { + if (this.#words == null) { + const words = this._decodeWords(); + + // Verify the computed list matches the official list + const checksum = id(words.join("\n") + "\n"); + /* c8 ignore start */ + if (checksum !== this.#checksum) { + throw new Error(`BIP39 Wordlist for ${ this.locale } FAILED`); + } + /* c8 ignore stop */ + + this.#words = words; + } + return this.#words; + } + + getWord(index: number): string { + const words = this.#loadWords(); + if (index < 0 || index >= words.length) { + logger.throwArgumentError(`invalid word index: ${ index }`, "index", index); + } + return words[index]; + } + + getWordIndex(word: string): number { + return this.#loadWords().indexOf(word); + } +} diff --git a/packages/wordlists/src.ts/wordlist-owla.ts b/packages/wordlists/src.ts/wordlist-owla.ts new file mode 100644 index 000000000..750905bc4 --- /dev/null +++ b/packages/wordlists/src.ts/wordlist-owla.ts @@ -0,0 +1,18 @@ + +import { WordlistOwl } from "./wordlist-owl.js"; +import { decodeOwlA } from "./decode-owla.js"; + +export class WordlistOwlA extends WordlistOwl { + #accent: string; + + constructor(locale: string, data: string, accent: string, checksum: string) { + super(locale, data, checksum); + this.#accent = accent; + } + + get _accent(): string { return this.#accent; } + + _decodeWords(): Array { + return decodeOwlA(this._data, this._accent); + } +} diff --git a/packages/wordlists/src.ts/wordlist.ts b/packages/wordlists/src.ts/wordlist.ts new file mode 100644 index 000000000..0fb2df8ff --- /dev/null +++ b/packages/wordlists/src.ts/wordlist.ts @@ -0,0 +1,22 @@ +import { defineProperties } from "@ethersproject/properties"; + +export abstract class Wordlist { + locale!: string; + + constructor(locale: string) { + defineProperties(this, { locale }); + } + + // Subclasses may override this + split(mnemonic: string): Array { + return mnemonic.toLowerCase().split(/ +/g) + } + + // Subclasses may override this + join(words: Array): string { + return words.join(" "); + } + + abstract getWord(index: number): string; + abstract getWordIndex(word: string): number; +} diff --git a/packages/wordlists/src.ts/wordlists-en.ts b/packages/wordlists/src.ts/wordlists-en.ts new file mode 100644 index 000000000..472ba6477 --- /dev/null +++ b/packages/wordlists/src.ts/wordlists-en.ts @@ -0,0 +1,8 @@ + +import { langEn as en } from "./lang-en.js"; + +import type { Wordlist } from "./wordlist.js"; + +export const wordlists: Record = Object.freeze({ + en +}); diff --git a/packages/wordlists/src.ts/wordlists-extra.ts b/packages/wordlists/src.ts/wordlists-extra.ts new file mode 100644 index 000000000..ad3d88994 --- /dev/null +++ b/packages/wordlists/src.ts/wordlists-extra.ts @@ -0,0 +1,31 @@ + +import { langCz as cz } from "./lang-cz.js"; +import { langEs as es } from "./lang-es.js"; +import { langFr as fr } from "./lang-fr.js"; +import { langJa as ja } from "./lang-ja.js"; +import { langKo as ko } from "./lang-ko.js"; +import { langIt as it } from "./lang-it.js"; +import { langPt as pt } from "./lang-pt.js"; +import { langZhCn as zh_cn, langZhTw as zh_tw } from "./lang-zh.js"; + +import type { Wordlist } from "./wordlist.js"; + +// These are used by the hijacked imports in the rollup version +// of the extra wordlists. Users should: +// import { ethers } from "./ethers.js"; +// import { attachEthers, wordlists } from "./ethers-wordlists.js"; +// attachEthers(ethers); +let _ethers: any = null; +export function attachEthers(ethers: any): void { + if (_ethers) { throw new Error("already attached"); } + _ethers = ethers; +} +export function getEthers(): any { + if (_ethers) { throw new Error("no ethers attached; please use attachEthers"); } + return _ethers; +} + + +export const wordlists: Record = Object.freeze({ + cz, es, fr, ja, ko, it, pt, zh_cn, zh_tw +}); diff --git a/packages/wordlists/src.ts/wordlists.ts b/packages/wordlists/src.ts/wordlists.ts new file mode 100644 index 000000000..8e68edbe2 --- /dev/null +++ b/packages/wordlists/src.ts/wordlists.ts @@ -0,0 +1,16 @@ + +import { langCz as cz } from "./lang-cz.js"; +import { langEn as en } from "./lang-en.js"; +import { langEs as es } from "./lang-es.js"; +import { langFr as fr } from "./lang-fr.js"; +import { langJa as ja } from "./lang-ja.js"; +import { langKo as ko } from "./lang-ko.js"; +import { langIt as it } from "./lang-it.js"; +import { langPt as pt } from "./lang-pt.js"; +import { langZhCn as zh_cn, langZhTw as zh_tw } from "./lang-zh.js"; + +import type { Wordlist } from "./wordlist.js"; + +export const wordlists: Record = Object.freeze({ + cz, en, es, fr, ja, ko, it, pt, zh_cn, zh_tw +}); diff --git a/packages/wordlists/tsconfig.json b/packages/wordlists/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/wordlists/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 000000000..730997942 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,72 @@ +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import replace from "@rollup/plugin-replace"; +import { terser } from "rollup-plugin-terser"; + + +function getDistConfig({ suffix, format, minify }) { + if (suffix == null) { suffix = ""; } + if (format == null) { format = "es"; } + if (minify == null) { minify = false; } + + + const replacements = { + preventAssignment: false, + delimiters: [ '', '' ], + values: { + // sepc256k1; kill the require + "import nodeCrypto from 'crypto';": "const nodeCrypto = undefined; /* ethers:rollup */", + + // Get our browser-friendly versions in here + '"crypto"; /*-browser*/': '"./crypto-browser.js";', + '"./base64.js"; /*-browser*/': '"./base64-browser.js";', + '"./get-url.js"; /*-browser*/': '"./get-url-browser.js";', + '"./provider-ipcsocket.js"; /*-browser*/': '"./provider-ipcsocket-browser.js";', + '"ws"; /*-browser*/': '"./ws-browser.js";', + + // Default dist builds only include English + '"./wordlists.js"': '"./wordlists-en.js"' + } + }; + + const plugins = [ + replace(replacements), + nodeResolve({ }), + ]; + + if (minify) { plugins.push(terser()); } + + return { + input: "./packages/ethers/lib/index.js", + output: [ + { + file: `./packages/ethers/dist/ethers${ suffix }.js`, + format, + name: ((format === "umd") ? "ethers": undefined), + sourcemap: true + }, + ], + context: "window", + plugins + } +}; + +function getExtraWordlistConfig() { + return { + input: "./packages/wordlists/lib/wordlists-extra.js", + output: [ + { + file: 'packages/ethers/dist/ethers-wordlists.min.js', + format: 'es' + }, + ], + context: "window", + plugins: [ terser() ] + } +} + +export default [ + getDistConfig({ minify: false }), + getDistConfig({ suffix: ".min", minify: true }), + getDistConfig({ suffix: ".umd.min", format: "umd", minify: true }), + getExtraWordlistConfig(), +]; diff --git a/testcases/accounts.json.gz b/testcases/accounts.json.gz new file mode 100644 index 000000000..867fc98a3 Binary files /dev/null and b/testcases/accounts.json.gz differ diff --git a/testcases/create.json.gz b/testcases/create.json.gz new file mode 100644 index 000000000..d6385b44f Binary files /dev/null and b/testcases/create.json.gz differ diff --git a/testcases/create2.json.gz b/testcases/create2.json.gz new file mode 100644 index 000000000..47bdeba45 Binary files /dev/null and b/testcases/create2.json.gz differ diff --git a/testcases/hashes.json.gz b/testcases/hashes.json.gz new file mode 100644 index 000000000..67ab38651 Binary files /dev/null and b/testcases/hashes.json.gz differ diff --git a/testcases/hmac.json.gz b/testcases/hmac.json.gz new file mode 100644 index 000000000..2c129d24b Binary files /dev/null and b/testcases/hmac.json.gz differ diff --git a/testcases/mnemonics.json.gz b/testcases/mnemonics.json.gz new file mode 100644 index 000000000..a6251912e Binary files /dev/null and b/testcases/mnemonics.json.gz differ diff --git a/testcases/namehash.json.gz b/testcases/namehash.json.gz new file mode 100644 index 000000000..4f1b2e9aa Binary files /dev/null and b/testcases/namehash.json.gz differ diff --git a/testcases/pbkdf.json.gz b/testcases/pbkdf.json.gz new file mode 100644 index 000000000..b82cb31e7 Binary files /dev/null and b/testcases/pbkdf.json.gz differ diff --git a/testcases/rlp.json.gz b/testcases/rlp.json.gz new file mode 100644 index 000000000..b39749ce4 Binary files /dev/null and b/testcases/rlp.json.gz differ diff --git a/testcases/transaction.json.gz b/testcases/transaction.json.gz new file mode 100644 index 000000000..3039ffaa8 Binary files /dev/null and b/testcases/transaction.json.gz differ diff --git a/testcases/transactions.json.gz b/testcases/transactions.json.gz new file mode 100644 index 000000000..7168d7dcd Binary files /dev/null and b/testcases/transactions.json.gz differ diff --git a/testcases/typed-data.json.gz b/testcases/typed-data.json.gz new file mode 100644 index 000000000..afe593ccb Binary files /dev/null and b/testcases/typed-data.json.gz differ diff --git a/testcases/wallets.json.gz b/testcases/wallets.json.gz new file mode 100644 index 000000000..7c41a56da Binary files /dev/null and b/testcases/wallets.json.gz differ diff --git a/testcases/wordlists.json.gz b/testcases/wordlists.json.gz new file mode 100644 index 000000000..db4250f50 Binary files /dev/null and b/testcases/wordlists.json.gz differ diff --git a/tsconfig.common.json b/tsconfig.common.json new file mode 100644 index 000000000..e6665639b --- /dev/null +++ b/tsconfig.common.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "lib": [ + "es2015", + "es5" + ], + "module": "es6", + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noUnusedLocals": true, + "preserveSymlinks": true, + "preserveWatchOutput": true, + "pretty": false, + "strict": true, + "sourceMap": true, + "target": "es2017" + } +} diff --git a/tsconfig.project.json b/tsconfig.project.json new file mode 100644 index 000000000..e3ae0c523 --- /dev/null +++ b/tsconfig.project.json @@ -0,0 +1,69 @@ +{ + "compilerOptions": { + "lib": [ + "es2015", + "es5", + "dom" + ], + "preserveWatchOutput": true, + "pretty": false, + "target": "es2016" + }, + "files": [], + "references": [ + { + "path": "./packages/logger" + }, + { + "path": "./packages/bytes" + }, + { + "path": "./packages/crypto" + }, + { + "path": "./packages/math" + }, + { + "path": "./packages/properties" + }, + { + "path": "./packages/rlp" + }, + { + "path": "./packages/address" + }, + { + "path": "./packages/signing-key" + }, + { + "path": "./packages/strings" + }, + { + "path": "./packages/hash" + }, + { + "path": "./packages/abi" + }, + { + "path": "./packages/transactions" + }, + { + "path": "./packages/web" + }, + { + "path": "./packages/providers" + }, + { + "path": "./packages/contract" + }, + { + "path": "./packages/wordlists" + }, + { + "path": "./packages/wallet" + }, + { + "path": "./packages/ethers" + } + ] +}